'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),e=this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t},_render:function(t){var e=this.path;e&&!e.isNotVisible()&&e._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){"stroke"===this.paintFirst?(this._renderTextStroke(t),this._renderTextFill(t)):(this._renderTextFill(t),this._renderTextStroke(t))},_setTextStyles:function(t,e,i){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"}t.font=this._getFontDeclaration(e,i)},calcTextWidth:function(){for(var t=this.getLineWidth(0),e=1,i=this._textLines.length;et&&(t=r)}return t},_renderTextLine:function(t,e,i,r,n,o){this._renderChars(t,e,i,r,n,o)},_renderTextLinesBackground:function(t){if(this.textBackgroundColor||this.styleHas("textBackgroundColor")){for(var e,i,r,n,o,a,s,l=t.fillStyle,c=this._getLeftOffset(),h=this._getTopOffset(),u=0,f=0,d=this.path,g=0,p=this._textLines.length;g=0:is?u%=s:u<0&&(u+=s),this._setGraphemeOnPath(u,o,a),u+=o.kernedWidth}return{width:l,numOfSpaces:0}},_setGraphemeOnPath:function(t,i,r){var n=t+i.kernedWidth/2,o=this.path,a=e.util.getPointOnPath(o.path,n,o.segmentsInfo);i.renderLeft=a.x-r.x,i.renderTop=a.y-r.y,i.angle=a.angle+("right"===this.pathSide?Math.PI:0)},_getGraphemeBox:function(t,e,i,r,n){var o,a=this.getCompleteStyleDeclaration(e,i),s=r?this.getCompleteStyleDeclaration(e,i-1):{},l=this._measureChar(t,a,r,s),c=l.kernedWidth,h=l.width;0!==this.charSpacing&&(h+=o=this._getWidthOfCharSpacing(),c+=o);var u={width:h,left:0,height:a.fontSize,kernedWidth:c,deltaY:a.deltaY};if(i>0&&!n){var f=this.__charBounds[e][i-1];u.left=f.left+f.width+l.kernedWidth-l.width}return u},getHeightOfLine:function(t){if(this.__lineHeights[t])return this.__lineHeights[t];for(var e=this._textLines[t],i=this.getHeightOfChar(t,0),r=1,n=e.length;r0){var j=y+o+u;"rtl"===this.direction&&(j=this.width-j-f),c&&m&&(t.fillStyle=m,t.fillRect(j,h+x*r+a,f,this.fontSize/15)),u=d.left,f=d.width,c=g,m=v,r=n,a=s}else f+=d.kernedWidth;var j=y+o+u;"rtl"===this.direction&&(j=this.width-j-f),t.fillStyle=v,g&&v&&t.fillRect(j,h+x*r+a,f-_,this.fontSize/15),b+=i}this._removeShadow(t)}},_getFontDeclaration:function(t,i){var r=t||this,n=this.fontFamily,o=e.Text.genericFonts.indexOf(n.toLowerCase())>-1,a=void 0===n||n.indexOf("'")>-1||n.indexOf(",")>-1||n.indexOf('"')>-1||o?r.fontFamily:'"'+r.fontFamily+'"';return[e.isLikelyNode?r.fontWeight:r.fontStyle,e.isLikelyNode?r.fontStyle:r.fontWeight,i?this.CACHE_FONT_SIZE+"px":r.fontSize+"px",a].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),r=Array(i.length),n=["\n"],o=[],a=0;a0&&t.clipPath?this.clonePathWithClipPath(e,t,function(t){r.forEach(function(e){i._addPathToObjectEraser(e,t)})}):r.length>0&&r.forEach(function(t){i._addPathToObjectEraser(t,e)});return}var n=t.eraser;n||(n=new tQ.Eraser,t.eraser=n),e.clone(function(e){var r=tQ.util.multiplyTransformMatrices(tQ.util.invertTransform(t.calcTransformMatrix()),e.calcTransformMatrix());tQ.util.applyTransformToObject(e,r),n.addWithUpdate(e),t.set("dirty",!0),t.fire("erasing:end",{path:e}),t.group&&Array.isArray(i.__subTargets)&&i.__subTargets.push(t)})},applyEraserToCanvas:function(t){var e=this.canvas,i={};return["backgroundImage","overlayImage"].forEach(function(r){var n=e[r];n&&n.erasable&&(this._addPathToObjectEraser(n,t),i[r]=n)},this),i},_finalizeAndAddPath:function(){var t=this.canvas.contextTop,e=this.canvas;t.closePath(),this.decimate&&(this._points=this.decimatePoints(this._points,this.decimate)),e.clearContext(e.contextTop),this._isErasing=!1;var i=this._points&&this._points.length>1?this.convertPointsToSVGPath(this._points):null;if(!i||this._isEmptySVGPath(i)){e.fire("erasing:end"),e.requestRenderAll();return}var r=this.createPath(i);r.setCoords(),e.fire("before:path:created",{path:r});var n=this.applyEraserToCanvas(r),o=this;this.__subTargets=[];var a=[];e.forEachObject(function(t){t.erasable&&t.intersectsWithObject(r,!0,!0)&&(o._addPathToObjectEraser(t,r),a.push(t))}),e.fire("erasing:end",{path:r,targets:a,subTargets:this.__subTargets,drawables:n}),delete this.__subTargets,e.requestRenderAll(),this._resetShadow(),e.fire("path:created",{path:r})}})},6957:function(){},6907:function(){},4866:function(){}},function(t){t.O(0,[774,937,866,609,980,445,617,943,50,888,179],function(){return t(t.s=8312)}),_N_E=t.O()}]);
-//# sourceMappingURL=index-e955a68f1762f24b.js.map
\ No newline at end of file
diff --git a/docs/_next/static/chunks/pages/index-e955a68f1762f24b.js.map b/docs/_next/static/chunks/pages/index-e955a68f1762f24b.js.map
deleted file mode 100644
index 7c3842b..0000000
--- a/docs/_next/static/chunks/pages/index-e955a68f1762f24b.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"static/chunks/pages/index-e955a68f1762f24b.js","mappings":"oFACA,CAAAA,OAAAC,QAAA,CAAAD,OAAAC,QAAA,MAAAC,IAAA,EACA,IACA,WACA,OAAeC,EAAQ,KACvB,EACA,oICcA,IAAMC,EAAgBC,EAAAA,aAAmB,CAA4B,KACrED,CAAAA,EAAcE,WAAW,CAAG,gBAqB5B,IAAAC,cAdA,SAAmBC,CAAwB,MAUhCC,EATT,IAAMA,EAAUC,CAAAA,EAAAA,EAAAA,UAAAA,EAAWN,GAC3B,GAAI,CAACK,EACH,MAAM,MAAU,oCAElB,KAAwB,IAAbD,EACFC,EACED,MAAAA,EACF,CAAC,EAEDC,OAAAA,CAAAA,EAAAA,EAAQE,QAAQ,CAACH,EAAS,GAA1BC,KAAAA,IAAAA,EAAAA,EAA8B,CAAC,CAE1C,ECaA,IAAMG,EAAeP,EAAAA,aAAmB,CAA2B,MAKpD,SAASQ,WACtB,IAAMJ,EAAUC,CAAAA,EAAAA,EAAAA,UAAAA,EAAWE,GAC3B,GAAI,CAACH,EACH,MAAM,MAAU,4BAElB,OAAOA,CACT,CAVAG,EAAaN,WAAW,CAAG,mGC1CZ,SAASQ,kBAiPOC,EAhP7B,IAAMC,EAAeC,CAAAA,EAAAA,EAAAA,MAAAA,EAAgC,MAC/CC,EAAeD,CAAAA,EAAAA,EAAAA,MAAAA,EAAgC,MAC/CE,EAAcF,CAAAA,EAAAA,EAAAA,MAAAA,EAAiC,MAC/C,CACJG,aAAAA,CAAY,CACZC,gBAAAA,CAAe,CACfC,mBAAAA,CAAkB,CAClBC,gBAAAA,CAAe,CACfC,cAAAA,CAAa,CACbC,cAAAA,CAAa,CACbC,gBAAAA,CAAe,CACfC,aAAAA,CAAY,CACZC,aAAAA,CAAY,CACZC,UAAAA,CAAS,CACTC,gBAAAA,CAAe,CACfC,KAAAA,CAAI,CACJC,KAAAA,CAAI,CACJC,QAAAA,CAAO,CACPC,QAAAA,CAAO,CACPC,WAAAA,CAAU,CACVC,cAAAA,CAAa,CACbC,UAAAA,CAAS,CACTC,aAAAA,CAAY,CACZC,UAAAA,CAAS,CACTC,aAAAA,CAAY,CACZC,WAAAA,CAAU,CACVC,cAAAA,CAAa,CACbC,WAAAA,CAAU,CACVC,cAAAA,CAAa,CACbC,UAAAA,CAAS,CACTC,aAAAA,CAAY,CACZC,iBAAAA,CAAgB,CAChBC,UAAAA,CAAS,CACTC,WAAAA,CAAU,CACX,CAAGpC,WACE,CAAEE,OAAAA,CAAM,CAAEmC,cAAAA,CAAa,CAAEC,eAAAA,CAAc,CAAE,CAAGC,cAAUhC,GACtD,CAACiC,EAAOC,EAAS,CAAGC,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IAC7BC,EAAmBH,EAAQ,IAAM,QAIjC,CAACI,EAAkBC,EAAoB,CAAGH,CAAAA,EAAAA,EAAAA,QAAAA,EAC9C,MAEI,CAACI,EAAeC,EAAiB,CAAGL,CAAAA,EAAAA,EAAAA,QAAAA,EAA6B,MACjE,CAACM,GAAcC,GAAgB,CAAGP,CAAAA,EAAAA,EAAAA,QAAAA,EAA6B,MAC/D,CAACQ,GAAkBC,GAAkB,CAAGT,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IACjD,CAACU,GAAmBC,GAAmB,CAAGX,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IACnD,CAAEY,OAAAA,EAAM,CAAEC,WAAAA,EAAU,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,CAAAA,EAAUZ,EAAkBE,EAAe,CACxEW,UAAW,CACT,CAAEC,KAAM,QAASC,QAAS,CAAEC,QAASZ,EAAa,CAAE,EACpD,CACEU,KAAM,SACNC,QAAS,CACPE,OAAQ,CAAC,EAAG,GAAG,CAEnB,EACD,GAGGC,GAAoBpD,EAAAA,EAAgBqD,MAAM,EAC5CrD,EAAgBsD,KAAK,CAAC,GAAYrD,EAAcsD,GAAG,CAACC,IAGlDC,4BACJ,IACE1D,EAAmB2D,EAAMC,MAAM,CAACC,KAAK,CACvC,EAgBF,MAdAC,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACJC,UAAUC,QAAQ,EAAID,UAAUC,QAAQ,CAACC,UAAU,CAAC,OACtDjC,EAAS,IACA+B,UAAUG,SAAS,CAACC,KAAK,CAAC,iBACnCnC,EAAS,GAEb,EAAG,EAAE,EAEL8B,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACJzB,GACFA,EAAc+B,KAAK,EAEvB,EAAG,CAAC/B,EAAc,EAGhB,GAAAgC,EAAAC,IAAA,EAACC,MAAAA,CAAIC,UAAU,wBACb,GAAAH,EAAAC,IAAA,EAACC,MAAAA,CAAIC,UAAU,kCACb,GAAAH,EAAAI,GAAA,EAACC,QAAAA,CACCF,UAAU,cACVG,KAAK,QACL1B,KAAK,kBACL2B,GAAG,6BACHf,MAAM,QACNgB,QAAS9E,UAAAA,EACT+E,SAAUpB,8BAEZ,GAAAW,EAAAI,GAAA,EAACM,QAAAA,CAAMC,QAAQ,sCACb,GAAAX,EAAAI,GAAA,EAACQ,OAAAA,CAAKT,UAAU,uBAAc,YAEhC,GAAAH,EAAAI,GAAA,EAACC,QAAAA,CACCF,UAAU,cACVG,KAAK,QACL1B,KAAK,kBACL2B,GAAG,+BACHf,MAAM,UACNgB,QAAS9E,YAAAA,EACT+E,SAAUpB,8BAEZ,GAAAW,EAAAI,GAAA,EAACM,QAAAA,CAAMC,QAAQ,wCACb,GAAAX,EAAAI,GAAA,EAACQ,OAAAA,CAAKT,UAAU,uBAAc,cAEhC,GAAAH,EAAAI,GAAA,EAACC,QAAAA,CACCF,UAAU,cACVG,KAAK,QACL1B,KAAK,kBACL2B,GAAG,6BACHf,MAAM,QACNgB,QAAS9E,UAAAA,EACT+E,SAAUpB,8BAEZ,GAAAW,EAAAI,GAAA,EAACM,QAAAA,CAAMC,QAAQ,sCACb,GAAAX,EAAAI,GAAA,EAACQ,OAAAA,CAAKT,UAAU,uBAAc,eAGlC,GAAAH,EAAAC,IAAA,EAACC,MAAAA,CAAIC,UAAU,oBACZ/C,UAAAA,EACC,GAAA4C,EAAAC,IAAA,EAAAD,EAAAa,QAAA,YACE,GAAAb,EAAAI,GAAA,EAACC,QAAAA,CACCS,IAAKvF,EACLkF,SAAU,MAAOnB,IACf,IAAMyB,EAAW,MAAM,IAAIC,QACzB,CAACC,EAASC,SACU5B,EAAlB,IAAM6B,EAAAA,OAAY7B,CAAAA,EAAAA,EAAMC,MAAM,CAAC6B,KAAK,GAAlB9B,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,CAAoB,CAAC,EAAE,CACzC,GAAI6B,EAAW,CACb,IAAME,EAAS,IAAIC,WACnBD,EAAOE,gBAAgB,CAAC,OAAQ,QACtBjC,EAAR2B,EAAAA,OAAQ3B,CAAAA,EAAAA,EAAMC,MAAM,GAAZD,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAckC,MAAM,CAC9B,GACAH,EAAOI,aAAa,CAACN,EACvB,MACED,EAAO,MAAU,2BAErB,GAEF7D,EAAU,CAAC0D,EAAS,CACtB,EACAT,KAAK,OACLoB,OAAO,kBACPC,OAAM,KAER,GAAA3B,EAAAI,GAAA,EAACwB,SAAAA,CACCtB,KAAK,SACLuB,aAAW,YACXC,MAAM,YACNC,QAAS,KACHxG,EAAayG,OAAO,EACtBzG,EAAayG,OAAO,CAACC,KAAK,EAE9B,WAEA,GAAAjC,EAAAI,GAAA,EAAC8B,EAAAA,GAAMA,CAAAA,CAACC,MAAO,CAAEC,SAAU,EAAG,MAGhC,GAAApC,EAAAI,GAAA,EAACwB,SAAAA,CACCtB,KAAK,SACLQ,IAAK/C,EACLsE,cAAa/D,GAAoB,GAAKgE,KAAAA,EACtCT,aAAW,UACXC,MAAM,UACNC,QAAS,KACPxD,GAAmB,GAAY,CAACgE,EAClC,WAEA,GAAAvC,EAAAI,GAAA,EAACoC,EAAAA,GAAUA,CAAAA,CAAAA,KAGZlE,GACC,GAAA0B,EAAAC,IAAA,EAACC,MAAAA,CACCC,UAAU,kBACVW,IAAK7C,EACLkE,MAAO3D,GAAOiE,MAAM,CACpBC,SAAU,GACVC,OAAQ,IACN,IAAMC,EAAkBtD,EAAMuD,aAAa,CACrCC,EACJ,CAACF,GACD,CAACtD,EAAMyD,aAAa,CAACC,QAAQ,CAACJ,GAC5BE,GACFvE,GAAmB,GAEvB,EACC,GAAGE,GAAWgE,MAAM,WAErB,GAAAzC,EAAAC,IAAA,EAACC,MAAAA,CAAIC,UAAU,mBACb,GAAAH,EAAAC,IAAA,EAACC,MAAAA,CAAIC,UAAU,0BACb,GAAAH,EAAAI,GAAA,EAACM,QAAAA,UAAM,WACP,GAAAV,EAAAI,GAAA,EAAC6C,KAAAA,UACErH,EAAgBqD,MAAM,CACrB,GAAAe,EAAAC,IAAA,EAACiD,KAAAA,WACC,GAAAlD,EAAAI,GAAA,EAACC,QAAAA,CACCC,KAAK,QACL1B,KAAK,cACLY,MAAM,gBACNe,GAAG,4BACHC,QAAStD,kBAAAA,EACTuD,SAAU,KACRtD,EAAa,gBACf,IAEF,GAAA6C,EAAAC,IAAA,EAACS,QAAAA,CAAMC,QAAQ,sCAA4B,aAC9B/E,EAAgBqD,MAAM,CAACkE,cAAc,GAAG,UAIvD,GAAAnD,EAAAC,IAAA,EAAAD,EAAAa,QAAA,YACE,GAAAb,EAAAC,IAAA,EAACiD,KAAAA,WACC,GAAAlD,EAAAI,GAAA,EAACC,QAAAA,CACCC,KAAK,QACL1B,KAAK,cACLY,MAAM,YACNe,GAAG,wBACHC,QAAStD,cAAAA,EACTuD,SAAU,KACRtD,EAAa,YACf,IACC,IACH,GAAA6C,EAAAI,GAAA,EAACM,QAAAA,CAAMC,QAAQ,iCAAwB,YAEzC,GAAAX,EAAAC,IAAA,EAACiD,KAAAA,WACC,GAAAlD,EAAAI,GAAA,EAACC,QAAAA,CACCC,KAAK,QACL1B,KAAK,cACLY,MAAM,YACNe,GAAG,wBACHC,QAAStD,cAAAA,EACTuD,SAAU,KACRtD,EAAa,YACf,IAEF,GAAA6C,EAAAC,IAAA,EAACS,QAAAA,CAAMC,QAAQ,kCAAwB,QAEpCvF,OAAAA,CAAAA,EAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAQgI,QAAQ,CAACnE,MAAM,CAACkE,cAAc,KAAtC/H,KAAAA,IAAAA,EAAAA,EAA4C,EAAE,kBAO3D,GAAA4E,EAAAC,IAAA,EAACC,MAAAA,CAAIC,UAAU,kBACb,GAAAH,EAAAC,IAAA,EAACS,QAAAA,WAAM,OACA,IACL,GAAAV,EAAAI,GAAA,EAACiD,SAAAA,UACEzG,MAAAA,EACC,kBAEA,GAAAoD,EAAAC,IAAA,EAAAD,EAAAa,QAAA,YAAGyC,KAAKC,KAAK,CAAC3G,IAAAA,GAAiB,eAIrC,GAAAoD,EAAAI,GAAA,EAACF,MAAAA,CAAIC,UAAU,2BACb,GAAAH,EAAAI,GAAA,EAACoD,EAAAA,CAAMA,CAAAA,CACLC,IAAK,KACLC,IAAK,IACLC,WAAY,EACZnE,MAAO8D,KAAKC,KAAK,CAAC,CAAC3G,MAAAA,EAAAA,EAAa,GAAK,KACrC6D,SAAU,IACJmD,MAAMC,OAAO,CAACrE,IAChBA,CAAAA,EAAQA,CAAK,CAAC,EAAE,EAElB3C,EAAa2C,EAAQ,IACvB,EACAsE,WAAY,CACVC,OAAQ,EACRC,WAAY,SACd,EACAC,YAAa,CACXC,MAAO,GACPH,OAAQ,GACRI,UAAW,GACXC,YAAa,UACbJ,WAAY,iBAEZK,QAAS,CACX,EACAC,UAAW,CACTP,OAAQ,EACRQ,OAAQ,iBACRP,WAAY,0BACd,SAKN,GAAAhE,EAAAC,IAAA,EAACC,MAAAA,CAAIC,UAAU,kBACb,GAAAH,EAAAC,IAAA,EAACS,QAAAA,WAAM,cACO,IACZ,GAAAV,EAAAI,GAAA,EAACiD,SAAAA,UACEvG,MAAAA,EACG,kBACA,GAAsC0H,MAAA,CAAnClB,KAAKC,KAAK,CAACzG,IAAAA,EAAmB,KAAK,UAG9C,GAAAkD,EAAAI,GAAA,EAACF,MAAAA,CAAIC,UAAU,2BACb,GAAAH,EAAAI,GAAA,EAACoD,EAAAA,CAAMA,CAAAA,CACLC,IAAK,KACLC,IAAK,IACLC,WAAY,EACZnE,MAAO8D,KAAKC,KAAK,CAAC,CAACzG,MAAAA,EAAAA,EAAc,GAAK,KACtC2D,SAAU,IACJmD,MAAMC,OAAO,CAACrE,IAChBA,CAAAA,EAAQA,CAAK,CAAC,EAAE,EAElBzC,EAAcyC,EAAQ,IACxB,EACAsE,WAAY,CACVC,OAAQ,EACRC,WAAY,SACd,EACAC,YAAa,CACXC,MAAO,GACPH,OAAQ,GACRI,UAAW,GACXC,YAAa,UACbJ,WAAY,iBAEZK,QAAS,CACX,EACAC,UAAW,CACTP,OAAQ,EACRQ,OAAQ,iBACRP,WAAY,0BACd,SAKN,GAAAhE,EAAAC,IAAA,EAACC,MAAAA,CAAIC,UAAU,kBACb,GAAAH,EAAAC,IAAA,EAACS,QAAAA,WAAM,cACO,IACZ,GAAAV,EAAAI,GAAA,EAACiD,SAAAA,UACErG,MAAAA,EACG,kBACA,GAAsCwH,MAAA,CAAnClB,KAAKC,KAAK,CAACvG,IAAAA,EAAmB,KAAK,UAG9C,GAAAgD,EAAAI,GAAA,EAACF,MAAAA,CAAIC,UAAU,2BACb,GAAAH,EAAAI,GAAA,EAACoD,EAAAA,CAAMA,CAAAA,CACLC,IAAK,KACLC,IAAK,IACLC,WAAY,EACZnE,MAAO8D,KAAKC,KAAK,CAAC,CAACvG,MAAAA,EAAAA,EAAc,GAAK,KACtCyD,SAAU,IACJmD,MAAMC,OAAO,CAACrE,IAChBA,CAAAA,EAAQA,CAAK,CAAC,EAAE,EAElBvC,EAAcuC,EAAQ,IACxB,EACAsE,WAAY,CACVC,OAAQ,EACRC,WAAY,SACd,EACAC,YAAa,CACXC,MAAO,GACPH,OAAQ,GACRI,UAAW,GACXC,YAAa,UACbJ,WAAY,iBAEZK,QAAS,CACX,EACAC,UAAW,CACTP,OAAQ,EACRQ,OAAQ,iBACRP,WAAY,0BACd,YAMR,GAAAhE,EAAAI,GAAA,EAACF,MAAAA,CACCC,UAAU,aACVW,IAAK3C,GACLgE,MAAO3D,GAAOiG,KAAK,MAGrB,KACJ,GAAAzE,EAAAI,GAAA,EAACwB,SAAAA,CACCtB,KAAK,SACLuB,aAAY7C,GAAoB,SAAW,OAC3C8C,MAAO9C,GAAoB,aAAe,WAC1C+C,QAAS/C,GAAoBjD,EAAkBD,EAC/C4I,cAAa1F,GAAoB,GAAKsD,KAAAA,WAErCtD,GACC,GAAAgB,EAAAI,GAAA,EAACuE,EAAAA,GAAQA,CAAAA,CAACxC,MAAO,CAAEC,SAAU,EAAG,IAEhC,GAAApC,EAAAI,GAAA,EAACwE,EAAAA,GAAMA,CAAAA,CAACzC,MAAO,CAAEC,SAAU,EAAG,MAGlC,GAAApC,EAAAI,GAAA,EAACwB,SAAAA,CACCtB,KAAK,SACLuB,aAAW,gBACXC,MAAM,oBACNC,QAAS/F,WAET,GAAAgE,EAAAI,GAAA,EAACyE,EAAAA,GAASA,CAAAA,CAAC1C,MAAO,CAAEC,SAAU,EAAG,MAEnC,GAAApC,EAAAI,GAAA,EAACwB,SAAAA,CACCtB,KAAK,SACLuB,aAAW,gBACXC,MAAM,oBACNC,QAAS9F,WAET,GAAA+D,EAAAI,GAAA,EAAC0E,EAAAA,GAAWA,CAAAA,CAAC3C,MAAO,CAAEC,SAAU,EAAG,MAErC,GAAApC,EAAAI,GAAA,EAACwB,SAAAA,CACCtB,KAAK,SACLuB,aAAW,YACXC,MAAM,gBACNC,QAAS7F,WAET,GAAA8D,EAAAI,GAAA,EAAC2E,EAAAA,GAAcA,CAAAA,CAAAA,KAEjB,GAAA/E,EAAAI,GAAA,EAACwB,SAAAA,CACCtB,KAAK,SACLuB,aAAW,SACXC,MAAM,qBACNC,QAAS5F,EACT6I,SAAUhG,YAEV,GAAAgB,EAAAI,GAAA,EAAC6E,EAAAA,GAAUA,CAAAA,CAAAA,KAEb,GAAAjF,EAAAI,GAAA,EAACwB,SAAAA,CACCtB,KAAK,SACLuB,aAAW,OACXC,MAAO,SAA0B0C,MAAA,CAAjB3G,EAAiB,MACjCkE,QAAS3F,EACT4I,SAAU,CAAC1I,WAEX,GAAA0D,EAAAI,GAAA,EAAC8E,EAAAA,GAAOA,CAAAA,CAAAA,KAEV,GAAAlF,EAAAI,GAAA,EAACwB,SAAAA,CACCtB,KAAK,SACLuB,aAAW,OACXC,MAAO,SAIN0C,MAAA,CAHC9G,EACI,GAAoBG,MAAAA,CAxZf,KAwZgC2G,MAAA,CAAjB3G,EAAiB,MACrC,GAAoB2G,MAAA,CAAjB3G,EAAiB,MACzB,KACDkE,QAAS1F,EACT2I,SAAU,CAACzI,WAEX,GAAAyD,EAAAI,GAAA,EAAC+E,EAAAA,GAAOA,CAAAA,CAAAA,QAGV,KAEH/H,aAAAA,EACC,GAAA4C,EAAAC,IAAA,EAAAD,EAAAa,QAAA,YACE,GAAAb,EAAAI,GAAA,EAACwB,SAAAA,CACCtB,KAAK,SACL+B,cAAa9E,EAAgB+E,KAAAA,EAAY,GACzCT,aAAW,SACXC,MAAM,aACNC,QAAS,KACPvE,EAAe,GACjB,WAEA,GAAAwC,EAAAI,GAAA,EAACgF,EAAAA,GAAaA,CAAAA,CAAAA,KAEhB,GAAApF,EAAAI,GAAA,EAACwB,SAAAA,CACCtB,KAAK,SACLQ,IAAK/C,EACLsE,cAAa9E,EAAgB,GAAK+E,KAAAA,EAClCT,aAAW,QACXC,MAAM,YACNC,QAAS,KACPvE,EAAe,IACfa,GAAkB,GAAY,CAACkE,EACjC,WAEA,GAAAvC,EAAAI,GAAA,EAACiF,EAAAA,GAASA,CAAAA,CAAAA,KAGXjH,GACC,GAAA4B,EAAAC,IAAA,EAACC,MAAAA,CACCC,UAAU,kBACVW,IAAK7C,EACLkE,MAAO3D,GAAOiE,MAAM,CACpBC,SAAU,GACVC,OAAQ,IACN,IAAMC,EAAkBtD,EAAMuD,aAAa,CACrCC,EACJ,CAACF,GACD,CAACtD,EAAMyD,aAAa,CAACC,QAAQ,CAACJ,GAC5BE,GACFzE,GAAkB,GAEtB,EACC,GAAGI,GAAWgE,MAAM,WAErB,GAAAzC,EAAAC,IAAA,EAACC,MAAAA,CAAIC,UAAU,mBACb,GAAAH,EAAAC,IAAA,EAACC,MAAAA,CAAIC,UAAU,kBACb,GAAAH,EAAAI,GAAA,EAACM,QAAAA,UAAM,oBACP,GAAAV,EAAAI,GAAA,EAACF,MAAAA,CAAIC,UAAU,2BACb,GAAAH,EAAAI,GAAA,EAACoD,EAAAA,CAAMA,CAAAA,CACLC,IAAK,EACLC,IAAK,IACLI,WAAY,CACVwB,QAAS,MACX,EACA9F,MAAOhD,EACPiE,SAAU,IACJmD,MAAMC,OAAO,CAACrE,IAChBA,CAAAA,EAAQA,CAAK,CAAC,EAAE,EAElB/C,EAAc+C,EAChB,EACAyE,YAAa,CACXC,MAAO,GACPH,OAAQ,GACRI,UAAW,GACXC,YAAa,oBACbJ,WAAY,OAAsBxH,MAAAA,CAAfA,EAAW,MAAmBA,MAAAA,CAAfA,EAAW,MAAegI,MAAA,CAAXhI,EAAW,KAC5D6H,QAAS,CACX,EACAC,UAAW,CACTP,OAAQ,EACRQ,OAAQ,iBACRP,WACE,iDACJ,SAKN,GAAAhE,EAAAC,IAAA,EAACC,MAAAA,CAAIC,UAAU,kBACb,GAAAH,EAAAI,GAAA,EAACM,QAAAA,UAAM,eACP,GAAAV,EAAAI,GAAA,EAACF,MAAAA,CAAIC,UAAU,2BACb,GAAAH,EAAAI,GAAA,EAACoD,EAAAA,CAAMA,CAAAA,CACLC,IAAK,EACLC,IAAK,GACLI,WAAY,CACVC,OAAQ,EACRC,WAAY,SACd,EACAxE,MAAO9C,EACP+D,SAAU,IACJmD,MAAMC,OAAO,CAACrE,IAChBA,CAAAA,EAAQA,CAAK,CAAC,EAAE,EAElB7C,EAAa6C,EACf,EACAyE,YAAa,CACXC,MAAO,GACPH,OAAQ,GACRI,UAAW,GACXC,YAAa,UACbJ,WAAY,iBAEZK,QAAS,CACX,EACAC,UAAW,CACTP,OAAQ,EACRQ,OAAQ,iBACRP,WAAY,0BACd,YAMR,GAAAhE,EAAAI,GAAA,EAACF,MAAAA,CACCC,UAAU,aACVW,IAAK3C,GACLgE,MAAO3D,GAAOiG,KAAK,MAGrB,QAEJ,QAEN,GAAAzE,EAAAC,IAAA,EAACC,MAAAA,CAAIC,UAAU,mBACb,GAAAH,EAAAI,GAAA,EAACC,QAAAA,CACCS,IAAKzF,EACLiF,KAAK,OACL1B,KAAK,iBACL2G,YAAY,YACZC,KAAM,KAER,GAAAxF,EAAAI,GAAA,EAACwB,SAAAA,CACCtB,KAAK,SACLyB,QAAS,KACP,IAAMnD,EAAOvD,EAAa2G,OAAO,CAAG3G,EAAa2G,OAAO,CAACxC,KAAK,CAAG,GAC3DiG,EAASjK,EAAYwG,OAAO,CAC9BxG,EAAYwG,OAAO,CAACxC,KAAK,CACzB,OACJlC,EAAW,CAAEsB,KAAAA,EAAM6G,OAAAA,CAAO,EAC5B,WACD,WAGD,GAAAzF,EAAAC,IAAA,EAACyF,SAAAA,CAAO5E,IAAKtF,EAAamK,aAAa,gBACrC,GAAA3F,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,eAAM,SACpB,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,eAAM,iBAK9B,CC5mBe,SAASqG,YACtB,MACE,GAAA7F,EAAAC,IAAA,EAAC6F,SAAAA,CAAO3F,UAAU,sBAChB,GAAAH,EAAAI,GAAA,EAAC2F,IAAAA,CAAEC,KAAK,6CAA6C7F,UAAU,oBAC7D,GAAAH,EAAAI,GAAA,EAAC6F,EAAAA,GAAQA,CAAAA,CAACT,KAAM,OAElB,GAAAxF,EAAAC,IAAA,EAACC,MAAAA,CAAIC,UAAU,oBACb,GAAAH,EAAAI,GAAA,EAAC2F,IAAAA,CACCC,KAAK,qCACLzG,OAAO,SACP2G,IAAI,sBACL,yBAEI,IACL,GAAAlG,EAAAI,GAAA,EAACQ,OAAAA,CAAKT,UAAU,qBAAY,OAAU,IACtC,GAAAH,EAAAI,GAAA,EAAC2F,IAAAA,CACCC,KAAK,wCACLzG,OAAO,SACP2G,IAAI,sBAEJ,GAAAlG,EAAAI,GAAA,EAAC+F,MAAAA,CACCC,IAAI,6DACJC,IAAI,kBACJnC,MAAO,IACPH,OAAQ,YAMpB,kCCFA,IAAMuC,EAAiB5L,EAAAA,aAAmB,CAA6B,MAKxD,SAAS6L,aACtB,IAAMzL,EAAUC,CAAAA,EAAAA,EAAAA,UAAAA,EAAWuL,GAC3B,GAAI,CAACxL,EACH,MAAM,MAAU,8BAElB,OAAOA,CACT,CCvCO,SAAS0L,kBAAkBC,CAAW,EAC3C,OAAO,IAAIzF,QAAsB,GAC/B0F,EAAAA,MAAMA,CAACC,KAAK,CAACC,OAAO,CAACH,EAAKxF,EAAS,CACjC4F,YAAa,WACf,GAEJ,CDuBAP,EAAe3L,WAAW,CAAG,+BE/Bd,SAAAmM,YACf,WAAAC,OAAoBvM,EAAAwM,CAAuB,mEAC3C,CCGe,SAASC,iBACtB,IAAMC,EAAY5L,CAAAA,EAAAA,EAAAA,MAAAA,EAAsB,MAClC6L,EAAe7L,CAAAA,EAAAA,EAAAA,MAAAA,EAEX,MAEJkE,EAAQ4H,CAAAA,EAAAA,EAAAA,OAAAA,EAAQ,KACpB,IAAMC,aAAe,IACZF,EAAanF,OAAO,CAE7B,MAAO,CACL,MAAMsF,gCAA8B,QAAAC,EAAAC,UAAAvI,MAAA,CAAAwI,EAAA,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAGD,CAAAA,CAAHC,EAAA,CAAAF,SAAA,CAAAE,EAAO,CACzC,IAAMC,EAAY,MAAMN,eACxB,OAAOM,MAAAA,EAAAA,KAAAA,EAAAA,EAAWL,6BAA6B,IAAIG,EACrD,EACA,MAAMG,6BAA2B,QAAAL,EAAAC,UAAAvI,MAAA,CAAAwI,EAAA,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAGD,CAAAA,CAAHC,EAAA,CAAAF,SAAA,CAAAE,EAAO,CACtC,IAAMC,EAAY,MAAMN,eACxB,OAAOM,MAAAA,EAAAA,KAAAA,EAAAA,EAAWC,0BAA0B,IAAIH,EAClD,EACA,MAAMI,qCAAmC,QAAAN,EAAAC,UAAAvI,MAAA,CAAAwI,EAAA,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAGD,CAAAA,CAAHC,EAAA,CAAAF,SAAA,CAAAE,EAAO,CAC9C,IAAMC,EAAY,MAAMN,eACxB,OAAOM,MAAAA,EAAAA,KAAAA,EAAAA,EAAWE,kCAAkC,IAAIJ,EAC1D,EACA,MAAMK,8CAA4C,QAAAP,EAAAC,UAAAvI,MAAA,CAAAwI,EAAA,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAGD,CAAAA,CAAHC,EAAA,CAAAF,SAAA,CAAAE,EAAO,CACvD,IAAMC,EAAY,MAAMN,eACxB,OAAOM,MAAAA,EAAAA,KAAAA,EAAAA,EAAWG,2CAA2C,IAAIL,EACnE,CACF,CACF,EAAG,EAAE,EAeL,MAbAhI,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACR,IAAMsI,EAAS,IAAIhB,UACbY,EAAYK,EAAAA,EAAY,CAAiBD,GAK/C,OAHAb,EAAUlF,OAAO,CAAG+F,EACpBZ,EAAanF,OAAO,CAAG2F,EAEhB,KACLA,CAAS,CAACK,EAAAA,EAAoB,CAAC,GAC/BD,EAAOE,SAAS,EAClB,CACF,EAAG,EAAE,EAEEzI,CACT,CCjDe,SAAS0I,cACtB,MAAO,CACLC,cAAe,GACfC,SAAkD,mBACpD,CACF,CC6EO,eAAeC,sBAAsB5B,CAAW,EACrD,IAAM6B,EAAW,MAAMC,MAAM9B,GAC7B,GAAI6B,EAASE,EAAE,CAAE,CACf,IAAMC,EAAc,MAAMH,EAASG,WAAW,GAC9C,OAAOA,CACT,CACE,MAAM,MAAU,6BAAiCjE,MAAA,CAAJiC,GAEjD,eC9EA,GAAM,CAAEiC,oBAAAA,CAAmB,CAAE,CAAGC,MAE1B,CAAEC,UAAAA,CAAS,CAAE,CAAGF,EA8BP,SAASG,cAAcC,CAAqC,MAKrDC,EAEDC,KAPiB,CAAEC,SAAAA,CAAQ,CAA2B,CAArCH,EAC9B,CAAEI,YAAAA,CAAW,CAAEC,kBAAAA,CAAiB,CAAE,CAAG5C,aACrC,CAAC6C,EAAuBC,EAAyB,CAAGzL,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,GAC7D,CAAC0L,EAAoBC,EAAsB,CAAG3L,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,GACvDmL,EAAeH,CAAS,CAACM,EAAY,CACrCF,EAAcD,OAAAA,CAAAA,EAAAA,CAAY,CAACK,EAAsB,GAAnCL,KAAAA,IAAAA,EAAAA,EAAuC,KAErDS,EAAaR,OAAAA,CAAAA,EAAAA,EAAYQ,UAAU,GAAtBR,KAAAA,IAAAA,EAAAA,EAA0B,EACvCS,EAAeD,EAAa,EAE5BE,EAActC,CAAAA,EAAAA,EAAAA,OAAAA,EAClB,SAAM4B,SAAAA,OAAAA,CAAAA,EAAAA,EAAYxD,IAAI,GAAhBwD,KAAAA,IAAAA,EAAAA,EAAoB,CAAC,IAAK,IAAI,EACpC,CAACA,EAAY,EAGTW,EAAc,CAClBX,CAAAA,IAAAA,EAAYY,cAAc,EAAUZ,IAAAA,EAAYa,eAAe,EAG3D,CAACzM,EAAkB0M,EAAoB,CAAGlM,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,SAEpD+L,GAAevM,aAAAA,GAClB0M,EAAoB,SAGlBR,GAAsBE,GACxBD,EAAsB,GAGxB9J,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACR8J,EAAsB,EACxB,EAAG,CAACP,EAAY,EAEhB,GAAM,CAACtN,EAAiBC,EAAmB,CAAGiC,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,WACjD,CAAC/B,EAAekO,EAAiB,CAAGnM,CAAAA,EAAAA,EAAAA,QAAAA,EACxC,IAAM,IAAIoM,KAEN,CAACxN,EAAYC,EAAc,CAAGmB,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,KACvC,CAAClB,EAAWC,EAAa,CAAGiB,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IACrC,CAACqM,EAAWC,EAAa,CAAGtM,CAAAA,EAAAA,EAAAA,QAAAA,EAChC,IAAM,IAAIuM,KAEN,CAACvO,EAAiBwO,EAAmB,CAAGxM,CAAAA,EAAAA,EAAAA,QAAAA,EAC5C,IAAM,EAAE,EAGJnC,EAAeuN,EACjB,GAAuB5L,MAAAA,CAApB4L,EAAYpK,IAAI,CAAC,KAAuB0K,MAAAA,CAApBlM,EAAiB,KAAsBoH,MAAA,CAAnB8E,GAC3C,KACEe,EAAmBrB,EACrB,GAAgCM,MAAAA,CAA7BN,EAAYpK,IAAI,CAAC,cAA+B4F,MAAA,CAAnB8E,GAChC,KACE,CAAEtO,SAAAA,CAAQ,CAAE,CAAGyC,gBACf,CAAErC,OAAAA,CAAM,CAAEkP,aAAAA,CAAY,CAAElO,KAAAA,CAAI,CAAEC,KAAAA,CAAI,CAAEC,QAAAA,CAAO,CAAEC,QAAAA,CAAO,CAAE,CAC1DkB,cAAUhC,GACN,CAAEL,OAAQmP,CAAc,CAAE,CAAG9M,cAAU4M,GACvC,CAAC9M,EAAeC,EAAe,CAAGI,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IAC3C,CAAE0J,8BAAAA,CAA6B,CAAE,CAAGL,iBACpC,CAAEkB,cAAAA,CAAa,CAAE,CAAGD,cACpB,CAACsC,EAAeC,EAAiB,CAAG7M,CAAAA,EAAAA,EAAAA,QAAAA,EAExC,IAAM,EAAE,EACJ,CAACV,EAAWC,EAAa,CAAGS,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,YAEvChC,CAAAA,EAAgBqD,MAAM,CACN,kBAAd/B,GACFC,EAAa,iBAGG,kBAAdD,GACFC,EAAa,aAIjB,IAAMuN,UAAY,QAGCtP,EAEAA,EAJjB,IAAIuP,EAAe/O,EAMnB,GALIsB,cAAAA,EACFyN,EAAevP,OAAAA,CAAAA,EAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAQgI,QAAQ,GAAhBhI,KAAAA,IAAAA,EAAAA,EAAoB,EAAE,CACd,cAAd8B,GACTyN,CAAAA,EAAevP,OAAAA,CAAAA,EAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAQgI,QAAQ,CAACwH,KAAK,CAAC,EAAG,KAA1BxP,KAAAA,IAAAA,EAAAA,EAAgC,EAAE,GAE/CuP,EAAa1L,MAAM,CAarB,OAAO,CAbgB,EACvB,IAAM4L,SAAW,QACdZ,EAADa,SAAA,OAAAA,CAAAA,EAAA,CAACb,OAAAA,CAAAA,EAAAA,EAAUc,GAAG,CAACJ,CAAY,CAACK,EAAE,IAA7Bf,KAAAA,IAAAA,EAAAA,EAAkC,CAAC,EAAE,CAACrL,EAAK,GAA5CkM,KAAA,IAAAA,EAAAA,EAAgD,GAC5CG,EAAaJ,SAAS,UAC5B,EAEKD,KAAK,CAAC,GACN1L,KAAK,CAAC,CAACgM,EAAaF,IAAMH,SAASG,EAAI,KAAOC,GAE1CA,EAEF,IACT,CAGF,EAEMrO,GAAY8N,UAAU,eACtB5N,GAAa4N,UAAU,cACvB1N,GAAa0N,UAAU,cAEvBS,GAAYC,CAAAA,EAAAA,EAAAA,WAAAA,EAChB,CAACxM,EAA2BY,SAKTpE,EAEAA,EAGS6O,EAT1B,IAAMO,EAAuD,EAAE,CACzDa,EAAe,IAAIlB,IAAIF,GACzBU,EAAe/O,EAMnB,IAAK,IAAMsP,KALPhO,cAAAA,EACFyN,EAAevP,OAAAA,CAAAA,EAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAQgI,QAAQ,GAAhBhI,KAAAA,IAAAA,EAAAA,EAAoB,EAAE,CACd,cAAd8B,GACTyN,CAAAA,EAAevP,OAAAA,CAAAA,EAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAQgI,QAAQ,CAACwH,KAAK,CAAC,EAAG,KAA1BxP,KAAAA,IAAAA,EAAAA,EAAgC,EAAE,EAEzBuP,GAAc,CACtC,IAAMW,EAAkBrB,OAAAA,CAAAA,EAAAA,EAAUc,GAAG,CAACG,EAAAA,GAAdjB,KAAAA,IAAAA,EAAAA,EAA8B,CAAC,EACjDsB,EAAa,CAAE,GAAGD,CAAe,CAAE,CAAC1M,EAAK,CAAEY,CAAM,EACvD6L,EAAaG,GAAG,CAACN,EAAaK,GAC9Bf,EAAcjQ,IAAI,CAAC,CAAC2Q,EAAaK,EAAW,CAC9C,CACArB,EAAamB,GACbZ,EAAiBD,EACnB,EACA,CAACpP,EAAQ8B,EAAW+M,EAAWrO,EAAgB,EAG3CiB,GAAeuO,CAAAA,EAAAA,EAAAA,WAAAA,EACnB,GAAmBD,GAAU,cAAe3L,GAC5C,CAAC2L,GAAU,EAGPpO,GAAgBqO,CAAAA,EAAAA,EAAAA,WAAAA,EACpB,GAAmBD,GAAU,aAAc3L,GAC3C,CAAC2L,GAAU,EAGPlO,GAAgBmO,CAAAA,EAAAA,EAAAA,WAAAA,EACpB,GAAmBD,GAAU,aAAc3L,GAC3C,CAAC2L,GAAU,EAGb1L,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACR,GAAK+K,EAAcvL,MAAM,EAGzB,IAAK,GAAM,CAACwM,EAAgBF,EAAW,GAAIf,EACzC,GAAIiB,aAA0B/E,EAAAA,MAAMA,CAACC,KAAK,CAAE,CAE1C,IAAK,IAAM+E,KADXD,EAAeE,OAAO,CAAG,EAAE,CACTJ,EAAY,KACRA,EAApB,IAAMK,EAAcL,OAAAA,CAAAA,EAAAA,CAAU,CAACG,EAA2B,GAAtCH,KAAAA,IAAAA,EAAAA,EAA0C,EAC9D,GAAIK,IAAAA,EACF,OAAQF,GACN,IAAK,cACHD,EAAeE,OAAO,CAACpR,IAAI,CAEzB,IAAImM,EAAAA,MAAMA,CAACC,KAAK,CAACgF,OAAO,CAACE,WAAW,CAAC,CACnCC,SAAUF,CACZ,IAEF,KACF,KAAK,aACHH,EAAeE,OAAO,CAACpR,IAAI,CACzB,IAAImM,EAAAA,MAAMA,CAACC,KAAK,CAACgF,OAAO,CAACI,UAAU,CAAC,CAClCjP,WAAY8O,CACd,IAEF,KACF,KAAK,aACHH,EAAeE,OAAO,CAACpR,IAAI,CACzB,IAAImM,EAAAA,MAAMA,CAACC,KAAK,CAACgF,OAAO,CAACK,UAAU,CAAC,CAClChP,WAAY4O,CACd,GAGN,CAEJ,CACAH,EAAeQ,YAAY,EAC7B,CAEFxB,EAAiB,EAAE,EACfH,GACFA,IAEJ,EAAG,CAACE,EAAeF,EAAa,EAEhC,IAAMxO,GAAgBsP,CAAAA,EAAAA,EAAAA,WAAAA,EAAY,KAC5BxP,EAAgBqD,MAAM,EACxB8K,EAAiB,IACf,IAAMmC,EAAmB,IAAIlC,IAAInO,GACjC,IAAK,IAAM4P,KAAkB7P,EAC3BsQ,EAAiBC,GAAG,CAACV,GAxN7BrM,EAAOgN,aAAa,CAAG,GACvBhN,EAAOiN,aAAa,CAAG,GACvBjN,EAAOkN,YAAY,CAAG,GACtBlN,EAAOmN,YAAY,CAAG,GACtBnN,EAAOoN,YAAY,CAAG,GAuNhB,OAAON,CACT,EAEJ,EAAG,CAACtQ,EAAgB,EAEdG,GAAkBqP,CAAAA,EAAAA,EAAAA,WAAAA,EAAY,KAC9BxP,EAAgBqD,MAAM,EACxB8K,EAAiB,IACf,IAAMmC,EAAmB,IAAIlC,IAAInO,GACjC,IAAK,IAAM4P,KAAkB7P,EAC3BsQ,EAAiBO,MAAM,CAAChB,GA7NhCrM,EAAOgN,aAAa,CAAG,GACvBhN,EAAOiN,aAAa,CAAG,GACvBjN,EAAOkN,YAAY,CAAG,GACtBlN,EAAOmN,YAAY,CAAG,GACtBnN,EAAOoN,YAAY,CAAG,GA4NhB,OAAON,CACT,EAEJ,EAAG,CAACtQ,EAAgB,EAEdI,GAAeoP,CAAAA,EAAAA,EAAAA,WAAAA,EAAY,UAC/B,IAAMhM,EAAShE,EAAOsR,eAAe,GACjCtN,IACFhE,EAAOY,YAAY,CAACoD,EAAQ,IAC5BkL,IAEJ,EAAG,CAAClP,EAAQkP,EAAa,EAEnBrO,GAAemP,CAAAA,EAAAA,EAAAA,WAAAA,EAAY,UAC/B,IAAMhM,EAAShE,EAAOsR,eAAe,GACrC,GAAItN,EAAQ,CAEV,GAAIhE,EAAOgI,QAAQ,CAAC,EAAE,GAAKhE,GAAUhE,EAAOgI,QAAQ,CAAC,EAAE,GAAKhE,EAC1D,OAEFhE,EAAOuR,aAAa,CAACvN,EAAQ,IAC7BkL,GACF,CACF,EAAG,CAAClP,EAAQkP,EAAa,EAEnBjN,GAAY+N,CAAAA,EAAAA,EAAAA,WAAAA,EAChB,MAAOwB,IACL,IAAIC,EACJ,IAAK,IAAM9L,KAAY6L,EAAW,CAChC,IAAME,EAAQ,MAAMtG,kBAAkBzF,GACtC,GAAI,CAAC+L,EAAM5I,KAAK,EAAI,CAAC4I,EAAM/I,MAAM,CAC/B,MAAM,MAAU,qBAElB,IAAMgJ,EAAaD,EAAM5I,KAAK,CAAGwF,CAAW,CAAC,EAAE,CACzCsD,EAAcF,EAAM/I,MAAM,CAAG2F,CAAW,CAAC,EAAE,CACjD,GAAIqD,EAAa,GAAKC,EAAc,EAAG,CACrC,IAAIC,EAEFA,EADEF,EAAaC,EACP,EAAID,EAEJ,EAAIC,EAEdF,EAAMI,MAAM,CAAGD,EACfH,EAAMK,MAAM,CAAGF,CACjB,CACA,GAAI7P,aAAAA,EAAiC,CAC9B0P,EAAMnB,OAAO,EAChBmB,CAAAA,EAAMnB,OAAO,CAAG,EAAE,EAEpB,IAAMyB,EAAkB,IAAI1G,EAAAA,MAAMA,CAACC,KAAK,CAACgF,OAAO,CAAC0B,SAAS,CAC1DP,EAAMnB,OAAO,CAACpR,IAAI,CAAC6S,GACnBN,EAAMb,YAAY,EACpB,CACAzO,EAAe,IACfpC,EAAOkS,YAAY,CAACR,GACpB1R,EAAO+Q,GAAG,CAACW,GACXD,EAAiBC,CACnB,CACID,GACFzR,EAAOmS,eAAe,CAACV,EAE3B,EACA,CAACzR,EAAQgC,EAAkBsM,EAAY,EAGnCxN,GAAYkP,CAAAA,EAAAA,EAAAA,WAAAA,EAAY,UAC5B,IAAMhM,EAAShE,EAAOsR,eAAe,GACrC,GAAItN,EAAQ,KAKFoO,EACCA,EALT,IAAMA,EAAO,MAAM,IAAIxM,QAAuB,GAC5C5B,EAAOqO,KAAK,CAACxM,IAEfuM,EAAKhC,GAAG,CAAC,CACPkC,IAAK,CAACF,OAAAA,CAAAA,EAAAA,EAAKE,GAAG,GAARF,KAAAA,IAAAA,EAAAA,EAAY,GAAK,GACvBG,KAAM,CAACH,OAAAA,CAAAA,EAAAA,EAAKG,IAAI,GAATH,KAAAA,IAAAA,EAAAA,EAAa,GAAK,GACzBI,QAAS,EACX,GAjSmB,oBAAhBxO,EAAOkB,IAAI,GAoSZkN,EAAKpS,MAAM,CAAGA,EACdoS,EAAKK,aAAa,CAAC,IACjBzS,EAAO+Q,GAAG,CAAC/M,EACb,GACAoO,EAAKM,SAAS,IAGhB1S,EAAO2S,mBAAmB,GAC1B3S,EAAO+Q,GAAG,CAACqB,GACXpS,EAAOmS,eAAe,CAACC,EACzB,CACF,EAAG,CAACpS,EAAO,EAELe,GAAkBiP,CAAAA,EAAAA,EAAAA,WAAAA,EAAY,UAClC,IAAM4C,EAAU5S,EAAO6S,gBAAgB,GACvC7S,EAAO2S,mBAAmB,GAC1B3S,EAAO8S,MAAM,IAAIF,GACjB5S,EAAO+S,gBAAgB,EAEzB,EAAG,CAAC/S,EAAO,EAELkC,GAAa8N,CAAAA,EAAAA,EAAAA,WAAAA,EACjB,MAAAtC,OAAO,CAAErD,OAAAA,CAAM,CAAE7G,KAAAA,EAAO,EAAE,CAAoC,CAAAkK,EACtD,CAAEsF,YAAAA,CAAW,CAAEC,YAAAA,CAAW,CAAEC,cAAAA,CAAa,CAAE,CAAG,MAAMtN,QAAAuN,GAAA,EAAA/T,EAAAgU,CAAA,MAAAhU,EAAAgU,CAAA,QAAAC,IAAA,CAAAjU,EAAAkU,IAAA,CAAAlU,EAAA,MAI1DoE,EAAOA,EAAK+P,IAAI,IAAM,eAEtB,IAAMC,EAAkB,MAAM5N,QAAQuN,GAAG,CACvCxF,EACG8F,MAAM,CACL,GACE7F,GACA,CAACA,EAAYrH,MAAM,EACnBqH,CAA2B,IAA3BA,EAAY8F,UAAU,EAEzBC,GAAG,CAAC,QACgB/F,EAAnB,IAAMQ,EAAaR,OAAAA,CAAAA,EAAAA,EAAYQ,UAAU,GAAtBR,KAAAA,IAAAA,EAAAA,EAA0B,EACvCgG,EAAS,MAAUxF,GAAYyF,IAAI,CAAC,MAC1C,OAAOD,EAAOD,GAAG,CAAC,MAAOG,EAAGC,SAExBnU,EAEAA,EAEkBgO,EAiCQA,MAhCxBoG,EAwBAC,EA9BJ,IAAMC,EAAAA,OACJtU,CAAAA,EAAAA,CAAQ,CAAC,GAA6BmU,MAAAA,CAA1BnG,EAAYpK,IAAI,CAAC,WAAoB4F,MAAA,CAAX2K,GAAa,GAAnDnU,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAqDI,MAAM,CACvDmP,EAAAA,OACJvP,CAAAA,EAAAA,CAAQ,CAAC,GAAgCmU,MAAAA,CAA7BnG,EAAYpK,IAAI,CAAC,cAAuB4F,MAAA,CAAX2K,GAAa,GAAtDnU,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAwDI,MAAM,CAE1DsO,EAAcV,OAAAA,CAAAA,EAAAA,EAAYxD,IAAI,GAAhBwD,KAAAA,IAAAA,EAAAA,EAAoB,CAAC,IAAK,IAAI,CAG5CuG,EAAgBD,EAAYE,SAAS,CAAC,CAC1C9B,IAAKvF,EACLwF,KAAMxF,EACNjE,MAAOwF,CAAW,CAAC,EAAE,CACrB3F,OAAQ2F,CAAW,CAAC,EAAE,GAGxB,GAAIa,EAAgB,CAClB,IAAMkF,EAAmBlF,EAAeiF,SAAS,CAAC,CAChD9B,IAAKvF,EACLwF,KAAMxF,EACNjE,MAAOwF,CAAW,CAAC,EAAE,CACrB3F,OAAQ2F,CAAW,CAAC,EAAE,GAExB0F,EAAiB,MAAM9H,EAA8B,CACnDiI,cAAAA,EACAE,iBAAAA,CACF,EACF,MACEL,EAAiBG,EAInB,OAAQpG,GACN,IAAK,SACHkG,EAAW,GAAWnG,MAAAA,CAARtK,EAAK,KAAe4F,MAAA,CAAZ0E,EAAY,QAClC,KACF,KAAK,SACL,IAAK,UACH,GAAIF,EAAa,CACf,IAAM0G,EAAgB1G,OAAAA,CAAAA,EAAAA,EAAY2G,IAAI,GAAhB3G,KAAAA,IAAAA,EAAAA,EAAoBA,EAAYpK,IAAI,CAC1D,GAAI4K,EAAa,EAAG,CAClB,IAAM1J,EAAQ4P,EAAc5P,KAAK,CAAC,gBAClC,GAAIA,EAAO,CACT,IAAM8P,EAAW9P,CAAK,CAAC,EAAE,CACzBuP,EAAW,GAAcF,MAAAA,CAAXS,GAEMpL,MAAA,CAFK2K,EACtBU,QAAQ,GACRC,QAAQ,CAAC,EAAG,KAAK,OACtB,MACE,MAAM,MAAU,gCAEpB,MACET,EAAW,GAAiB7K,MAAA,CAAdkL,EAAc,OAEhC,MACEL,EADSlG,WAAAA,EACE,UAAsB3E,MAAA,CAAZ0E,EAAY,QAEtB,GAAe1E,MAAA,CAAZ0E,EAAY,OAEhC,CAEA,MAAO,CAAEnI,SAAUqO,EAAgBC,SAAAA,CAAS,CAC9C,EACF,GACCU,IAAI,IAGT,OAAQtK,GACN,IAAK,MAAO,CACV,GAAM,CAAE1E,SAAAA,CAAQ,CAAEsO,SAAAA,CAAQ,CAAE,CAAGT,CAAe,CAACxF,EAAsB,CACrEgF,EAAYrN,EAAUsO,GACtB,KACF,CACA,IAAK,MAAO,CACV,IAAMjO,EAAQ,MAAMJ,QAAQuN,GAAG,CAC7BK,EAAgBG,GAAG,CAAC,MAAOiB,GAAoB,EAC7CC,KAAM,MAAM5H,sBAAsB2H,EAAejP,QAAQ,EACzDnC,KAAMoR,EAAeX,QAAQ,CAC/B,IAEIa,EAAM5B,EAAclN,GACpB+O,EAAgBjH,EAAYkH,OAAO,CACvC,yBACA,CAACtQ,EAAOiG,EAAGsK,IAAM,CAACtK,GAAKsK,CAAAA,EAAGC,WAAW,IAEnCC,EAAc,GAClB,OAAQpH,GACN,IAAK,SACHoH,EAAc,eAAoB/L,MAAA,CAAL5F,EAAK,QAClC,KACF,KAAK,SACH2R,EAAc,UAA2B3R,MAAAA,CAAjBuR,EAAc,KAAQ3L,MAAA,CAAL5F,EAAK,QAC9C,KACF,KAAK,UACH2R,EAAc,IAAqB3R,MAAAA,CAAjBuR,EAAc,KAAQ3L,MAAA,CAAL5F,EAAK,OAE5C,CACA,MAAMyP,EAAY6B,EAAKK,EACzB,CACF,CAEF,EACA,CACErH,EACAf,EACAnN,EACAsM,EACAyB,EACAK,EACAD,EACD,EAGGrO,GAAUsM,CAAAA,EAAAA,EAAAA,OAAAA,EACd,IAAO,EACL3L,aAAAA,EACA2B,iBAAAA,EACA0M,oBAAAA,EACApO,gBAAAA,EACAC,mBAAAA,EACAE,cAAAA,EACAkO,iBAAAA,EACAvN,WAAAA,EACAC,cAAAA,EACAC,UAAAA,EACAC,aAAAA,EACAC,UAAAA,GACAC,aAAAA,GACAC,WAAAA,GACAC,cAAAA,GACAC,WAAAA,GACAC,cAAAA,GACAC,UAAAA,EACAC,aAAAA,EACAvB,gBAAAA,EACAE,cAAAA,GACAC,gBAAAA,GACAC,aAAAA,GACAC,aAAAA,GACAoB,UAAAA,GACAnB,UAAAA,GACAC,gBAAAA,GACAC,KAAAA,EACAC,KAAAA,EACAC,QAAAA,EACAC,QAAAA,EACAe,WAAAA,GACAC,cAAAA,EACAC,eAAAA,EACA4L,sBAAAA,EACAC,yBAAAA,EACAK,YAAAA,EACAC,YAAAA,EACAL,mBAAAA,EACAC,sBAAAA,EACAE,aAAAA,EACAD,WAAAA,CACF,GACA,CACE/N,EACA2B,EACA1B,EACAG,EACAW,EACAE,EACAE,GACAE,GACAE,GACAE,EACAL,GACAE,GACAE,GACArB,EACAE,GACAC,GACAC,GACAC,GACAoB,GACAnB,GACAC,GACAC,EACAC,EACAC,EACAC,EACAe,GACAC,EACA6L,EACAM,EACAC,EACAL,EACAG,EACAD,EACD,EAkCH,MA/BA/J,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACR,GAAIrE,EAAQ,CACV,IAAMoV,uBAAyB,KAC7BpG,EAAmBhP,EAAO6S,gBAAgB,GAC5C,EAOA,OANA7S,EAAOqV,EAAE,CAAC,oBAAqBD,wBAC/BpV,EAAOqV,EAAE,CAAC,oBAAqBD,wBAC/BpV,EAAOqV,EAAE,CAAC,oBAAqBD,wBAE/BA,yBAEO,KACLpV,EAAOsV,GAAG,CAAC,oBAAqBF,wBAChCpV,EAAOsV,GAAG,CAAC,oBAAqBF,wBAChCpV,EAAOsV,GAAG,CAAC,oBAAqBF,uBAClC,CACF,CACF,EAAG,CAACpV,EAAO,EAEXqE,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACJ8K,GACFA,CAAAA,EAAeoG,gBAAgB,CAACzM,KAAK,CAAGxH,CAAAA,CAE5C,EAAG,CAAC6N,EAAgB7N,EAAU,EAE9B+C,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACJ8K,GACFA,CAAAA,EAAeoG,gBAAgB,CAACC,KAAK,CAAG,OAAsBpU,MAAAA,CAAfA,EAAW,MAAmBA,MAAAA,CAAfA,EAAW,MAAegI,MAAA,CAAXhI,EAAW,KAE5F,EAAG,CAAC+N,EAAgB/N,EAAW,EAG7B,GAAAwD,EAAAI,GAAA,EAACnF,EAAa4V,QAAQ,EAACrR,MAAO1E,YAAUmO,GAE5C,CChlBe,SAAS6H,iBACtB,GAAM,CAAEpV,gBAAAA,CAAe,CAAEgO,YAAAA,CAAW,CAAE,CAAGxO,WACnC,CAAEiN,cAAAA,CAAa,CAAE,CAAGD,cAE1B,OAAOwB,EACL,GAAA1J,EAAAI,GAAA,EAACF,MAAAA,CACCC,UAAU,iBACVgC,MAAO,CACLzG,gBAAAA,EACAgS,IAAKvF,EACLjE,MAAOwF,CAAW,CAAC,EAAE,CACrB3F,OAAQ2F,CAAW,CAAC,EAAE,IAGxB,IACN,CCfe,SAASqH,eAAejI,CAAqC,KAArC,CAAEG,SAAAA,CAAQ,CAA2B,CAArCH,EAC/B,CAAC9N,EAAUgW,EAAY,CAAGpT,CAAAA,EAAAA,EAAAA,QAAAA,EAAqC,CAAC,GAEhEqT,EAAiB7F,CAAAA,EAAAA,EAAAA,WAAAA,EACrB,CAACvQ,EAAkBqW,KACjBF,EAAY,GACH,EAAE,GAAGhW,CAAQ,CAAE,CAACH,EAAS,CAAEqW,CAAW,GAEjD,EACA,EAAE,EAGEC,EAAmB/F,CAAAA,EAAAA,EAAAA,WAAAA,EAAY,IACnC4F,EAAY,IACV,GAAM,CAAE,CAACnW,EAAS,CAAEO,CAAM,CAAE,GAAGgW,EAAM,CAAGpW,EACxC,OAAOoW,CACT,EACF,EAAG,EAAE,EAECtW,EAAUsM,CAAAA,EAAAA,EAAAA,OAAAA,EAAQ,IACf,EACLpM,SAAAA,EACAiW,eAAAA,EACAE,iBAAAA,CACF,GACC,CAACnW,EAAUiW,EAAgBE,EAAiB,EAE/C,MACE,GAAAnR,EAAAI,GAAA,EAAC3F,EAAcoW,QAAQ,EAACrR,MAAO1E,WAAUmO,GAE7C,CC7Be,SAASoI,mBAAmBvI,CAI1C,KAJ0C,CACzCG,SAAAA,CAAQ,CAGT,CAJ0CH,EAKnChI,EAAMxF,CAAAA,EAAAA,EAAAA,MAAAA,EAA8B,MACpC,CACJG,aAAAA,CAAY,CACZO,aAAAA,CAAY,CACZC,aAAAA,CAAY,CACZC,UAAAA,CAAS,CACTC,gBAAAA,CAAe,CACfkB,UAAAA,CAAS,CACTjB,KAAAA,CAAI,CACJC,KAAAA,CAAI,CACL,CAAGnB,WACE,CAAEE,OAAAA,CAAM,CAAEkP,aAAAA,CAAY,CAAE9M,eAAAA,CAAc,CAAE,CAAGC,cAAUhC,GAErD6V,MAAQ,oBAAO,CAAE5D,IAAAA,EAAM,CAAC,CAAEC,KAAAA,EAAO,CAAC,CAAE,CAAAnG,UAAAvI,MAAA,IAAAuI,KAAA,IAAAA,SAAA,IAAAA,SAAA,IAAG,CAAC,EACtCwG,EAAU5S,EAAO6S,gBAAgB,GACvC,IAAK,IAAM7O,KAAU4O,EAAS,KACd5O,EACCA,CADfA,CAAAA,EAAOsO,GAAG,CAAG,CAACtO,OAAAA,CAAAA,EAAAA,EAAOsO,GAAG,GAAVtO,KAAAA,IAAAA,EAAAA,EAAc,GAAKsO,EACjCtO,EAAOuO,IAAI,CAAG,CAACvO,OAAAA,CAAAA,EAAAA,EAAOuO,IAAI,GAAXvO,KAAAA,IAAAA,EAAAA,EAAe,GAAKuO,CACrC,CACArD,GACF,EAEA,MACE,GAAAtK,EAAAI,GAAA,EAACF,MAAAA,CACCC,UAAU,qBACVuC,SAAU,EACV5B,IAAKA,EACLyQ,OAAQ,MAAOjS,IACbA,EAAMkS,cAAc,GAChB1Q,EAAIkB,OAAO,EACblB,EAAIkB,OAAO,CAACjC,KAAK,GAEnB,GAAM,CAAE0R,MAAAA,CAAK,CAAE,CAAGnS,EAAMoS,YAAY,CAC9BC,EAAS/N,MAAMgO,IAAI,CAACH,GAAO5C,MAAM,CACrC,GAAUgD,SAAAA,EAAKC,IAAI,EAAeD,EAAKvR,IAAI,CAACR,KAAK,CAAC,aAE9C8M,EAAY,MAAM5L,QAAQuN,GAAG,CACjCoD,EACG5C,GAAG,CAAC,MAAOgD,IACV,IAAMpC,EAAOoC,EAAiBC,SAAS,GACvC,GAAI,CAACrC,EACH,MAAM,MAAU,eAElB,IAAMtO,EAAS,IAAIC,WACbP,EAAW,MAAM,IAAIC,QAAgB,CAACC,EAASC,KACnDG,EAAO4Q,MAAM,CAAG,MAAO3S,IACjBA,EAAMC,MAAM,EAAI,iBAAOD,EAAMC,MAAM,CAACiC,MAAM,CAC5CP,EAAQ3B,EAAMC,MAAM,CAACiC,MAAM,EAE3BN,EAAO,MAAU,8BAErB,EACAG,EAAOI,aAAa,CAACkO,EACvB,GACA,OAAO5O,CACT,GACC8N,MAAM,CAACqD,SAGZ,OAAM7U,EAAUuP,EAClB,EACAuF,UAAW,MAAO7S,IAChB,IAAMC,EAASD,EAAMC,MAAM,CAC3B,GAAIA,UAAAA,EAAO6S,QAAQ,EAAgB7S,aAAAA,EAAO6S,QAAQ,EAGlD,GAAI9S,EAAM+S,OAAO,EAAI/S,EAAMgT,OAAO,CAChC,OAAQhT,EAAMoM,GAAG,EACf,IAAK,IACH,GAAIpM,EAAMiT,MAAM,CACd,OACK,GAAIjT,EAAMkT,QAAQ,CAAE,CACzBlT,EAAMkS,cAAc,GACpBnV,IACA,MACF,CACEiD,EAAMkS,cAAc,GACpBpV,IACA,MAEJ,KAAK,IACH,GAAIkD,EAAMiT,MAAM,EAAIjT,EAAMkT,QAAQ,CAChC,OAEAlT,EAAMkS,cAAc,GACpBnV,IACA,MAEN,CAEF,GAAIiD,CAAAA,EAAMiT,MAAM,GAAIjT,EAAM+S,OAAO,GAAI/S,EAAMgT,OAAO,GAAIhT,EAAMkT,QAAQ,CAGpE,OAAQlT,EAAMoM,GAAG,EACf,IAAK,YACL,IAAK,SACHpM,EAAMkS,cAAc,GACpB,MAAMrV,IACN,KAEF,KAAK,YACHmD,EAAMkS,cAAc,GACpB,MAAMF,MAAM,CAAE3D,KAAM,EAAG,GACvB,KAEF,KAAK,aACHrO,EAAMkS,cAAc,GACpB,MAAMF,MAAM,CAAE3D,KAAM,CAAE,GACtB,KAEF,KAAK,UACHrO,EAAMkS,cAAc,GACpB,MAAMF,MAAM,CAAE5D,IAAK,EAAG,GACtB,KAEF,KAAK,YACHpO,EAAMkS,cAAc,GACpB,MAAMF,MAAM,CAAE5D,IAAK,CAAE,GACrB,KAEF,KAAK,IACHpO,EAAMkS,cAAc,GACpB,MAAMtV,IACN,KAEF,KAAK,IACHoD,EAAMkS,cAAc,GACpB,MAAMxV,IACN,KAEF,KAAK,IACHsD,EAAMkS,cAAc,GACpB,MAAMvV,IACN,KAEF,KAAK,IACkB,aAAjBR,IACF6D,EAAMkS,cAAc,GACpBhU,EAAe,KAEjB,KAEF,KAAK,IACkB,UAAjB/B,IACF6D,EAAMkS,cAAc,GACpBhU,EAAe,IAGrB,EACF,WAECyL,GAGP,CChKe,SAASwJ,eACtB,GAAM,CACJrV,iBAAAA,CAAgB,CAChB0M,oBAAAA,CAAmB,CACnBH,YAAAA,CAAW,CACXF,aAAAA,CAAY,CACZD,WAAAA,CAAU,CACVF,mBAAAA,CAAkB,CAClBC,sBAAAA,CAAqB,CACtB,CAAGrO,WAEJ,MACE,GAAA8E,EAAAC,IAAA,EAAAD,EAAAa,QAAA,YACE,GAAAb,EAAAC,IAAA,EAACC,MAAAA,CAAIC,UAAU,yBACb,GAAAH,EAAAI,GAAA,EAACwB,SAAAA,CACCtB,KAAK,SACLoS,gBAAetV,UAAAA,EAA+B,GAAKkF,KAAAA,EACnDP,QAAS,KACP+H,EAAoB,QACtB,WACD,UAGAH,EACC,GAAA3J,EAAAI,GAAA,EAACwB,SAAAA,CACCtB,KAAK,SACLoS,gBAAetV,aAAAA,EAAkC,GAAKkF,KAAAA,EACtDP,QAAS,KACP+H,EAAoB,WACtB,WACD,aAGC,QAELL,EACC,GAAAzJ,EAAAC,IAAA,EAACC,MAAAA,CAAIC,UAAU,0BACb,GAAAH,EAAAI,GAAA,EAACwB,SAAAA,CACCtB,KAAK,SACLyB,QAAS,KACPwH,EAAsB,GAAW,CAACoJ,EAAQ,GAAKnJ,EACjD,WAEA,GAAAxJ,EAAAI,GAAA,EAACwS,EAAAA,GAAaA,CAAAA,CAAAA,KAEhB,GAAA5S,EAAAC,IAAA,EAACW,OAAAA,CAAKT,UAAU,sBACbmJ,EAAqB,EAAE,MAAIE,KAE9B,GAAAxJ,EAAAI,GAAA,EAACwB,SAAAA,CACCtB,KAAK,SACLyB,QAAS,KACPwH,EAAsB,GAAW,CAACoJ,EAAQ,GAAKnJ,EACjD,WAEA,GAAAxJ,EAAAI,GAAA,EAACyS,EAAAA,GAAcA,CAAAA,CAAAA,QAGjB,OAGV,eCzDA,GAAM,CAAEnK,oBAAmBoK,CAAA,CAAE,CAAGnK,MAC1B,CAAEoK,aAAAA,CAAY,CAAEC,YAAAA,CAAW,CAAEC,cAAAA,CAAa,CAAErK,UAASsK,CAAA,CAAE,CAC3DxK,EAEa,SAASyK,sBA4GLJ,EASAC,EAkBFA,EAtIf,GAAM,CACJI,cAAAA,CAAa,CACbC,iBAAAA,CAAgB,CAChBlK,kBAAAA,CAAiB,CACjBmK,qBAAAA,CAAoB,CACpBC,aAAAA,CAAY,CACZC,gBAAAA,CAAe,CACfC,oBAAAA,CAAmB,CACnBvK,YAAAA,CAAW,CACXwK,qBAAAA,CAAoB,CACpBC,iBAAAA,CAAgB,CAChBC,mBAAAA,CAAkB,CACnB,CAAGrN,aACE,CAAE6C,sBAAAA,CAAqB,CAAEC,yBAAAA,CAAwB,CAAE,CAAGnO,WACtD6N,EAAeH,CAAS,CAACM,EAAY,CACrCF,EAAcD,CAAY,CAACK,EAAsB,CACjD7N,EAAeD,CAAAA,EAAAA,EAAAA,MAAAA,EAAgC,MAErD,MACE,GAAA0E,EAAAC,IAAA,EAACC,MAAAA,CAAIC,UAAU,oBACb,GAAAH,EAAAC,IAAA,EAACC,MAAAA,CAAIC,UAAU,kBACb,GAAAH,EAAAI,GAAA,EAACM,QAAAA,CAAMC,QAAQ,uBAAc,UAC7B,GAAAX,EAAAC,IAAA,EAACyF,SAAAA,CACCnF,GAAG,cACHf,MAAO4T,EACP3S,SAAU,QASNsS,EACAC,EASgBC,EAlBlB,IAAMY,EAAavU,EAAMC,MAAM,CAACuU,eAAe,CAAC,EAAE,CAC/CD,UAAU,CACPE,EAAmBzU,EAAMC,MAAM,CAACC,KAAK,CACrC,CAAEwU,UAAAA,CAAS,CAAE,CAAGH,EAAWI,OAAO,CACxC,GAAI,CAACD,EACH,MAAM,MAAU,4BAElB,IAAME,EACJnB,CAAAA,OAAAA,CAAAA,EAAAA,CAAY,CAACgB,EAAiB,GAA9BhB,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAgCoB,QAAQ,CAACZ,EAAAA,GAAAA,CAAAA,OACzCP,CAAAA,EAAAA,CAAW,CAACe,EAAiB,GAA7Bf,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAA+BmB,QAAQ,CAACZ,EAAAA,GACxC,GAEFG,EAAqB,MACrBE,EAAmB,IACnBN,EAAqBU,GACrBX,EAAiBU,GACjB1K,EAAyB,GACpB6K,IACHV,EAAgBP,OAAAA,CAAAA,EAAAA,CAAa,CAACc,EAAiB,GAA/Bd,KAAAA,IAAAA,EAAAA,EAAmC,MACnDQ,EAAoB,WAGxB,YAEA,GAAAzT,EAAAC,IAAA,EAACmU,WAAAA,CAAS1T,MAAM,UAAU2T,kBAAgB,mBACxC,GAAArU,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,iBAAQ,uBACtB,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,iBAAQ,wBACtB,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,iBAAQ,uBACtB,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,mBAAU,yBACxB,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,mBAAU,0BACxB,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,mBAAU,yBACxB,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,oBAAW,oBACzB,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,oBAAW,qBACzB,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,oBAAW,uBAE3B,GAAAQ,EAAAC,IAAA,EAACmU,WAAAA,CAAS1T,MAAM,UAAU2T,kBAAgB,mBACxC,GAAArU,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,gBAAO,kBACrB,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,oBAAW,aACzB,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,4BAAmB,qBACjC,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,kBAAS,gBACvB,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,yBAAgB,kBAC9B,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,kBAAS,YACvB,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,sBAAa,eAC3B,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,eAAM,kBACpB,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,mBAAU,qBACxB,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,kBAAS,WACvB,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,kBAAS,gBACvB,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,qBAAY,uBAE5B,GAAAQ,EAAAC,IAAA,EAACmU,WAAAA,CAAS1T,MAAM,WAAW2T,kBAAgB,oBACzC,GAAArU,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,8BAAqB,uBACnC,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,6BAAoB,yBAClC,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,gCAAuB,8BAGrC,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,6BAAoB,yBAClC,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,8BAAqB,wBACnC,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,4BAAmB,qCAIvC,GAAAQ,EAAAC,IAAA,EAACC,MAAAA,CAAIC,UAAU,kBACb,GAAAH,EAAAI,GAAA,EAACM,QAAAA,CAAMC,QAAQ,sBAAa,SAC5B,GAAAX,EAAAC,IAAA,EAACC,MAAAA,CAAIC,UAAU,oBACb,GAAAH,EAAAC,IAAA,EAACyF,SAAAA,CACCnF,GAAG,aACHf,MAAO+T,MAAAA,EAAAA,EAAgB,GACvB9S,SAAU,QAIJoT,EAHJ,IAAMA,EAAavU,EAAMC,MAAM,CAACuU,eAAe,CAAC,EAAE,CAC/CD,UAAU,CACPS,EAAWhV,EAAMC,MAAM,CAACC,KAAK,EAC/BqU,OAAAA,CAAAA,EAAAA,EAAWI,OAAO,CAACK,QAAQ,GAA3BT,KAAAA,IAAAA,EAAAA,EAA+B,KAEnCL,EAAgBlU,EAAMC,MAAM,CAACC,KAAK,EAAI,MACtCiU,EAAoBa,EACtB,YAEA,GAAAtU,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,YAAG,mBAChB2J,WAAAA,EACC,GAAAnJ,EAAAC,IAAA,EAAAD,EAAAa,QAAA,YACE,GAAAb,EAAAI,GAAA,EAACgU,WAAAA,CAAS1T,MAAM,gBAAgB6T,iBAAe,mBACnB,OAAzBxB,CAAAA,EAAAA,CAAY,CAAC7J,EAAY,GAAzB6J,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAA2BhE,GAAG,CAAC,GAE5B,GAAA/O,EAAAI,GAAA,EAACwF,SAAAA,CAAkBpG,MAAOZ,WACvBA,GADUA,MAMnB,GAAAoB,EAAAI,GAAA,EAACgU,WAAAA,CAAS1T,MAAM,eAAe6T,iBAAe,kBACnB,OAAxBvB,CAAAA,EAAAA,CAAW,CAAC9J,EAAY,GAAxB8J,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAA0BjE,GAAG,CAAC,GAE3B,GAAA/O,EAAAI,GAAA,EAACwF,SAAAA,CAAkBpG,MAAOZ,WACvBA,GADUA,SAOnB,KACHuK,WAAAA,GACDA,YAAAA,EACE,GAAAnJ,EAAAC,IAAA,EAAAD,EAAAa,QAAA,YACGoS,CAAa,CAAC/J,EAAY,CACzB,GAAAlJ,EAAAI,GAAA,EAACgU,WAAAA,CAAS1T,MAAM,gBAAgB6T,iBAAe,mBAC7C,GAAAvU,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAOyT,CAAa,CAAC/J,EAAY,UAAE,cAE3C,KACH8J,CAAAA,OAAAA,CAAAA,EAAAA,CAAW,CAAC9J,EAAY,GAAxB8J,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAA0B/T,MAAM,EAC/B,GAAAe,EAAAI,GAAA,EAACgU,WAAAA,CAAS1T,MAAM,eAAe6T,iBAAe,kBAC3CvB,CAAW,CAAC9J,EAAY,CAAC6F,GAAG,CAAC,GAC5B,GAAA/O,EAAAI,GAAA,EAACwF,SAAAA,CAAkBpG,MAAOZ,WACvBA,GADUA,MAKf,QAEJ,QAEN,GAAAoB,EAAAI,GAAA,EAACwB,SAAAA,CACCtB,KAAK,SACLuB,aAAW,YACXC,MAAM,cACNC,QAAS,KACHxG,EAAayG,OAAO,EACtBzG,EAAayG,OAAO,CAACC,KAAK,EAE9B,WAEA,GAAAjC,EAAAI,GAAA,EAACoU,EAAAA,GAAmBA,CAAAA,CAACrS,MAAO,CAAEC,SAAU,EAAG,MAE7C,GAAApC,EAAAI,GAAA,EAACC,QAAAA,CACCS,IAAKvF,EACLkF,SAAU,MAAOnB,QAeZ0J,EAdH,IAAMjI,EAAW,MAAM,IAAIC,QAAgB,CAACC,EAASC,SACjC5B,EAAlB,IAAM6B,EAAAA,OAAY7B,CAAAA,EAAAA,EAAMC,MAAM,CAAC6B,KAAK,GAAlB9B,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,CAAoB,CAAC,EAAE,CACzC,GAAI6B,EAAW,CACb,IAAME,EAAS,IAAIC,WACnBD,EAAOE,gBAAgB,CAAC,OAAQ,QACtBjC,EAAR2B,EAAAA,OAAQ3B,CAAAA,EAAAA,EAAMC,MAAM,GAAZD,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAckC,MAAM,CAC9B,GACAH,EAAOI,aAAa,CAACN,EACvB,MACED,EAAO,MAAU,2BAErB,GACAsS,EAAgB,MAChBG,EAAiB,CACf,CAAC3K,OAAAA,CAAAA,EAAAA,EAAY2G,IAAI,GAAhB3G,KAAAA,IAAAA,EAAAA,EAAoBA,EAAYpK,IAAI,CAAC,CAAE,CAACmC,EAAS,EAEtD,EACAT,KAAK,OACLoB,OAAO,kBACPC,OAAM,aAMlB,CC/LA,GAAM,CAAE+G,oBAAmB+L,CAAA,CAAE,CAAG9L,MAC1B,CAAEC,UAAS8L,CAAA,CAAEzB,cAAa0B,CAAA,CAAE,CAAGjM,EAC/BkM,EAAgB,0CAEtB,SAASC,cAAcnF,CAAqB,CAAElG,CAAkB,EAC9D,GAAIA,EAAa,EACf,MAAO,CAACkG,EAAc,CAExB,IAAM5P,EAAQ4P,EAAc5P,KAAK,CAAC,gBAClC,GAAIA,EAAO,CACT,IAAM8P,EAAW9P,CAAK,CAAC,EAAE,CACnBkP,EAAS,MAAUxF,GAAYyF,IAAI,CAAC,MAC1C,OAAOD,EAAOD,GAAG,CAAC,CAACG,EAAGlE,IAAM,GAAcA,MAAAA,CAAX4E,GAAyCpL,MAAA,CAA9BwG,EAAE6E,QAAQ,GAAGC,QAAQ,CAAC,EAAG,MACrE,CACE,MAAM,MAAU,sCAEpB,CAEO,SAASgF,iBAAiBhM,CAYhC,KAZgC,CAC/BV,SAAAA,CAAQ,CACRc,YAAAA,CAAW,CACXC,kBAAAA,CAAiB,CACjBoK,aAAAA,CAAY,CACZwB,iBAAAA,CAAgB,CAOjB,CAZgCjM,EAazBC,EAAeH,CAAS,CAACM,EAAY,CAC3C,OAAQC,GACN,IAAK,SACH,OAAQ4L,GACN,IAAK,UACH,MAAO,CACLC,KAAM,CAAE,GAAuBzB,MAAAA,CAArBnL,EAAS,cAA4Bc,MAAAA,CAAhBqK,EAAa,KAAe/O,MAAA,CAAZ0E,EAAY,QAAM,CAErE,KAAK,SACH,MAAO,CACL8L,KAAM,CAAE,GAAkBzB,MAAAA,CAAhBqB,EAAa,KAAmB1L,MAAAA,CAAhBqK,EAAa,KAAe/O,MAAA,CAAZ0E,EAAY,QAAM,CAElE,CACA,KACF,KAAK,SACL,IAAK,UACH,OAAOH,EAAakM,MAAM,CACxB,CACEC,EACAlM,KAEA,GAAIA,EAAa,KACIA,EAICA,EAEVA,EAMQA,EAEVA,EAdR,IAAMQ,EAAaR,OAAAA,CAAAA,EAAAA,EAAYQ,UAAU,GAAtBR,KAAAA,IAAAA,EAAAA,EAA0B,EAC7C,OAAQ+L,GACN,IAAK,UAC4B,KAA3B/L,EAAYmM,UAAU,EACxBD,CAAAA,CAAa,CAAClM,OAAAA,CAAAA,EAAAA,EAAY2G,IAAI,GAAhB3G,KAAAA,IAAAA,EAAAA,EAAoBA,EAAYpK,IAAI,CAAC,CACjDiW,cACE7L,OAAAA,CAAAA,EAAAA,EAAY2G,IAAI,GAAhB3G,KAAAA,IAAAA,EAAAA,EAAoBA,EAAYpK,IAAI,CACpC4K,GACAuF,GAAG,CAAC,GAAU,GAAwBnQ,MAAAA,CAArBwJ,EAAS,cAAiB5D,MAAA,CAAL5F,EAAK,UAEjD,KACF,KAAK,SACHsW,CAAa,CAAClM,OAAAA,CAAAA,EAAAA,EAAY2G,IAAI,GAAhB3G,KAAAA,IAAAA,EAAAA,EAAoBA,EAAYpK,IAAI,CAAC,CACjDiW,cACE7L,OAAAA,CAAAA,EAAAA,EAAY2G,IAAI,GAAhB3G,KAAAA,IAAAA,EAAAA,EAAoBA,EAAYpK,IAAI,CACpC4K,GACAuF,GAAG,CACH,GAAU,GAAmBwE,MAAAA,CAAhBqB,EAAa,KAAmBhW,MAAAA,CAAhB2U,EAAa,KAAQ/O,MAAA,CAAL5F,EAAK,QAG1D,CACF,CACA,OAAOsW,CACT,EACA,CAAC,EAEP,CACA,MAAO,CAAC,CACV,CAwCe,SAASE,gBAAgBtM,CAAqC,KAArC,CAAEG,SAAAA,CAAQ,CAA2B,CAArCH,EAChC,CAACsK,EAAeC,EAAiB,CAAGzV,CAAAA,EAAAA,EAAAA,QAAAA,EAAiB,SACrD,CAACuL,EAAmBmK,EAAqB,CAAG1V,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,UACrD,CAAC2V,EAAcC,EAAgB,CAAG5V,CAAAA,EAAAA,EAAAA,QAAAA,EACtC,eAEI,CAACmX,EAAkBtB,EAAoB,CAAG7V,CAAAA,EAAAA,EAAAA,QAAAA,EAC9C,WAEI,CAACyX,EAAmB3B,EAAqB,CAAG9V,CAAAA,EAAAA,EAAAA,QAAAA,EAChD,MAEI,CAAC0X,EAAiB1B,EAAmB,CAAGhW,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IACjD,CAAEwK,SAAAA,CAAQ,CAAE,CAAGF,cACfgB,EAAckK,YAAAA,EAA8B,QAAUA,EACtDmC,EA9CK,GAAerM,MAAAA,CA+CxBd,EA/CqB,KACjBiN,MAAAA,CA+CJnM,GA9CG1E,MAAA,CADC6Q,EAAoB,QAAU,GAC/B,QAkDC,CAACH,EAAevB,EAAiB,CAAG/V,CAAAA,EAAAA,EAAAA,QAAAA,EACxC,IACEkX,iBAAiB,CACf1M,SAAAA,EACAc,YAAAA,EACAC,kBAAAA,EACAoK,aAAAA,EACAwB,iBAAAA,CACF,IAGES,EAAuBpO,CAAAA,EAAAA,EAAAA,OAAAA,EAC3B,IACE0N,iBAAiB,CACf1M,SAAAA,EACAc,YAAAA,EACAC,kBAAAA,EACAoK,aAAcN,CAAa,CAAC/J,EAAY,CACxC6L,iBAAkB,SACpB,GACF,CAAC7L,EAAad,EAAUe,EAAkB,EAGtCrO,EAAUsM,CAAAA,EAAAA,EAAAA,OAAAA,EAAQ,IACf,EACLgM,cAAAA,EACAC,iBAAAA,EACAlK,kBAAAA,EACAmK,qBAAAA,EACApK,YAAAA,EACAqM,iBAAAA,EACAD,gBAAAA,EACA1B,mBAAAA,EACAL,aAAAA,EACAC,gBAAAA,EACAuB,iBAAAA,EACAtB,oBAAAA,EACA4B,kBAAAA,EACA3B,qBAAAA,EACAwB,cAAAA,EACAvB,iBAAAA,EACA6B,qBAAAA,CACF,GACC,CACDpC,EACAC,EACAlK,EACAmK,EACApK,EACAqM,EACAD,EACA1B,EACAL,EACAC,EACAuB,EACAtB,EACA4B,EACA3B,EACAwB,EACAvB,EACA6B,EACD,EAsBD,MApBA/V,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACJ8T,GACFI,EACEmB,iBAAiB,CACf1M,SAAAA,EACAc,YAAAA,EACAC,kBAAAA,EACAoK,aAAAA,EACAwB,iBAAAA,CACF,GAGN,EAAG,CACD3M,EACAc,EACAC,EACAoK,EACAwB,EACD,EAGC,GAAA/U,EAAAI,GAAA,EAACkG,EAAeuK,QAAQ,EAACrR,MAAO1E,WAC7BmO,GAGP,wBChOA,IAAMwM,EAAqB/a,EAAAA,aAAmB,CAC5C,MAMa,SAASgb,iBACtB,IAAM5a,EAAUC,CAAAA,EAAAA,EAAAA,UAAAA,EAAW0a,GAC3B,GAAI,CAAC3a,EACH,MAAM,MAAU,kCAElB,OAAOA,CACT,CAVA2a,EAAmB9a,WAAW,CAAG,qBCkBjC,IAAMgb,EAAcjb,EAAAA,aAAmB,CAA0B,MAKlD,SAASkb,UACtB,IAAM9a,EAAUC,CAAAA,EAAAA,EAAAA,UAAAA,EAAW4a,GAC3B,GAAI,CAAC7a,EACH,MAAM,MAAU,2BAElB,OAAOA,CACT,CAVA6a,EAAYhb,WAAW,CAAG,2BCA1B,SAASkb,WAAW/M,CAUnB,KAVmB,CAClBgN,SAAAA,CAAQ,CACR9M,YAAAA,CAAW,CACX+M,YAAAA,CAAW,CACXhV,SAAAA,CAAQ,CAMT,CAVmB+H,EAWZ,CAAEkN,YAAAA,CAAW,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,CAAAA,IAClB,CAAE7N,SAAAA,CAAQ,CAAE,CAAGF,cAErBzI,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACR,IACIyW,EADAC,EAAQ,GAGNC,cAAgB,UACpB,GAAI,CAACpN,GAAeA,EAAYrH,MAAM,CAChB,6BAAhBoU,IAGFD,EAASO,YAAY,CAAC,SACtBP,EAASQ,oBAAoB,CAACC,kBAAkB,CAAC,CAAC,EAAG,EAAG,EAAG,EAAE,OAE1D,CACL,GAAM,CACJC,UAAAA,CAAS,CACTC,YAAAA,CAAW,CACXC,gBAAAA,CAAe,CACfC,eAAAA,CAAc,CACdC,gBAAAA,EAAkB,EAAK,CACvBhN,eAAAA,EAAiB,CAAC,CAClBC,gBAAAA,EAAkB,CAAC,CACnBL,WAAAA,EAAa,CAAC,CACdqN,aAAAA,CAAY,CACb,CAAG7N,EACA8N,EACF/V,MAAAA,EAAAA,EAAY,MAAUyI,GAAYyF,IAAI,CAAC,GAAYzK,MAAA,CAAT4D,EAAS,eACrD,OAAQ2N,GACN,IAAK,mBACCW,GACFZ,EAASQ,oBAAoB,CAACC,kBAAkB,CAACG,GAE/CF,GACFV,EAASO,YAAY,CAACG,GAEpBC,GACFX,EAASiB,cAAc,CAACN,GAEtBE,GACFb,EAASkB,iBAAiB,CAACL,GAE7B,KACF,KAAK,2BACHb,EAASQ,oBAAoB,CAACW,iBAAiB,CAACrN,GAChDkM,EAASQ,oBAAoB,CAACY,kBAAkB,CAACrN,GAC1B,IAAnBD,GAAwBC,IAAAA,GAC1BiN,CAAAA,EAAc,MAAUtN,GAAYyF,IAAI,CAAC,GAAYzK,MAAA,CAAT4D,EAAS,eAE3D,CACA,IAAM+O,EAAW,MAAMnW,QAAQuN,GAAG,CAChCuI,EAAY/H,GAAG,CAAC,GAAgBiH,EAAYoB,aAAa,CAACC,KAE5D,GAAI,CAAClB,EAAO,CACV,IAAIhH,EAAa,EACbmI,EAAgB,EACdC,MAA8B,QACdV,EAApB,IAAMW,EAAcX,OAAAA,CAAAA,EAAAA,MAAAA,EAAAA,KAAAA,EAAAA,CAAc,CAAC1H,EAAW,GAA1B0H,KAAAA,IAAAA,EAAAA,EAA8B,EAC5CY,EAAUN,CAAQ,CAAChI,EAAW,CACpC2G,EAASQ,oBAAoB,CAACP,EAAY,CAAC2B,UAAU,CAACD,GAClC,qBAAhB1B,GAAsCa,GACxCd,EAASc,eAAe,CAACc,UAAU,CAACD,GAEtCH,GAAiB,EACb9N,EAAa,IACX8N,GAAiBE,IACnBrI,EAAa,CAACA,EAAa,GAAK3F,EAChC8N,EAAgB,GAElBpB,EAAiByB,sBAAsBJ,OAE3C,EACArB,EAAiByB,sBAAsBJ,MACzC,CACF,CACF,EAIA,OAFAnB,gBAEO,KACLD,EAAQ,GACRyB,qBAAqB1B,EACvB,CACF,EAAG,CAAC9N,EAAU4N,EAAaF,EAAU9M,EAAa+M,EAAahV,EAAS,CAC1E,CAOe,SAAS8W,SAAS/O,CAAwC,MAGvDE,EAAd8O,KAH6B,CAAEhC,SAAAA,CAAQ,CAAE9M,YAAAA,CAAW,CAAiB,CAAxCF,EACzB,CAAEgP,cAAAA,CAAa,CAAE,CAAGlC,UACpB,CAAErG,cAAAA,CAAa,CAAEE,iBAAAA,CAAgB,CAAE,CACvCqI,OAAAA,CAAAA,EAAAA,EAAc9O,OAAAA,CAAAA,EAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAa2G,IAAI,GAAjB3G,KAAAA,IAAAA,EAAAA,EAAqB8M,EAASlX,IAAI,IAAhDkZ,KAAAA,IAAAA,EAAAA,EAAqD,CAAC,EAexD,OAbAjC,WAAW,CACTC,SAAAA,EACA9M,YAAAA,EACA+M,YAAa,mBACbhV,SAAUwO,CACZ,GACAsG,WAAW,CACTC,SAAAA,EACA9M,YAAAA,EACA+M,YAAa,2BACbhV,SAAU0O,CACZ,GAEO,IACT,CCvJA,GAAM,CAAE/G,oBAAmBqP,CAAA,CAAE,CAAGpP,MAE1B,CAAEC,UAASoP,CAAA,CAAE,CAAGtP,EAEP,SAASuP,YACtB,GAAM,CAAE/O,YAAAA,CAAW,CAAE,CAAG3C,aAClB,CAAE2R,MAAAA,CAAK,CAAE,CAAGjC,CAAAA,EAAAA,EAAAA,CAAAA,IACZlN,EAAqCH,CAAS,CAACM,EAAY,CAEjE,MACE,GAAAlJ,EAAAI,GAAA,EAAAJ,EAAAa,QAAA,WACGqX,EAAMtP,SAAS,CAACmG,GAAG,CAAC,CAAC+G,EAAU9K,SAE5BjC,EADF,IAAMC,EACJD,OAAAA,CAAAA,EAAAA,EAAaoP,IAAI,CAAC,GAAiBnP,EAAY2J,KAAK,GAAK3H,EAAAA,GAAzDjC,KAAAA,IAAAA,EAAAA,EACAA,CAAY,CAACiC,EAAE,CACjB,MACE,GAAAhL,EAAAI,GAAA,EAACyX,SAAQA,CAEP/B,SAAUA,EACV9M,YAAaA,GAFR8M,EAASlX,IAAI,CAKxB,IAGN,CCxBA,IAAMwZ,EAAcC,IAAQ,IAAMrX,QAAAuN,GAAA,EAAA/T,EAAAgU,CAAA,MAAAhU,EAAAgU,CAAA,MAAAhU,EAAAgU,CAAA,QAAAC,IAAA,CAAAjU,EAAAkU,IAAA,CAAAlU,EAAA,OAAuB,wCAAI8d,IAAK,KAE5D,CAAE5P,oBAAmB6P,CAAA,CAAE,CAAG5P,MAE1B,CAAE6P,gBAAAA,CAAe,CAAE,CAAG9P,EAEb,SAAS+P,oBAoBJD,EACDA,EApBjB,GAAM,CACJpF,cAAAA,CAAa,CACbmC,iBAAAA,CAAgB,CAChBpM,kBAAAA,CAAiB,CACjBkM,kBAAAA,CAAiB,CACjBC,gBAAAA,CAAe,CAChB,CAAG/O,aACE,CAAEmS,oBAAAA,CAAmB,CAAEC,gBAAAA,CAAe,CAAEC,SAAAA,CAAQ,CAAE,CAAGlD,iBAE3D,MACE,GAAA1V,EAAAI,GAAA,EAACgY,EAAAA,CACCS,SAAUtD,EACVmD,oBAAqBA,EACrBC,gBAAiBA,EACjBG,cAAezD,EACfC,gBAAiBA,EACjByD,YACE5P,WAAAA,EAAiC,oBAAsB7G,KAAAA,EAEzD0W,aAAY,OAAER,CAAAA,EAAAA,CAAe,CAACpF,EAAc,GAA9BoF,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAgCjZ,MAAM,CACpD0Z,YAAW,OAAET,CAAAA,EAAAA,CAAe,CAACpF,EAAc,GAA9BoF,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAgCU,GAAG,CAChDN,SAAUA,WAEV,GAAA5Y,EAAAI,GAAA,EAAC6X,UAASA,CAAAA,IAGhB,CCrCe,SAASkB,sBACtB,GAAM,CAAEC,oBAAAA,CAAmB,CAAEC,uBAAAA,CAAsB,CAAE,CAAG3D,iBAExD,MACE,GAAA1V,EAAAC,IAAA,EAAAD,EAAAa,QAAA,YACE,GAAAb,EAAAI,GAAA,EAACM,QAAAA,CAAMC,QAAQ,wBAAe,gBAC9B,GAAAX,EAAAC,IAAA,EAACyF,SAAAA,CACCnF,GAAG,eACHf,MAAO4Z,MAAAA,EAAAA,EAAuB,GAC9B3Y,SAAU,IACR4Y,EAAuB/Z,EAAMC,MAAM,CAACC,KAAK,EAAI,KAC/C,YAEA,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,YAAG,YACjB,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,mCAA0B,kBACxC,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,mCAA0B,qBACxC,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,8CAAqC,yBAGnD,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,yBAAgB,WAC9B,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,mCAA0B,kBACxC,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,uDAA8C,6BAG5D,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,yCAAgC,gBAC9C,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,8BAAqB,gBACnC,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,qCAA4B,mBAC1C,GAAAQ,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,mCAA0B,0BAIhD,CC9Be,SAAS8Z,sBACtB,GAAM,CAAEV,SAAAA,CAAQ,CAAEW,YAAAA,CAAW,CAAE,CAAG7D,iBAElC,MACE,GAAA1V,EAAAC,IAAA,EAAAD,EAAAa,QAAA,YACE,GAAAb,EAAAI,GAAA,EAACM,QAAAA,CAAMC,QAAQ,uBACb,GAAAX,EAAAI,GAAA,EAACoZ,EAAAA,GAAoBA,CAAAA,CAAChU,KAAM,OAE9B,GAAAxF,EAAAI,GAAA,EAACC,QAAAA,CACCwB,aAAW,WACXtB,GAAG,cACHD,KAAK,QACLmD,IAAK,GACLC,IAAK,IACL+V,KAAM,GACNja,MAAOoZ,EACPnY,SAAU,IACR8Y,EAAYG,WAAWpa,EAAMC,MAAM,CAACC,KAAK,EAC3C,MAIR,CCpBA,GAAM,CAAEkJ,oBAAmBiR,CAAA,CAAE,CAAGhR,MAC1B,CAAEiR,WAAAA,CAAU,CAAEC,gBAAAA,CAAe,CAAEC,wBAAAA,CAAuB,CAAE,CAC5DpR,EAEa,SAASqR,oBACtB,GAAM,CACJ7Q,YAAAA,CAAW,CACXC,kBAAAA,CAAiB,CACjBkM,kBAAAA,CAAiB,CACjB3B,qBAAAA,CAAoB,CACpB4B,gBAAAA,CAAe,CACf1B,mBAAAA,CAAkB,CACnB,CAAGrN,aAEEyT,EAAgB5S,CAAAA,EAAAA,EAAAA,OAAAA,EACpB,SAEMwS,QAFA,IACAzQ,WAAAA,EAAiCyQ,EAAWK,MAAM,CAAG,EAAE,IACvDL,OAAAA,CAAAA,EAAAA,CAAU,CAAC1Q,EAAY,GAAvB0Q,KAAAA,IAAAA,EAAAA,EAA2B,EAAE,CAClC,EACD,CAAC1Q,EAAaC,EAAkB,EAGlC,MACE,GAAAnJ,EAAAC,IAAA,EAAAD,EAAAa,QAAA,YACE,GAAAb,EAAAI,GAAA,EAACM,QAAAA,UAAM,cACP,GAAAV,EAAAC,IAAA,EAACC,MAAAA,CAAIC,UAAU,oBACb,GAAAH,EAAAC,IAAA,EAACyF,SAAAA,CACClG,MAAO6V,MAAAA,EAAAA,EAAqB,GAC5B5U,SAAU,IACRiT,EAAqBpU,EAAMC,MAAM,CAACC,KAAK,EAAI,MAC3CoU,EAAmB,GACrB,YAEA,GAAA5T,EAAAI,GAAA,EAACwF,SAAAA,CAAOpG,MAAM,YAAG,SAChBwa,EAAcjL,GAAG,CAAC,QAEf+K,EAAAA,EADF,IAAMpZ,EACJoZ,OAAAA,CAAAA,EAAAA,OAAAA,CAAAA,EAAAA,CAAuB,CAAC5Q,EAAY,GAApC4Q,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,CAAsC,CAAChB,EAAc,GAArDgB,KAAAA,IAAAA,EAAAA,EACAD,CAAe,CAACf,EAAc,CAChC,MACE,GAAA9Y,EAAAI,GAAA,EAACwF,SAAAA,CAA2BpG,MAAOsZ,WAChCpY,MAAAA,EAAAA,EAASoY,GADCA,EAIjB,MAEF,GAAA9Y,EAAAI,GAAA,EAACwB,SAAAA,CACCtB,KAAK,SACL0E,SAAU,CAACqQ,EACXtT,QAAS,KACP6R,EAAmB,GAAqB,CAAC0B,EAC3C,WAECA,GAAmB,CAACD,EAAoB,GAAArV,EAAAI,GAAA,EAAC8Z,EAAAA,GAAQA,CAAAA,CAAAA,GAAM,GAAAla,EAAAI,GAAA,EAAC+Z,EAAAA,GAASA,CAAAA,CAAAA,UAK5E,CC1De,SAASC,oBAAoBtR,CAI3C,KAJ2C,CAC1CG,SAAAA,CAAQ,CAGT,CAJ2CH,EAKpC,CAACsQ,EAAqBC,EAAuB,CAAGzb,CAAAA,EAAAA,EAAAA,QAAAA,EACpD,MAEI,CAAC+a,EAAiB0B,EAAmB,CAAGzc,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IACjD,CAACgb,EAAUW,EAAY,CAAG3b,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,GACnC,CAAEwK,SAAAA,CAAQ,CAAE,CAAGF,cAEfpN,EAAUsM,CAAAA,EAAAA,EAAAA,OAAAA,EAAQ,KACtB,IAAMsR,EAAsBU,EACxB,GAAeA,MAAAA,CAAZhR,EAAS,KAAuB5D,MAAA,CAApB4U,GACf,KACJ,MAAO,CACLA,oBAAAA,EACAC,uBAAAA,EACAV,gBAAAA,EACA0B,mBAAAA,EACAzB,SAAAA,EACAW,YAAAA,EACAb,oBAAAA,CACF,CACF,EAAG,CAACtQ,EAAUgR,EAAqBT,EAAiBC,EAAS,EAE7D,MACE,GAAA5Y,EAAAI,GAAA,EAACqV,EAAmB5E,QAAQ,EAACrR,MAAO1E,WACjCmO,GAGP,CCjCe,SAASqR,aAAaxR,CAAqC,KAArC,CAAEG,SAAAA,CAAQ,CAA2B,CAArCH,EAC7B,CAACyR,EAAeC,EAAiB,CAAG5c,CAAAA,EAAAA,EAAAA,QAAAA,EAAwB,CAAC,GAE7D6c,EAAUrT,CAAAA,EAAAA,EAAAA,OAAAA,EACd,IAAO,EACLsT,cAAcC,CAAoB,CAAEC,CAAsB,EACxDJ,EAAiB,GACR,EACL,GAAGD,CAAa,CAChB,CAACI,EAAa,CAAEC,CAClB,GAEJ,EACAC,iBACEF,CAAoB,CACpBpL,CAAqB,CACrBJ,CAAkB,EAElBqL,EAAiB,QAEbD,EAAAA,EADF,IAAMO,EAAmBlX,MAAMgO,IAAI,CACjC2I,OAAAA,CAAAA,EAAAA,OAAAA,CAAAA,EAAAA,CAAa,CAACI,EAAa,GAA3BJ,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAA6BhL,aAAa,GAA1CgL,KAAAA,IAAAA,EAAAA,EAA8C,EAAE,EAGlD,OADAO,EAAiBC,MAAM,CAAC5L,EAAY,EAAGI,GAChC,CACL,GAAGgL,CAAa,CAChB,CAACI,EAAa,CAAE,CACd,GAAGJ,CAAa,CAACI,EAAa,CAC9BpL,cAAeuL,CACjB,CACF,CACF,EACF,EACAE,oBACEL,CAAoB,CACpBlL,CAAwB,CACxBN,CAAkB,EAElBqL,EAAiB,QAEbD,EAAAA,EADF,IAAMU,EAAsBrX,MAAMgO,IAAI,CACpC2I,OAAAA,CAAAA,EAAAA,OAAAA,CAAAA,EAAAA,CAAa,CAACI,EAAa,GAA3BJ,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAA6B9K,gBAAgB,GAA7C8K,KAAAA,IAAAA,EAAAA,EAAiD,EAAE,EAGrD,OADAU,EAAoBF,MAAM,CAAC5L,EAAY,EAAGM,GACnC,CACL,GAAG8K,CAAa,CAChB,CAACI,EAAa,CAAE,CACd,GAAGJ,CAAa,CAACI,EAAa,CAC9BlL,iBAAkBwL,CACpB,CACF,CACF,EACF,CACF,GACA,EAAE,EAGEngB,EAAUsM,CAAAA,EAAAA,EAAAA,OAAAA,EAAQ,IACf,EACLmT,cAAAA,EACAzC,cAAAA,GACSyC,CAAa,CAACI,EAAa,CAEpCO,iBAAiBP,CAAoB,CAAExL,CAAkB,MAChDoL,EAAP,cAAOA,CAAAA,EAAAA,CAAa,CAACI,EAAa,CAACpL,aAAa,GAAzCgL,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,CAA2C,CAACpL,EAAW,EAEhEgM,oBAAoBR,CAAoB,CAAExL,CAAkB,MACnDoL,EAAP,cAAOA,CAAAA,EAAAA,CAAa,CAACI,EAAa,CAAClL,gBAAgB,GAA5C8K,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,CAA8C,CAACpL,EAAW,EAEnE,GAAGsL,CAAO,CACZ,EACC,CAACF,EAAeE,EAAQ,EAE3B,MACE,GAAAza,EAAAI,GAAA,EAACuV,EAAY9E,QAAQ,EAACrR,MAAO1E,WAAUmO,GAE3C,CCxEA,GAAM,CAAEP,oBAAmB0S,CAAA,CAAE,CAAGzS,MAE1B,CAAEC,UAASyS,CAAA,CAAE,CAAG3S,EAEP,SAAS4S,mBACtB,GAAM,CAAEpS,YAAAA,CAAW,CAAE,CAAG3C,aAClB,CAAE6C,sBAAAA,CAAqB,CAAEC,yBAAAA,CAAwB,CAAE,CAAGnO,WACtD6N,EAAqCH,CAAS,CAACM,EAAY,CAEjE,MACE,GAAAlJ,EAAAI,GAAA,EAACsF,SAAAA,CACClG,MAAO4J,EACP3I,SAAU,IACR4I,EAAyBkS,SAASjc,EAAMC,MAAM,CAACC,KAAK,CAAE,IACxD,WAECuJ,EAAagG,GAAG,CAAC,CAAC/F,EAAagC,SAKzBhC,SAJLA,GACA,CAACA,EAAYrH,MAAM,EACnBqH,CAA2B,IAA3BA,EAAY8F,UAAU,CACpB,GAAA9O,EAAAI,GAAA,EAACwF,SAAAA,CAA8BpG,MAAOwL,WACnChC,OAAAA,CAAAA,EAAAA,EAAYtI,KAAK,GAAjBsI,KAAAA,IAAAA,EAAAA,EAAqBA,EAAYpK,IAAI,EAD3BoK,EAAYpK,IAAI,EAG3B,IAAG,IAIf,CCDe,SAAS4c,OAAO1S,CAMjB,KANiB,CAC7BjO,SAAAA,CAAQ,CACR4F,SAAAA,CAAQ,CACRgb,aAAAA,CAAY,CACZ/R,YAAAA,CAAW,CACXgS,mBAAAA,EAAqB,EAAK,CACd,CANiB5S,EAOvB6S,EAAmBrgB,CAAAA,EAAAA,EAAAA,MAAAA,EAAiC,MACpD,CAACF,EAAQwgB,EAAU,CAAGhe,CAAAA,EAAAA,EAAAA,QAAAA,EAA+B,MACrD,CAAEnC,aAAAA,CAAY,CAAE,CAAGP,WACnB,CAAEiN,cAAAA,CAAa,CAAE,CAAGD,cACpB,CAAE+I,eAAAA,CAAc,CAAEE,iBAAAA,CAAgB,CAAE,CAAG1T,gBACvC,CAACF,EAAeC,EAAe,CAAGI,CAAAA,EAAAA,EAAAA,QAAAA,EAAS8d,GAC3CG,EAAkBvgB,CAAAA,EAAAA,EAAAA,MAAAA,IAClBwgB,EAAexgB,CAAAA,EAAAA,EAAAA,MAAAA,EAAO,IACtB,CAACygB,EAAaC,EAAe,CAAGpe,CAAAA,EAAAA,EAAAA,QAAAA,EAAyB,IAAM,EAAE,EACjE,CAACqe,EAAaC,EAAe,CAAGte,CAAAA,EAAAA,EAAAA,QAAAA,EAAyB,IAAM,EAAE,EAEjEtB,EAAUyf,EAAY9c,MAAM,CAAG,EAC/B1C,EAAU0f,EAAYhd,MAAM,CAAG,EAE/Bkd,EAAwC/Q,CAAAA,EAAAA,EAAAA,WAAAA,EAAY,IACxD,IAAM+Q,EAAeN,EAAgB7Z,OAAO,CACxCma,GACFA,EAAa/gB,EAEjB,EAAG,EAAE,EAECgB,EAAOgP,CAAAA,EAAAA,EAAAA,WAAAA,EAAY,UACvB,GAAKhQ,GAGD2gB,EAAY9c,MAAM,CAAG,EAAG,CAC1B,GAAM,CAACmd,EAAcC,EAAa,CAAGN,EAAYnR,KAAK,CAAC,GACvDkR,CAAAA,EAAa9Z,OAAO,CAAG,GACvB5G,EAAOkhB,iBAAiB,CAAG,GAC3BlhB,EAAOmhB,KAAK,GACZnhB,EAAOohB,YAAY,CAACJ,EAAc,KAChChhB,EAAOqhB,SAAS,GAChBX,EAAa9Z,OAAO,CAAG,GACvB5G,EAAOkhB,iBAAiB,CAAG,EAC7B,GACAN,EAAe,GAAiBD,EAAYnR,KAAK,CAAC,EAAG,KACrDsR,EAAe,GAAiB,CAACG,KAAiBJ,EAAY,CAChE,CACF,EAAG,CAAC7gB,EAAQ2gB,EAAY,EAElB1f,EAAO+O,CAAAA,EAAAA,EAAAA,WAAAA,EAAY,KACvB,GAAKhQ,GAGD6gB,EAAYhd,MAAM,CAAG,EAAG,CAC1B,IAAMyd,EAAYT,CAAW,CAAC,EAAE,CAChCH,EAAa9Z,OAAO,CAAG,GACvB5G,EAAOkhB,iBAAiB,CAAG,GAC3BlhB,EAAOmhB,KAAK,GACZnhB,EAAOohB,YAAY,CAACE,EAAW,KAC7BthB,EAAOqhB,SAAS,GAChBX,EAAa9Z,OAAO,CAAG,GACvB5G,EAAOkhB,iBAAiB,CAAG,EAC7B,GACAN,EAAe,GAAiB,IAAID,EAAaW,EAAU,EAC3DR,EAAe,GAAiBD,EAAYrR,KAAK,CAAC,GACpD,CACF,EAAG,CAACxP,EAAQ6gB,EAAY,EAExBxc,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACRoc,EAAgB7Z,OAAO,CAAGvB,CAC5B,EAAG,CAACA,EAAS,EAEb,IAAMkc,EAAWlhB,IAAiBZ,EA2JlC,MAzJA4E,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,SAUJmd,EAvGNlW,EAAAA,MAAMA,CAACmW,MAAM,CAACC,SAAS,CAACtR,GAAG,CAAC,CAC1BuR,mBAAoB,GACpB3Y,YAAa,UACb4Y,WAAY,EACZC,YAAa,SACbC,YAAa,UACbC,kBAAmB,UACnBC,YAAa,GACbC,mBAAoB,EACtB,GA2FE,IAAMjiB,EAAS,IAAIsL,EAAAA,MAAMA,CAAC8U,MAAM,CAACG,EAAiB3Z,OAAO,CANzC,CACdsb,uBAAwB,GACxBC,oBAAqB,CACvB,GAKIC,EAAiB,GAGfC,0BAA4B,KAChCtB,EAAa/gB,EACf,EAiBMsiB,eAAiB,KACrBF,EAAiB,GACjB,IAAMG,EAAWviB,EAAOwiB,MAAM,CAAC,CAC7B,gBACA,gBACA,eACA,eACA,eACA,aACA,cACA,aACD,EAED,OADAJ,EAAiB,GACVG,CACT,EASA,OAPAviB,EAAOqV,EAAE,CAAC,kBAAmBgN,2BAC7BriB,EAAOqV,EAAE,CAAC,eAAgBgN,2BAC1BriB,EAAOqV,EAAE,CAAC,iBAAkBgN,2BAC5BriB,EAAOqV,EAAE,CAAC,eAlCW,MACf+M,GAGC1B,EAAa9Z,OAAO,GAGzB6b,aAAajB,GACbA,EAAckB,WAAW,KACvB,IAAMH,EAAWD,iBACjB1B,EAAe,GAAa,IAAI+B,EAAQnT,KAAK,CAAC,IAAK+S,EAAS,EAC5DzB,EAAe,EAAE,CACnB,EAAG,KACL,GAuBAN,EAAUxgB,GAEH,KACLyiB,aAAajB,GACbhB,EAAU,MACVxgB,EAAO4iB,OAAO,EAChB,CACF,EAAG,CAAC7B,EAAa,EAEjB1c,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACJrE,GACFA,CAAAA,EAAOmC,aAAa,CAAGA,CAAAA,CAE3B,EAAG,CAACnC,EAAQmC,EAAc,EAE1BkC,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACJrE,GAAUuhB,GACZvhB,EAAO6iB,UAAU,EAErB,EAAG,CAAC7iB,EAAQuhB,EAAS,EAErBld,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACR,GAAIrE,EAcF,OAbA6V,EAAepW,EAAU,CACvBO,OAAAA,EACAkP,aAAc,KACZlP,EAAOqhB,SAAS,GAChBN,EAAa/gB,EACf,EACAgB,KAAAA,EACAC,KAAAA,EACAC,QAAAA,EACAC,QAAAA,EACAgB,cAAAA,EACAC,eAAAA,CACF,GACO,KACL2T,EAAiBtW,EACnB,CAEJ,EAAG,CACDO,EACA6V,EACAE,EACAtW,EACAshB,EACA5e,EACAC,EACApB,EACAC,EACAC,EACAC,EACD,EAEDkD,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACR,GAAIrE,GAAUsO,IACZoS,EAAa9Z,OAAO,CAAG,GACvB5G,EAAOmhB,KAAK,GACRd,GAAc,CAChB,IAAItF,EAAQ,GACN+H,SAAW,UACf,IAAMpR,EAAQ,MAAMtG,kBAAkBiV,GACtC,GAAI,CAACtF,EAAO,CACV,GAAI,CAACrJ,EAAM5I,KAAK,EAAI,CAAC4I,EAAM/I,MAAM,CAC/B,MAAM,MAAU,oBAElB+I,CAAAA,EAAMgC,UAAU,CAAG,GACnBhC,EAAMV,aAAa,CAAG,GACtBU,EAAMT,aAAa,CAAG,GACtBS,EAAMR,YAAY,CAAG,GACrBQ,EAAMP,YAAY,CAAG,GACrBO,EAAMN,YAAY,CAAG,GACrBM,EAAMqR,WAAW,CAAG,UACpBrR,EAAMsR,UAAU,CAAG,UACnB,GAAM,CAACC,EAAeC,EAAe,CAAG5U,EAClCwD,EACJJ,EAAM5I,KAAK,GAAKma,EAAgB,EAAIA,EAAgBvR,EAAM5I,KAAK,CAC3DiJ,EACJL,EAAM/I,MAAM,GAAKua,EACb,EACAA,EAAiBxR,EAAM/I,MAAM,CAC/BmJ,CAAAA,IAAAA,GAAgBC,IAAAA,CAAW,IAC7BL,EAAMI,MAAM,CAAGA,EACfJ,EAAMK,MAAM,CAAGA,GAEjB/R,EAAOkS,YAAY,CAACR,GACpB1R,EAAO+Q,GAAG,CAACW,EACb,CACAgP,EAAa9Z,OAAO,CAAG,GACvB5G,EAAO+S,gBAAgB,EACzB,EAIA,OAFA+P,WAEO,KACL/H,EAAQ,EACV,CACF,CAEJ,EAAG,CAAC/a,EAAQqgB,EAAc/R,EAAY,EAGpC,GAAA1J,EAAAI,GAAA,EAACF,MAAAA,CAAIC,UAAU,kBAAkBkC,cAAasa,EAAW,OAAS,iBAChE,GAAA3c,EAAAI,GAAA,EAAChF,SAAAA,CACC8I,MAAOwF,CAAW,CAAC,EAAE,CAAGvB,EAAAA,EACxBpE,OAAQ2F,CAAW,CAAC,EAAE,CAAGvB,EAAAA,EACzBrH,IAAK6a,KAIb,CCnQO,IAAM4C,EACX7jB,EAAAA,aAAmB,CAAiC,MAGvC,SAAS8jB,iBACtB,IAAM1jB,EAAUC,CAAAA,EAAAA,EAAAA,UAAAA,EAAWwjB,GAC3B,GAAI,CAACzjB,EACH,MAAM,MAAU,0CAElB,OAAOA,CACT,CARAyjB,EAAmB5jB,WAAW,CAAG,qBCCjC,IAAM8jB,EAAqB,CAAC,IAAK,IAAI,CAEtB,SAASC,YAAY5V,CAMnC,MAGGoM,EAEAM,EAFcxM,EAEOA,KAXW,CAClCA,YAAAA,CAAW,CACXmG,WAAAA,EAAa,CAAC,CAIf,CANmCrG,EAO5B,CAAEoM,cAAAA,CAAa,CAAEM,qBAAAA,CAAoB,CAAE,CAAGjP,aAC1CoY,EAAAA,OACJzJ,CAAAA,EAAAA,CAAa,CAAClM,OAAAA,CAAAA,EAAAA,EAAY2G,IAAI,GAAhB3G,KAAAA,IAAAA,EAAAA,EAAoBA,EAAYpK,IAAI,CAAC,GAAnDsW,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,CAAqD,CAAC/F,EAAW,CAC7DyP,EAAAA,OACJpJ,CAAAA,EAAAA,CAAoB,CAACxM,OAAAA,CAAAA,EAAAA,EAAY2G,IAAI,GAAhB3G,KAAAA,IAAAA,EAAAA,EAAoBA,EAAYpK,IAAI,CAAC,GAA1D4W,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,CAA4D,CAACrG,EAAW,CACpE,CAAE0L,iBAAAA,CAAgB,CAAE,CAAGjF,UACvB,CAAEzN,cAAAA,CAAa,CAAE,CAAGD,cACpB,CAAC2W,EAAiBC,EAAmB,CAAGlhB,CAAAA,EAAAA,EAAAA,QAAAA,EAAwB,MAChE,CAAEgK,2BAAAA,CAA0B,CAAE,CAAGX,iBACjC,CAAE8X,UAAAA,CAAS,CAAE,CAAGP,iBAEhB9U,EAActC,CAAAA,EAAAA,EAAAA,OAAAA,EAClB,SAAM4B,SAAAA,OAAAA,CAAAA,EAAAA,EAAYxD,IAAI,GAAhBwD,KAAAA,IAAAA,EAAAA,EAAoByV,CAAiB,EAC3C,CAACzV,EAAY,EAGTmT,EAAe/Q,CAAAA,EAAAA,EAAAA,WAAAA,EACnB,MAAOhQ,QAQH4N,EAPF,IAAMjI,EAAW3F,EAAOoU,SAAS,CAAC,CAChC9B,IAAKvF,EACLwF,KAAMxF,EACNjE,MAAOwF,CAAW,CAAC,EAAE,CACrB3F,OAAQ2F,CAAW,CAAC,EAAE,GAExBmR,EACE7R,OAAAA,CAAAA,EAAAA,EAAY2G,IAAI,GAAhB3G,KAAAA,IAAAA,EAAAA,EAAoBA,EAAYpK,IAAI,CACpCmC,EACAoO,EAEJ,EACA,CAACzF,EAAavB,EAAe0S,EAAkB7R,EAAamG,EAAW,EAGzE1P,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACR,GAAIkf,EAAc,CAChB,IAAIxI,EAAQ,GAEN6I,iBAAmB,cACnBvW,EACJ,GAAI,CACFA,EAAc,MAAMsW,EAAUJ,EAChC,CAAE,MAAOM,EAAK,CACZ,GAAIjW,CAA2B,IAA3BA,EAAYmM,UAAU,CAGxB,OAFA1M,EAAc,MAAMsW,EAAUH,EAIlC,CACA,IAAMxP,EAAiB,MAAMxH,EAA2Ba,GACnD0N,GACH2I,EAAmB1P,EAEvB,EAIA,OAFA4P,mBAEO,KACL7I,EAAQ,EACV,CACF,CACE2I,EAAmB,KAEvB,EAAG,CACD9V,EACA2V,EACAC,EACAhX,EACAmX,EACD,EAED,IAAMlkB,EAAW,GAA6BsU,MAAAA,CAA1BnG,EAAYpK,IAAI,CAAC,WAAoB4F,MAAA,CAAX2K,GAE9C,OAAOzF,EACL,GAAA1J,EAAAI,GAAA,EAACob,OAAMA,CAEL3gB,SAAUA,EACVqkB,WAAW,QACXze,SAAU0b,EACVV,aAAcoD,EACdnV,YAAaA,GALR7O,GAOL,IACN,CC3FA,IAAM4jB,EAAqB,CAAC,IAAK,IAAI,CAEtB,SAASU,eAAerW,CAMtC,MAGGoM,EAEAM,EAFcxM,EAEOA,KAXc,CACrCA,YAAAA,CAAW,CACXmG,WAAAA,EAAa,CAAC,CAIf,CANsCrG,EAO/B,CAAEoM,cAAAA,CAAa,CAAEM,qBAAAA,CAAoB,CAAE,CAAGjP,aAC1CoY,EAAAA,OACJzJ,CAAAA,EAAAA,CAAa,CAAClM,OAAAA,CAAAA,EAAAA,EAAY2G,IAAI,GAAhB3G,KAAAA,IAAAA,EAAAA,EAAoBA,EAAYpK,IAAI,CAAC,GAAnDsW,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,CAAqD,CAAC/F,EAAW,CAC7DyP,EAAAA,OACJpJ,CAAAA,EAAAA,CAAoB,CAACxM,OAAAA,CAAAA,EAAAA,EAAY2G,IAAI,GAAhB3G,KAAAA,IAAAA,EAAAA,EAAoBA,EAAYpK,IAAI,CAAC,GAA1D4W,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,CAA4D,CAACrG,EAAW,CACpE,CAAE6L,oBAAAA,CAAmB,CAAE,CAAGpF,UAC1B,CAAEzN,cAAAA,CAAa,CAAE,CAAGD,cACpB,CAACkX,EAAeC,EAAiB,CAAGzhB,CAAAA,EAAAA,EAAAA,QAAAA,EAAwB,MAC5D0hB,EAAwBhkB,CAAAA,EAAAA,EAAAA,MAAAA,EAAO,GAC/B,CACJwM,4CAAAA,CAA2C,CAC3CD,mCAAAA,CAAkC,CACnC,CAAGZ,iBACE,CAAE8X,UAAAA,CAAS,CAAE,CAAGP,iBAEhB9U,EAActC,CAAAA,EAAAA,EAAAA,OAAAA,EAClB,SAAM4B,SAAAA,OAAAA,CAAAA,EAAAA,EAAYxD,IAAI,GAAhBwD,KAAAA,IAAAA,EAAAA,EAAoByV,CAAiB,EAC3C,CAACzV,EAAY,EAGTmT,EAAe/Q,CAAAA,EAAAA,EAAAA,WAAAA,EACnB,MAAOhQ,QAQDgU,CAPJkQ,CAAAA,EAAsBtd,OAAO,EAAI,EACjC,IAAMjB,EAAW3F,EAAOoU,SAAS,CAAC,CAChC9B,IAAKvF,EACLwF,KAAMxF,EACNjE,MAAOwF,CAAW,CAAC,EAAE,CACrB3F,OAAQ2F,CAAW,CAAC,EAAE,GAGxB,GAAI,CACF0F,EAAiB,MAAMtH,EACrB/G,EAEJ,QAAU,CACRue,EAAsBtd,OAAO,EAAI,CACnC,CACA,GAAIsd,IAAAA,EAAsBtd,OAAO,CAAQ,KAErCgH,EADFgS,EACEhS,OAAAA,CAAAA,EAAAA,EAAY2G,IAAI,GAAhB3G,KAAAA,IAAAA,EAAAA,EAAoBA,EAAYpK,IAAI,CACpCwQ,EACAD,EAEJ,CACF,EACA,CACEzF,EACAvB,EACA6S,EACAlT,EACAkB,EACAmG,EACD,EAGH1P,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACR,GAAIkf,EAAc,CAChB,IAAIxI,EAAQ,GAEN6I,iBAAmB,cACnBvW,EACJ,GAAI,CACFA,EAAc,MAAMsW,EAAUJ,EAChC,CAAE,MAAOM,EAAK,CACZ,GAAIjW,CAA2B,IAA3BA,EAAYmM,UAAU,CAGxB,OAFA1M,EAAc,MAAMsW,EAAUH,EAIlC,CACA,IAAMxP,EAAiB,MAAMvH,EAC3BY,GAEG0N,GACHkJ,EAAiBjQ,EAErB,EAIA,OAFA4P,mBAEO,KACL7I,EAAQ,EACV,CACF,CACEkJ,EAAiB,KAErB,EAAG,CACDrW,EACA2V,EACAC,EACAlV,EACA7B,EACAkX,EACD,EAED,IAAMlkB,EAAW,GAAgCsU,MAAAA,CAA7BnG,EAAYpK,IAAI,CAAC,cAAuB4F,MAAA,CAAX2K,GAEjD,OAAOzF,EACL,GAAA1J,EAAAI,GAAA,EAACob,OAAMA,CAEL3gB,SAAUA,EACVqkB,WAAW,WACXze,SAAU0b,EACVV,aAAc2D,EACd1V,YAAaA,EACbgS,mBAAkB,IANb7gB,GAQL,IACN,CCvHA,GAAM,CAAE6N,oBAAmB6W,CAAA,CAAE,CAAG5W,MAE1B,CAAEC,UAAS4W,EAAA,CAAE,CAAG9W,EAEP,SAAS+W,mBACtB,GAAM,CAAEvW,YAAAA,CAAW,CAAE,CAAG3C,aAClBwC,EAAqCH,EAAS,CAACM,EAAY,CAEjE,MACE,GAAAlJ,EAAAI,GAAA,EAAAJ,EAAAa,QAAA,WACGkI,EAAagG,GAAG,CAAC,QAOG/F,EANnB,GAAI,CAACA,EACH,OAAO,KAET,IAAMW,EAAc,CAClBX,CAAAA,IAAAA,EAAYY,cAAc,EAAUZ,IAAAA,EAAYa,eAAe,EAE3DL,EAAaR,OAAAA,CAAAA,EAAAA,EAAYQ,UAAU,GAAtBR,KAAAA,IAAAA,EAAAA,EAA0B,EACvCgG,EAAS,MAAUxF,GAAYyF,IAAI,CAAC,MAC1C,MACE,GAAAjP,EAAAC,IAAA,EAACvF,EAAAA,QAAc,YACZsU,EAAOD,GAAG,CAAC,CAACG,EAAGlE,IACd,GAAAhL,EAAAI,GAAA,EAACse,YAAWA,CACV1V,YAAaA,EACbmG,WAAYnE,GACP,SAAWxG,MAAA,CAAFwG,KAGjBrB,EACGqF,EAAOD,GAAG,CAAC,CAACG,EAAGlE,IACb,GAAAhL,EAAAI,GAAA,EAAC+e,eAAcA,CACbnW,YAAaA,EACbmG,WAAYnE,GACP,YAAcxG,MAAA,CAAFwG,KAGrB,OAhBe,GAAkBhC,MAAAA,CAAfE,EAAY,KAAoB1E,MAAA,CAAjBwE,EAAYpK,IAAI,EAmB3D,IAGN,gBC5Ce,SAAS8gB,oBAAoB5W,CAI3C,KAJ2C,CAC1CG,SAAAA,CAAQ,CAGT,CAJ2CH,EAKpC6W,EAAcC,CAAAA,EAAAA,GAAAA,EAAAA,IACd9kB,EAAUsM,CAAAA,EAAAA,EAAAA,OAAAA,EAAQ,IACf,EACL,MAAM2X,UAAUhe,CAAgB,EAC9B,GAAIA,EAASnB,UAAU,CAAC,SACtB,OAAOyI,sBAAsBtH,EACxB,EACL,IAAM0H,EAAc,MAAMkX,EAAYE,UAAU,CAAc,CAC5DC,SAAU,CAAC/e,EAAS,GAEtB,OAAO0H,CACT,CACF,CACF,GACC,CAACkX,EAAY,EAEhB,MACE,GAAA3f,EAAAI,GAAA,EAACme,EAAmB1N,QAAQ,EAACrR,MAAO1E,WACjCmO,GAGP,gBCJA,eAAe8W,aAAajX,CAAoC,KAApC,CAAEgX,SAAAA,CAAQ,CAA0B,CAApChX,EACpB,CAAC/H,EAAS,CAAG+e,EACnB,OAAOzX,sBAAsBtH,EAC/B,CAEA,IAAM4e,GAAc,IAAIK,GAAAA,CAAWA,CAAC,CAClCC,eAAgB,CACdC,QAAS,CACPC,QAASJ,aACTK,UAAWC,IACXC,UAAW,IACXC,qBAAsB,GACtBC,mBAAoB,EACtB,CACF,CACF,GAEe,SAASC,WACtB,MACE,GAAAzgB,EAAAC,IAAA,EAAAD,EAAAa,QAAA,YACE,GAAAb,EAAAI,GAAA,EAACsgB,IAAIA,UACH,GAAA1gB,EAAAI,GAAA,EAAC0B,QAAAA,UAAM,gCAET,GAAA9B,EAAAI,GAAA,EAACugB,GAAAA,EAAmBA,CAAAA,CAACC,OAAQjB,YAC3B,GAAA3f,EAAAI,GAAA,EAACygB,OAAAA,UACC,GAAA7gB,EAAAI,GAAA,EAACsf,oBAAmBA,UAClB,GAAA1f,EAAAI,GAAA,EAACgV,gBAAeA,UACd,GAAApV,EAAAI,GAAA,EAACga,oBAAmBA,UAClB,GAAApa,EAAAC,IAAA,EAACqa,aAAYA,WACX,GAAAta,EAAAC,IAAA,EAACC,MAAAA,CAAIC,UAAU,qBACb,GAAAH,EAAAC,IAAA,EAACC,MAAAA,CAAIC,UAAU,uBACb,GAAAH,EAAAI,GAAA,EAACF,MAAAA,CAAIC,UAAU,iBACb,GAAAH,EAAAI,GAAA,EAAC+Y,oBAAmBA,CAAAA,KAEtB,GAAAnZ,EAAAI,GAAA,EAACF,MAAAA,CAAIC,UAAU,6BACb,GAAAH,EAAAI,GAAA,EAACkZ,oBAAmBA,CAAAA,KAEtB,GAAAtZ,EAAAI,GAAA,EAACF,MAAAA,CAAIC,UAAU,iBACb,GAAAH,EAAAI,GAAA,EAAC2Z,kBAAiBA,CAAAA,QAGtB,GAAA/Z,EAAAI,GAAA,EAACqY,cAAaA,CAAAA,MAEhB,GAAAzY,EAAAI,GAAA,EAAC2Q,eAAcA,UACb,GAAA/Q,EAAAI,GAAA,EAACyI,cAAaA,UACZ,GAAA7I,EAAAC,IAAA,EAACoR,mBAAkBA,WACjB,GAAArR,EAAAI,GAAA,EAAC+S,gBAAeA,CAAAA,GAChB,GAAAnT,EAAAC,IAAA,EAACC,MAAAA,CAAIC,UAAU,2BACb,GAAAH,EAAAC,IAAA,EAACC,MAAAA,CAAIC,UAAU,2BACb,GAAAH,EAAAI,GAAA,EAACqS,aAAYA,CAAAA,GACb,GAAAzS,EAAAI,GAAA,EAACkb,iBAAgBA,CAAAA,MAEnB,GAAAtb,EAAAI,GAAA,EAAC0Q,eAAcA,CAAAA,GACf,GAAA9Q,EAAAI,GAAA,EAACqf,iBAAgBA,CAAAA,MAEnB,GAAAzf,EAAAI,GAAA,EAACjF,YAAWA,CAAAA,GACZ,GAAA6E,EAAAI,GAAA,EAACyF,UAASA,CAAAA,yBAYlC,sHC5FO,IAAMib,EAAqBpmB,EAAAA,aAAmB,CAI3C,MAGK,SAASub,iBACtB,IAAMnb,EAAUC,CAAAA,EAAAA,EAAAA,UAAAA,EAAW+lB,GAC3B,GAAI,CAAChmB,EACH,MAAM,MAAU,kCAElB,OAAOA,CACT,CARAgmB,EAAmBnmB,WAAW,CAAG,+CC2wW3B+L,EACAqa,EACAtT,EACAuT,EACAC,EACAC,EACAC,EA+uIAza,EACAjD,EACAC,EA2hBAgD,EAn9eA0a,EACAC,EACAC,EACAC,EACAC,EAi/EAC,EACAC,EAiFAC,EACAC,EACAC,EACAC,EAGAC,EAojFArb,EACAwa,EACAc,EAiGAtb,EAq+JAjD,EACAC,EA68EAwd,EACAe,EAKAC,EAkQAC,EACAjB,EACAkB,EACAC,EA21BAnB,EAo1GAxa,EACAiF,EACA2W,EA6JA5b,EACAiF,EACA2W,EA+GA5b,EACAqa,EACApV,EACA2W,EA6VA5b,EACAiF,EACA2W,EAwJA5b,EACAiF,GACA2W,GA6GA5b,GACAqa,GACApV,GACA2W,GAmIA5b,GACAiF,GACA2W,GAuIA5b,GACAqa,GACApV,GACA2W,GA8PA5b,GACAiF,GACA2W,GAyPA5b,GACAiF,GACA2W,GAsPA5b,GAAkD4a,GAAgBiB,GAClEnB,GAAkBoB,GAAgBjf,GAAoBkf,GACtDC,GACA/W,GACA2W,GAseA5b,GACAiF,GACA2W,GA+GA5b,GACAiF,GACA2W,GAqHA5b,GACAiF,GACA2W,GAuNA5b,GACAiF,GACA2W,GAsIA5b,GACAiF,GACA2W,GAsEA5b,GACAiF,GACA2W,GA4lEAK,GACAC,GACAC,GA0EAC,GAgIAC,qBAl8tBFrc,GAASA,IAAU,CAAEsc,QAAS,OAAQ,EAS1C,GAPEC,EAAAA,MAAc,CAAGvc,GAOf,oBAAOwc,SACLA,mBAAqB,qBAAOC,aAA+BA,aAAeC,QAAAA,EAC5E1c,GAAOwc,QAAQ,CAAGA,SAGlBxc,GAAOwc,QAAQ,CAAGA,SAASG,cAAc,CAACC,kBAAkB,CAAC,IAE/D5c,GAAOrM,MAAM,CAAGA,WAEb,CAGH,IAAIkpB,GAAgB,GAAIC,CADZC,EAAQ,OACUC,KAAK,CACjCC,mBAAmB,8FACnB,CACEC,SAAU,CACRC,uBAAwB,CAAC,MAAM,EAEjCC,UAAW,QACb,GAAGzpB,MAAM,CACXqM,GAAOwc,QAAQ,CAAGK,GAAcL,QAAQ,CACxCxc,GAAOqd,mBAAmB,CAAGN,EAAAA,MAAAA,cAAAA,CAC7B/c,GAAOsd,UAAU,CAAGP,EAAAA,MAAAA,MAAAA,CACpB/c,GAAOrM,MAAM,CAAGkpB,GAChBU,UAAYvd,GAAOrM,MAAM,CAAC4pB,SAAS,CA+qiBrC,SAASC,oBAAoBC,CAAE,CAAEC,CAAa,EAC5C,IAAIC,EAAWF,EAAG/oB,MAAM,CAAEkpB,EAAeF,EAAcE,YAAY,CAC/DC,EAAMD,EAAaE,UAAU,CAAC,MAClCD,EAAIE,SAAS,CAAC,EAAGH,EAAavgB,MAAM,EACpCwgB,EAAItX,KAAK,CAAC,EAAG,IAEb,IAAIyX,EAAUL,EAAStgB,MAAM,CAAGugB,EAAavgB,MAAM,CACnDwgB,EAAII,SAAS,CAACN,EAAU,EAAGK,EAASJ,EAAapgB,KAAK,CAAEogB,EAAavgB,MAAM,CAAE,EAAG,EAC9EugB,EAAapgB,KAAK,CAAEogB,EAAavgB,MAAM,CAC3C,CAUA,SAAS6gB,uBAAuBT,CAAE,CAAEC,CAAa,EAC/C,IAA+CG,EAAMD,EAApBA,YAAY,CAAqBE,UAAU,CAAC,MACzEK,EAAST,EAAcU,gBAAgB,CACvCC,EAAUX,EAAcY,iBAAiB,CACzCC,EAAWJ,EAASE,EAAU,EAG9BG,EAAK,IAAIC,WAAW,IAAI,CAACC,WAAW,CAAE,EAAGH,GAEzCI,EAAY,IAAIC,kBAAkB,IAAI,CAACF,WAAW,CAAE,EAAGH,GAE3Dd,EAAGoB,UAAU,CAAC,EAAG,EAAGV,EAAQE,EAASZ,EAAGqB,IAAI,CAAErB,EAAGsB,aAAa,CAAEP,GAChE,IAAIQ,EAAU,IAAIC,UAAUN,EAAWR,EAAQE,GAC/CR,EAAIqB,YAAY,CAACF,EAAS,EAAG,EAC/B,CAzsiBAhf,GAAOmf,gBAAgB,CAAG,iBAAkBnf,GAAOrM,MAAM,EAAI,iBAAkBqM,GAAOwc,QAAQ,EAC3Fxc,GAAOrM,MAAM,EAAIqM,GAAOrM,MAAM,CAACqF,SAAS,EAAIgH,GAAOrM,MAAM,CAACqF,SAAS,CAAComB,cAAc,CAAG,EAMxFpf,GAAOqf,YAAY,CAAG,KAAkB,IAAXC,IACP,GAOtBtf,GAAOuf,GAAG,CAAG,GACbvf,GAAOwf,KAAK,CAAG,kDACfxf,GAAOyf,QAAQ,CAAG,uBAClBzf,GAAO0f,aAAa,CAAG,yDACvB1f,GAAO2f,SAAS,CAAG,iBACnB3f,GAAO4f,SAAS,CAAG,CAAE,EACrB5f,GAAO6f,OAAO,CAAG,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACnC7f,GAAO8f,KAAK,CAAG,6BAQf9f,GAAO+f,kBAAkB,CAAG,QAQ5B/f,GAAOggB,iBAAiB,CAAG,KAQ3BhgB,GAAOigB,iBAAiB,CAAG,IAK3BjgB,GAAOkgB,eAAe,CAAG,CAAE,EAS3BlgB,GAAOgD,WAAW,CAAG,KASrBhD,GAAOmgB,qBAAqB,CAAG,GAU/BngB,GAAOogB,iBAAiB,CAAG,GAM3BpgB,GAAOqgB,gBAAgB,CAAGrgB,GAAOrM,MAAM,CAAC0sB,gBAAgB,EAC9BrgB,GAAOrM,MAAM,CAAC2sB,sBAAsB,EACpCtgB,GAAOrM,MAAM,CAAC4sB,mBAAmB,EACjC,EAe1BvgB,GAAOwgB,yBAAyB,CAAG,EAMnCxgB,GAAOygB,kBAAkB,CAAG,CAAE,EAU9BzgB,GAAO0gB,kBAAkB,CAAG,CAAE,EAM9B1gB,GAAO2gB,mBAAmB,CAAG,GAS7B3gB,GAAO4gB,mBAAmB,CAAG,GAE7B5gB,GAAO6gB,iBAAiB,CAAG,kBACzB,GAAWT,iBAAiB,EAAIpgB,GAAO8gB,gBAAgB,EAAI9gB,GAAO8gB,gBAAgB,CAAC9gB,GAAOgD,WAAW,GACnG+d,QAAQC,GAAG,CAAC,qBAAuBhhB,GAAOihB,cAAc,EAChD,IAAIjhB,GAAOkhB,kBAAkB,CAAC,CAAEC,SAAUnhB,GAAOgD,WAAW,IAE7DhD,GAAOohB,qBAAqB,CAC3B,IAAIphB,GAAOohB,qBAAqB,OAE5C,EACC,WAOC,SAASC,qBAAqBC,CAAS,CAAEC,CAAO,EAC9C,GAAK,IAAI,CAACC,gBAAgB,CAACF,EAAU,EAGrC,IAAIG,EAAgB,IAAI,CAACD,gBAAgB,CAACF,EAAU,CAChDC,EACFE,CAAa,CAACA,EAAcC,OAAO,CAACH,GAAS,CAAG,GAGhDvhB,GAAOyb,IAAI,CAACkG,KAAK,CAACpZ,IAAI,CAACkZ,EAAe,IAE1C,CA8BA,SAASG,MAAMN,CAAS,CAAEC,CAAO,EAC/B,IAAIM,EAAW,YACbN,EAAQO,KAAK,CAAC,IAAI,CAAEhhB,WACpB,IAAI,CAACkJ,GAAG,CAACsX,EAAWO,EACtB,GAAE7Z,IAAI,CAAC,IAAI,EACX,IAAI,CAAC+B,EAAE,CAACuX,EAAWO,EACrB,CAgFA7hB,GAAO+hB,UAAU,CAAG,CAClBC,KAzBF,SAAcV,CAAS,CAAEnpB,CAAO,EAC9B,GAAI,CAAC,IAAI,CAACqpB,gBAAgB,CACxB,OAAO,IAAI,CAGb,IAAIS,EAAoB,IAAI,CAACT,gBAAgB,CAACF,EAAU,CACxD,GAAI,CAACW,EACH,OAAO,IAAI,CAGb,IAAK,IAAI3d,EAAI,EAAG4d,EAAMD,EAAkB1pB,MAAM,CAAE+L,EAAI4d,EAAK5d,IACvD2d,CAAiB,CAAC3d,EAAE,EAAI2d,CAAiB,CAAC3d,EAAE,CAAC6d,IAAI,CAAC,IAAI,CAAEhqB,GAAW,CAAE,GAKvE,OAHA,IAAI,CAACqpB,gBAAgB,CAACF,EAAU,CAAGW,EAAkB9Z,MAAM,CAAC,SAASrP,CAAK,EACxE,MAAOA,CAAU,IAAVA,CACT,GACO,IAAI,EAUXiR,GA3GF,SAAYuX,CAAS,CAAEC,CAAO,EAK5B,GAJK,IAAI,CAACC,gBAAgB,EACxB,KAAI,CAACA,gBAAgB,CAAG,CAAE,GAGxB1gB,GAAAA,UAAUvI,MAAM,CAClB,IAAK,IAAI6pB,KAAQd,EACf,IAAI,CAACvX,EAAE,CAACqY,EAAMd,CAAS,CAACc,EAAK,OAI1B,IAAI,CAACZ,gBAAgB,CAACF,EAAU,EACnC,KAAI,CAACE,gBAAgB,CAACF,EAAU,CAAG,EAAE,EAEvC,IAAI,CAACE,gBAAgB,CAACF,EAAU,CAACztB,IAAI,CAAC0tB,GAExC,OAAO,IAAI,EA4FXc,KAjFF,SAAcf,CAAS,CAAEC,CAAO,EAE9B,GAAIzgB,GAAAA,UAAUvI,MAAM,CAClB,IAAK,IAAI6pB,KAAQd,EACfM,MAAMO,IAAI,CAAC,IAAI,CAAEC,EAAMd,CAAS,CAACc,EAAK,OAIxCR,MAAMO,IAAI,CAAC,IAAI,CAAEb,EAAWC,GAE9B,OAAO,IAAI,EAwEXvX,IA3DF,SAAasX,CAAS,CAAEC,CAAO,EAC7B,GAAI,CAAC,IAAI,CAACC,gBAAgB,CACxB,OAAO,IAAI,CAIb,GAAI1gB,GAAAA,UAAUvI,MAAM,CAClB,IAAK+oB,KAAa,IAAI,CAACE,gBAAgB,CACrCH,qBAAqBc,IAAI,CAAC,IAAI,CAAEb,QAI/B,GAAIxgB,GAAAA,UAAUvI,MAAM,EAAU,iBAAOuI,SAAS,CAAC,EAAE,CACpD,IAAK,IAAIshB,KAAQd,EACfD,qBAAqBc,IAAI,CAAC,IAAI,CAAEC,EAAMd,CAAS,CAACc,EAAK,OAIvDf,qBAAqBc,IAAI,CAAC,IAAI,CAAEb,EAAWC,GAE7C,OAAO,IAAI,CAwCb,CACF,IAIAvhB,GAAOsiB,UAAU,CAAG,CAElB5lB,SAAU,EAAE,CAcZ+I,IAAK,WAEH,GADA,IAAI,CAAC/I,QAAQ,CAAC7I,IAAI,CAACiuB,KAAK,CAAC,IAAI,CAACplB,QAAQ,CAAEoE,WACpC,IAAI,CAACyhB,cAAc,CACrB,IAAK,IAAIje,EAAI,EAAG/L,EAASuI,UAAUvI,MAAM,CAAE+L,EAAI/L,EAAQ+L,IACrD,IAAI,CAACie,cAAc,CAACzhB,SAAS,CAACwD,EAAE,EAIpC,OADA,IAAI,CAACsR,iBAAiB,EAAI,IAAI,CAACnO,gBAAgB,GACxC,IAAI,EAeb+a,SAAU,SAAU9pB,CAAM,CAAEuT,CAAK,CAAEwW,CAAW,EAC5C,IAAInb,EAAU,IAAI,CAAC5K,QAAQ,CAS3B,OARI+lB,EACFnb,CAAO,CAAC2E,EAAM,CAAGvT,EAGjB4O,EAAQ+M,MAAM,CAACpI,EAAO,EAAGvT,GAE3B,IAAI,CAAC6pB,cAAc,EAAI,IAAI,CAACA,cAAc,CAAC7pB,GAC3C,IAAI,CAACkd,iBAAiB,EAAI,IAAI,CAACnO,gBAAgB,GACxC,IAAI,EASbD,OAAQ,WAIN,IAAK,IAFDyE,EADA3E,EAAU,IAAI,CAAC5K,QAAQ,CAChBgmB,EAAmB,GAErBpe,EAAI,EAAG/L,EAASuI,UAAUvI,MAAM,CAAE+L,EAAI/L,EAAQ+L,IACrD2H,EAAQ3E,EAAQoa,OAAO,CAAC5gB,SAAS,CAACwD,EAAE,EAGtB,KAAV2H,IACFyW,EAAmB,GACnBpb,EAAQ+M,MAAM,CAACpI,EAAO,GACtB,IAAI,CAAC0W,gBAAgB,EAAI,IAAI,CAACA,gBAAgB,CAAC7hB,SAAS,CAACwD,EAAE,GAK/D,OADA,IAAI,CAACsR,iBAAiB,EAAI8M,GAAoB,IAAI,CAACjb,gBAAgB,GAC5D,IAAI,EAebN,cAAe,SAASyb,CAAQ,CAAExuB,CAAO,EAEvC,IAAK,IADDkT,EAAU,IAAI,CAACub,UAAU,GACpBve,EAAI,EAAG4d,EAAM5a,EAAQ/O,MAAM,CAAE+L,EAAI4d,EAAK5d,IAC7Cse,EAAST,IAAI,CAAC/tB,EAASkT,CAAO,CAAChD,EAAE,CAAEA,EAAGgD,GAExC,OAAO,IAAI,EAUbub,WAAY,SAASjpB,CAAI,SACvB,KAAoB,IAATA,EACF,IAAI,CAAC8C,QAAQ,CAACoB,MAAM,GAEtB,IAAI,CAACpB,QAAQ,CAACyL,MAAM,CAAC,SAAS2a,CAAC,EACpC,OAAOA,EAAElpB,IAAI,GAAKA,CACpB,EACF,EAOAuR,KAAM,SAAUc,CAAK,EACnB,OAAO,IAAI,CAACvP,QAAQ,CAACuP,EAAM,EAO7B8W,QAAS,WACP,OAAO,QAAI,CAACrmB,QAAQ,CAACnE,MAAM,EAO7BuG,KAAM,WACJ,OAAO,IAAI,CAACpC,QAAQ,CAACnE,MAAM,EAS7B+D,SAAU,SAAU5D,CAAM,CAAEsqB,CAAI,SAC9B,IAAQ,CAACtmB,QAAQ,CAACglB,OAAO,CAAChpB,GAAU,MAG3BsqB,GACA,IAAI,CAACtmB,QAAQ,CAACumB,IAAI,CAAC,SAAUC,CAAG,EACrC,MAAO,mBAAOA,EAAI5mB,QAAQ,EAAmB4mB,EAAI5mB,QAAQ,CAAC5D,EAAQ,GACpE,EAGJ,EAMAyqB,WAAY,WACV,OAAO,IAAI,CAACzmB,QAAQ,CAAC6R,MAAM,CAAC,SAAU6U,CAAI,CAAE9nB,CAAO,EAEjD,OADA8nB,EAAQ9nB,CAAAA,EAAQ6nB,UAAU,CAAG7nB,EAAQ6nB,UAAU,GAAK,EAEtD,EAAG,EACL,CACF,EAIAnjB,GAAOqjB,aAAa,CAAG,CAMrBC,YAAa,SAASnrB,CAAO,EAC3B,IAAK,IAAIiqB,KAAQjqB,EACf,IAAI,CAAC2M,GAAG,CAACsd,EAAMjqB,CAAO,CAACiqB,EAAK,CAEhC,EAOAmB,cAAe,SAASC,CAAM,CAAEC,CAAQ,GAClCD,IAAUA,EAAOE,UAAU,EAAMF,aAAkBxjB,GAAO2jB,QAAQ,EACpE,IAAI,CAAC7e,GAAG,CAAC2e,EAAU,IAAIzjB,GAAO2jB,QAAQ,CAACH,GAE3C,EAQAI,aAAc,SAASJ,CAAM,CAAEC,CAAQ,CAAEb,CAAQ,EAC3CY,CAAAA,IAAUA,EAAOK,MAAM,EAAML,aAAkBxjB,GAAO8jB,OAAO,CAI/DlB,GAAYA,IAHZ,IAAI,CAAC9d,GAAG,CAAC2e,EAAU,IAAIzjB,GAAO8jB,OAAO,CAACN,EAAQZ,GAKlD,EAKAmB,WAAY,SAASb,CAAG,EACtB,IAAK,IAAId,KAAQc,EACf,IAAI,CAACc,IAAI,CAAC5B,EAAMc,CAAG,CAACd,EAAK,CAE7B,EASAtd,IAAK,SAASE,CAAG,CAAElM,CAAK,EAOtB,MANI,iBAAOkM,EACT,IAAI,CAAC+e,UAAU,CAAC/e,GAGhB,IAAI,CAACgf,IAAI,CAAChf,EAAKlM,GAEV,IAAI,EAGbkrB,KAAM,SAAShf,CAAG,CAAElM,CAAK,EACvB,IAAI,CAACkM,EAAI,CAAGlM,CACd,EAQAmrB,OAAQ,SAASR,CAAQ,EACvB,IAAI3qB,EAAQ,IAAI,CAACuL,GAAG,CAACof,GAIrB,MAHqB,WAAjB,OAAO3qB,GACT,IAAI,CAACgM,GAAG,CAAC2e,EAAU,CAAC3qB,GAEf,IAAI,EAQbuL,IAAK,SAASof,CAAQ,EACpB,OAAO,IAAI,CAACA,EAAS,CAEzB,EAGM/I,EAAO9d,KAAK8d,IAAI,CAChBC,EAAQ/d,KAAK+d,KAAK,CAClBC,EAAMhe,KAAKge,GAAG,CACdC,EAAUje,KAAKsnB,EAAE,CAAG,IACpBpJ,EAAQle,KAAKsnB,EAAE,CAAG,EAKtBlkB,GAAOyb,IAAI,CAAG,CASZ0I,IAAK,SAASC,CAAK,EACjB,GAAIA,IAAAA,EAAe,OAAO,EAM1B,OALIA,EAAQ,GAEVA,CAAAA,EAAQ,CAACA,CAAAA,EAEMA,EAAQtJ,GAEvB,KAAK,EAAG,KAAK,EAAG,OAAO,CACvB,MAAK,EAAG,OAAO,EACjB,CACA,OAAOle,KAAKunB,GAAG,CAACC,EAClB,EASArI,IAAK,SAASqI,CAAK,EACjB,GAAIA,IAAAA,EAAe,OAAO,EAC1B,IAAgCC,EAAO,EAKvC,OAJID,EAAQ,GAEVC,CAAAA,EAAO,EAAC,EAHOD,EAAQtJ,GAMvB,KAAK,EAAG,OAAOuJ,CACf,MAAK,EAAG,OAAO,CACf,MAAK,EAAG,MAAO,CAACA,CAClB,CACA,OAAOznB,KAAKmf,GAAG,CAACqI,EAClB,EAWAE,gBAAiB,SAAS3C,CAAK,CAAE7oB,CAAK,EACpC,IAAIyrB,EAAM5C,EAAMD,OAAO,CAAC5oB,GAIxB,OAHY,KAARyrB,GACF5C,EAAMtN,MAAM,CAACkQ,EAAK,GAEb5C,CACT,EAUA6C,aAAc,SAASznB,CAAG,CAAEC,CAAG,EAC7B,OAAOJ,KAAKif,KAAK,CAACjf,KAAK6nB,MAAM,GAAMznB,CAAAA,EAAMD,EAAM,IAAMA,CACvD,EASAyd,iBAAkB,SAASkK,CAAO,EAChC,OAAOA,EAAU7J,CACnB,EASA8J,iBAAkB,SAASC,CAAO,EAChC,OAAOA,EAAU/J,CACnB,EAWAgK,YAAa,SAASC,CAAK,CAAEC,CAAM,CAAEH,CAAO,EAC1C,IAAII,EAAW,IAAIhlB,GAAOilB,KAAK,CAACH,EAAMI,CAAC,CAAGH,EAAOG,CAAC,CAAEJ,EAAMK,CAAC,CAAGJ,EAAOI,CAAC,EAClEC,EAAIplB,GAAOyb,IAAI,CAAC4J,YAAY,CAACL,EAAUJ,GAC3C,OAAO,IAAI5kB,GAAOilB,KAAK,CAACG,EAAEF,CAAC,CAAEE,EAAED,CAAC,EAAEG,SAAS,CAACP,EAC9C,EAUAM,aAAc,SAASE,CAAM,CAAEX,CAAO,EACpC,IAAI7I,EAAM/b,GAAOyb,IAAI,CAACM,GAAG,CAAC6I,GACtBT,EAAMnkB,GAAOyb,IAAI,CAAC0I,GAAG,CAACS,GAG1B,MAAO,CACLM,EAHOK,EAAOL,CAAC,CAAGf,EAAMoB,EAAOJ,CAAC,CAAGpJ,EAInCoJ,EAHOI,EAAOL,CAAC,CAAGnJ,EAAMwJ,EAAOJ,CAAC,CAAGhB,CAIrC,CACF,EAeAqB,aAAc,SAAUta,CAAI,CAAEua,CAAE,EAC9B,OAAO,IAAIzlB,GAAOilB,KAAK,CAACQ,EAAGP,CAAC,CAAGha,EAAKga,CAAC,CAAEO,EAAGN,CAAC,CAAGja,EAAKia,CAAC,CACtD,EAUAO,wBAAyB,SAAUrmB,CAAC,CAAEsK,CAAC,EACrC,OAAO/M,KAAK+oB,IAAI,CAAC,CAACtmB,EAAE6lB,CAAC,CAAGvb,EAAEub,CAAC,CAAG7lB,EAAE8lB,CAAC,CAAGxb,EAAEwb,CAAC,EAAKvoB,CAAAA,KAAKgpB,KAAK,CAACvmB,EAAE6lB,CAAC,CAAE7lB,EAAE8lB,CAAC,EAAIvoB,KAAKgpB,KAAK,CAACjc,EAAEub,CAAC,CAAEvb,EAAEwb,CAAC,GACxF,EAQAU,aAAc,SAAUT,CAAC,EACvB,OAAO,IAAIplB,GAAOilB,KAAK,CAACG,EAAEF,CAAC,CAAEE,EAAED,CAAC,EAAEW,QAAQ,CAAC,EAAIlpB,KAAKgpB,KAAK,CAACR,EAAEF,CAAC,CAAEE,EAAED,CAAC,EACpE,EAUAY,YAAa,SAAUC,CAAC,CAAEC,CAAC,CAAEC,CAAC,EAC5B,IAAIC,EAAKnmB,GAAOyb,IAAI,CAAC+J,YAAY,CAACQ,EAAGC,GAAIG,EAAKpmB,GAAOyb,IAAI,CAAC+J,YAAY,CAACQ,EAAGE,GACtEG,EAAQrmB,GAAOyb,IAAI,CAACiK,uBAAuB,CAACS,EAAIC,GAEhDE,EAAKtmB,GAAOyb,IAAI,CAACiK,uBAAuB,CAAC1lB,GAAOyb,IAAI,CAAC4J,YAAY,CAACc,EAAIE,GAAQD,GAC9EG,EAAMF,EAASC,CAAAA,IAAAA,EAAW,EAAI,EAAC,EAAK,EACxC,MAAO,CACLf,OAAQvlB,GAAOyb,IAAI,CAACoK,YAAY,CAAC7lB,GAAOyb,IAAI,CAAC4J,YAAY,CAACc,EAAII,IAC9DnC,MAAOiC,CACT,CACF,EAqBAG,sBAAuB,SAAUC,CAAM,CAAEtuB,CAAO,CAAEuuB,CAAQ,EACxD,IAAIC,EAAS,EAAE,CAAEC,EAAIzuB,EAAQue,WAAW,CAAG,EACvCmQ,EAAsB1uB,EAAQ2uB,aAAa,CACzC,IAAI9mB,GAAOilB,KAAK,CAAC,EAAI9sB,EAAQqO,MAAM,CAAE,EAAIrO,EAAQsO,MAAM,EAAI,IAAIzG,GAAOilB,KAAK,CAAC,EAAG,GACjF8B,mBAAqB,SAAU3B,CAAC,EAC9B,IAAI4B,EAASJ,EAAKhqB,KAAKgpB,KAAK,CAACR,EAAEF,CAAC,CAAEE,EAAED,CAAC,EACrC,OAAO,IAAInlB,GAAOilB,KAAK,CAACG,EAAEF,CAAC,CAAG8B,EAASH,EAAoB3B,CAAC,CAAEE,EAAED,CAAC,CAAG6B,EAASH,EAAoB1B,CAAC,CACpG,SACAsB,EAAOluB,MAAM,EAAI,GACrBkuB,EAAOQ,OAAO,CAAC,SAAU3mB,CAAC,CAAE2L,CAAK,EAC/B,IAAoCga,EAAGC,EAAnCF,EAAI,IAAIhmB,GAAOilB,KAAK,CAAC3kB,EAAE4kB,CAAC,CAAE5kB,EAAE6kB,CAAC,CAC7BlZ,CAAU,IAAVA,GACFia,EAAIO,CAAM,CAACxa,EAAQ,EAAE,CACrBga,EAAIS,EAAWK,mBAAmB/mB,GAAOyb,IAAI,CAAC+J,YAAY,CAACU,EAAGF,IAAIV,SAAS,CAACU,GAAKS,CAAM,CAACA,EAAOluB,MAAM,CAAG,EAAE,EAEnG0T,IAAUwa,EAAOluB,MAAM,CAAG,GACjC0tB,EAAIQ,CAAM,CAACxa,EAAQ,EAAE,CACrBia,EAAIQ,EAAWK,mBAAmB/mB,GAAOyb,IAAI,CAAC+J,YAAY,CAACS,EAAGD,IAAIV,SAAS,CAACU,GAAKS,CAAM,CAAC,EAAE,GAG1FR,EAAIQ,CAAM,CAACxa,EAAQ,EAAE,CACrBia,EAAIO,CAAM,CAACxa,EAAQ,EAAE,EAEvB,IAGI+a,EACAE,EAJAC,EAAWnnB,GAAOyb,IAAI,CAACsK,WAAW,CAACC,EAAGC,EAAGC,GACzCkB,EAAiBD,EAAS5B,MAAM,CAChCc,EAAQc,EAAS/C,KAAK,CAG1B,GAAIjsB,UAAAA,EAAQkvB,cAAc,GACxBL,EAAS,CAACJ,EAAIhqB,KAAKmf,GAAG,CAACsK,EAAQ,GAK3BzpB,KAAKgpB,KAAK,CAACsB,CAJfA,EAAc,IAAIlnB,GAAOilB,KAAK,CAC5BmC,EAAelC,CAAC,CAAG8B,EAASH,EAAoB3B,CAAC,CACjDkC,EAAejC,CAAC,CAAG6B,EAASH,EAAoB1B,CAAC,GAExBD,CAAC,CAAEgC,EAAY/B,CAAC,EAAIyB,GAAKzuB,EAAQmvB,gBAAgB,EAAE,CAC5EX,EAAO9yB,IAAI,CAACmyB,EAAEvgB,GAAG,CAACyhB,IAClBP,EAAO9yB,IAAI,CAACmyB,EAAEuB,QAAQ,CAACL,IACvB,MACF,CAEFF,EAAS,CAACJ,EAAIhqB,KAAK4qB,KAAK,CACxBN,EAAc,IAAIlnB,GAAOilB,KAAK,CAC5BmC,EAAelC,CAAC,CAAG8B,EAASH,EAAoB3B,CAAC,CACjDkC,EAAejC,CAAC,CAAG6B,EAASH,EAAoB1B,CAAC,EAEnDwB,EAAO9yB,IAAI,CAACmyB,EAAEvgB,GAAG,CAACyhB,IAClBP,EAAO9yB,IAAI,CAACmyB,EAAEuB,QAAQ,CAACL,GACzB,GAvCgCP,CAyClC,EAWAhL,eAAgB,SAASrb,CAAC,CAAEmnB,CAAC,CAAEC,CAAY,SACzC,EACS,IAAI1nB,GAAOilB,KAAK,CACrBwC,CAAC,CAAC,EAAE,CAAGnnB,EAAE4kB,CAAC,CAAGuC,CAAC,CAAC,EAAE,CAAGnnB,EAAE6kB,CAAC,CACvBsC,CAAC,CAAC,EAAE,CAAGnnB,EAAE4kB,CAAC,CAAGuC,CAAC,CAAC,EAAE,CAAGnnB,EAAE6kB,CAAC,EAGpB,IAAInlB,GAAOilB,KAAK,CACrBwC,CAAC,CAAC,EAAE,CAAGnnB,EAAE4kB,CAAC,CAAGuC,CAAC,CAAC,EAAE,CAAGnnB,EAAE6kB,CAAC,CAAGsC,CAAC,CAAC,EAAE,CAC9BA,CAAC,CAAC,EAAE,CAAGnnB,EAAE4kB,CAAC,CAAGuC,CAAC,CAAC,EAAE,CAAGnnB,EAAE6kB,CAAC,CAAGsC,CAAC,CAAC,EAAE,CAElC,EAQAE,0BAA2B,SAASlB,CAAM,CAAEmB,CAAS,EACnD,GAAIA,EACF,IAAK,IAAItjB,EAAI,EAAGA,EAAImiB,EAAOluB,MAAM,CAAE+L,IACjCmiB,CAAM,CAACniB,EAAE,CAAGtE,GAAOyb,IAAI,CAACE,cAAc,CAAC8K,CAAM,CAACniB,EAAE,CAAEsjB,GAGtD,IAAIC,EAAU,CAACpB,CAAM,CAAC,EAAE,CAACvB,CAAC,CAAEuB,CAAM,CAAC,EAAE,CAACvB,CAAC,CAAEuB,CAAM,CAAC,EAAE,CAACvB,CAAC,CAAEuB,CAAM,CAAC,EAAE,CAACvB,CAAC,CAAC,CAC9D4C,EAAO9nB,GAAOyb,IAAI,CAACkG,KAAK,CAAC5kB,GAAG,CAAC8qB,GAC7BE,EAAO/nB,GAAOyb,IAAI,CAACkG,KAAK,CAAC3kB,GAAG,CAAC6qB,GAE7BG,EAAU,CAACvB,CAAM,CAAC,EAAE,CAACtB,CAAC,CAAEsB,CAAM,CAAC,EAAE,CAACtB,CAAC,CAAEsB,CAAM,CAAC,EAAE,CAACtB,CAAC,CAAEsB,CAAM,CAAC,EAAE,CAACtB,CAAC,CAAC,CAC9D8C,EAAOjoB,GAAOyb,IAAI,CAACkG,KAAK,CAAC5kB,GAAG,CAACirB,GAIjC,MAAO,CACL/gB,KAAM6gB,EACN9gB,IAAKihB,EACLzqB,MATUuqB,EAAOD,EAUjBzqB,OANW6qB,GADKzM,IAAI,CAACkG,KAAK,CAAC3kB,GAAG,CAACgrB,GACbC,CAOpB,CACF,EASAE,gBAAiB,SAASV,CAAC,EACzB,IAAIpoB,EAAI,EAAKooB,CAAAA,CAAC,CAAC,EAAE,CAAGA,CAAC,CAAC,EAAE,CAAGA,CAAC,CAAC,EAAE,CAAGA,CAAC,CAAC,EAAE,EAClCW,EAAI,CAAC/oB,EAAIooB,CAAC,CAAC,EAAE,CAAE,CAACpoB,EAAIooB,CAAC,CAAC,EAAE,CAAE,CAACpoB,EAAIooB,CAAC,CAAC,EAAE,CAAEpoB,EAAIooB,CAAC,CAAC,EAAE,CAAC,CAC9C3E,EAAI9iB,GAAOyb,IAAI,CAACE,cAAc,CAAC,CAAEuJ,EAAGuC,CAAC,CAAC,EAAE,CAAEtC,EAAGsC,CAAC,CAAC,EAAE,EAAIW,EAAG,IAG5D,OAFAA,CAAC,CAAC,EAAE,CAAG,CAACtF,EAAEoC,CAAC,CACXkD,CAAC,CAAC,EAAE,CAAG,CAACtF,EAAEqC,CAAC,CACJiD,CACT,EAUA9N,QAAS,SAAS+N,CAAM,CAAEC,CAAc,EACtC,OAAOtV,WAAWuV,OAAOF,GAAQ/N,OAAO,CAACgO,GAC3C,EASAE,UAAW,SAAS1vB,CAAK,CAAE4C,CAAQ,EACjC,IAAI+sB,EAAO,WAAWC,IAAI,CAAC5vB,GACvBuvB,EAASrV,WAAWla,GAIxB,OAHK4C,GACHA,CAAAA,EAAWsE,GAAO2oB,IAAI,CAACC,qBAAqB,EAEtCH,CAAI,CAAC,EAAE,EACb,IAAK,KACH,OAAOJ,EAASroB,GAAOuf,GAAG,CAAG,IAE/B,KAAK,KACH,OAAO8I,EAASroB,GAAOuf,GAAG,CAAG,IAE/B,KAAK,KACH,OAAO8I,EAASroB,GAAOuf,GAAG,KAEvB,KACH,OAAO8I,EAASroB,GAAOuf,GAAG,CAAG,EAE/B,KAAK,KACH,OAAO8I,EAASroB,GAAOuf,GAAG,CAAG,GAAK,EAEpC,KAAK,KACH,OAAO8I,EAAS3sB,CAElB,SACE,OAAO2sB,CACX,CACF,EAQAQ,cAAe,WACb,MAAO,EACT,EASAC,SAAU,SAASlvB,CAAI,CAAEmvB,CAAS,EAGhC,OADAnvB,EAAOoG,GAAOyb,IAAI,CAACuN,MAAM,CAACC,QAAQ,CAACrvB,EAAKsvB,MAAM,CAAC,GAAGtf,WAAW,GAAKhQ,EAAKsK,KAAK,CAAC,IACtElE,GAAOyb,IAAI,CAAC0N,gBAAgB,CAACJ,EAAU,CAACnvB,EAAK,EAStDwvB,iBAAkB,SAASxvB,CAAI,EAC7B,IAAI7B,EAAa,CACf,sBACA,QACA,KACA,QACD,CACD,OAAQ6B,GACN,IAAK,iBACH7B,EAAaA,EAAW+F,MAAM,CAAC,CAAC,KAAM,KAAM,KAAM,KAAM,gBAAiB,oBAAoB,EAC7F,KACF,KAAK,iBACH/F,EAAaA,EAAW+F,MAAM,CAAC,CAAC,gBAAiB,oBAAqB,KAAM,KAAM,IAAK,KAAM,KAAM,KAAK,EACxG,KACF,KAAK,OACH/F,EAAaA,EAAW+F,MAAM,CAAC,CAAC,SAAU,aAAc,eAAe,CAE3E,CACA,OAAO/F,CACT,EAQAoxB,iBAAkB,SAASJ,CAAS,EAClC,GAAI,CAACA,EACH,OAAO/oB,GAGT,IACwBsE,EADpB+kB,EAAQN,EAAUO,KAAK,CAAC,KACxBpH,EAAMmH,EAAM9wB,MAAM,CAClB2qB,EAAM3P,GAAUvT,GAAOrM,MAAM,CAEjC,IAAK2Q,EAAI,EAAGA,EAAI4d,EAAK,EAAE5d,EACrB4e,EAAMA,CAAG,CAACmG,CAAK,CAAC/kB,EAAE,CAAC,CAGrB,OAAO4e,CACT,EAUA7K,UAAW,SAAStY,CAAG,CAAE6iB,CAAQ,CAAExuB,CAAO,CAAE+L,CAAW,EACrD,GAAI,CAACJ,EAAK,CACR6iB,GAAYA,EAAST,IAAI,CAAC/tB,EAAS2L,GACnC,MACF,CAEA,IAAIN,EAAMO,GAAOyb,IAAI,CAAC8N,WAAW,GAG7BC,eAAiB,WACnB5G,GAAYA,EAAST,IAAI,CAAC/tB,EAASqL,EAAK,IACxCA,EAAMA,EAAI8L,MAAM,CAAG9L,EAAIgqB,OAAO,CAAG,IACnC,CAEAhqB,CAAAA,EAAI8L,MAAM,CAAGie,eAEb/pB,EAAIgqB,OAAO,CAAG,WACZzpB,GAAOghB,GAAG,CAAC,iBAAmBvhB,EAAIC,GAAG,EACrCkjB,GAAYA,EAAST,IAAI,CAAC/tB,EAAS,KAAM,IACzCqL,EAAMA,EAAI8L,MAAM,CAAG9L,EAAIgqB,OAAO,CAAG,IACnC,EAO4B,IAAxB1pB,EAAI2hB,OAAO,CAAC,SAEdvhB,MADAA,GAEAV,CAAAA,EAAIU,WAAW,CAAGA,CAAAA,EAMQ,mBAAxBJ,EAAI2pB,SAAS,CAAC,EAAE,MAClBjqB,EAAI8L,MAAM,CAAG,KACbvL,GAAOyb,IAAI,CAACkO,cAAc,CAAClqB,EAAK+pB,iBAGlC/pB,EAAIC,GAAG,CAAGK,CACZ,EASA4pB,eAAgB,SAASlqB,CAAG,CAAE+pB,CAAc,EAC1C,IAAIhwB,EAAMwG,GAAOwc,QAAQ,CAACoN,aAAa,CAAC,MACxCpwB,CAAAA,EAAIiC,KAAK,CAAC+B,KAAK,CAAGhE,EAAIiC,KAAK,CAAC4B,MAAM,CAAG,MACrC7D,EAAIiC,KAAK,CAACwL,IAAI,CAAGzN,EAAIiC,KAAK,CAACuL,GAAG,CAAG,QACjCxN,EAAIiC,KAAK,CAACouB,QAAQ,CAAG,WACrBrwB,EAAIswB,WAAW,CAACrqB,GAChBO,GAAOwc,QAAQ,CAACuN,aAAa,CAAC,QAAQD,WAAW,CAACtwB,GAMlDiG,EAAI8L,MAAM,CAAG,WACXie,IACAhwB,EAAI2T,UAAU,CAAC6c,WAAW,CAACxwB,GAC3BA,EAAM,IACR,CACF,EAYAywB,eAAgB,SAAS3iB,CAAO,CAAEsb,CAAQ,CAAEmG,CAAS,CAAEmB,CAAO,EAG5D,IAAIC,EAAmB,EAAE,CACrBC,EAAmB,EACnBC,EAAkB/iB,CAJtBA,EAAUA,GAAW,EAAE,EAIO/O,MAAM,CAEpC,SAAS+xB,WACH,EAAEF,IAAqBC,GACzBzH,GAAYA,EAASuH,EAAiBhiB,MAAM,CAAC,SAAS+a,CAAG,EAEvD,OAAOA,CACT,GAEJ,CAEA,GAAI,CAACmH,EAAiB,CACpBzH,GAAYA,EAASuH,GACrB,MACF,CAEA7iB,EAAQ2f,OAAO,CAAC,SAAUnE,CAAC,CAAE7W,CAAK,EAEhC,GAAI,CAAC6W,GAAK,CAACA,EAAElpB,IAAI,CAAE,CACjB0wB,WACA,MACF,CAEAC,GADmB9O,IAAI,CAACqN,QAAQ,CAAChG,EAAElpB,IAAI,CAAEmvB,GACnCyB,UAAU,CAAC1H,EAAG,SAAUI,CAAG,CAAEuH,CAAK,EACtCA,GAAUN,CAAAA,CAAgB,CAACle,EAAM,CAAGiX,CAAAA,EACpCgH,GAAWA,EAAQpH,EAAGI,EAAKuH,GAC3BH,UACF,EACF,EACF,EASAI,wBAAyB,SAAUhyB,CAAM,CAAEtE,CAAO,CAAEwuB,CAAQ,EAC1D,IAAI+H,EAAe3qB,GAAOmW,MAAM,CAACyU,aAAa,CAACziB,MAAM,CAAC,SAAUnD,CAAG,EAAI,MAAO,CAAC,CAACtM,CAAM,CAACsM,EAAI,GAC3FhF,GAAOyb,IAAI,CAACwO,cAAc,CAACU,EAAatiB,GAAG,CAAC,SAAUrD,CAAG,EAAI,OAAOtM,CAAM,CAACsM,EAAI,GAAM,SAAU6lB,CAAY,EACzG,IAAIvjB,EAAU,CAAC,EACfqjB,EAAa1D,OAAO,CAAC,SAAUjiB,CAAG,CAAEiH,CAAK,EACvC3E,CAAO,CAACtC,EAAI,CAAG6lB,CAAY,CAAC5e,EAAM,CAClC7X,GAAYA,CAAAA,CAAO,CAAC4Q,EAAI,CAAG6lB,CAAY,CAAC5e,EAAM,CAChD,GACA2W,GAAYA,EAAStb,EACvB,EACF,EAUAwjB,gBAAiB,SAASC,CAAQ,CAAEnI,CAAQ,EAG1C,SAAS0H,WACH,EAAEU,IAAsBC,GAC1BrI,GAAYA,EAASsI,EAEzB,CAEA,IAAIA,EAAoB,EAAE,CACtBF,EAAoB,EACpBC,EAAcF,CAVlBA,EAAWA,GAAY,EAAE,EAUExyB,MAAM,CAEjC,GAAI,CAAC0yB,EAAa,CAChBrI,GAAYA,EAASsI,GACrB,MACF,CAEAH,EAAS9D,OAAO,CAAC,SAAU3mB,CAAC,CAAE2L,CAAK,EAC7B3L,GAAKA,EAAEujB,MAAM,CACf,IAAI7jB,GAAO8jB,OAAO,CAACxjB,EAAG,SAAS6qB,CAAO,EACpCD,CAAiB,CAACjf,EAAM,CAAGkf,EAC3Bb,UACF,IAGAY,CAAiB,CAACjf,EAAM,CAAG3L,EAC3BgqB,WAEJ,EACF,EAWAc,iBAAkB,SAASC,CAAQ,CAAElzB,CAAO,CAAEmzB,CAAI,EAChD,IAAI5yB,SACJ,GAAgB2yB,IAAAA,EAAS9yB,MAAM,CACtB8yB,CAAQ,CAAC,EAAE,EAEhBlzB,IACEA,EAAQqF,KAAK,EAAIrF,EAAQkF,MAAM,CACjClF,EAAQozB,WAAW,CAAG,CACpBrG,EAAG/sB,EAAQqF,KAAK,CAAG,EACnB2nB,EAAGhtB,EAAQkF,MAAM,CAAG,CACtB,GAGA,OAAOlF,EAAQqF,KAAK,CACpB,OAAOrF,EAAQkF,MAAM,GAGzB3E,EAAS,IAAIsH,GAAOwrB,KAAK,CAACH,EAAUlzB,GAChB,SAATmzB,GACT5yB,CAAAA,EAAO+yB,UAAU,CAAGH,CAAAA,EAEf5yB,EACT,EAUAgzB,uBAAwB,SAAS7H,CAAM,CAAE8H,CAAW,CAAEC,CAAU,EAC9D,GAAIA,GAAc1uB,MAAMC,OAAO,CAACyuB,GAC9B,IAAK,IAAItnB,EAAI,EAAG4d,EAAM0J,EAAWrzB,MAAM,CAAE+L,EAAI4d,EAAK5d,IAC5CsnB,CAAU,CAACtnB,EAAE,GAAIuf,GACnB8H,CAAAA,CAAW,CAACC,CAAU,CAACtnB,EAAE,CAAC,CAAGuf,CAAM,CAAC+H,CAAU,CAACtnB,EAAE,CAAC,CAI1D,EAQAunB,oBAAqB,WACnB,OAAO7rB,GAAOwc,QAAQ,CAACoN,aAAa,CAAC,SACvC,EASAkC,kBAAmB,SAASp3B,CAAM,EAChC,IAAIq3B,EAAY/rB,GAAOyb,IAAI,CAACoQ,mBAAmB,GAI/C,OAHAE,EAAUvuB,KAAK,CAAG9I,EAAO8I,KAAK,CAC9BuuB,EAAU1uB,MAAM,CAAG3I,EAAO2I,MAAM,CAChC0uB,EAAUjO,UAAU,CAAC,MAAMG,SAAS,CAACvpB,EAAQ,EAAG,GACzCq3B,CACT,EAWAjjB,UAAW,SAASkjB,CAAQ,CAAEjtB,CAAM,CAAEktB,CAAO,EAC3C,OAAOD,EAASljB,SAAS,CAAC,SAAW/J,EAAQktB,EAC/C,EAQA1C,YAAa,WACX,OAAOvpB,GAAOwc,QAAQ,CAACoN,aAAa,CAAC,MACvC,EAWAsC,0BAA2B,SAAS7sB,CAAC,CAAEsK,CAAC,CAAEwiB,CAAK,EAE7C,MAAO,CACL9sB,CAAC,CAAC,EAAE,CAAGsK,CAAC,CAAC,EAAE,CAAGtK,CAAC,CAAC,EAAE,CAAGsK,CAAC,CAAC,EAAE,CACzBtK,CAAC,CAAC,EAAE,CAAGsK,CAAC,CAAC,EAAE,CAAGtK,CAAC,CAAC,EAAE,CAAGsK,CAAC,CAAC,EAAE,CACzBtK,CAAC,CAAC,EAAE,CAAGsK,CAAC,CAAC,EAAE,CAAGtK,CAAC,CAAC,EAAE,CAAGsK,CAAC,CAAC,EAAE,CACzBtK,CAAC,CAAC,EAAE,CAAGsK,CAAC,CAAC,EAAE,CAAGtK,CAAC,CAAC,EAAE,CAAGsK,CAAC,CAAC,EAAE,CACzBwiB,EAAQ,EAAI9sB,CAAC,CAAC,EAAE,CAAGsK,CAAC,CAAC,EAAE,CAAGtK,CAAC,CAAC,EAAE,CAAGsK,CAAC,CAAC,EAAE,CAAGtK,CAAC,CAAC,EAAE,CAC5C8sB,EAAQ,EAAI9sB,CAAC,CAAC,EAAE,CAAGsK,CAAC,CAAC,EAAE,CAAGtK,CAAC,CAAC,EAAE,CAAGsK,CAAC,CAAC,EAAE,CAAGtK,CAAC,CAAC,EAAE,CAC7C,EAUH+sB,YAAa,SAAS/sB,CAAC,EACrB,IAAI+kB,EAAQzJ,EAAMtb,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,EACxBgtB,EAAQzR,EAAIvb,CAAC,CAAC,EAAE,CAAE,GAAKub,EAAIvb,CAAC,CAAC,EAAE,CAAE,GACjCmH,EAASkU,EAAK2R,GACd5lB,EAAS,CAACpH,CAAC,CAAC,EAAE,CAAGA,CAAC,CAAC,EAAE,CAAGA,CAAC,CAAC,EAAE,CAAGA,CAAC,CAAC,EAAE,EAAImH,EAE3C,MAAO,CACL4d,MAAOA,EAAQvJ,EACfrU,OAAQA,EACRC,OAAQA,EACR6lB,MAAOA,EALSjtB,CAAC,CAAC,EAAE,CAAGA,CAAC,CAAC,EAAE,CAAGA,CAAC,CAAC,EAAE,CAAGA,CAAE,CAAC,EAAE,CAAEgtB,GAK7BxR,EACf0R,MAAO,EACPC,WAAYntB,CAAC,CAAC,EAAE,CAChBotB,WAAYptB,CAAC,CAAC,EAAE,CAEpB,EAYAqtB,iBAAkB,SAASv0B,CAAO,EAChC,GAAI,CAACA,EAAQisB,KAAK,CAChB,OAAOpkB,GAAO6f,OAAO,CAAC/hB,MAAM,GAE9B,IAAI6uB,EAAQ3sB,GAAOyb,IAAI,CAACjB,gBAAgB,CAACriB,EAAQisB,KAAK,EAClDD,EAAMnkB,GAAOyb,IAAI,CAAC0I,GAAG,CAACwI,GACtB5Q,EAAM/b,GAAOyb,IAAI,CAACM,GAAG,CAAC4Q,GAC1B,MAAO,CAACxI,EAAKpI,EAAK,CAACA,EAAKoI,EAAK,EAAG,EAAE,EAoBpCyI,qBAAsB,SAASz0B,CAAO,EACpC,IAAIqO,EAAS,KAA0B,IAAnBrO,EAAQqO,MAAM,CAAmB,EAAIrO,EAAQqO,MAAM,CACnEC,EAAS,KAA0B,IAAnBtO,EAAQsO,MAAM,CAAmB,EAAItO,EAAQsO,MAAM,CACnEomB,EAAc,CACZ10B,EAAQ20B,KAAK,CAAG,CAACtmB,EAASA,EAC1B,EACA,EACArO,EAAQ40B,KAAK,CAAG,CAACtmB,EAASA,EAC1B,EACA,EAAE,CACJqf,EAAW9lB,GAAOyb,IAAI,CAACyQ,yBAAyB,CAChD1R,EAAmBxa,GAAOyb,IAAI,CAACjB,gBAAgB,CAanD,OAZIriB,EAAQm0B,KAAK,EACfO,CAAAA,EAAc/G,EACZ+G,EACA,CAAC,EAAG,EAAGjwB,KAAKowB,GAAG,CAACxS,EAAiBriB,EAAQm0B,KAAK,GAAI,EAAE,CACpD,KAEAn0B,EAAQo0B,KAAK,EACfM,CAAAA,EAAc/G,EACZ+G,EACA,CAAC,EAAGjwB,KAAKowB,GAAG,CAACxS,EAAiBriB,EAAQo0B,KAAK,GAAI,EAAG,EAAE,CACpD,KAEGM,CACT,EAoBAI,cAAe,SAAS90B,CAAO,EAC7B,IAAI+0B,EAAS,CAAC,EAAG,EAAG,EAAG,EAAG/0B,EAAQq0B,UAAU,EAAI,EAAGr0B,EAAQs0B,UAAU,EAAI,EAAE,CACvE3G,EAAW9lB,GAAOyb,IAAI,CAACyQ,yBAAyB,CAQpD,OAPI/zB,EAAQisB,KAAK,EACf8I,CAAAA,EAASpH,EAASoH,EAAQltB,GAAOyb,IAAI,CAACiR,gBAAgB,CAACv0B,GAAAA,EAErDA,CAAAA,IAAAA,EAAQqO,MAAM,EAAUrO,IAAAA,EAAQsO,MAAM,EACtCtO,EAAQm0B,KAAK,EAAIn0B,EAAQo0B,KAAK,EAAIp0B,EAAQ20B,KAAK,EAAI30B,EAAQ40B,KAAK,GAClEG,CAAAA,EAASpH,EAASoH,EAAQltB,GAAOyb,IAAI,CAACmR,oBAAoB,CAACz0B,GAAAA,EAEtD+0B,CACT,EAQAC,qBAAsB,SAAUt0B,CAAM,EACpCA,EAAO2N,MAAM,CAAG,EAChB3N,EAAO4N,MAAM,CAAG,EAChB5N,EAAOyzB,KAAK,CAAG,EACfzzB,EAAO0zB,KAAK,CAAG,EACf1zB,EAAOi0B,KAAK,CAAG,GACfj0B,EAAOk0B,KAAK,CAAG,GACfl0B,EAAOu0B,MAAM,CAAC,EAChB,EASAC,oBAAqB,SAAUx0B,CAAM,EACnC,MAAO,CACL2N,OAAQ3N,EAAO2N,MAAM,CACrBC,OAAQ5N,EAAO4N,MAAM,CACrB6lB,MAAOzzB,EAAOyzB,KAAK,CACnBC,MAAO1zB,EAAO0zB,KAAK,CACnBnI,MAAOvrB,EAAOurB,KAAK,CACnBnd,KAAMpO,EAAOoO,IAAI,CACjB6lB,MAAOj0B,EAAOi0B,KAAK,CACnBC,MAAOl0B,EAAOk0B,KAAK,CACnB/lB,IAAKnO,EAAOmO,GAAG,CAEnB,EAUAsmB,cAAe,SAASzP,CAAG,CAAEqH,CAAC,CAAEC,CAAC,CAAEoI,CAAS,EAItCA,EAAY,IACVrI,EAAIqI,EACNrI,GAAKqI,EAGLrI,EAAI,EAEFC,EAAIoI,EACNpI,GAAKoI,EAGLpI,EAAI,GAIR,IAA2B7gB,EAAvBkpB,EAAiB,GACjBC,EAAY5P,EAAI6P,YAAY,CAACxI,EAAGC,EAAGoI,EAAAA,GAAmB,EAAGA,EAAAA,GAAmB,GAC5EI,EAAIF,EAAUlkB,IAAI,CAAChR,MAAM,CAG7B,IAAK+L,EAAI,EAAGA,EAAIqpB,GAGVH,CAAmB,GADvBA,CAAAA,EAAiBI,EADArkB,IAAI,CAACjF,EAAE,EACC,GAFRA,GAAK,GAUxB,OAFAmpB,EAAY,KAELD,CACT,EAOAK,kCAAmC,SAASC,CAAS,EACnD,IAC6CC,EADzCC,EAAc,OAAQC,EAAS,MAC/BC,EAAmBJ,EAAUxE,KAAK,CAAC,KAevC,OAbI4E,GAAoBA,EAAiB31B,MAAM,GAEzCy1B,SADJA,CAAAA,EAAcE,EAAiBC,GAAG,KACJH,UAAAA,GAC5BD,EAAQC,EACRA,EAAc,QAEPE,EAAiB31B,MAAM,EAC9Bw1B,CAAAA,EAAQG,EAAiBC,GAAG,KAMzB,CACLH,YAAaA,EACbC,OAJOF,SAAAA,EAAmBA,EAAM7pB,KAAK,CAAC,EAAG,GAAK,OAK9CkqB,OAJOL,SAAAA,EAAmBA,EAAM7pB,KAAK,CAAC,EAAG,GAAK,MAKhD,CACF,EAcAmqB,qBAAsB,SAASC,CAAU,EACvCA,CAAAA,EAAa,CAACA,GAAc,IAAIC,WAAW,IAIlCvuB,GAAOkgB,eAAe,CAACoO,EAAW,EACzC,OAAOtuB,GAAOkgB,eAAe,CAACoO,EAAW,CAHzCtuB,GAAOkgB,eAAe,CAAG,CAAE,CAK/B,EAWAsO,gBAAiB,SAASC,CAAE,CAAEC,CAAW,EACvC,IAAIC,EAAa/xB,KAAK8d,IAAI,CAACgU,EAAcD,GAEzC,MAAO,CAAEvJ,EAAGtoB,KAAKif,KAAK,CAAC8S,GAAaxJ,EADfvoB,KAAKif,KAAK,CAAC6S,EAAcC,EACQ,CACxD,EAEAC,SAAU,SAAS7xB,CAAG,CAAEjE,CAAK,CAAEkE,CAAG,EAChC,OAAOJ,KAAKI,GAAG,CAACD,EAAKH,KAAKG,GAAG,CAACjE,EAAOkE,GACvC,EAeA6xB,eAAgB,SAAShL,CAAM,CAAE8H,CAAW,EAC1C,OAAO/uB,KAAKG,GAAG,CAAC4uB,EAAYnuB,KAAK,CAAGqmB,EAAOrmB,KAAK,CAAEmuB,EAAYtuB,MAAM,CAAGwmB,EAAOxmB,MAAM,CACtF,EAeAyxB,iBAAkB,SAASjL,CAAM,CAAE8H,CAAW,EAC5C,OAAO/uB,KAAKI,GAAG,CAAC2uB,EAAYnuB,KAAK,CAAGqmB,EAAOrmB,KAAK,CAAEmuB,EAAYtuB,MAAM,CAAGwmB,EAAOxmB,MAAM,CACtF,EASA0xB,YAAa,SAASnH,CAAS,EAC7B,MAAO,UAAYA,EAAUvf,GAAG,CAAC,SAASvP,CAAK,EAC7C,OAAOkH,GAAOyb,IAAI,CAACnB,OAAO,CAACxhB,EAAOkH,GAAOmW,MAAM,CAAC6Y,mBAAmB,CACrE,GAAGC,IAAI,CAAC,KAAO,GACjB,EAcAC,0BAA2B,SAASx2B,CAAM,CAAEkvB,CAAS,EACnD,IAAIuH,EAAWnvB,GAAOyb,IAAI,CAAC0M,eAAe,CAACP,GACvCwH,EAAiBpvB,GAAOyb,IAAI,CAACyQ,yBAAyB,CAACiD,EAAUz2B,EAAO22B,aAAa,IACzFrvB,GAAOyb,IAAI,CAAC6T,sBAAsB,CAAC52B,EAAQ02B,EAC7C,EAWAG,qBAAsB,SAAS72B,CAAM,CAAEkvB,CAAS,EAC9C5nB,GAAOyb,IAAI,CAAC6T,sBAAsB,CAChC52B,EACAsH,GAAOyb,IAAI,CAACyQ,yBAAyB,CAACtE,EAAWlvB,EAAO22B,aAAa,IAEzE,EAQAC,uBAAwB,SAAS52B,CAAM,CAAEkvB,CAAS,EAChD,IAAIzvB,EAAU6H,GAAOyb,IAAI,CAAC2Q,WAAW,CAACxE,GAClC4H,EAAS,IAAIxvB,GAAOilB,KAAK,CAAC9sB,EAAQq0B,UAAU,CAAEr0B,EAAQs0B,UAAU,CACpE/zB,CAAAA,EAAOo0B,KAAK,CAAG,GACfp0B,EAAOq0B,KAAK,CAAG,GACfr0B,EAAOoM,GAAG,CAAC,SAAU3M,EAAQqO,MAAM,EACnC9N,EAAOoM,GAAG,CAAC,SAAU3M,EAAQsO,MAAM,EACnC/N,EAAO4zB,KAAK,CAAGn0B,EAAQm0B,KAAK,CAC5B5zB,EAAO6zB,KAAK,CAAGp0B,EAAQo0B,KAAK,CAC5B7zB,EAAO0rB,KAAK,CAAGjsB,EAAQisB,KAAK,CAC5B1rB,EAAO+2B,mBAAmB,CAACD,EAAQ,SAAU,SAC/C,EAkBAE,mBAAoB,SAASlyB,CAAK,CAAEH,CAAM,CAAElF,CAAO,EACjD,IAAIw3B,EAAOnyB,EAAQ,EAAGoyB,EAAOvyB,EAAS,EAkBlCwyB,EAAkB7vB,GAAOyb,IAAI,CAACmR,oBAAoB,CAACz0B,GACnD23B,EAAO9vB,GAAOyb,IAAI,CAACkM,yBAAyB,CAlBnC,CACP,CACEzC,EAAG,CAACyK,EACJxK,EAAG,CAACyK,CACN,EACA,CACE1K,EAAGyK,EACHxK,EAAG,CAACyK,CACN,EACA,CACE1K,EAAG,CAACyK,EACJxK,EAAGyK,CACL,EACA,CACE1K,EAAGyK,EACHxK,EAAGyK,CACL,EAAE,CAEiDC,GACzD,MAAO,CACL3K,EAAG4K,EAAKtyB,KAAK,CACb2nB,EAAG2K,EAAKzyB,MAAM,CAElB,EAqBA0yB,eAAgB,SAAUC,CAAE,CAAEC,CAAE,EAC9B,IAAI5wB,EAAI2wB,EAAIrmB,EAAIsmB,CACZ5wB,CAAAA,EAAE8vB,QAAQ,EAAI,CAACxlB,EAAEwlB,QAAQ,GAE3B9vB,EAAI4wB,EACJtmB,EAAIqmB,GAGNhwB,GAAOyb,IAAI,CAAC6T,sBAAsB,CAChC3lB,EACA3J,GAAOyb,IAAI,CAACyQ,yBAAyB,CACnClsB,GAAOyb,IAAI,CAAC0M,eAAe,CAAC9oB,EAAE6wB,mBAAmB,IACjDvmB,EAAEumB,mBAAmB,KAIzB,IAAIf,EAAW9vB,EAAE8vB,QAAQ,EAAIxlB,EAAEwlB,QAAQ,CAKvC,OAJIA,GAEF9vB,CAAAA,EAAE8vB,QAAQ,CAAGxlB,EAAEwlB,QAAQ,CAAG,IAErB,IAAInvB,GAAOwrB,KAAK,CAAC,CAACnsB,EAAE,CAAE,CAAE8wB,SAAUxmB,EAAGwlB,SAAUA,CAAS,EACjE,EASAiB,gBAAiB,SAASC,CAAS,CAAEC,CAAS,CAAEC,CAAY,EAE1D,OADAA,EAAeA,GAAgB,GACxBF,EAAW9nB,IAAI,GAAK+nB,EAAU/nB,IAAI,EACjC8nB,EAAUG,MAAM,GAAKF,EAAUE,MAAM,EACrCH,EAAU3Z,WAAW,GAAK4Z,EAAU5Z,WAAW,EAC/C2Z,EAAU30B,QAAQ,GAAK40B,EAAU50B,QAAQ,EACzC20B,EAAU/B,UAAU,GAAKgC,EAAUhC,UAAU,EAC7C+B,EAAUI,UAAU,GAAKH,EAAUG,UAAU,EAC7CJ,EAAUK,SAAS,GAAKJ,EAAUI,SAAS,EAC3CL,EAAUM,MAAM,GAAKL,EAAUK,MAAM,EACpCJ,GACEF,CAAAA,EAAUO,QAAQ,GAAKN,EAAUM,QAAQ,EAC1CP,EAAUQ,SAAS,GAAKP,EAAUO,SAAS,EAC3CR,EAAUS,WAAW,GAAKR,EAAUQ,WAAW,CAC3D,EAWAC,cAAe,SAASj5B,CAAM,CAAEk5B,CAAI,EAMlC,IAAK,IAJDl5B,EAASkI,GAAOyb,IAAI,CAAC/iB,MAAM,CAACqO,KAAK,CAACjP,EAAQ,IAC1Cm5B,EAAYD,EAAK1H,KAAK,CAAC,MACvB4H,EAAY,GAAIb,EAAY,CAAC,EAAGc,EAAc,EAAE,CAE3C7sB,EAAI,EAAGA,EAAI2sB,EAAU14B,MAAM,CAAE+L,IAAK,CACzC,GAAI,CAACxM,CAAM,CAACwM,EAAE,CAAE,CAEd4sB,GAAaD,CAAS,CAAC3sB,EAAE,CAAC/L,MAAM,CAChC,QACF,CAEA,IAAK,IAAI64B,EAAI,EAAGA,EAAIH,CAAS,CAAC3sB,EAAE,CAAC/L,MAAM,CAAE64B,IAAK,CAC5CF,IACA,IAAIZ,EAAYx4B,CAAM,CAACwM,EAAE,CAAC8sB,EAAE,CAExBd,IACiBtwB,GAAOyb,IAAI,CAAC2U,eAAe,CAACC,EAAWC,EAAW,IAEnEa,EAAYt9B,IAAI,CAAC,CACfw9B,MAAOH,EACPI,IAAKJ,EAAY,EACjBz1B,MAAO60B,CACT,GAIAa,CAAW,CAACA,EAAY54B,MAAM,CAAG,EAAE,CAAC+4B,GAAG,IAG3CjB,EAAYC,GAAa,CAAC,CAC5B,CACF,CACA,OAAOa,CACT,EAWAI,gBAAiB,SAASz5B,CAAM,CAAEk5B,CAAI,EACpC,GAAI,CAAC9zB,MAAMC,OAAO,CAACrF,GACjB,OAAOA,EAKT,IAAK,IAHDm5B,EAAYD,EAAK1H,KAAK,CAAC,MACvB4H,EAAY,GAAIM,EAAa,EAAGC,EAAe,CAAC,EAE3CntB,EAAI,EAAGA,EAAI2sB,EAAU14B,MAAM,CAAE+L,IAEpC,IAAK,IAAI8sB,EAAI,EAAGA,EAAIH,CAAS,CAAC3sB,EAAE,CAAC/L,MAAM,CAAE64B,IACvCF,IAEIp5B,CAAM,CAAC05B,EAAW,EACjB15B,CAAM,CAAC05B,EAAW,CAACH,KAAK,EAAIH,GAC5BA,EAAYp5B,CAAM,CAAC05B,EAAW,CAACF,GAAG,GAErCG,CAAY,CAACntB,EAAE,CAAGmtB,CAAY,CAACntB,EAAE,EAAI,CAAC,EAEtCmtB,CAAY,CAACntB,EAAE,CAAC8sB,EAAE,CAAGjb,OAAOub,MAAM,CAAC,CAAC,EAAG55B,CAAM,CAAC05B,EAAW,CAAC/1B,KAAK,EAE3Dy1B,IAAcp5B,CAAM,CAAC05B,EAAW,CAACF,GAAG,CAAG,GACzCE,KAKR,OAAOC,CACT,CACF,EAED,WACC,IAAIE,EAAQz0B,MAAMkZ,SAAS,CAAC6Y,IAAI,CAC5B2C,EAAiB,CACfC,EAAG,EACHlE,EAAG,EACHmE,EAAG,EACH1M,EAAG,EACHgM,EAAG,EACHxK,EAAG,EACHmL,EAAG,EACHtK,EAAG,EACHpoB,EAAG,CACL,EACA2yB,EAAmB,CACjBH,EAAG,IACHI,EAAG,GACL,EAkFJ,SAASC,gBAAgBC,CAAE,CAAEC,CAAE,CAAEC,CAAE,CAAEC,CAAE,EACrC,IAAIC,EAAK31B,KAAK+d,KAAK,CAACyX,EAAID,GACpBK,EAAK51B,KAAK+d,KAAK,CAAC2X,EAAID,UACxB,GAAUE,EACDC,EAAKD,EAGL,EAAI31B,KAAKsnB,EAAE,CAAIqO,CAAAA,EAAKC,CAAAA,CAE/B,CAiTA,SAASC,eAAeC,CAAE,CAAEC,CAAE,CAAEC,CAAE,CAAEC,CAAE,EACpC,OAAOj2B,KAAK8d,IAAI,CAAC,CAACkY,EAAKF,CAAAA,EAAOE,CAAAA,EAAKF,CAAAA,EAAM,CAACG,EAAKF,CAAAA,EAAOE,CAAAA,EAAKF,CAAAA,EAC7D,CAwEA,SAASG,aAAaC,CAAQ,CAAEL,CAAE,CAAEC,CAAE,EACpC,IAA8BryB,EAAe0yB,EAAzCC,EAAQ,CAAE/N,EAAGwN,EAAIvN,EAAGwN,CAAG,EAAMO,EAAS,EAC1C,IAAKF,EAAO,EAAGA,GAAQ,IAAKA,GAAQ,EAClC1yB,EAAIyyB,EAASC,EAAO,KACpBE,GAAUT,eAAeQ,EAAM/N,CAAC,CAAE+N,EAAM9N,CAAC,CAAE7kB,EAAE4kB,CAAC,CAAE5kB,EAAE6kB,CAAC,EACnD8N,EAAQ3yB,EAEV,OAAO4yB,CACT,CAyCA,SAASC,oBAAoB7H,CAAI,EAK/B,IAAK,IAJmChwB,EAGOy3B,EAAUK,EAAUC,EAH/DC,EAAc,EAAGpR,EAAMoJ,EAAK/yB,MAAM,CAGlCm6B,EAAK,EAAGC,EAAK,EAAGC,EAAK,EAAGC,EAAK,EAAGU,EAAO,EAAE,CACpCjvB,EAAI,EAAGA,EAAI4d,EAAK5d,IAAK,CAO5B,OALA8uB,EAAW,CACTlO,EAAGwN,EACHvN,EAAGwN,EACHa,QAASl4B,CAJXA,EAAUgwB,CAAI,CAAChnB,EAAE,CAIC,CAAC,EAAE,EAEbhJ,CAAO,CAAC,EAAE,EAChB,IAAK,IACH83B,EAAS76B,MAAM,CAAG,EAClBq6B,EAAKF,EAAKp3B,CAAO,CAAC,EAAE,CACpBu3B,EAAKF,EAAKr3B,CAAO,CAAC,EAAE,CACpB,KACF,KAAK,IACH83B,EAAS76B,MAAM,CAAGk6B,eAAeC,EAAIC,EAAIr3B,CAAO,CAAC,EAAE,CAAEA,CAAO,CAAC,EAAE,EAC/Do3B,EAAKp3B,CAAO,CAAC,EAAE,CACfq3B,EAAKr3B,CAAO,CAAC,EAAE,CACf,KACF,KAAK,IACHy3B,EAAWU,SAhIoBC,CAAG,CAAEC,CAAG,CAAEC,CAAG,CAAEC,CAAG,CAAEC,CAAG,CAAEC,CAAG,CAAEC,CAAG,CAAEC,CAAG,EAC3E,OAAO,SAASC,CAAG,EACjB,IAAIlE,EAdCvI,EAcQyM,EAAAA,EAAMjE,EAXd,EAWuBiE,EAAAA,EAXV,GAWUA,CAXNzM,EAWY0M,EAR7B,EAQsCD,EAR7B,GAQ6BA,CARzBzM,EAAM,GAQmByM,CARfzM,EAQqB2M,EAL5C,CAAC,EAKoDF,CALhDzM,EAAM,GAK0CyM,CALtCzM,EAAM,GAKgCyM,CAL5BzM,EAM9B,MAAO,CACLvC,EAAG8O,EAAMhE,EAAK8D,EAAM7D,EAAK2D,EAAMO,EAAKT,EAAMU,EAC1CjP,EAAG8O,EAAMjE,EAAK+D,EAAM9D,EAAK4D,EAAMM,EAAKR,EAAMS,CAC5C,CACF,CACF,EAyHU1B,EACAC,EACAr3B,CAAO,CAAC,EAAE,CACVA,CAAO,CAAC,EAAE,CACVA,CAAO,CAAC,EAAE,CACVA,CAAO,CAAC,EAAE,CACVA,CAAO,CAAC,EAAE,CACVA,CAAO,CAAC,EAAE,EAEZ+3B,EAAcgB,SAhIWX,CAAG,CAAEC,CAAG,CAAEC,CAAG,CAAEC,CAAG,CAAEC,CAAG,CAAEC,CAAG,CAAEC,CAAG,CAAEC,CAAG,EACrE,OAAO,SAAUC,CAAG,EAClB,IAAII,EAAO,EAAIJ,EAKf,OAAOt3B,KAAK+d,KAAK,CAFF,EAAK2Z,EAAOA,EAAQT,CAAAA,EAAMF,CAAAA,EAAS,EAAIW,EAAOJ,EAAOH,CAAAA,EAAMF,CAAAA,EACrE,EAAIK,EAAMA,EAAOD,CAAAA,EAAMF,CAAAA,EAHb,EAAKO,EAAOA,EAAQV,CAAAA,EAAMF,CAAAA,EAAS,EAAIY,EAAOJ,EAAOJ,CAAAA,EAAMF,CAAAA,EACrE,EAAIM,EAAMA,EAAOF,CAAAA,EAAMF,CAAAA,EAI9B,CACF,EAwHUpB,EACAC,EACAr3B,CAAO,CAAC,EAAE,CACVA,CAAO,CAAC,EAAE,CACVA,CAAO,CAAC,EAAE,CACVA,CAAO,CAAC,EAAE,CACVA,CAAO,CAAC,EAAE,CACVA,CAAO,CAAC,EAAE,EAEZ83B,EAASL,QAAQ,CAAGA,EACpBK,EAASC,WAAW,CAAGA,EACvBD,EAAS76B,MAAM,CAAGu6B,aAAaC,EAAUL,EAAIC,GAC7CD,EAAKp3B,CAAO,CAAC,EAAE,CACfq3B,EAAKr3B,CAAO,CAAC,EAAE,CACf,KACF,KAAK,IACHy3B,EAAWwB,SA1HwBb,CAAG,CAAEC,CAAG,CAAEC,CAAG,CAAEC,CAAG,CAAEC,CAAG,CAAEC,CAAG,EACrE,OAAO,SAASG,CAAG,EACjB,IAAIlE,EAbCvI,EAaQyM,EAAMjE,EATd,EASuBiE,EATd,GAScA,CATVzM,EASgB0M,EAL7B,CAAC,EAKqCD,CALjCzM,EAAM,GAK2ByM,CALvBzM,EAMpB,MAAO,CACLvC,EAAG4O,EAAM9D,EAAK4D,EAAM3D,EAAKyD,EAAMS,EAC/BhP,EAAG4O,EAAM/D,EAAK6D,EAAM5D,EAAK0D,EAAMQ,CACjC,CACF,CACF,EAmHUzB,EACAC,EACAr3B,CAAO,CAAC,EAAE,CACVA,CAAO,CAAC,EAAE,CACVA,CAAO,CAAC,EAAE,CACVA,CAAO,CAAC,EAAE,EAEZ+3B,EAAcmB,SAxHed,CAAG,CAAEC,CAAG,CAAEC,CAAG,CAAEC,CAAG,CAAEC,CAAG,CAAEC,CAAG,EAC/D,OAAO,SAAUG,CAAG,EAClB,IAAII,EAAO,EAAIJ,EAGf,OAAOt3B,KAAK+d,KAAK,CADF,EAAK2Z,EAAQT,CAAAA,EAAMF,CAAAA,EAAS,EAAIO,EAAOH,CAAAA,EAAMF,CAAAA,EAD7C,EAAKS,EAAQV,CAAAA,EAAMF,CAAAA,EAAS,EAAIQ,EAAOJ,CAAAA,EAAMF,CAAAA,EAG9D,CACF,EAkHUlB,EACAC,EACAr3B,CAAO,CAAC,EAAE,CACVA,CAAO,CAAC,EAAE,CACVA,CAAO,CAAC,EAAE,CACVA,CAAO,CAAC,EAAE,EAEZ83B,EAASL,QAAQ,CAAGA,EACpBK,EAASC,WAAW,CAAGA,EACvBD,EAAS76B,MAAM,CAAGu6B,aAAaC,EAAUL,EAAIC,GAC7CD,EAAKp3B,CAAO,CAAC,EAAE,CACfq3B,EAAKr3B,CAAO,CAAC,EAAE,CACf,KACF,KAAK,IACL,IAAK,IAEH83B,EAASqB,KAAK,CAAG7B,EACjBQ,EAASsB,KAAK,CAAG7B,EACjBO,EAAS76B,MAAM,CAAGk6B,eAAeC,EAAIC,EAAIC,EAAIC,GAC7CH,EAAKE,EACLD,EAAKE,CAET,CACAS,GAAeF,EAAS76B,MAAM,CAC9Bg7B,EAAK1/B,IAAI,CAACu/B,EACZ,CAEA,OADAG,EAAK1/B,IAAI,CAAC,CAAE0E,OAAQ+6B,EAAapO,EAAGwN,EAAIvN,EAAGwN,CAAG,GACvCY,CACT,CAmMAvzB,GAAOyb,IAAI,CAACkZ,QAAQ,CAAG,SAASC,CAAQ,EACtC,OAAOA,EAASvsB,GAAG,CAAC,SAAUwsB,CAAO,EAAI,OAAOA,EAAQ5F,IAAI,CAAC,IAAM,GAAGA,IAAI,CAAC,IAC7E,EACAjvB,GAAOyb,IAAI,CAACqZ,SAAS,CAlJrB,SAAmBC,CAAU,EAC3B,IAEIC,EACAC,EAQA77B,EACA87B,EAEA5J,EAdAxwB,EAAS,EAAE,CACX6rB,EAAS,EAAE,CAGXwO,EAAKn1B,GAAO0f,aAAa,CACzB0V,EAAU,sDACVC,EAAkB,IAAMD,EAAU,IAAMp1B,GAAOyf,QAAQ,CACvD6V,EAAgB,SAAWt1B,GAAOyf,QAAQ,CAAG,IAG7C8V,EAAyB,OAFfF,EAAkB,IAAMA,EAAkB,IAAMA,EAAkBC,EAAgBA,EAC1FD,EAAkB,KAAOD,EAAU,IACQ,KAKjD,GAAI,CAACL,GAAc,CAACA,EAAW37B,KAAK,CAClC,OAAO0B,EAETwwB,EAAOyJ,EAAW37B,KAAK,CAAC,gCAExB,IAAK,IAAWo8B,EAAPlxB,EAAI,EAAiB4d,EAAMoJ,EAAK/yB,MAAM,CAAE+L,EAAI4d,EAAK5d,IAAK,CAG7D4wB,EAAYF,CAFZA,EAAc1J,CAAI,CAAChnB,EAAE,EAEGJ,KAAK,CAAC,GAAG+D,IAAI,GACrC0e,EAAOpuB,MAAM,CAAG,EAEhB,IAKWwI,EALPyyB,EAAUwB,EAAY9L,MAAM,CAAC,GAGjC,GAFAsM,EAAe,CAAChC,EAAQ,CAEpBA,MAAAA,EAAQjF,WAAW,GAErB,KAAgBxtB,EAAOw0B,EAAuB7M,IAAI,CAACwM,IACjD,IAAK,IAAIO,EAAI,EAAGA,EAAI10B,EAAKxI,MAAM,CAAEk9B,IAC/B9O,EAAO9yB,IAAI,CAACkN,CAAI,CAAC00B,EAAE,OAKvB,KAAQr8B,EAAQ+7B,EAAGzM,IAAI,CAACwM,IACtBvO,EAAO9yB,IAAI,CAACuF,CAAK,CAAC,EAAE,EAIxB,IAAK,IAAIq8B,EAAI,EAAGC,EAAO/O,EAAOpuB,MAAM,CAAEk9B,EAAIC,EAAMD,IAEzCE,MADLV,EAASjiB,WAAW2T,CAAM,CAAC8O,EAAE,IAE3BD,EAAa3hC,IAAI,CAACohC,GAItB,IAAIW,EAAgBhE,CAAc,CAAC4B,EAAQjF,WAAW,GAAG,CACrDsH,EAAkB7D,CAAgB,CAACwB,EAAQ,EAAIA,EAEnD,GAAIgC,EAAaj9B,MAAM,CAAG,EAAIq9B,EAC5B,IAAK,IAAIE,EAAI,EAAGC,EAAOP,EAAaj9B,MAAM,CAAEu9B,EAAIC,EAAMD,GAAKF,EACzD96B,EAAOjH,IAAI,CAAC,CAAC2/B,EAAQ,CAAC11B,MAAM,CAAC03B,EAAatxB,KAAK,CAAC4xB,EAAGA,EAAIF,KACvDpC,EAAUqC,OAIZ/6B,EAAOjH,IAAI,CAAC2hC,EAEhB,CAEA,OAAO16B,CACT,EAiFAkF,GAAOyb,IAAI,CAACua,eAAe,CAxkB3B,SAAyB1K,CAAI,EAI3B,IAIoBhwB,EAASgJ,EAAG2xB,EAGNC,EAAUC,EAAUC,EAP1ClR,EAAI,EAAGC,EAAI,EAAGjD,EAAMoJ,EAAK/yB,MAAM,CAI/Bm6B,EAAK,EAAGC,EAAK,EAGb0D,EAAkB,EAAE,CACxB,IAAK/xB,EAAI,EAAGA,EAAI4d,EAAK,EAAE5d,EAAG,CAGxB,OAFA2xB,EAAY,GAEJ36B,CADRA,EAAUgwB,CAAI,CAAChnB,EAAE,CAACJ,KAAK,CAAC,GACT,CAAC,EAAE,EAChB,IAAK,IACH5I,CAAO,CAAC,EAAE,CAAG,IACbA,CAAO,CAAC,EAAE,EAAI4pB,EACd5pB,CAAO,CAAC,EAAE,EAAI6pB,CAEhB,KAAK,IACHD,EAAI5pB,CAAO,CAAC,EAAE,CACd6pB,EAAI7pB,CAAO,CAAC,EAAE,CACd,KACF,KAAK,IACHA,CAAO,CAAC,EAAE,EAAI4pB,CAEhB,KAAK,IACH5pB,CAAO,CAAC,EAAE,CAAG,IACbA,CAAO,CAAC,EAAE,CAAG6pB,EACbD,EAAI5pB,CAAO,CAAC,EAAE,CACd,KACF,KAAK,IACHA,CAAO,CAAC,EAAE,EAAI6pB,CAEhB,KAAK,IACH7pB,CAAO,CAAC,EAAE,CAAG,IACb6pB,EAAI7pB,CAAO,CAAC,EAAE,CACdA,CAAO,CAAC,EAAE,CAAG4pB,EACb5pB,CAAO,CAAC,EAAE,CAAG6pB,EACb,KACF,KAAK,IACH7pB,CAAO,CAAC,EAAE,CAAG,IACbA,CAAO,CAAC,EAAE,EAAI4pB,EACd5pB,CAAO,CAAC,EAAE,EAAI6pB,CAEhB,KAAK,IACHD,EAAI5pB,CAAO,CAAC,EAAE,CACd6pB,EAAI7pB,CAAO,CAAC,EAAE,CACdo3B,EAAKp3B,CAAO,CAAC,EAAE,CACfq3B,EAAKr3B,CAAO,CAAC,EAAE,CACf,KACF,KAAK,IACHA,CAAO,CAAC,EAAE,CAAG,IACbA,CAAO,CAAC,EAAE,EAAI4pB,EACd5pB,CAAO,CAAC,EAAE,EAAI6pB,EACd7pB,CAAO,CAAC,EAAE,EAAI4pB,EACd5pB,CAAO,CAAC,EAAE,EAAI6pB,EACd7pB,CAAO,CAAC,EAAE,EAAI4pB,EACd5pB,CAAO,CAAC,EAAE,EAAI6pB,CAEhB,KAAK,IACHgR,EAAW76B,CAAO,CAAC,EAAE,CACrB86B,EAAW96B,CAAO,CAAC,EAAE,CACrB4pB,EAAI5pB,CAAO,CAAC,EAAE,CACd6pB,EAAI7pB,CAAO,CAAC,EAAE,CACd,KACF,KAAK,IACHA,CAAO,CAAC,EAAE,CAAG,IACbA,CAAO,CAAC,EAAE,EAAI4pB,EACd5pB,CAAO,CAAC,EAAE,EAAI6pB,EACd7pB,CAAO,CAAC,EAAE,EAAI4pB,EACd5pB,CAAO,CAAC,EAAE,EAAI6pB,CAEhB,KAAK,IAEC+Q,MAAAA,GAEFC,EAAW,EAAIjR,EAAIiR,EACnBC,EAAW,EAAIjR,EAAIiR,IAKnBD,EAAWjR,EACXkR,EAAWjR,GAEbD,EAAI5pB,CAAO,CAAC,EAAE,CACd6pB,EAAI7pB,CAAO,CAAC,EAAE,CACdA,CAAO,CAAC,EAAE,CAAG,IACbA,CAAO,CAAC,EAAE,CAAGA,CAAO,CAAC,EAAE,CACvBA,CAAO,CAAC,EAAE,CAAGA,CAAO,CAAC,EAAE,CACvBA,CAAO,CAAC,EAAE,CAAGA,CAAO,CAAC,EAAE,CACvBA,CAAO,CAAC,EAAE,CAAGA,CAAO,CAAC,EAAE,CACvBA,CAAO,CAAC,EAAE,CAAG66B,EACb76B,CAAO,CAAC,EAAE,CAAG86B,EAGbD,EAAW76B,CAAO,CAAC,EAAE,CACrB86B,EAAW96B,CAAO,CAAC,EAAE,CACrB,KACF,KAAK,IACHA,CAAO,CAAC,EAAE,CAAG,IACbA,CAAO,CAAC,EAAE,EAAI4pB,EACd5pB,CAAO,CAAC,EAAE,EAAI6pB,EACd7pB,CAAO,CAAC,EAAE,EAAI4pB,EACd5pB,CAAO,CAAC,EAAE,EAAI6pB,CAEhB,KAAK,IACHgR,EAAW76B,CAAO,CAAC,EAAE,CACrB86B,EAAW96B,CAAO,CAAC,EAAE,CACrB4pB,EAAI5pB,CAAO,CAAC,EAAE,CACd6pB,EAAI7pB,CAAO,CAAC,EAAE,CACd,KACF,KAAK,IACHA,CAAO,CAAC,EAAE,CAAG,IACbA,CAAO,CAAC,EAAE,EAAI4pB,EACd5pB,CAAO,CAAC,EAAE,EAAI6pB,CAEhB,KAAK,IACC+Q,MAAAA,GAEFC,EAAW,EAAIjR,EAAIiR,EACnBC,EAAW,EAAIjR,EAAIiR,IAKnBD,EAAWjR,EACXkR,EAAWjR,GAEb7pB,CAAO,CAAC,EAAE,CAAG,IACb4pB,EAAI5pB,CAAO,CAAC,EAAE,CACd6pB,EAAI7pB,CAAO,CAAC,EAAE,CACdA,CAAO,CAAC,EAAE,CAAG66B,EACb76B,CAAO,CAAC,EAAE,CAAG86B,EACb96B,CAAO,CAAC,EAAE,CAAG4pB,EACb5pB,CAAO,CAAC,EAAE,CAAG6pB,EACb,KACF,KAAK,IACH7pB,CAAO,CAAC,EAAE,CAAG,IACbA,CAAO,CAAC,EAAE,EAAI4pB,EACd5pB,CAAO,CAAC,EAAE,EAAI6pB,CAEhB,KAAK,IACH8Q,EAAY,GACZI,EAAkBA,EAAgBv4B,MAAM,CAACw4B,SA/KvBC,CAAE,CAAEC,CAAE,CAAE7P,CAAM,EAUtC,IAAK,IATD8P,EAAK9P,CAAM,CAAC,EAAE,CACd+P,EAAK/P,CAAM,CAAC,EAAE,CACdgQ,EAAMhQ,CAAM,CAAC,EAAE,CACfiQ,EAAQjQ,CAAM,CAAC,EAAE,CACjBkQ,EAAQlQ,CAAM,CAAC,EAAE,CAGjBmQ,EAAWC,SAlLMC,CAAG,CAAEC,CAAG,CAAER,CAAE,CAAEC,CAAE,CAAEE,CAAK,CAAEC,CAAK,CAAEK,CAAO,EAC5D,IAAIhT,EAAKtnB,KAAKsnB,EAAE,CAAEiT,EAAKD,EAAUhT,EAAK,IAClCkT,EAAQp3B,GAAOyb,IAAI,CAACM,GAAG,CAACob,GACxBE,EAAQr3B,GAAOyb,IAAI,CAAC0I,GAAG,CAACgT,GACxBG,EAAQ,EAAGC,EAAQ,EAKnBC,EAAK,CAACH,EAAQL,EAAM,GAAMI,EAAQH,EAAM,GACxCQ,EAAK,CAACJ,EAAQJ,EAAM,GAAMG,EAAQJ,EAAM,GACxCU,EAAMjB,CALVA,EAAK75B,KAAKkf,GAAG,CAAC2a,EAAAA,EAKCA,EAAIkB,EAAMjB,CAJzBA,EAAK95B,KAAKkf,GAAG,CAAC4a,EAAAA,EAIgBA,EAAIkB,EAAMH,EAAKA,EAAII,EAAML,EAAKA,EACxDM,EAAKJ,EAAMC,EAAMD,EAAME,EAAMD,EAAME,EACnCE,EAAO,EAEX,GAAID,EAAK,EAAG,CACV,IAAIlR,EAAIhqB,KAAK8d,IAAI,CAAC,EAAIod,EAAMJ,CAAAA,EAAMC,CAAAA,GAClClB,GAAM7P,EACN8P,GAAM9P,CACR,MAEEmR,EAAO,CAACnB,IAAUC,EAAQ,GAAO,GACzBj6B,KAAK8d,IAAI,CAAEod,EAAMJ,CAAAA,EAAME,EAAMD,EAAME,CAAAA,GAG7C,IAAIG,EAAKD,EAAOtB,EAAKgB,EAAKf,EACtBuB,EAAK,CAACF,EAAOrB,EAAKc,EAAKf,EACvByB,EAAMb,EAAQW,EAAKZ,EAAQa,EAAKjB,GAAAA,EAChCmB,EAAMf,EAAQY,EAAKX,EAAQY,EAAKhB,GAAAA,EAChCmB,EAASlG,gBAAgB,EAAG,EAAG,CAACsF,EAAKQ,CAAAA,EAAMvB,EAAI,CAACgB,EAAKQ,CAAAA,EAAMvB,GAC3D2B,EAASnG,gBAAgB,CAACsF,EAAKQ,CAAAA,EAAMvB,EAAI,CAACgB,EAAKQ,CAAAA,EAAMvB,EAAI,CAAC,CAACc,EAAKQ,CAAAA,EAAMvB,EAAI,CAAC,CAACgB,EAAKQ,CAAAA,EAAMvB,EAEvFG,CAAU,IAAVA,GAAewB,EAAS,EAC1BA,GAAU,EAAInU,EAEG,IAAV2S,GAAewB,EAAS,GAC/BA,CAAAA,GAAU,EAAInU,CAAAA,EAShB,IAAK,IALDoU,EAAW17B,KAAKof,IAAI,CAACpf,KAAKkf,GAAG,CAACuc,EAASnU,EAAK,IAC5CppB,EAAS,EAAE,CAAEy9B,EAASF,EAASC,EAC/BE,EAAK,EAAI,EAAI57B,KAAKmf,GAAG,CAACwc,EAAS,GAAK37B,KAAKmf,GAAG,CAACwc,EAAS,GAAK37B,KAAKmf,GAAG,CAACwc,EAAS,GAC7EE,EAAML,EAASG,EAEVj0B,EAAI,EAAGA,EAAIg0B,EAAUh0B,IAC5BxJ,CAAM,CAACwJ,EAAE,CAAGo0B,SArESC,CAAG,CAAEF,CAAG,CAAEpB,CAAK,CAAED,CAAK,CAAEX,CAAE,CAAEC,CAAE,CAAEwB,CAAG,CAAEC,CAAG,CAAEK,CAAE,CAAElB,CAAK,CAAEC,CAAK,EACjF,IAAIqB,EAAS54B,GAAOyb,IAAI,CAAC0I,GAAG,CAACwU,GACzBE,EAAS74B,GAAOyb,IAAI,CAACM,GAAG,CAAC4c,GACzBG,EAAS94B,GAAOyb,IAAI,CAAC0I,GAAG,CAACsU,GACzBM,EAAS/4B,GAAOyb,IAAI,CAACM,GAAG,CAAC0c,GACzBzB,EAAMK,EAAQZ,EAAKqC,EAAS1B,EAAQV,EAAKqC,EAASb,EAClDjB,EAAMG,EAAQX,EAAKqC,EAASzB,EAAQX,EAAKqC,EAASZ,EAMtD,MAAO,CAAC,IALGb,EAAQkB,EAAO,EAACnB,EAAQZ,EAAKoC,EAASzB,EAAQV,EAAKkC,CAAAA,EACnDrB,EAAQiB,EAAO,EAACpB,EAAQX,EAAKoC,EAASxB,EAAQX,EAAKkC,CAAAA,EACnD5B,EAAMwB,EAAOnB,CAAAA,EAAQZ,EAAKsC,EAAS3B,EAAQV,EAAKoC,CAAAA,EAChD7B,EAAMuB,EAAOpB,CAAAA,EAAQX,EAAKsC,EAAS1B,EAAQX,EAAKoC,CAAAA,EAKzD9B,EAAKC,EACN,EAqD6BmB,EAAQK,EAAKpB,EAAOD,EAAOX,EAAIC,EAAIwB,EAAKC,EAAKK,EAAIlB,EAAOC,GACpFD,EAAQx8B,CAAM,CAACwJ,EAAE,CAAC,EAAE,CACpBizB,EAAQz8B,CAAM,CAACwJ,EAAE,CAAC,EAAE,CACpB8zB,EAASK,EACTA,GAAOF,EAET,OAAOz9B,CACT,EA6H+Bk+B,CAFd,CAAC,EAAE,CAEgBzC,EAAI0C,CADvB,CAAC,EAAE,CACyBzC,EAAIC,EAAIC,EAAIE,EAAOC,EAAOF,GAE5DryB,EAAI,EAAG4d,EAAM4U,EAASv+B,MAAM,CAAE+L,EAAI4d,EAAK5d,IAC9CwyB,CAAQ,CAACxyB,EAAE,CAAC,EAAE,EAAIiyB,EAClBO,CAAQ,CAACxyB,EAAE,CAAC,EAAE,EAAIkyB,EAClBM,CAAQ,CAACxyB,EAAE,CAAC,EAAE,EAAIiyB,EAClBO,CAAQ,CAACxyB,EAAE,CAAC,EAAE,EAAIkyB,EAClBM,CAAQ,CAACxyB,EAAE,CAAC,EAAE,EAAIiyB,EAClBO,CAAQ,CAACxyB,EAAE,CAAC,EAAE,EAAIkyB,EAEpB,OAAOM,CACT,EA4JkE5R,EAAGC,EAAG7pB,IAChE4pB,EAAI5pB,CAAO,CAAC,EAAE,CACd6pB,EAAI7pB,CAAO,CAAC,EAAE,CACd,KACF,KAAK,IACL,IAAK,IACH4pB,EAAIwN,EACJvN,EAAIwN,CAGR,CACKsD,GACHI,EAAgBxiC,IAAI,CAACyH,GAEvB46B,EAAW56B,CAAO,CAAC,EAAE,CAEvB,OAAO+6B,CACT,EAqaAr2B,GAAOyb,IAAI,CAACyd,uBAAuB,CAzEnC,SAAiCzS,CAAM,CAAE0S,CAAU,EACjD,IAAe70B,EAAXgnB,EAAO,EAAE,CACT8N,EAAK,IAAIp5B,GAAOilB,KAAK,CAACwB,CAAM,CAAC,EAAE,CAACvB,CAAC,CAAEuB,CAAM,CAAC,EAAE,CAACtB,CAAC,EAC9CkU,EAAK,IAAIr5B,GAAOilB,KAAK,CAACwB,CAAM,CAAC,EAAE,CAACvB,CAAC,CAAEuB,CAAM,CAAC,EAAE,CAACtB,CAAC,EAC9CjD,EAAMuE,EAAOluB,MAAM,CAAE+gC,EAAY,EAAGC,EAAY,EAAGC,EAAatX,EAAM,EAQ1E,IAPAiX,EAAaA,GAAc,EAEvBK,IACFF,EAAY7S,CAAM,CAAC,EAAE,CAACvB,CAAC,CAAGmU,EAAGnU,CAAC,CAAG,GAAKuB,CAAM,CAAC,EAAE,CAACvB,CAAC,GAAKmU,EAAGnU,CAAC,CAAG,EAAI,EACjEqU,EAAY9S,CAAM,CAAC,EAAE,CAACtB,CAAC,CAAGkU,EAAGlU,CAAC,CAAG,GAAKsB,CAAM,CAAC,EAAE,CAACtB,CAAC,GAAKkU,EAAGlU,CAAC,CAAG,EAAI,GAEnEmG,EAAKz3B,IAAI,CAAC,CAAC,IAAKulC,EAAGlU,CAAC,CAAGoU,EAAYH,EAAYC,EAAGjU,CAAC,CAAGoU,EAAYJ,EAAW,EACxE70B,EAAI,EAAGA,EAAI4d,EAAK5d,IAAK,CACxB,GAAI,CAAC80B,EAAGK,EAAE,CAACJ,GAAK,CACd,IAAIK,EAAWN,EAAGO,YAAY,CAACN,GAI/B/N,EAAKz3B,IAAI,CAAC,CAAC,IAAKulC,EAAGlU,CAAC,CAAEkU,EAAGjU,CAAC,CAAEuU,EAASxU,CAAC,CAAEwU,EAASvU,CAAC,CAAC,CACrD,CACAiU,EAAK3S,CAAM,CAACniB,EAAE,CACVA,EAAK,EAAKmiB,EAAOluB,MAAM,EACzB8gC,CAAAA,EAAK5S,CAAM,CAACniB,EAAI,EAAE,CAEtB,CAMA,OALIk1B,IACFF,EAAYF,EAAGlU,CAAC,CAAGuB,CAAM,CAACniB,EAAI,EAAE,CAAC4gB,CAAC,CAAG,EAAIkU,EAAGlU,CAAC,GAAKuB,CAAM,CAACniB,EAAI,EAAE,CAAC4gB,CAAC,CAAG,EAAI,GACxEqU,EAAYH,EAAGjU,CAAC,CAAGsB,CAAM,CAACniB,EAAI,EAAE,CAAC6gB,CAAC,CAAG,EAAIiU,EAAGjU,CAAC,GAAKsB,CAAM,CAACniB,EAAI,EAAE,CAAC6gB,CAAC,CAAG,EAAI,IAE1EmG,EAAKz3B,IAAI,CAAC,CAAC,IAAKulC,EAAGlU,CAAC,CAAGoU,EAAYH,EAAYC,EAAGjU,CAAC,CAAGoU,EAAYJ,EAAW,EACtE7N,CACT,EA2CAtrB,GAAOyb,IAAI,CAAC0X,mBAAmB,CAAGA,oBAClCnzB,GAAOyb,IAAI,CAACme,gBAAgB,CA/rB5B,SAA0BC,CAAE,CAAEC,CAAE,CAAEpH,CAAE,CAAEC,CAAE,CAAEC,CAAE,CAAEC,CAAE,CAAEkH,CAAE,CAAEC,CAAE,EAEtD,GAAIh6B,GAAO2gB,mBAAmB,GAC5BsZ,EAAatI,EAAMxP,IAAI,CAACrhB,WACpBd,GAAO0gB,kBAAkB,CAACuZ,EAAW,EACvC,OAAOj6B,GAAO0gB,kBAAkB,CAACuZ,EAAW,CAIhD,IARIA,EAYA56B,EAAGsK,EAAGynB,EAAG3J,EAAGyS,EAAIC,EAAIC,EAAMC,EAJ1B3f,EAAO9d,KAAK8d,IAAI,CAChB3d,EAAMH,KAAKG,GAAG,CAAEC,EAAMJ,KAAKI,GAAG,CAC9B8e,EAAMlf,KAAKkf,GAAG,CAAEwe,EAAU,EAAE,CAC5BC,EAAS,CAAC,EAAE,CAAE,EAAE,CAAC,CAGrB5wB,EAAI,EAAIkwB,EAAK,GAAKnH,EAAK,EAAIE,EAC3BvzB,EAAI,GAAKw6B,EAAK,EAAInH,EAAK,EAAIE,EAAK,EAAImH,EACpC3I,EAAI,EAAIsB,EAAK,EAAImH,EAEjB,IAAK,IAAIv1B,EAAI,EAAGA,EAAI,EAAG,EAAEA,EAAG,CAO1B,GANIA,EAAI,IACNqF,EAAI,EAAImwB,EAAK,GAAKnH,EAAK,EAAIE,EAC3BxzB,EAAI,GAAKy6B,EAAK,EAAInH,EAAK,EAAIE,EAAK,EAAImH,EACpC5I,EAAI,EAAIuB,EAAK,EAAImH,GAGfhe,MAAAA,EAAIzc,GAAY,CAClB,GAAIyc,MAAAA,EAAInS,GACN,QAGE,GADJ8d,CAAAA,EAAI,CAAC2J,EAAIznB,CAAAA,GACI8d,EAAI,GACf6S,EAAQzmC,IAAI,CAAC4zB,GAEf,QACF,EAEI2S,CAAAA,CADJA,EAAOzwB,EAAIA,EAAI,EAAIynB,EAAI/xB,CAAAA,EACZ,KAKP,EADJ66B,CAAAA,EAAK,CAAC,CAACvwB,EADP0wB,CAAAA,EAAW3f,EAAK0f,EAAAA,CACLC,EAAa,GAAIh7B,CAAAA,CAAAA,GACd66B,EAAK,GACjBI,EAAQzmC,IAAI,CAACqmC,GAGX,EADJC,CAAAA,EAAK,CAAC,CAACxwB,EAAI0wB,CAAAA,EAAa,GAAIh7B,CAAAA,CAAAA,GACd86B,EAAK,GACjBG,EAAQzmC,IAAI,CAACsmC,GAEjB,CAGA,IADA,IAAIjV,EAAGC,EAAiCqV,EAA9B/E,EAAI6E,EAAQ/hC,MAAM,CAAEm9B,EAAOD,EAC9BA,KAGLvQ,EAAIsV,CADJA,EAAK,EADL/S,CAAAA,EAAI6S,CAAO,CAAC7E,EAAE,CACLhO,EACC+S,EAAKA,EAAKX,EAAO,EAAIW,EAAKA,EAAK/S,EAAIiL,EAAO,EAAI8H,EAAK/S,EAAIA,EAAImL,EAAOnL,EAAIA,EAAIA,EAAIsS,EACxFQ,CAAM,CAAC,EAAE,CAAC9E,EAAE,CAAGvQ,EAEfC,EAAIqV,EAAMA,EAAKA,EAAKV,EAAO,EAAIU,EAAKA,EAAK/S,EAAIkL,EAAO,EAAI6H,EAAK/S,EAAIA,EAAIoL,EAAOpL,EAAIA,EAAIA,EAAIuS,EACxFO,CAAM,CAAC,EAAE,CAAC9E,EAAE,CAAGtQ,CAGjBoV,CAAAA,CAAM,CAAC,EAAE,CAAC7E,EAAK,CAAGmE,EAClBU,CAAM,CAAC,EAAE,CAAC7E,EAAK,CAAGoE,EAClBS,CAAM,CAAC,EAAE,CAAC7E,EAAO,EAAE,CAAGqE,EACtBQ,CAAM,CAAC,EAAE,CAAC7E,EAAO,EAAE,CAAGsE,EACtB,IAAIl/B,EAAS,CACX,CACEoqB,EAAGnoB,EAAI+kB,KAAK,CAAC,KAAMyY,CAAM,CAAC,EAAE,EAC5BpV,EAAGpoB,EAAI+kB,KAAK,CAAC,KAAMyY,CAAM,CAAC,EAAE,CAC9B,EACA,CACErV,EAAGloB,EAAI8kB,KAAK,CAAC,KAAMyY,CAAM,CAAC,EAAE,EAC5BpV,EAAGnoB,EAAI8kB,KAAK,CAAC,KAAMyY,CAAM,CAAC,EAAE,CAC9B,EACD,CAID,OAHIv6B,GAAO2gB,mBAAmB,EAC5B3gB,CAAAA,GAAO0gB,kBAAkB,CAACuZ,EAAW,CAAGn/B,CAAAA,EAEnCA,CACT,EAgnBAkF,GAAOyb,IAAI,CAACgf,cAAc,CAzM1B,SAAwBnP,CAAI,CAAEoP,CAAQ,CAAEC,CAAK,EACtCA,GACHA,CAAAA,EAAQxH,oBAAoB7H,EAAAA,EAG9B,IADA,IAAIhnB,EAAI,EACDo2B,EAAYC,CAAK,CAACr2B,EAAE,CAAC/L,MAAM,CAAG,GAAM+L,EAAKq2B,EAAMpiC,MAAM,CAAG,GAC7DmiC,GAAYC,CAAK,CAACr2B,EAAE,CAAC/L,MAAM,CAC3B+L,IAGF,IACkDivB,EAD9CqH,EAAUD,CAAK,CAACr2B,EAAE,CAAEu2B,EAAaH,EAAWE,EAAQriC,MAAM,CAC1Di7B,EAAUoH,EAAQpH,OAAO,CAAEqB,EAAUvJ,CAAI,CAAChnB,EAAE,CAEhD,OAAQkvB,GACN,IAAK,IACH,MAAO,CAAEtO,EAAG0V,EAAQ1V,CAAC,CAAEC,EAAGyV,EAAQzV,CAAC,CAAEf,MAAO,CAAE,CAChD,KAAK,IACL,IAAK,IAMH,MADAmP,CAJAA,EAAO,IAAIvzB,GAAOilB,KAAK,CAAC2V,EAAQ1V,CAAC,CAAE0V,EAAQzV,CAAC,EAAE2V,IAAI,CAChD,IAAI96B,GAAOilB,KAAK,CAAC2V,EAAQnG,KAAK,CAAEmG,EAAQlG,KAAK,EAC7CmG,EAAAA,EAEGzW,KAAK,CAAGxnB,KAAK+d,KAAK,CAACigB,EAAQlG,KAAK,CAAGkG,EAAQzV,CAAC,CAAEyV,EAAQnG,KAAK,CAAGmG,EAAQ1V,CAAC,EACrEqO,CACT,KAAK,IAMH,MADAA,CAJAA,EAAO,IAAIvzB,GAAOilB,KAAK,CAAC2V,EAAQ1V,CAAC,CAAE0V,EAAQzV,CAAC,EAAE2V,IAAI,CAChD,IAAI96B,GAAOilB,KAAK,CAAC4P,CAAO,CAAC,EAAE,CAAEA,CAAO,CAAC,EAAE,EACvCgG,EAAAA,EAEGzW,KAAK,CAAGxnB,KAAK+d,KAAK,CAACka,CAAO,CAAC,EAAE,CAAG+F,EAAQzV,CAAC,CAAE0P,CAAO,CAAC,EAAE,CAAG+F,EAAQ1V,CAAC,EAC/DqO,CACT,KAAK,IAEL,IAAK,IADH,OAAOwH,SAzJsBH,CAAO,CAAEF,CAAQ,EAKlD,IAJA,IACIp6B,EAAG06B,EAA6DC,EADhEjI,EAAO,EAAGE,EAAS,EAAGH,EAAW6H,EAAQ7H,QAAQ,CAAEE,EAAQ,CAAE/N,EAAG0V,EAAQ1V,CAAC,CAAEC,EAAGyV,EAAQzV,CAAC,EAC3E+V,EAAW,IAAM7H,EAAcuH,EAAQvH,WAAW,CAG3DH,EAASwH,GAAYQ,EAAW,MACrC56B,EAAIyyB,EAASC,GACbiI,EAAWjI,EAGPgI,CAFJA,EAAUvI,eAAeQ,EAAM/N,CAAC,CAAE+N,EAAM9N,CAAC,CAAE7kB,EAAE4kB,CAAC,CAAE5kB,EAAE6kB,CAAC,GAEpC+N,EAAUwH,GAEvB1H,GAAQkI,EACRA,GAAY,IAGZjI,EAAQ3yB,EACR0yB,GAAQkI,EACRhI,GAAU8H,GAId,OADA16B,EAAE8jB,KAAK,CAAGiP,EAAY4H,GACf36B,CACT,EAkIuCs6B,EAASF,EAG9C,CACF,EAsKA16B,GAAOyb,IAAI,CAAC0f,aAAa,CAlCzB,SAAuB7P,CAAI,CAAE1D,CAAS,CAAEwT,CAAU,EAOhD,OANIA,GACFxT,CAAAA,EAAY5nB,GAAOyb,IAAI,CAACyQ,yBAAyB,CAC/CtE,EACA,CAAC,EAAG,EAAG,EAAG,EAAG,CAACwT,EAAWlW,CAAC,CAAE,CAACkW,EAAWjW,CAAC,CAAC,GAGvCmG,EAAKjjB,GAAG,CAAC,SAASgzB,CAAW,EAElC,IAAK,IADDC,EAAaD,EAAYn3B,KAAK,CAAC,GAAI4gB,EAAQ,CAAC,EACvCxgB,EAAI,EAAGA,EAAI+2B,EAAY9iC,MAAM,CAAG,EAAG+L,GAAK,EAC/CwgB,EAAMI,CAAC,CAAGmW,CAAW,CAAC/2B,EAAE,CACxBwgB,EAAMK,CAAC,CAAGkW,CAAW,CAAC/2B,EAAI,EAAE,CAC5BwgB,EAAQ9kB,GAAOyb,IAAI,CAACE,cAAc,CAACmJ,EAAO8C,GAC1C0T,CAAU,CAACh3B,EAAE,CAAGwgB,EAAMI,CAAC,CACvBoW,CAAU,CAACh3B,EAAI,EAAE,CAAGwgB,EAAMK,CAAC,CAE7B,OAAOmW,CACT,EACF,CAiBF,IACC,WAEC,IAAIp3B,EAAQhH,MAAMkZ,SAAS,CAAClS,KAAK,CAyDjC,SAASuN,KAAKkQ,CAAK,CAAE4Z,CAAU,CAAEC,CAAS,EACxC,GAAI,GAAU7Z,IAAAA,EAAMppB,MAAM,EAI1B,IAAI+L,EAAIqd,EAAMppB,MAAM,CAAG,EACnBuC,EAASygC,EAAa5Z,CAAK,CAACrd,EAAE,CAACi3B,EAAW,CAAG5Z,CAAK,CAACrd,EAAE,CACzD,GAAIi3B,EACF,KAAOj3B,KACDk3B,EAAU7Z,CAAK,CAACrd,EAAE,CAACi3B,EAAW,CAAEzgC,IAClCA,CAAAA,EAAS6mB,CAAK,CAACrd,EAAE,CAACi3B,EAAW,OAKjC,KAAOj3B,KACDk3B,EAAU7Z,CAAK,CAACrd,EAAE,CAAExJ,IACtBA,CAAAA,EAAS6mB,CAAK,CAACrd,EAAE,EAIvB,OAAOxJ,EACT,CAKAkF,GAAOyb,IAAI,CAACkG,KAAK,CAAG,CAClBpZ,KAvCF,SAAcoZ,CAAK,CAAE7oB,CAAK,EAExB,IADA,IAAIg9B,EAAInU,EAAMppB,MAAM,CACbu9B,KACLnU,CAAK,CAACmU,EAAE,CAAGh9B,EAEb,OAAO6oB,CACT,EAkCE8Z,OA7EF,SAAgB9Z,CAAK,CAAE+Z,CAAM,EAE3B,IAAK,IADD36B,EAAOmD,EAAMie,IAAI,CAACrhB,UAAW,GAAIhG,EAAS,EAAE,CACvCwJ,EAAI,EAAG4d,EAAMP,EAAMppB,MAAM,CAAE+L,EAAI4d,EAAK5d,IAC3CxJ,CAAM,CAACwJ,EAAE,CAAGvD,EAAKxI,MAAM,CAAGopB,CAAK,CAACrd,EAAE,CAACo3B,EAAO,CAAC5Z,KAAK,CAACH,CAAK,CAACrd,EAAE,CAAEvD,GAAQ4gB,CAAK,CAACrd,EAAE,CAACo3B,EAAO,CAACvZ,IAAI,CAACR,CAAK,CAACrd,EAAE,EAEnG,OAAOxJ,CACT,EAwEEiC,IAlDF,SAAa4kB,CAAK,CAAE4Z,CAAU,EAC5B,OAAO9pB,KAAKkQ,EAAO4Z,EAAY,SAASI,CAAM,CAAEC,CAAM,EACpD,OAAOD,EAASC,CAClB,EACF,EA+CE5+B,IAhEF,SAAa2kB,CAAK,CAAE4Z,CAAU,EAC5B,OAAO9pB,KAAKkQ,EAAO4Z,EAAY,SAASI,CAAM,CAAEC,CAAM,EACpD,OAAOD,GAAUC,CACnB,EACF,CA6DA,CAEF,IACC,WAcC,SAASvhB,OAAOsR,CAAW,CAAE9H,CAAM,CAAEb,CAAI,EAIvC,GAAIA,GACF,GAAI,CAAChjB,GAAOqf,YAAY,EAAIwE,aAAkBgY,QAE5ClQ,EAAc9H,OAEX,GAAIA,aAAkB3mB,MAAO,CAChCyuB,EAAc,EAAE,CAChB,IAAK,IAAIrnB,EAAI,EAAG4d,EAAM2B,EAAOtrB,MAAM,CAAE+L,EAAI4d,EAAK5d,IAC5CqnB,CAAW,CAACrnB,EAAE,CAAG+V,OAAO,CAAE,EAAGwJ,CAAM,CAACvf,EAAE,CAAE0e,EAE5C,MACK,GAAIa,GAAU,iBAAOA,EACxB,IAAK,IAAIJ,KAAYI,EACfJ,WAAAA,GAAyBA,UAAAA,EAG3BkI,CAAW,CAAClI,EAAS,CAAG,KAEjBI,EAAOiY,cAAc,CAACrY,IAC7BkI,CAAAA,CAAW,CAAClI,EAAS,CAAGpJ,OAAO,CAAE,EAAGwJ,CAAM,CAACJ,EAAS,CAAET,EAAAA,OAM1D2I,EAAc9H,OAIhB,IAAK,IAAIJ,KAAYI,EACnB8H,CAAW,CAAClI,EAAS,CAAGI,CAAM,CAACJ,EAAS,CAG5C,OAAOkI,CACT,CAiBA3rB,GAAOyb,IAAI,CAAC/iB,MAAM,CAAG,CACnB2hB,OAAQA,OACRtT,MAPF,SAAerO,CAAM,CAAEsqB,CAAI,EACzB,OAAO3I,OAAO,CAAE,EAAG3hB,EAAQsqB,EAC7B,CAMA,EACAhjB,GAAOyb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAACra,GAAOyb,IAAI,CAAEzb,GAAO+hB,UAAU,CAC1D,IAwGE/hB,GAAOyb,IAAI,CAACuN,MAAM,CAAG,CACnBC,SAhGF,SAAkBD,CAAM,EACtB,OAAOA,EAAOtf,OAAO,CAAC,UAAW,SAAStQ,CAAK,CAAE2iC,CAAS,EACxD,OAAOA,EAAYA,EAAUnyB,WAAW,GAAK,EAC/C,EACF,EA6FE2Q,WAlFF,SAAoByO,CAAM,CAAEgT,CAAe,EACzC,OAAOhT,EAAOE,MAAM,CAAC,GAAGtf,WAAW,GAChCoyB,CAAAA,EAAkBhT,EAAO9kB,KAAK,CAAC,GAAK8kB,EAAO9kB,KAAK,CAAC,GAAGqqB,WAAW,GACpE,EAgFE0N,UAxEF,SAAmBjT,CAAM,EACvB,OAAOA,EAAOtf,OAAO,CAAC,KAAM,SACzBA,OAAO,CAAC,KAAM,UACdA,OAAO,CAAC,KAAM,UACdA,OAAO,CAAC,KAAM,QACdA,OAAO,CAAC,KAAM,OACnB,EAmEEwyB,cA3DF,SAAuBC,CAAU,EAC/B,IAAWC,EAAP93B,EAAI,EAAQ+3B,EAAY,EAAE,CAC9B,IAAK/3B,EAAI,EAAQA,EAAI63B,EAAW5jC,MAAM,CAAE+L,IACM,KAAvC83B,CAAAA,EAAME,SASOC,CAAG,CAAEj4B,CAAC,EAC1B,IAAIk4B,EAAOD,EAAIE,UAAU,CAACn4B,GAE1B,GAAIqxB,MAAM6G,GACR,MAAO,GAET,GAAIA,EAAO,OAAUA,EAAO,MAC1B,OAAOD,EAAIrT,MAAM,CAAC5kB,GAKpB,GAAI,OAAUk4B,GAAQA,GAAQ,MAAQ,CACpC,GAAID,EAAIhkC,MAAM,EAAK+L,EAAI,EACrB,KAAM,iDAER,IAAIo4B,EAAOH,EAAIE,UAAU,CAACn4B,EAAI,GAC9B,GAAI,MAASo4B,GAAQA,EAAO,MAC1B,KAAM,iDAER,OAAOH,EAAIrT,MAAM,CAAC5kB,GAAKi4B,EAAIrT,MAAM,CAAC5kB,EAAI,EACxC,CAEA,GAAIA,IAAAA,EACF,KAAM,iDAER,IAAIq4B,EAAOJ,EAAIE,UAAU,CAACn4B,EAAI,GAI9B,GAAI,MAASq4B,GAAQA,EAAO,MAC1B,KAAM,iDAIR,MAAO,EACT,EA7C4BR,EAAY73B,EAAAA,GAGpC+3B,EAAUxoC,IAAI,CAACuoC,GAEjB,OAAOC,CACT,CAmDA,EAED,WAEC,IAAIn4B,EAAQhH,MAAMkZ,SAAS,CAAClS,KAAK,CAAE04B,cAAgB,WAAa,EAE5DC,EAAoB,WAClB,IAAK,IAAIv8B,IAAK,CAAE6I,SAAU,CAAE,EAC1B,GAAI7I,aAAAA,EACF,MAAO,GAGX,MAAO,EACT,IAGAw8B,WAAa,SAASvS,CAAK,CAAE1G,CAAM,CAAEkZ,CAAM,EACzC,IAAK,IAAItZ,KAAYI,EAEfJ,KAAY8G,EAAMnU,SAAS,EAC3B,mBAAOmU,EAAMnU,SAAS,CAACqN,EAAS,EAChC,CAACI,CAAM,CAACJ,EAAS,CAAG,IAAI/B,OAAO,CAAC,aAAe,GAEjD6I,EAAMnU,SAAS,CAACqN,EAAS,CAAG,SAAUA,CAAQ,EAC5C,OAAO,WAEL,IAAIuZ,EAAa,IAAI,CAACC,WAAW,CAACD,UAAU,CAC5C,IAAI,CAACC,WAAW,CAACD,UAAU,CAAGD,EAC9B,IAAIG,EAAcrZ,CAAM,CAACJ,EAAS,CAAC3B,KAAK,CAAC,IAAI,CAAEhhB,WAG/C,GAFA,IAAI,CAACm8B,WAAW,CAACD,UAAU,CAAGA,EAE1BvZ,eAAAA,EACF,OAAOyZ,CAEX,CACF,EAAGzZ,GAGH8G,EAAMnU,SAAS,CAACqN,EAAS,CAAGI,CAAM,CAACJ,EAAS,CAG1CoZ,IACEhZ,EAAO1a,QAAQ,GAAKgN,OAAOC,SAAS,CAACjN,QAAQ,EAC/CohB,CAAAA,EAAMnU,SAAS,CAACjN,QAAQ,CAAG0a,EAAO1a,QAAQ,EAExC0a,EAAOsZ,OAAO,GAAKhnB,OAAOC,SAAS,CAAC+mB,OAAO,EAC7C5S,CAAAA,EAAMnU,SAAS,CAAC+mB,OAAO,CAAGtZ,EAAOsZ,OAAO,EAIhD,EAEJ,SAASC,WAAa,CAEtB,SAASC,UAAUC,CAAU,EAK3B,IAJA,IAAIC,EAAe,KACfC,EAAQ,IAAI,CAGTA,EAAMP,WAAW,CAACD,UAAU,EAAE,CACnC,IAAIS,EAAmBD,EAAMP,WAAW,CAACD,UAAU,CAAC5mB,SAAS,CAACknB,EAAW,CACzE,GAAIE,CAAK,CAACF,EAAW,GAAKG,EAAkB,CAC1CF,EAAeE,EACf,KACF,CAEAD,EAAQA,EAAMP,WAAW,CAACD,UAAU,CAAC5mB,SAAS,QAGhD,EAIOtV,UAAWvI,MAAM,CAAG,EACvBglC,EAAazb,KAAK,CAAC,IAAI,CAAE5d,EAAMie,IAAI,CAACrhB,UAAW,IAC/Cy8B,EAAapb,IAAI,CAAC,IAAI,EALjBpB,QAAQC,GAAG,CAAC,sBAAwBsc,EAAa,wCAAyC,IAAI,CAMzG,CAuCAt9B,GAAOyb,IAAI,CAACG,WAAW,CA9BvB,WACE,IAAImhB,EAAS,KACTnR,EAAa1nB,EAAMie,IAAI,CAACrhB,UAAW,GAKvC,SAASypB,QACP,IAAI,CAACmT,UAAU,CAAC5b,KAAK,CAAC,IAAI,CAAEhhB,UAC9B,CAL6B,YAAzB,OAAO8qB,CAAU,CAAC,EAAE,EACtBmR,CAAAA,EAASnR,EAAW+R,KAAK,IAM3BpT,MAAMyS,UAAU,CAAGD,EACnBxS,MAAMqT,UAAU,CAAG,EAAE,CAEjBb,IACFK,SAAShnB,SAAS,CAAG2mB,EAAO3mB,SAAS,CACrCmU,MAAMnU,SAAS,CAAG,IAAIgnB,SACtBL,EAAOa,UAAU,CAAC/pC,IAAI,CAAC02B,QAEzB,IAAK,IAAIjmB,EAAI,EAAG/L,EAASqzB,EAAWrzB,MAAM,CAAE+L,EAAI/L,EAAQ+L,IACtDw4B,WAAWvS,MAAOqB,CAAU,CAACtnB,EAAE,CAAEy4B,GAOnC,OALKxS,MAAMnU,SAAS,CAACsnB,UAAU,EAC7BnT,CAAAA,MAAMnU,SAAS,CAACsnB,UAAU,CAAGd,aAAAA,EAE/BrS,MAAMnU,SAAS,CAAC6mB,WAAW,CAAG1S,MAC9BA,MAAMnU,SAAS,CAACinB,SAAS,CAAGA,UACrB9S,KACT,CAGF,IAGMxP,EAAsB,CAAC,CAAC/a,GAAOwc,QAAQ,CAACoN,aAAa,CAAC,OAAOiU,WAAW,CACxE7iB,EAAc,CAAC,aAAc,YAAa,WAAW,CASzDhb,GAAOyb,IAAI,CAACqiB,WAAW,CAAG,SAAS1lC,CAAO,CAAEkpB,CAAS,CAAEC,CAAO,CAAEppB,CAAO,EACrEC,GAAWA,EAAQyC,gBAAgB,CAACymB,EAAWC,EAASxG,CAAAA,GAA8B5iB,EACxF,EAUA6H,GAAOyb,IAAI,CAACsiB,cAAc,CAAG,SAAS3lC,CAAO,CAAEkpB,CAAS,CAAEC,CAAO,CAAEppB,CAAO,EACxEC,GAAWA,EAAQ4lC,mBAAmB,CAAC1c,EAAWC,EAASxG,CAAAA,GAA8B5iB,EAC3F,EAUA6H,GAAOyb,IAAI,CAACwiB,UAAU,CAAG,SAASrlC,CAAK,EACrC,IARIslC,EAQA9lC,EAAUQ,EAAMC,MAAM,CACtBslC,EAASn+B,GAAOyb,IAAI,CAAC2iB,gBAAgB,CAAChmC,GACtCimC,EATJ,CADIH,EAAYtlC,EAAM0lC,cAAc,GACnBJ,CAAS,CAAC,EAAE,CACpBA,CAAS,CAAC,EAAE,CAQGtlC,EACxB,MAAO,CACLssB,EAAGmZ,EAAKE,OAAO,CAAGJ,EAAOl3B,IAAI,CAC7Bke,EAAGkZ,EAAKG,OAAO,CAAGL,EAAOn3B,GAAG,CAEhC,EAEAhH,GAAOyb,IAAI,CAACgjB,YAAY,CAAG,SAAS7lC,CAAK,EACvC,OAAOoiB,EAAY0G,OAAO,CAAC9oB,EAAMgB,IAAI,EAAI,IAAMhB,UAAAA,EAAM8lC,WAAW,EAsC9DxjB,EAAkB,gBAAOD,CADzBA,EAAUjb,GAAOwc,QAAQ,CAACoN,aAAa,CAAC,QACPnuB,KAAK,CAACkC,OAAO,CAC9Cwd,EAAkB,iBAAOF,EAAQxf,KAAK,CAAC0M,MAAM,CAC7CiT,EAAY,wCAGZC,EAAa,SAAUjjB,CAAO,EAAI,OAAOA,CAAS,EAElD8iB,EAEFG,EAAa,SAASjjB,CAAO,CAAEU,CAAK,EAElC,OADAV,EAAQqD,KAAK,CAACkC,OAAO,CAAG7E,EACjBV,CACT,EAEO+iB,GAEPE,CAAAA,EAAa,SAASjjB,CAAO,CAAEU,CAAK,EAClC,IAAI6lC,EAAKvmC,EAAQqD,KAAK,CAWtB,OAVIrD,EAAQwmC,YAAY,EAAI,CAACxmC,EAAQwmC,YAAY,CAACC,SAAS,EACzDF,CAAAA,EAAGG,IAAI,CAAG,GAER1jB,EAAU2jB,IAAI,CAACJ,EAAGx2B,MAAM,GAC1BrP,EAAQA,GAAS,MAAS,GAAM,iBAAoBA,IAAAA,EAAe,IACnE6lC,EAAGx2B,MAAM,CAAGw2B,EAAGx2B,MAAM,CAACuB,OAAO,CAAC0R,EAAWtiB,IAGzC6lC,EAAGx2B,MAAM,EAAI,kBAAqBrP,IAAAA,EAAe,IAE5CV,CACT,GAGF4H,GAAOyb,IAAI,CAACujB,QAAQ,CA1DpB,SAAkB5mC,CAAO,CAAEN,CAAM,EAC/B,IAAImnC,EAAe7mC,EAAQqD,KAAK,CAChC,GAAI,CAACwjC,EACH,OAAO7mC,EAET,GAAI,iBAAON,EAET,OADAM,EAAQqD,KAAK,CAACyjC,OAAO,EAAI,IAAMpnC,EACxBA,EAAO4pB,OAAO,CAAC,WAAa,GAC/BrG,EAAWjjB,EAASN,EAAOsB,KAAK,CAAC,yBAAyB,CAAC,EAAE,EAC7DhB,EAEN,IAAK,IAAIqrB,KAAY3rB,EACnB,GAAI2rB,YAAAA,EACFpI,EAAWjjB,EAASN,CAAM,CAAC2rB,EAAS,MAEjC,CACH,IAAI0b,EAAqB1b,UAAAA,GAAyBA,aAAAA,EAC7C,KAAmC,IAA5Bwb,EAAaG,UAAU,CAAmB,WAAa,aAC/D3b,EACJwb,EAAaI,WAAW,CAACF,EAAoBrnC,CAAM,CAAC2rB,EAAS,CAC/D,CAEF,OAAOrrB,CACT,EAsCD,WAEC,IAuMMqD,EACA6jC,EAnBFC,EAzKAC,EAZAC,EAASviC,MAAMkZ,SAAS,CAAClS,KAAK,CAmB9Bw7B,QAAU,SAASC,CAAS,EAC1B,OAAOF,EAAOtd,IAAI,CAACwd,EAAW,EAChC,EAEJ,GAAI,CACFH,EAA2BE,QAAQ1/B,GAAOwc,QAAQ,CAACojB,UAAU,aAAa1iC,KAC5E,CACA,MAAOqb,EAAK,CAAE,CAmBd,SAASsnB,YAAYC,CAAO,CAAE/nC,CAAU,EACtC,IAAIgoC,EAAK//B,GAAOwc,QAAQ,CAACoN,aAAa,CAACkW,GACvC,IAAK,IAAI1d,KAAQrqB,EACXqqB,UAAAA,EACF2d,EAAGtmC,SAAS,CAAG1B,CAAU,CAACqqB,EAAK,CAExBA,QAAAA,EACP2d,EAAG9lC,OAAO,CAAGlC,CAAU,CAACqqB,EAAK,CAG7B2d,EAAGC,YAAY,CAAC5d,EAAMrqB,CAAU,CAACqqB,EAAK,EAG1C,OAAO2d,CACT,CAuCA,SAAS3B,iBAAiBhmC,CAAO,EAa/B,IAXA,IAAI6O,EAAO,EACPD,EAAM,EACNi5B,EAAajgC,GAAOwc,QAAQ,CAAC0jB,eAAe,CAC5CC,EAAOngC,GAAOwc,QAAQ,CAAC2jB,IAAI,EAAI,CAC7BC,WAAY,EAAGC,UAAW,CAC5B,EAMGjoC,GAAYA,CAAAA,EAAQ+U,UAAU,EAAI/U,EAAQkoC,IAAI,IAK/CloC,CAFJA,EAAUA,EAAQ+U,UAAU,EAAI/U,EAAQkoC,IAAI,IAE5BtgC,GAAOwc,QAAQ,EAC7BvV,EAAOk5B,EAAKC,UAAU,EAAIH,EAAWG,UAAU,EAAI,EACnDp5B,EAAMm5B,EAAKE,SAAS,EAAKJ,EAAWI,SAAS,EAAI,IAGjDp5B,GAAQ7O,EAAQgoC,UAAU,EAAI,EAC9Bp5B,GAAO5O,EAAQioC,SAAS,EAAI,GAG1BjoC,IAAAA,EAAQmoC,QAAQ,EAAUnoC,UAAAA,EAAQqD,KAAK,CAACouB,QAAQ,IAKtD,MAAO,CAAE5iB,KAAMA,EAAMD,IAAKA,CAAI,CAChC,CAvGKw4B,GACHE,CAAAA,QAAU,SAASC,CAAS,EAE1B,IADA,IAAIa,EAAM,MAAUb,EAAUpnC,MAAM,EAAG+L,EAAIq7B,EAAUpnC,MAAM,CACpD+L,KACLk8B,CAAG,CAACl8B,EAAE,CAAGq7B,CAAS,CAACr7B,EAAE,CAEvB,OAAOk8B,CACT,GAoJAjB,EADEv/B,GAAOwc,QAAQ,CAACikB,WAAW,EAAIzgC,GAAOwc,QAAQ,CAACikB,WAAW,CAACC,gBAAgB,CAC3D,SAAStoC,CAAO,CAAEuoC,CAAI,EACtC,IAAIllC,EAAQuE,GAAOwc,QAAQ,CAACikB,WAAW,CAACC,gBAAgB,CAACtoC,EAAS,MAClE,OAAOqD,EAAQA,CAAK,CAACklC,EAAK,CAAG/kC,KAAAA,CAC/B,EAGkB,SAASxD,CAAO,CAAEuoC,CAAI,EACtC,IAAI7nC,EAAQV,EAAQqD,KAAK,CAACklC,EAAK,CAI/B,MAHI,CAAC7nC,GAASV,EAAQwmC,YAAY,EAChC9lC,CAAAA,EAAQV,EAAQwmC,YAAY,CAAC+B,EAAK,EAE7B7nC,CACT,EAKIwmC,EAAa,eADb7jC,EAAQuE,GAAOwc,QAAQ,CAAC0jB,eAAe,CAACzkC,KAAK,EAEzC,aACA,kBAAmBA,EACjB,gBACA,qBAAsBA,EACpB,mBACA,oBAAqBA,EACnB,kBACA,GAwCduE,GAAOyb,IAAI,CAACmlB,uBAAuB,CAhCnC,SAAiCxoC,CAAO,EAUtC,OATqC,SAA1BA,EAAQyoC,aAAa,EAC9BzoC,CAAAA,EAAQyoC,aAAa,CAAG7gC,GAAOyb,IAAI,CAACoN,aAAa,EAE/CyW,EACFlnC,EAAQqD,KAAK,CAAC6jC,EAAW,CAAG,OAEW,UAAhC,OAAOlnC,EAAQ0oC,YAAY,EAClC1oC,CAAAA,EAAQ0oC,YAAY,CAAG,MAElB1oC,CACT,EAsBA4H,GAAOyb,IAAI,CAACslB,qBAAqB,CAdjC,SAA+B3oC,CAAO,EAUpC,OATqC,SAA1BA,EAAQyoC,aAAa,EAC9BzoC,CAAAA,EAAQyoC,aAAa,CAAG,MAEtBvB,EACFlnC,EAAQqD,KAAK,CAAC6jC,EAAW,CAAG,GAEW,UAAhC,OAAOlnC,EAAQ0oC,YAAY,EAClC1oC,CAAAA,EAAQ0oC,YAAY,CAAG,IAElB1oC,CACT,EAwCF4H,GAAOyb,IAAI,CAACulB,iBAAiB,CAd7B,SAA2BnjB,CAAG,CAAE/kB,CAAK,EACnC+kB,EAAIojB,qBAAqB,CAAGpjB,EAAIojB,qBAAqB,EAAIpjB,EAAIqjB,2BAA2B,EACnFrjB,EAAIsjB,wBAAwB,EAAItjB,EAAIujB,uBAAuB,EAAIvjB,EAAIwjB,sBAAsB,CAC9FxjB,EAAIojB,qBAAqB,CAAGnoC,CAC9B,EAWAkH,GAAOyb,IAAI,CAAC6lB,OAAO,CAvRnB,SAAiBznC,CAAE,EACjB,MAAO,iBAAOA,EAAkBmG,GAAOwc,QAAQ,CAAC+kB,cAAc,CAAC1nC,GAAMA,CACvE,EAsRAmG,GAAOyb,IAAI,CAACikB,OAAO,CAAGA,QACtB1/B,GAAOyb,IAAI,CAAC+lB,QAAQ,CA9NpB,SAAkBppC,CAAO,CAAEqB,CAAS,EAC9BrB,GAAW,MAAC,IAAMA,EAAQqB,SAAS,CAAG,KAAKioB,OAAO,CAAC,IAAMjoB,EAAY,MACvErB,CAAAA,EAAQqB,SAAS,EAAI,CAACrB,EAAQqB,SAAS,CAAG,IAAM,IAAMA,CAAAA,CAE1D,EA2NAuG,GAAOyb,IAAI,CAACokB,WAAW,CAAGA,YAC1B7/B,GAAOyb,IAAI,CAACgmB,WAAW,CAlNvB,SAAqBrpC,CAAO,CAAEspC,CAAO,CAAE3pC,CAAU,EAQ/C,MAPuB,UAAnB,OAAO2pC,GACTA,CAAAA,EAAU7B,YAAY6B,EAAS3pC,EAAAA,EAE7BK,EAAQ+U,UAAU,EACpB/U,EAAQ+U,UAAU,CAACw0B,YAAY,CAACD,EAAStpC,GAE3CspC,EAAQ5X,WAAW,CAAC1xB,GACbspC,CACT,EA0MA1hC,GAAOyb,IAAI,CAAC2iB,gBAAgB,CAAGA,iBAC/Bp+B,GAAOyb,IAAI,CAACmmB,gBAAgB,CAzJ5B,SAA0BxpC,CAAO,EAC/B,IAAIypC,EAIAC,EAHAC,EAAM3pC,GAAWA,EAAQ4pC,aAAa,CACtCC,EAAM,CAAEh7B,KAAM,EAAGD,IAAK,CAAE,EACxB3O,EAAS,CAAE4O,KAAM,EAAGD,IAAK,CAAE,EAE3Bk7B,EAAmB,CACjBC,gBAAiB,OACjBC,eAAiB,MACjBC,YAAiB,OACjBC,WAAiB,KACnB,EAEJ,GAAI,CAACP,EACH,OAAO1pC,EAGT,IAAK,IAAIsoC,KAAQuB,EACf7pC,CAAM,CAAC6pC,CAAgB,CAACvB,EAAK,CAAC,EAAI9rB,SAAS0qB,EAAgBnnC,EAASuoC,GAAO,KAAO,EAUpF,OAPAkB,EAAUE,EAAI7B,eAAe,CACiB,SAAlC9nC,EAAQmqC,qBAAqB,EACvCN,CAAAA,EAAM7pC,EAAQmqC,qBAAqB,IAGrCT,EAAgB1D,iBAAiBhmC,GAE1B,CACL6O,KAAMg7B,EAAIh7B,IAAI,CAAG66B,EAAc76B,IAAI,CAAI46B,CAAAA,EAAQW,UAAU,EAAI,GAAKnqC,EAAO4O,IAAI,CAC7ED,IAAKi7B,EAAIj7B,GAAG,CAAG86B,EAAc96B,GAAG,CAAI66B,CAAAA,EAAQY,SAAS,EAAI,GAAMpqC,EAAO2O,GAAG,CAE7E,EA0HAhH,GAAOyb,IAAI,CAACinB,aAAa,CA1CzB,SAAuBtqC,CAAO,EAC5B,IAAIuqC,EAAO3iC,GAAOqd,mBAAmB,CAACjlB,GACtC,OAAOuqC,EAAKC,OAAO,EAAID,EAAKE,MAAM,EAyCpC7iC,GAAOyb,IAAI,CAACqnB,gBAAgB,CAtC5B,SAA0B1qC,CAAO,EAC/B,GAAK4H,GAAOqf,YAAY,EAGxB,IAAIsjB,EAAO3iC,GAAOqd,mBAAmB,CAACjlB,GAClCuqC,IACFA,EAAKE,MAAM,CAAG,KACdF,EAAKC,OAAO,CAAG,KAEfD,EAAKI,WAAW,CAAG,KACnBJ,EAAKK,WAAW,CAAG,KACnBL,EAAKM,UAAU,CAAG,MAEtB,CA2BF,IACC,WAMC,SAASC,UAAY,CA8CrBljC,GAAOyb,IAAI,CAAC0nB,OAAO,CAjCnB,SAAiBpjC,CAAG,CAAE5H,CAAO,EAC3BA,GAAYA,CAAAA,EAAU,CAAE,GAExB,IApBqB4H,EAAKqC,EAoBtBs5B,EAASvjC,EAAQujC,MAAM,CAAGvjC,EAAQujC,MAAM,CAAC9xB,WAAW,GAAK,MACzDw5B,EAAajrC,EAAQirC,UAAU,EAAI,WAAa,EAChDC,EAAM,IAAIrjC,GAAOrM,MAAM,CAAC2vC,cAAc,CACtCnD,EAAOhoC,EAAQgoC,IAAI,EAAIhoC,EAAQorC,UAAU,CAwB7C,OArBAF,EAAIG,kBAAkB,CAAG,WACA,IAAnBH,EAAII,UAAU,GAChBL,EAAWC,GACXA,EAAIG,kBAAkB,CAAGN,QAE7B,EAEe,QAAXxH,IACFyE,EAAO,KACH,iBAAOhoC,EAAQorC,UAAU,IAnCVxjC,EAoCGA,EApCEqC,EAoCGjK,EAAQorC,UAAU,CAA3CxjC,EAnCGA,EAAO,MAAKg/B,IAAI,CAACh/B,GAAO,IAAM,KAAOqC,GAuC5CihC,EAAIK,IAAI,CAAChI,EAAQ37B,EAAK,IAElB27B,CAAAA,SAAAA,GAAqBA,QAAAA,CAAW,GAClC2H,EAAIM,gBAAgB,CAAC,eAAgB,qCAGvCN,EAAIO,IAAI,CAACzD,GACFkD,CACT,CAGF,IAKArjC,GAAOghB,GAAG,CAAGD,QAAQC,GAAG,CAMxBhhB,GAAO6jC,IAAI,CAAG9iB,QAAQ8iB,IAAI,CACzB,WAEC,IAAIxpB,EAASra,GAAOyb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAClCtT,EAAQ/G,GAAOyb,IAAI,CAAC/iB,MAAM,CAACqO,KAAK,CA2ChC+8B,EAAqB,EAAE,CAiF3B,SAASC,OACP,MAAO,EACT,CAEA,SAASC,cAAcvc,CAAC,CAAE9d,CAAC,CAAEynB,CAAC,CAAE6S,CAAC,EAC/B,MAAO,CAAC7S,EAAIx0B,KAAKunB,GAAG,CAACsD,EAAIwc,EAAKrnC,CAAAA,KAAKsnB,EAAE,CAAG,IAAMkN,EAAIznB,CACpD,CAtFA3J,GAAOyb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAACypB,EAAoB,CAM5CI,UAAW,WACT,IAAIhxB,EAAa,IAAI,CAACmB,MAAM,CAAC,GAI7B,OAHAnB,EAAW+T,OAAO,CAAC,SAAUkd,CAAS,EACpCA,EAAUC,MAAM,EAClB,GACOlxB,CACT,EAOAmxB,eAAgB,SAAU3vC,CAAM,EAC9B,GAAI,CAACA,EACH,MAAO,EAAE,CAEX,IAAI4vC,EAAY,IAAI,CAACn8B,MAAM,CAAC,SAAUg8B,CAAS,EAC7C,MAAO,iBAAOA,EAAUtrC,MAAM,EAAiBsrC,EAAUtrC,MAAM,CAACnE,MAAM,GAAKA,CAC7E,GAIA,OAHA4vC,EAAUrd,OAAO,CAAC,SAAUkd,CAAS,EACnCA,EAAUC,MAAM,EAClB,GACOE,CACT,EAOAC,eAAgB,SAAU1rC,CAAM,EAC9B,IAAIyrC,EAAY,IAAI,CAACE,sBAAsB,CAAC3rC,GAI5C,OAHAyrC,EAAUrd,OAAO,CAAC,SAAUkd,CAAS,EACnCA,EAAUC,MAAM,EAClB,GACOE,CACT,EAOAG,mBAAoB,SAAUC,CAAU,EACtC,OAAO,IAAI,CAAChjB,OAAO,CAAC,IAAI,CAACijB,aAAa,CAACD,GACzC,EAOAC,cAAe,SAAUD,CAAU,EACjC,OAAO,IAAI,CAACjzB,IAAI,CAAC,SAAU0yB,CAAS,EAClC,OAAOA,EAAUC,MAAM,GAAKM,CAC9B,EACF,EAOAF,uBAAwB,SAAU3rC,CAAM,SACtC,EAGO,IAAI,CAACsP,MAAM,CAAC,SAAUg8B,CAAS,EACpC,OAAOA,EAAUtrC,MAAM,GAAKA,CAC9B,GAJS,EAAE,CAMf,GAkGA,IAAI+rC,EAAoB5kC,GAAOrM,MAAM,CAACsd,qBAAqB,EACnCjR,GAAOrM,MAAM,CAACkxC,2BAA2B,EACzC7kC,GAAOrM,MAAM,CAACmxC,wBAAwB,EACtC9kC,GAAOrM,MAAM,CAACoxC,sBAAsB,EACpC/kC,GAAOrM,MAAM,CAACqxC,uBAAuB,EACrC,SAASpiB,CAAQ,EACf,OAAO5iB,GAAOrM,MAAM,CAACyjB,UAAU,CAACwL,EAAU,IAAO,GACnD,EAEpBqiB,EAAmBjlC,GAAOrM,MAAM,CAACud,oBAAoB,EAAIlR,GAAOrM,MAAM,CAACwjB,YAAY,CASvF,SAAS+tB,mBACP,OAAON,EAAkB9iB,KAAK,CAAC9hB,GAAOrM,MAAM,CAAEmN,UAChD,CAMAd,GAAOyb,IAAI,CAAC0pB,OAAO,CAxGnB,SAAiBhtC,CAAO,EACtBA,GAAYA,CAAAA,EAAU,CAAC,GACvB,IACI/D,EADAgwC,EAAS,GAETgB,mBAAqB,WACnB,IAAIn5B,EAAQjM,GAAOqlC,iBAAiB,CAAC3jB,OAAO,CAACttB,GAC7C,OAAO6X,EAAQ,IAAMjM,GAAOqlC,iBAAiB,CAAChxB,MAAM,CAACpI,EAAO,EAAE,CAAC,EAAE,EAqEvE,OAlEA7X,EAAUimB,EAAOtT,EAAM5O,GAAU,CAC/BisC,OAAQ,WAEN,OADAA,EAAS,GACFgB,oBACT,EACAE,aAAc,eAAgBntC,EAAUA,EAAQotC,UAAU,CAAG,EAC7DC,eAAgB,EAChBC,aAAc,CAChB,GACAzlC,GAAOqlC,iBAAiB,CAACxxC,IAAI,CAACO,GAE9B8wC,iBAAiB,SAASQ,CAAS,EACjC,IAE+BC,EAF3BtU,EAAQqU,GAAa,CAAC,IAAIE,KAC1BC,EAAW1tC,EAAQ0tC,QAAQ,EAAI,IAC/BC,EAASzU,EAAQwU,EACjB9rC,EAAW5B,EAAQ4B,QAAQ,EAAIgqC,KAC/BgC,EAAQ5tC,EAAQ4tC,KAAK,EAAIhC,KACzBX,EAAajrC,EAAQirC,UAAU,EAAIW,KACnCiC,EAAS7tC,EAAQ6tC,MAAM,EAAIhC,cAC3BiC,EAAS,eAAgB9tC,GAAUA,EAAQotC,UAAU,CAAChtC,MAAM,CAAG,EAC/DgtC,EAAa,eAAgBptC,EAAUA,EAAQotC,UAAU,CAAG,EAC5DW,EAAW,aAAc/tC,EAAUA,EAAQ+tC,QAAQ,CAAG,IACtDC,EAAUhuC,EAAQguC,OAAO,EAAKF,CAAAA,EAASV,EAAWl9B,GAAG,CAAC,SAASvP,CAAK,CAAEwL,CAAC,EACrE,OAAO4hC,CAAQ,CAAC5hC,EAAE,CAAGihC,CAAU,CAACjhC,EAAE,GAC/B4hC,EAAWX,CAAAA,CAEpBptC,CAAAA,EAAQiuC,OAAO,EAAIjuC,EAAQiuC,OAAO,GAEjC,SAASC,KAAKC,CAAQ,EAErB,IAAIC,EAAcZ,CADlBA,EAAOW,GAAY,CAAC,IAAIV,IAAAA,EACCE,EAASD,EAAYF,EAAOtU,EACjDmV,EAAWD,EAAcV,EACzBvqC,EAAU2qC,EAASV,EAAWl9B,GAAG,CAAC,SAASo+B,CAAM,CAAEniC,CAAC,EAClD,OAAO0hC,EAAOO,EAAahB,CAAU,CAACjhC,EAAE,CAAE6hC,CAAO,CAAC7hC,EAAE,CAAEuhC,EACxD,GAAKG,EAAOO,EAAahB,EAAYY,EAASN,GAC9Ca,EAAYT,EAASrpC,KAAKkf,GAAG,CAAC,CAACxgB,CAAO,CAAC,EAAE,CAAGiqC,CAAU,CAAC,EAAE,EAAIY,CAAO,CAAC,EAAE,EACnEvpC,KAAKkf,GAAG,CAAC,CAACxgB,EAAUiqC,CAAAA,EAAcY,GAK1C,GAHA/xC,EAAQkxC,YAAY,CAAGW,EAAS3qC,EAAQ4I,KAAK,GAAK5I,EAClDlH,EAAQoxC,cAAc,CAAGkB,EACzBtyC,EAAQqxC,YAAY,CAAGe,GACnBpC,GAGJ,GAAI2B,EAAMzqC,EAASorC,EAAWF,GAAW,CACvCpB,qBACA,MACF,CACA,GAAIO,EAAOG,EAAQ,CAEjB1xC,EAAQkxC,YAAY,CAAGW,EAASC,EAAShiC,KAAK,GAAKgiC,EACnD9xC,EAAQoxC,cAAc,CAAG,EACzBpxC,EAAQqxC,YAAY,CAAG,EAEvB1rC,EAASksC,EAASC,EAAShiC,KAAK,GAAKgiC,EAAU,EAAG,GAClD9C,EAAW8C,EAAU,EAAG,GACxBd,qBACA,MACF,CAEErrC,EAASuB,EAASorC,EAAWF,GAC7BtB,iBAAiBmB,MAErB,EAAGhV,EACL,GAEOj9B,EAAQgwC,MAAM,EA8BvBpkC,GAAOyb,IAAI,CAACypB,gBAAgB,CAAGA,iBAC/BllC,GAAOyb,IAAI,CAACkrB,eAAe,CAN3B,WACE,OAAO1B,EAAiBnjB,KAAK,CAAC9hB,GAAOrM,MAAM,CAAEmN,UAC/C,EAKAd,GAAOqlC,iBAAiB,CAAGvB,CAC7B,IACC,WAIC,SAAS8C,eAAeC,CAAK,CAAEvV,CAAG,CAAEwV,CAAG,EAQrC,MADA58B,QALM2K,SAAUgyB,CAAK,CAAC,EAAE,CAAGC,EAAOxV,CAAAA,CAAG,CAAC,EAAE,CAAGuV,CAAK,CAAC,EAAE,EAAI,IAAM,IACvDhyB,SAAUgyB,CAAK,CAAC,EAAE,CAAGC,EAAOxV,CAAAA,CAAG,CAAC,EAAE,CAAGuV,CAAK,CAAC,EAAE,EAAI,IAAM,IACvDhyB,SAAUgyB,CAAK,CAAC,EAAE,CAAGC,EAAOxV,CAAAA,CAAG,CAAC,EAAE,CAAGuV,CAAK,CAAC,EAAE,EAAI,IAE9C,KAAOA,CAAAA,GAASvV,EAAMte,WAAW6zB,CAAK,CAAC,EAAE,CAAGC,EAAOxV,CAAAA,CAAG,CAAC,EAAE,CAAGuV,CAAK,CAAC,EAAE,GAAK,IACzE,GAEX,CA0DA7mC,GAAOyb,IAAI,CAACsrB,YAAY,CA3CxB,SAAsBC,CAAS,CAAEC,CAAO,CAAEpB,CAAQ,CAAE1tC,CAAO,EACzD,IAAI+uC,EAAa,IAAIlnC,GAAOmnC,KAAK,CAACH,GAAWI,SAAS,GAClDC,EAAW,IAAIrnC,GAAOmnC,KAAK,CAACF,GAASG,SAAS,GAC9CE,EAAqBnvC,EAAQirC,UAAU,CACvCmE,EAAmBpvC,EAAQ4B,QAAQ,CAGvC,OAFA5B,EAAUA,GAAW,CAAC,EAEf6H,GAAOyb,IAAI,CAAC0pB,OAAO,CAACnlC,GAAOyb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAACliB,EAAS,CAC5D0tC,SAAUA,GAAY,IACtBN,WAAY2B,EACZhB,SAAUmB,EACVlB,QAASkB,EACTrB,OAAQ,SAAUO,CAAW,CAAEhB,CAAU,CAAEY,CAAO,CAAEN,CAAQ,EAI1D,OAAOe,eAAerB,EAAYY,EAHnBhuC,EAAQqvC,WAAW,CAC9BrvC,EAAQqvC,WAAW,CAACjB,EAAaV,GACjC,EAAIjpC,KAAKunB,GAAG,CAACoiB,EAAcV,EAAYjpC,CAAAA,KAAKsnB,EAAE,CAAG,IAEvD,EAEAkf,WAAY,SAAS9nC,CAAO,CAAEorC,CAAS,CAAEF,CAAQ,EAC/C,GAAIc,EACF,OAAOA,EACLV,eAAeS,EAAUA,EAAU,GACnCX,EACAF,EAGN,EACAzsC,SAAU,SAASuB,CAAO,CAAEorC,CAAS,CAAEF,CAAQ,EAC7C,GAAIe,EAAkB,CACpB,GAAIrqC,MAAMC,OAAO,CAAC7B,GAChB,OAAOisC,EACLX,eAAetrC,EAASA,EAAS,GACjCorC,EACAF,GAGJe,EAAiBjsC,EAASorC,EAAWF,EACvC,CACF,CACF,GACF,CAIF,IACC,SAASjzB,CAAM,EAEd,aAIA,IAAIvT,EAASuT,EAAOvT,MAAM,EAAKuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,GAEjD,GAAIA,EAAOilB,KAAK,CAAE,CAChBjlB,EAAO6jC,IAAI,CAAC,mCACZ,MACF,CAaA,SAAS5e,MAAMC,CAAC,CAAEC,CAAC,EACjB,IAAI,CAACD,CAAC,CAAGA,EACT,IAAI,CAACC,CAAC,CAAGA,CACX,CAdAnlB,EAAOilB,KAAK,CAAGA,MAgBfA,MAAM7O,SAAS,CAAwC,CAErDxc,KAAM,QAENqjC,YAAahY,MAObxf,IAAK,SAAUgiC,CAAI,EACjB,OAAO,IAAIxiB,MAAM,IAAI,CAACC,CAAC,CAAGuiB,EAAKviB,CAAC,CAAE,IAAI,CAACC,CAAC,CAAGsiB,EAAKtiB,CAAC,CACnD,EAQAG,UAAW,SAAUmiB,CAAI,EAGvB,OAFA,IAAI,CAACviB,CAAC,EAAIuiB,EAAKviB,CAAC,CAChB,IAAI,CAACC,CAAC,EAAIsiB,EAAKtiB,CAAC,CACT,IAAI,EAQbuiB,UAAW,SAAU1gB,CAAM,EACzB,OAAO,IAAI/B,MAAM,IAAI,CAACC,CAAC,CAAG8B,EAAQ,IAAI,CAAC7B,CAAC,CAAG6B,EAC7C,EAQA2gB,gBAAiB,SAAU3gB,CAAM,EAG/B,OAFA,IAAI,CAAC9B,CAAC,EAAI8B,EACV,IAAI,CAAC7B,CAAC,EAAI6B,EACH,IAAI,EAQbO,SAAU,SAAUkgB,CAAI,EACtB,OAAO,IAAIxiB,MAAM,IAAI,CAACC,CAAC,CAAGuiB,EAAKviB,CAAC,CAAE,IAAI,CAACC,CAAC,CAAGsiB,EAAKtiB,CAAC,CACnD,EAQAyiB,eAAgB,SAAUH,CAAI,EAG5B,OAFA,IAAI,CAACviB,CAAC,EAAIuiB,EAAKviB,CAAC,CAChB,IAAI,CAACC,CAAC,EAAIsiB,EAAKtiB,CAAC,CACT,IAAI,EAQb0iB,eAAgB,SAAU7gB,CAAM,EAC9B,OAAO,IAAI/B,MAAM,IAAI,CAACC,CAAC,CAAG8B,EAAQ,IAAI,CAAC7B,CAAC,CAAG6B,EAC7C,EAQA8gB,qBAAsB,SAAU9gB,CAAM,EAGpC,OAFA,IAAI,CAAC9B,CAAC,EAAI8B,EACV,IAAI,CAAC7B,CAAC,EAAI6B,EACH,IAAI,EASblB,SAAU,SAAUkB,CAAM,EACxB,OAAO,IAAI/B,MAAM,IAAI,CAACC,CAAC,CAAG8B,EAAQ,IAAI,CAAC7B,CAAC,CAAG6B,EAC7C,EASA+gB,eAAgB,SAAU/gB,CAAM,EAG9B,OAFA,IAAI,CAAC9B,CAAC,EAAI8B,EACV,IAAI,CAAC7B,CAAC,EAAI6B,EACH,IAAI,EASbghB,OAAQ,SAAUhhB,CAAM,EACtB,OAAO,IAAI/B,MAAM,IAAI,CAACC,CAAC,CAAG8B,EAAQ,IAAI,CAAC7B,CAAC,CAAG6B,EAC7C,EASAihB,aAAc,SAAUjhB,CAAM,EAG5B,OAFA,IAAI,CAAC9B,CAAC,EAAI8B,EACV,IAAI,CAAC7B,CAAC,EAAI6B,EACH,IAAI,EAQbyS,GAAI,SAAUgO,CAAI,EAChB,OAAQ,IAAI,CAACviB,CAAC,GAAKuiB,EAAKviB,CAAC,EAAI,IAAI,CAACC,CAAC,GAAKsiB,EAAKtiB,CAAC,EAQhD+iB,GAAI,SAAUT,CAAI,EAChB,OAAQ,IAAI,CAACviB,CAAC,CAAGuiB,EAAKviB,CAAC,EAAI,IAAI,CAACC,CAAC,CAAGsiB,EAAKtiB,CAAC,EAQ5CgjB,IAAK,SAAUV,CAAI,EACjB,OAAQ,IAAI,CAACviB,CAAC,EAAIuiB,EAAKviB,CAAC,EAAI,IAAI,CAACC,CAAC,EAAIsiB,EAAKtiB,CAAC,EAS9CijB,GAAI,SAAUX,CAAI,EAChB,OAAQ,IAAI,CAACviB,CAAC,CAAGuiB,EAAKviB,CAAC,EAAI,IAAI,CAACC,CAAC,CAAGsiB,EAAKtiB,CAAC,EAQ5CkjB,IAAK,SAAUZ,CAAI,EACjB,OAAQ,IAAI,CAACviB,CAAC,EAAIuiB,EAAKviB,CAAC,EAAI,IAAI,CAACC,CAAC,EAAIsiB,EAAKtiB,CAAC,EAS9C2V,KAAM,SAAU2M,CAAI,CAAEhgB,CAAC,EAKrB,OAJiB,SAANA,GACTA,CAAAA,EAAI,IAENA,EAAI7qB,KAAKI,GAAG,CAACJ,KAAKG,GAAG,CAAC,EAAG0qB,GAAI,GACtB,IAAIxC,MAAM,IAAI,CAACC,CAAC,CAAG,CAACuiB,EAAKviB,CAAC,CAAG,IAAI,CAACA,CAAC,EAAIuC,EAAG,IAAI,CAACtC,CAAC,CAAG,CAACsiB,EAAKtiB,CAAC,CAAG,IAAI,CAACA,CAAC,EAAIsC,EAChF,EAOA6gB,aAAc,SAAUb,CAAI,EAC1B,IAAIc,EAAK,IAAI,CAACrjB,CAAC,CAAGuiB,EAAKviB,CAAC,CACpBsjB,EAAK,IAAI,CAACrjB,CAAC,CAAGsiB,EAAKtiB,CAAC,CACxB,OAAOvoB,KAAK8d,IAAI,CAAC6tB,EAAKA,EAAKC,EAAKA,EAClC,EAOA7O,aAAc,SAAU8N,CAAI,EAC1B,OAAO,IAAI,CAAC3M,IAAI,CAAC2M,EACnB,EAOA1qC,IAAK,SAAU0qC,CAAI,EACjB,OAAO,IAAIxiB,MAAMroB,KAAKG,GAAG,CAAC,IAAI,CAACmoB,CAAC,CAAEuiB,EAAKviB,CAAC,EAAGtoB,KAAKG,GAAG,CAAC,IAAI,CAACooB,CAAC,CAAEsiB,EAAKtiB,CAAC,EACpE,EAOAnoB,IAAK,SAAUyqC,CAAI,EACjB,OAAO,IAAIxiB,MAAMroB,KAAKI,GAAG,CAAC,IAAI,CAACkoB,CAAC,CAAEuiB,EAAKviB,CAAC,EAAGtoB,KAAKI,GAAG,CAAC,IAAI,CAACmoB,CAAC,CAAEsiB,EAAKtiB,CAAC,EACpE,EAMAhc,SAAU,WACR,OAAO,IAAI,CAAC+b,CAAC,CAAG,IAAM,IAAI,CAACC,CAAC,EAS9BsjB,MAAO,SAAUvjB,CAAC,CAAEC,CAAC,EAGnB,OAFA,IAAI,CAACD,CAAC,CAAGA,EACT,IAAI,CAACC,CAAC,CAAGA,EACF,IAAI,EAQbujB,KAAM,SAAUxjB,CAAC,EAEf,OADA,IAAI,CAACA,CAAC,CAAGA,EACF,IAAI,EAQbyjB,KAAM,SAAUxjB,CAAC,EAEf,OADA,IAAI,CAACA,CAAC,CAAGA,EACF,IAAI,EAQbyjB,aAAc,SAAUnB,CAAI,EAG1B,OAFA,IAAI,CAACviB,CAAC,CAAGuiB,EAAKviB,CAAC,CACf,IAAI,CAACC,CAAC,CAAGsiB,EAAKtiB,CAAC,CACR,IAAI,EAOb0jB,KAAM,SAAUpB,CAAI,EAClB,IAAIviB,EAAI,IAAI,CAACA,CAAC,CACVC,EAAI,IAAI,CAACA,CAAC,CACd,IAAI,CAACD,CAAC,CAAGuiB,EAAKviB,CAAC,CACf,IAAI,CAACC,CAAC,CAAGsiB,EAAKtiB,CAAC,CACfsiB,EAAKviB,CAAC,CAAGA,EACTuiB,EAAKtiB,CAAC,CAAGA,CACX,EAMApe,MAAO,WACL,OAAO,IAAIke,MAAM,IAAI,CAACC,CAAC,CAAE,IAAI,CAACC,CAAC,CACjC,CACF,CAEF,EAAoC5I,GACnC,SAAShJ,CAAM,EAEd,aAGA,IAAIvT,EAASuT,EAAOvT,MAAM,EAAKuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,GAEjD,GAAIA,EAAO8oC,YAAY,CAAE,CACvB9oC,EAAO6jC,IAAI,CAAC,0CACZ,MACF,CAQA,SAASiF,aAAaC,CAAM,EAC1B,IAAI,CAACA,MAAM,CAAGA,EACd,IAAI,CAACtiB,MAAM,CAAG,EAAE,CAGlBzmB,EAAO8oC,YAAY,CAAGA,aAEtB9oC,EAAO8oC,YAAY,CAAC1yB,SAAS,CAA+C,CAE1E6mB,YAAa6L,aAQbE,YAAa,SAAUlkB,CAAK,EAE1B,OADA,IAAI,CAAC2B,MAAM,CAAC5yB,IAAI,CAACixB,GACV,IAAI,EASbmkB,aAAc,SAAUxiB,CAAM,EAE5B,OADA,IAAI,CAACA,MAAM,CAAG,IAAI,CAACA,MAAM,CAAC3oB,MAAM,CAAC2oB,GAC1B,IAAI,CAEf,EAYAzmB,EAAO8oC,YAAY,CAACI,iBAAiB,CAAG,SAAUC,CAAE,CAAEC,CAAE,CAAEC,CAAE,CAAEC,CAAE,EAC9D,IAAIxuC,EACAyuC,EAAM,CAACD,EAAGpkB,CAAC,CAAGmkB,EAAGnkB,CAAC,EAAKikB,CAAAA,EAAGhkB,CAAC,CAAGkkB,EAAGlkB,CAAC,EAAI,CAACmkB,EAAGnkB,CAAC,CAAGkkB,EAAGlkB,CAAC,EAAKgkB,CAAAA,EAAGjkB,CAAC,CAAGmkB,EAAGnkB,CAAC,EAClEskB,EAAM,CAACJ,EAAGlkB,CAAC,CAAGikB,EAAGjkB,CAAC,EAAKikB,CAAAA,EAAGhkB,CAAC,CAAGkkB,EAAGlkB,CAAC,EAAI,CAACikB,EAAGjkB,CAAC,CAAGgkB,EAAGhkB,CAAC,EAAKgkB,CAAAA,EAAGjkB,CAAC,CAAGmkB,EAAGnkB,CAAC,EAClEukB,EAAK,CAACH,EAAGnkB,CAAC,CAAGkkB,EAAGlkB,CAAC,EAAKikB,CAAAA,EAAGlkB,CAAC,CAAGikB,EAAGjkB,CAAC,EAAI,CAACokB,EAAGpkB,CAAC,CAAGmkB,EAAGnkB,CAAC,EAAKkkB,CAAAA,EAAGjkB,CAAC,CAAGgkB,EAAGhkB,CAAC,EACrE,GAAIskB,IAAAA,EAAU,CACZ,IAAIC,EAAKH,EAAME,EACXE,EAAKH,EAAMC,CACX,IAAKC,GAAMA,GAAM,GAAK,GAAKC,GAAMA,GAAM,EAEzC7uC,CADAA,EAAS,IAAIguC,aAAa,iBACnBE,WAAW,CAAC,IAAIhpC,EAAOilB,KAAK,CAACkkB,EAAGjkB,CAAC,CAAGwkB,EAAMN,CAAAA,EAAGlkB,CAAC,CAAGikB,EAAGjkB,CAAC,EAAGikB,EAAGhkB,CAAC,CAAGukB,EAAMN,CAAAA,EAAGjkB,CAAC,CAAGgkB,EAAGhkB,CAAC,IAGvFrqB,EAAS,IAAIguC,YAEjB,MAGIhuC,MAAaguC,aADXS,IAAAA,GAAaC,IAAAA,EACW,aAGA,YAG9B,OAAO1uC,CACT,EAYAkF,EAAO8oC,YAAY,CAACc,oBAAoB,CAAG,SAAST,CAAE,CAAEC,CAAE,CAAE3iB,CAAM,EAChE,IAEI4iB,EAAIC,EAAIO,EAAOvlC,EAFfxJ,EAAS,IAAIguC,aACbvwC,EAASkuB,EAAOluB,MAAM,CAG1B,IAAK+L,EAAI,EAAGA,EAAI/L,EAAQ+L,IACtB+kC,EAAK5iB,CAAM,CAACniB,EAAE,CACdglC,EAAK7iB,CAAM,CAAC,CAACniB,EAAI,GAAK/L,EAAO,CAC7BsxC,EAAQf,aAAaI,iBAAiB,CAACC,EAAIC,EAAIC,EAAIC,GAEnDxuC,EAAOmuC,YAAY,CAACY,EAAMpjB,MAAM,EAKlC,OAHI3rB,EAAO2rB,MAAM,CAACluB,MAAM,CAAG,GACzBuC,CAAAA,EAAOiuC,MAAM,CAAG,gBAEXjuC,CACT,EASAkF,EAAO8oC,YAAY,CAACgB,uBAAuB,CAAG,SAAUC,CAAO,CAAEC,CAAO,EACtE,IAC6B1lC,EADzBxJ,EAAS,IAAIguC,aACbvwC,EAASwxC,EAAQxxC,MAAM,CAE3B,IAAK+L,EAAI,EAAGA,EAAI/L,EAAQ+L,IAAK,CAC3B,IAAI6kC,EAAKY,CAAO,CAACzlC,EAAE,CACf8kC,EAAKW,CAAO,CAAC,CAACzlC,EAAI,GAAK/L,EAAO,CAC9BsxC,EAAQf,aAAac,oBAAoB,CAACT,EAAIC,EAAIY,GAEtDlvC,EAAOmuC,YAAY,CAACY,EAAMpjB,MAAM,CAClC,CAIA,OAHI3rB,EAAO2rB,MAAM,CAACluB,MAAM,CAAG,GACzBuC,CAAAA,EAAOiuC,MAAM,CAAG,gBAEXjuC,CACT,EAUAkF,EAAO8oC,YAAY,CAACmB,yBAAyB,CAAG,SAAUxjB,CAAM,CAAEyjB,CAAE,CAAEC,CAAE,EACtE,IAAIptC,EAAMmtC,EAAGntC,GAAG,CAACotC,GACbntC,EAAMktC,EAAGltC,GAAG,CAACmtC,GACbC,EAAW,IAAIpqC,EAAOilB,KAAK,CAACjoB,EAAIkoB,CAAC,CAAEnoB,EAAIooB,CAAC,EACxCklB,EAAa,IAAIrqC,EAAOilB,KAAK,CAACloB,EAAImoB,CAAC,CAAEloB,EAAImoB,CAAC,EAC1CmlB,EAASxB,aAAac,oBAAoB,CAAC7sC,EAAKqtC,EAAU3jB,GAC1D8jB,EAASzB,aAAac,oBAAoB,CAACQ,EAAUptC,EAAKypB,GAC1D+jB,EAAS1B,aAAac,oBAAoB,CAAC5sC,EAAKqtC,EAAY5jB,GAC5DgkB,EAAS3B,aAAac,oBAAoB,CAACS,EAAYttC,EAAK0pB,GAC5D3rB,EAAS,IAAIguC,aAUjB,OARAhuC,EAAOmuC,YAAY,CAACqB,EAAO7jB,MAAM,EACjC3rB,EAAOmuC,YAAY,CAACsB,EAAO9jB,MAAM,EACjC3rB,EAAOmuC,YAAY,CAACuB,EAAO/jB,MAAM,EACjC3rB,EAAOmuC,YAAY,CAACwB,EAAOhkB,MAAM,EAE7B3rB,EAAO2rB,MAAM,CAACluB,MAAM,CAAG,GACzBuC,CAAAA,EAAOiuC,MAAM,CAAG,gBAEXjuC,CACT,CAEF,EAAoCyhB,GACnC,SAAShJ,CAAM,EAEd,aAEA,IAAIvT,EAASuT,EAAOvT,MAAM,EAAKuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,GAEjD,GAAIA,EAAOmnC,KAAK,CAAE,CAChBnnC,EAAO6jC,IAAI,CAAC,oCACZ,MACF,CAYA,SAASsD,MAAMj9B,CAAK,EACbA,EAIH,IAAI,CAACwgC,gBAAgB,CAACxgC,GAHtB,IAAI,CAACygC,SAAS,CAAC,CAAC,EAAG,EAAG,EAAG,EAAE,CAK/B,CAqbA,SAASC,QAAQtqC,CAAC,CAAEyxB,CAAC,CAAEtK,CAAC,QAOtB,CANIA,EAAI,GACNA,CAAAA,GAAK,GAEHA,EAAI,GACNA,CAAAA,GAAK,GAEHA,EAAI,EAAI,GACHnnB,EAAI,CAACyxB,EAAIzxB,CAAAA,EAAK,EAAImnB,EAEvBA,EAAI,GACCsK,EAELtK,EAAI,EAAI,EACHnnB,EAAI,CAACyxB,EAAIzxB,CAAAA,EAAM,GAAI,EAAImnB,CAAAA,EAAK,EAE9BnnB,CACT,CApcAN,EAAOmnC,KAAK,CAAGA,MAEfnnC,EAAOmnC,KAAK,CAAC/wB,SAAS,CAAwC,CAM5Ds0B,iBAAkB,SAASxgC,CAAK,EAC9B,IAAI2Z,EAEA3Z,KAASi9B,MAAM0D,YAAY,EAC7B3gC,CAAAA,EAAQi9B,MAAM0D,YAAY,CAAC3gC,EAAM,EAGrB,gBAAVA,GACF2Z,CAAAA,EAAS,CAAC,IAAK,IAAK,IAAK,EAAE,EAGxBA,GACHA,CAAAA,EAASsjB,MAAM2D,aAAa,CAAC5gC,EAAAA,EAE1B2Z,GACHA,CAAAA,EAASsjB,MAAM4D,aAAa,CAAC7gC,EAAAA,EAE1B2Z,GACHA,CAAAA,EAASsjB,MAAM6D,aAAa,CAAC9gC,EAAAA,EAE1B2Z,GAEHA,CAAAA,EAAS,CAAC,EAAG,EAAG,EAAG,EAAE,EAEnBA,GACF,IAAI,CAAC8mB,SAAS,CAAC9mB,EAEnB,EAUAonB,UAAW,SAAS7iB,CAAC,CAAE8iB,CAAC,CAAEvhC,CAAC,EACzBye,GAAK,IAAK8iB,GAAK,IAAKvhC,GAAK,IAEzB,IAAImoB,EAAGlL,EAAG+G,EACN3wB,EAAMgD,EAAOyb,IAAI,CAACkG,KAAK,CAAC3kB,GAAG,CAAC,CAACorB,EAAG8iB,EAAGvhC,EAAE,EACrC5M,EAAMiD,EAAOyb,IAAI,CAACkG,KAAK,CAAC5kB,GAAG,CAAC,CAACqrB,EAAG8iB,EAAGvhC,EAAE,EAIzC,GAFAgkB,EAAI,CAAC3wB,EAAMD,CAAAA,EAAO,EAEdC,IAAQD,EACV+0B,EAAIlL,EAAI,MAEL,CACH,IAAIqd,EAAIjnC,EAAMD,EAEd,OADA6pB,EAAI+G,EAAI,GAAMsW,EAAK,GAAIjnC,EAAMD,CAAAA,EAAOknC,EAAKjnC,CAAAA,EAAMD,CAAAA,EACvCC,GACN,KAAKorB,EACH0J,EAAI,CAACoZ,EAAIvhC,CAAAA,EAAKs6B,EAAKiH,CAAAA,EAAIvhC,EAAI,EAAI,GAC/B,KACF,MAAKuhC,EACHpZ,EAAI,CAACnoB,EAAIye,CAAAA,EAAK6b,EAAI,EAClB,KACF,MAAKt6B,EACHmoB,EAAI,CAAC1J,EAAI8iB,CAAAA,EAAKjH,EAAI,CAEtB,CACAnS,GAAK,CACP,CAEA,MAAO,CACLl1B,KAAKC,KAAK,CAACi1B,IAAAA,GACXl1B,KAAKC,KAAK,CAAC+pB,IAAAA,GACXhqB,KAAKC,KAAK,CAAC8wB,IAAAA,GACZ,EAOHyZ,UAAW,WACT,OAAO,IAAI,CAAC+D,OAAO,EAOrBR,UAAW,SAAS9mB,CAAM,EACxB,IAAI,CAACsnB,OAAO,CAAGtnB,CACjB,EAMAunB,MAAO,WACL,IAAIvnB,EAAS,IAAI,CAACujB,SAAS,GAC3B,MAAO,OAASvjB,CAAM,CAAC,EAAE,CAAG,IAAMA,CAAM,CAAC,EAAE,CAAG,IAAMA,CAAM,CAAC,EAAE,CAAG,GAClE,EAMAwnB,OAAQ,WACN,IAAIxnB,EAAS,IAAI,CAACujB,SAAS,GAC3B,MAAO,QAAUvjB,CAAM,CAAC,EAAE,CAAG,IAAMA,CAAM,CAAC,EAAE,CAAG,IAAMA,CAAM,CAAC,EAAE,CAAG,IAAMA,CAAM,CAAC,EAAE,CAAG,GACrF,EAMAynB,MAAO,WACL,IAAIznB,EAAS,IAAI,CAACujB,SAAS,GACvBmE,EAAM,IAAI,CAACN,SAAS,CAACpnB,CAAM,CAAC,EAAE,CAAEA,CAAM,CAAC,EAAE,CAAEA,CAAM,CAAC,EAAE,EAExD,MAAO,OAAS0nB,CAAG,CAAC,EAAE,CAAG,IAAMA,CAAG,CAAC,EAAE,CAAG,KAAOA,CAAG,CAAC,EAAE,CAAG,IAC1D,EAMAC,OAAQ,WACN,IAAI3nB,EAAS,IAAI,CAACujB,SAAS,GACvBmE,EAAM,IAAI,CAACN,SAAS,CAACpnB,CAAM,CAAC,EAAE,CAAEA,CAAM,CAAC,EAAE,CAAEA,CAAM,CAAC,EAAE,EAExD,MAAO,QAAU0nB,CAAG,CAAC,EAAE,CAAG,IAAMA,CAAG,CAAC,EAAE,CAAG,KAAOA,CAAG,CAAC,EAAE,CAAG,KAAO1nB,CAAM,CAAC,EAAE,CAAG,GAC9E,EAMA4nB,MAAO,WACL,IAA+BrjB,EAAG8iB,EAAGvhC,EAAjCka,EAAS,IAAI,CAACujB,SAAS,GAW3B,OARAhf,EAAIA,IAAAA,CADJA,EAAIvE,CAAM,CAAC,EAAE,CAAC1a,QAAQ,CAAC,KAChB5Q,MAAM,CAAW,IAAM6vB,EAAKA,EAGnC8iB,EAAIA,IAAAA,CADJA,EAAIrnB,CAAM,CAAC,EAAE,CAAC1a,QAAQ,CAAC,KAChB5Q,MAAM,CAAW,IAAM2yC,EAAKA,EAGnCvhC,EAAIA,IAAAA,CADJA,EAAIka,CAAM,CAAC,EAAE,CAAC1a,QAAQ,CAAC,KAChB5Q,MAAM,CAAW,IAAMoR,EAAKA,EAE5Bye,EAAExe,WAAW,GAAKshC,EAAEthC,WAAW,GAAKD,EAAEC,WAAW,EAC1D,EAMA8hC,OAAQ,WACN,IAA+BrsC,EAM/B,OAFAA,EAAIA,IAAAA,CADJA,EAAIA,CADJA,EAAIzC,KAAKC,KAAK,CAACgnB,IAAAA,IAFE,CAACujB,SAAS,EAEN,CAAC,EAAE,CAAG,EACrBj+B,QAAQ,CAAC,KACR5Q,MAAM,CAAW,IAAM8G,EAAKA,EAE5B,IAAI,CAACosC,KAAK,GAAKpsC,EAAEuK,WAAW,EACrC,EAMA+hC,SAAU,WACR,OAAO,IAAI,CAACvE,SAAS,EAAE,CAAC,EAAE,EAQ5BwE,SAAU,SAASvlB,CAAK,EACtB,IAAIxC,EAAS,IAAI,CAACujB,SAAS,GAG3B,OAFAvjB,CAAM,CAAC,EAAE,CAAGwC,EACZ,IAAI,CAACskB,SAAS,CAAC9mB,GACR,IAAI,EAObgoB,YAAa,WACX,IAAIhoB,EAAS,IAAI,CAACujB,SAAS,GACvB0E,EAAUj3B,SAAS,CAACgP,GAAAA,CAAM,CAAC,EAAE,CAASA,IAAAA,CAAM,CAAC,EAAE,CAAUA,IAAAA,CAAM,CAAC,EAAE,EAASvJ,OAAO,CAAC,GAAI,IACvFyxB,EAAeloB,CAAM,CAAC,EAAE,CAE5B,OADA,IAAI,CAAC8mB,SAAS,CAAC,CAACmB,EAASA,EAASA,EAASC,EAAa,EACjD,IAAI,EAQbC,aAAc,SAASC,CAAS,EAC9B,IAAIpoB,EAAS,IAAI,CAACujB,SAAS,GACvB0E,EAAU,CAACjoB,GAAAA,CAAM,CAAC,EAAE,CAASA,IAAAA,CAAM,CAAC,EAAE,CAAUA,IAAAA,CAAM,CAAC,EAAE,EAASvJ,OAAO,CAAC,GAC1EyxB,EAAeloB,CAAM,CAAC,EAAE,CAM5B,OAJAooB,EAAYA,GAAa,IAEzBH,EAAUvjB,OAAQujB,GAAWvjB,OAAO0jB,GAAc,EAAI,IACtD,IAAI,CAACtB,SAAS,CAAC,CAACmB,EAASA,EAASA,EAASC,EAAa,EACjD,IAAI,EAQbG,YAAa,SAASC,CAAU,EACxBA,aAAsBhF,OAC1BgF,CAAAA,EAAa,IAAIhF,MAAMgF,EAAAA,EAGzB,IAI0C7nC,EAJtCxJ,EAAS,EAAE,CACXurB,EAAQ,IAAI,CAACslB,QAAQ,GAErB9nB,EAAS,IAAI,CAACujB,SAAS,GACvBgF,EAAcD,EAAW/E,SAAS,GAEtC,IAAK9iC,EAAI,EAAGA,EAAI,EAAGA,IACjBxJ,EAAOjH,IAAI,CAAC+I,KAAKC,KAAK,CAACgnB,GAAAA,CAAO,CAACvf,EAAE,CAAwB8nC,GAAAA,CAAW,CAAC9nC,EAAE,GAKzE,OAFAxJ,CAAM,CAAC,EAAE,CAAGurB,EACZ,IAAI,CAACskB,SAAS,CAAC7vC,GACR,IAAI,CAEf,EASAkF,EAAOmnC,KAAK,CAACkF,MAAM,CAAG,oIAQtBrsC,EAAOmnC,KAAK,CAACmF,MAAM,CAAG,gGAQtBtsC,EAAOmnC,KAAK,CAACoF,KAAK,CAAG,yDASrBvsC,EAAOmnC,KAAK,CAAC0D,YAAY,CAAG,CAC1B2B,UAAsB,UACtBC,aAAsB,UACtBC,KAAsB,UACtBC,WAAsB,UACtBC,MAAsB,UACtBC,MAAsB,UACtBC,OAAsB,UACtBC,MAAsB,UACtBC,eAAsB,UACtBC,KAAsB,UACtBC,WAAsB,UACtBC,MAAsB,UACtBC,UAAsB,UACtBC,UAAsB,UACtBC,WAAsB,UACtBC,UAAsB,UACtBC,MAAsB,UACtBC,eAAsB,UACtBC,SAAsB,UACtBC,QAAsB,UACtBC,KAAsB,UACtBC,SAAsB,UACtBC,SAAsB,UACtBC,cAAsB,UACtBC,SAAsB,UACtBC,SAAsB,UACtBC,UAAsB,UACtBC,UAAsB,UACtBC,YAAsB,UACtBC,eAAsB,UACtBC,WAAsB,UACtBC,WAAsB,UACtBC,QAAsB,UACtBC,WAAsB,UACtBC,aAAsB,UACtBC,cAAsB,UACtBC,cAAsB,UACtBC,cAAsB,UACtBC,cAAsB,UACtBC,WAAsB,UACtBC,SAAsB,UACtBC,YAAsB,UACtBC,QAAsB,UACtBC,QAAsB,UACtBC,WAAsB,UACtBC,UAAsB,UACtBC,YAAsB,UACtBC,YAAsB,UACtBC,QAAsB,UACtBC,UAAsB,UACtBC,WAAsB,UACtBC,KAAsB,UACtBC,UAAsB,UACtBC,KAAsB,UACtBC,KAAsB,UACtBC,MAAsB,UACtBC,YAAsB,UACtBC,SAAsB,UACtBC,QAAsB,UACtBC,UAAsB,UACtBC,OAAsB,UACtBC,MAAsB,UACtBC,MAAsB,UACtBC,SAAsB,UACtBC,cAAsB,UACtBC,UAAsB,UACtBC,aAAsB,UACtBC,UAAsB,UACtBC,WAAsB,UACtBC,UAAsB,UACtBC,qBAAsB,UACtBC,UAAsB,UACtBC,UAAsB,UACtBC,WAAsB,UACtBC,UAAsB,UACtBC,YAAsB,UACtBC,cAAsB,UACtBC,aAAsB,UACtBC,eAAsB,UACtBC,eAAsB,UACtBC,eAAsB,UACtBC,YAAsB,UACtBC,KAAsB,UACtBC,UAAsB,UACtBC,MAAsB,UACtBC,QAAsB,UACtBC,OAAsB,UACtBC,iBAAsB,UACtBC,WAAsB,UACtBC,aAAsB,UACtBC,aAAsB,UACtBC,eAAsB,UACtBC,gBAAsB,UACtBC,kBAAsB,UACtBC,gBAAsB,UACtBC,gBAAsB,UACtBC,aAAsB,UACtBC,UAAsB,UACtBC,UAAsB,UACtBC,SAAsB,UACtBC,YAAsB,UACtBC,KAAsB,UACtBC,QAAsB,UACtBC,MAAsB,UACtBC,UAAsB,UACtBC,OAAsB,UACtBC,UAAsB,UACtBC,OAAsB,UACtBC,cAAsB,UACtBC,UAAsB,UACtBC,cAAsB,UACtBC,cAAsB,UACtBC,WAAsB,UACtBC,UAAsB,UACtBC,KAAsB,UACtBC,KAAsB,UACtBC,KAAsB,UACtBC,WAAsB,UACtBC,OAAsB,UACtBC,cAAsB,UACtBC,IAAsB,UACtBC,UAAsB,UACtBC,UAAsB,UACtBC,YAAsB,UACtBC,OAAsB,UACtBC,WAAsB,UACtBC,SAAsB,UACtBC,SAAsB,UACtBC,OAAsB,UACtBC,OAAsB,UACtBC,QAAsB,UACtBC,UAAsB,UACtBC,UAAsB,UACtBC,UAAsB,UACtBC,KAAsB,UACtBC,YAAsB,UACtBC,UAAsB,UACtBhoB,IAAsB,UACtBioB,KAAsB,UACtBC,QAAsB,UACtBC,OAAsB,UACtBC,UAAsB,UACtBC,OAAsB,UACtBC,MAAsB,UACtBC,MAAsB,UACtBC,WAAsB,UACtBC,OAAsB,UACtBC,YAAsB,SACxB,EAkCA11C,EAAOmnC,KAAK,CAACwO,OAAO,CAAG,SAASzrC,CAAK,EACnC,OAAOi9B,MAAMyO,UAAU,CAACzO,MAAM4D,aAAa,CAAC7gC,GAC9C,EAQAlK,EAAOmnC,KAAK,CAAC4D,aAAa,CAAG,SAAS7gC,CAAK,EACzC,IAAI9Q,EAAQ8Q,EAAM9Q,KAAK,CAAC+tC,MAAMkF,MAAM,EACpC,GAAIjzC,EAAO,CACT,IAAIgvB,EAAIvT,SAASzb,CAAK,CAAC,EAAE,CAAE,IAAO,MAAK2lC,IAAI,CAAC3lC,CAAK,CAAC,EAAE,EAAI,IAAM,GAAM,MAAK2lC,IAAI,CAAC3lC,CAAK,CAAC,EAAE,EAAI,IAAM,GAC5F8xC,EAAIr2B,SAASzb,CAAK,CAAC,EAAE,CAAE,IAAO,MAAK2lC,IAAI,CAAC3lC,CAAK,CAAC,EAAE,EAAI,IAAM,GAAM,MAAK2lC,IAAI,CAAC3lC,CAAK,CAAC,EAAE,EAAI,IAAM,GAC5FuQ,EAAIkL,SAASzb,CAAK,CAAC,EAAE,CAAE,IAAO,MAAK2lC,IAAI,CAAC3lC,CAAK,CAAC,EAAE,EAAI,IAAM,GAAM,MAAK2lC,IAAI,CAAC3lC,CAAK,CAAC,EAAE,EAAI,IAAM,GAEhG,MAAO,CACLyb,SAASuT,EAAG,IACZvT,SAASq2B,EAAG,IACZr2B,SAASlL,EAAG,IACZvQ,CAAK,CAAC,EAAE,CAAG4Z,WAAW5Z,CAAK,CAAC,EAAE,EAAI,EACnC,CAEL,EAUA4G,EAAOmnC,KAAK,CAAC0O,QAAQ,CAAG1O,MAAMwO,OAAO,CAQrC31C,EAAOmnC,KAAK,CAAC2O,OAAO,CAAG,SAAS5rC,CAAK,EACnC,OAAOi9B,MAAMyO,UAAU,CAACzO,MAAM6D,aAAa,CAAC9gC,GAC9C,EAUAlK,EAAOmnC,KAAK,CAAC6D,aAAa,CAAG,SAAS9gC,CAAK,EACzC,IAAI9Q,EAAQ8Q,EAAM9Q,KAAK,CAAC+tC,MAAMmF,MAAM,EACpC,GAAKlzC,GAIL,IAGIgvB,EAAG8iB,EAAGvhC,EAHNmoB,EAAI,CAAE9e,WAAY5Z,CAAK,CAAC,EAAE,EAAI,IAAO,KAAO,IAAO,IACnDwtB,EAAI5T,WAAW5Z,CAAK,CAAC,EAAE,EAAK,MAAK2lC,IAAI,CAAC3lC,CAAK,CAAC,EAAE,EAAI,IAAM,GACxDu0B,EAAI3a,WAAW5Z,CAAK,CAAC,EAAE,EAAK,MAAK2lC,IAAI,CAAC3lC,CAAK,CAAC,EAAE,EAAI,IAAM,GAG5D,GAAIwtB,IAAAA,EACFwB,EAAI8iB,EAAIvhC,EAAIgkB,MAET,CACH,IAAIoE,EAAIpE,GAAK,GAAMA,EAAK/G,CAAAA,EAAI,GAAK+G,EAAI/G,EAAI+G,EAAI/G,EACzCtmB,EAAIqtB,EAAAA,EAAQoE,EAEhB3J,EAAIwiB,QAAQtqC,EAAGyxB,EAAGD,EAAI,EAAI,GAC1BoZ,EAAIN,QAAQtqC,EAAGyxB,EAAGD,GAClBnoB,EAAIihC,QAAQtqC,EAAGyxB,EAAGD,EAAI,EAAI,EAC5B,CAEA,MAAO,CACLl1B,KAAKC,KAAK,CAACurB,IAAAA,GACXxrB,KAAKC,KAAK,CAACquC,IAAAA,GACXtuC,KAAKC,KAAK,CAAC8M,IAAAA,GACXvQ,CAAK,CAAC,EAAE,CAAG4Z,WAAW5Z,CAAK,CAAC,EAAE,EAAI,EACnC,CACH,EAUA4G,EAAOmnC,KAAK,CAAC4O,QAAQ,CAAG5O,MAAM2O,OAAO,CASrC91C,EAAOmnC,KAAK,CAAC6O,OAAO,CAAG,SAAS9rC,CAAK,EACnC,OAAOi9B,MAAMyO,UAAU,CAACzO,MAAM2D,aAAa,CAAC5gC,GAC9C,EASAlK,EAAOmnC,KAAK,CAAC2D,aAAa,CAAG,SAAS5gC,CAAK,EACzC,GAAIA,EAAM9Q,KAAK,CAAC+tC,MAAMoF,KAAK,EAAG,CAC5B,IAAIzzC,EAAQoR,EAAMhG,KAAK,CAACgG,EAAMwX,OAAO,CAAC,KAAO,GACzCu0B,EAAmBn9C,IAAAA,EAAMP,MAAM,EAAUO,IAAAA,EAAMP,MAAM,CACrD29C,EAAUp9C,IAAAA,EAAMP,MAAM,EAAUO,IAAAA,EAAMP,MAAM,CAC5C6vB,EAAI6tB,EAAmBn9C,EAAMowB,MAAM,CAAC,GAAKpwB,EAAMowB,MAAM,CAAC,GAAMpwB,EAAM4wB,SAAS,CAAC,EAAG,GAC/EwhB,EAAI+K,EAAmBn9C,EAAMowB,MAAM,CAAC,GAAKpwB,EAAMowB,MAAM,CAAC,GAAMpwB,EAAM4wB,SAAS,CAAC,EAAG,GAC/E/f,EAAIssC,EAAmBn9C,EAAMowB,MAAM,CAAC,GAAKpwB,EAAMowB,MAAM,CAAC,GAAMpwB,EAAM4wB,SAAS,CAAC,EAAG,GAC/ErqB,EAAI62C,EAAUD,EAAmBn9C,EAAMowB,MAAM,CAAC,GAAKpwB,EAAMowB,MAAM,CAAC,GAAMpwB,EAAM4wB,SAAS,CAAC,EAAG,GAAM,KAEnG,MAAO,CACL7U,SAASuT,EAAG,IACZvT,SAASq2B,EAAG,IACZr2B,SAASlL,EAAG,IACZqJ,WAAW,CAAC6B,SAASxV,EAAG,IAAM,KAAKib,OAAO,CAAC,IAC5C,CAEL,EASAta,EAAOmnC,KAAK,CAACyO,UAAU,CAAG,SAAS/xB,CAAM,EACvC,IAAIsyB,EAAS,IAAIhP,MAEjB,OADAgP,EAAOxL,SAAS,CAAC9mB,GACVsyB,CACT,CAEF,EAAoC55B,GACnC,SAAShJ,CAAM,EAEd,aAEA,IAAIvT,EAASuT,EAAOvT,MAAM,EAAKuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,GAC7Co2C,EAAW,CAAC,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAI,CAC5DC,EAAU,CAAC,KAAM,OAAQ,KAAM,OAAO,CACtC/6B,EAAW,CAAC,EACZg7B,EAAO,OAAqBC,EAAQ,QAASC,EAAS,SAAUC,EAAS,SACzEC,EAAW,CACT1vC,IAAKwvC,EACLG,OAHmB,MAInB1vC,KAAMsvC,EACNK,MAAON,EACP9mB,OAAQinB,CACV,EAAG9xB,EAAmB3kB,EAAOyb,IAAI,CAACkJ,gBAAgB,CAClDN,EAAQznB,KAAKynB,IAAI,EAAI,SAASa,CAAC,EAAI,MAAO,CAAEA,EAAI,GAAMA,CAAAA,EAAI,IAAO,CAACA,CAAG,EASzE,SAAS2xB,mBAAmBC,CAAY,CAAEC,CAAO,EAE/C,OAAOn6C,KAAKC,KAAK,CAACm6C,CADAF,EAAa1yB,KAAK,CAAGO,EAAiB/nB,KAAK+d,KAAK,CAACo8B,EAAQ5xB,CAAC,CAAE4xB,EAAQ7xB,CAAC,GAAK,KAC3D,IAAO,GAC1C,CAEA,SAAS+xB,UAAU31B,CAAS,CAAEnpB,CAAO,EACnC,IAAIU,EAASV,EAAQyvB,SAAS,CAAC/uB,MAAM,CACjCnE,EAASmE,EAAOnE,MAAM,CACtBwiD,EAAgBl3C,EAAOyb,IAAI,CAAC/iB,MAAM,CAACqO,KAAK,CAAC5O,EAC7C++C,CAAAA,EAAcr+C,MAAM,CAAGA,EACvBnE,GAAUA,EAAOstB,IAAI,CAAC,UAAYV,EAAW41B,GAC7Cr+C,EAAOmpB,IAAI,CAACV,EAAWnpB,EACzB,CAQA,SAASg/C,oBAAoBC,CAAS,CAAEN,CAAY,EAClD,IAAIpiD,EAASoiD,EAAapiD,MAAM,CAC5B2iD,EAAmBD,CAAS,CADgB1iD,EAAO4iD,WAAW,CACrB,CAC7C,OAAO5iD,EAAQ6iD,cAAc,EAAI,CAACF,GACjC,CAAC3iD,EAAO6iD,cAAc,EAAIF,CAC7B,CAOA,SAASG,oBAAoB5vB,CAAS,EACpC,OAAOA,EAAU6vB,OAAO,GAAKhB,GAAU7uB,EAAU8vB,OAAO,GAAKjB,CAC/D,CASA,SAASkB,mBAAmBb,CAAY,CAAEc,CAAE,CAAEC,CAAmB,EAC/D,IAAIC,EAAQhB,EAAalxC,YAAY,CAAEmyC,EAAQjB,EAAajxC,YAAY,SACpEiyC,KAASC,GAGT,CAACH,GAAOE,CAAAA,EAAAA,KAASC,CAAAA,KAAUF,GAG3BC,EAAAA,GAASF,MAAAA,GAGTG,EAAAA,GAASH,MAAAA,CAIf,CA6FA,SAASI,gBAAgBZ,CAAS,CAAExvB,CAAS,CAAE1C,CAAC,CAAEC,CAAC,EACjD,MAAO,CACLrd,EAAGsvC,EACHxvB,UAAWA,EACXqwB,QAAS,CACP/yB,EAAGA,EACHC,EAAGA,CACL,CACF,CACF,CAQA,SAAS+yB,oBAAoBC,CAAa,EACxC,OAAO,SAASf,CAAS,CAAExvB,CAAS,CAAE1C,CAAC,CAAEC,CAAC,EACxC,IAAItsB,EAAS+uB,EAAU/uB,MAAM,CAAE0yB,EAAc1yB,EAAOu/C,cAAc,GAC9DC,EAAax/C,EAAOy/C,sBAAsB,CAAC/sB,EAAa3D,EAAU6vB,OAAO,CAAE7vB,EAAU8vB,OAAO,EAC5Fa,EAAkBJ,EAAcf,EAAWxvB,EAAW1C,EAAGC,GAE7D,OADAtsB,EAAO42B,mBAAmB,CAAC4oB,EAAYzwB,EAAU6vB,OAAO,CAAE7vB,EAAU8vB,OAAO,EACpEa,CACT,CACF,CAOA,SAASC,kBAAkBl3B,CAAS,CAAE62B,CAAa,EACjD,OAAO,SAASf,CAAS,CAAExvB,CAAS,CAAE1C,CAAC,CAAEC,CAAC,EACxC,IAAIozB,EAAkBJ,EAAcf,EAAWxvB,EAAW1C,EAAGC,GAI7D,OAHIozB,GACFtB,UAAU31B,EAAW02B,gBAAgBZ,EAAWxvB,EAAW1C,EAAGC,IAEzDozB,CACT,CACF,CAYA,SAASE,cAAc7wB,CAAS,CAAE6vB,CAAO,CAAEC,CAAO,CAAExyB,CAAC,CAAEC,CAAC,EACtD,IAAItsB,EAAS+uB,EAAU/uB,MAAM,CACzBk+C,EAAUl+C,EAAOyiB,QAAQ,CAACsM,EAAU8wB,MAAM,CAAC,CAC3C5Z,EAAOjmC,EAAOnE,MAAM,CAACikD,OAAO,GAC5BC,EAAU//C,EAAO+/C,OAAO,CAAG9Z,EAC3B+Z,EAAahgD,EAAOigD,YAAY,CAAC,IAAI94C,EAAOilB,KAAK,CAACC,EAAGC,GAAIsyB,EAASC,GAetE,OAdImB,EAAW3zB,CAAC,EAAI0zB,GAClBC,CAAAA,EAAW3zB,CAAC,EAAI0zB,CAAAA,EAEdC,EAAW3zB,CAAC,EAAI,CAAC0zB,GACnBC,CAAAA,EAAW3zB,CAAC,EAAI0zB,CAAAA,EAEdC,EAAW1zB,CAAC,EAAIyzB,GAClBC,CAAAA,EAAW1zB,CAAC,EAAIyzB,CAAAA,EAEdC,EAAW1zB,CAAC,EAAIyzB,GAClBC,CAAAA,EAAW1zB,CAAC,EAAIyzB,CAAAA,EAElBC,EAAW3zB,CAAC,EAAI6xB,EAAQgC,OAAO,CAC/BF,EAAW1zB,CAAC,EAAI4xB,EAAQiC,OAAO,CACxBH,CACT,CAOA,SAASI,iBAAiBpgD,CAAM,EAC9B,OAAOA,EAAOi0B,KAAK,GAAKj0B,EAAOk0B,KAAK,CAOtC,SAASmsB,uBAAuBrgD,CAAM,CAAEsgD,CAAY,CAAEC,CAAiB,CAAEC,CAAI,CAAEC,CAAS,EACtF,GAAIzgD,IAAAA,CAAM,CAACsgD,EAAa,CAAQ,CAE9B,IAAII,EAAWD,EADFzgD,EAAO2gD,yBAAyB,EAAE,CAACH,EAAK,CACjBxgD,CAAM,CAACugD,EAAkB,CAC7DvgD,EAAOiM,GAAG,CAACs0C,EAAmBG,EAChC,CACF,CAMA,SAASE,YAAYrC,CAAS,CAAExvB,CAAS,CAAE1C,CAAC,CAAEC,CAAC,EAC7C,IAQgCu0B,EAR5B7gD,EAAS+uB,EAAU/uB,MAAM,CAEzB8gD,EAAY9gD,EAAO2gD,yBAAyB,CAAC,EAAG3gD,EAAO0zB,KAAK,EAK5DqtB,EAAgBh9C,KAAKkf,GAAG,CAAC+8B,EAAAA,cAJEjxB,EAAWA,EAAU6vB,OAAO,CAAE7vB,EAAU8vB,OAAO,CAAExyB,EAAGC,GAI3CD,CAAC,EAAQy0B,EAAUz0B,CAAC,CACxD20B,EAAchhD,EAAOyzB,KAAK,CAC1BstB,EAAgB,EAElBF,EAAU,GAGVA,EAAU/0B,EACR/nB,KAAK+d,KAAK,CAAEi/B,EAAgB/gD,EAAO2N,MAAM,CAAImzC,EAAUx0B,CAAC,CAAGtsB,EAAO4N,MAAM,GAItEmhB,EAAU6vB,OAAO,GAAKnB,GAAQ1uB,EAAU8vB,OAAO,GAAKlB,GACtDkD,CAAAA,EAAU,CAACA,CAAAA,EAET9xB,EAAU6vB,OAAO,GAAKlB,GAAS3uB,QAAAA,EAAU8vB,OAAO,EAClDgC,CAAAA,EAAU,CAACA,CAAAA,EAETT,iBAAiBpgD,IACnB6gD,CAAAA,EAAU,CAACA,CAAAA,GAGf,IAAII,EAAYD,IAAgBH,EAChC,GAAII,EAAW,CACb,IAAIC,EAAmBlhD,EAAO2gD,yBAAyB,GAAGr0B,CAAC,CAC3DtsB,EAAOiM,GAAG,CAAC,QAAS40C,GACpBR,uBAAuBrgD,EAAQ,QAAS,SAAU,IAAKkhD,EACzD,CACA,OAAOD,CACT,CAMA,SAASE,YAAY5C,CAAS,CAAExvB,CAAS,CAAE1C,CAAC,CAAEC,CAAC,EAC7C,IAQgCu0B,EAR5B7gD,EAAS+uB,EAAU/uB,MAAM,CAEzB8gD,EAAY9gD,EAAO2gD,yBAAyB,CAAC3gD,EAAOyzB,KAAK,CAAE,GAK3DstB,EAAgBh9C,KAAKkf,GAAG,CAAC+8B,EAAAA,cAJEjxB,EAAWA,EAAU6vB,OAAO,CAAE7vB,EAAU8vB,OAAO,CAAExyB,EAAGC,GAI3CA,CAAC,EAAQw0B,EAAUx0B,CAAC,CACxD00B,EAAchhD,EAAO0zB,KAAK,CAC1BqtB,EAAgB,EAElBF,EAAU,GAGVA,EAAU/0B,EACR/nB,KAAK+d,KAAK,CAAEi/B,EAAgB/gD,EAAO4N,MAAM,CAAIkzC,EAAUz0B,CAAC,CAAGrsB,EAAO2N,MAAM,GAItEohB,EAAU6vB,OAAO,GAAKnB,GAAQ1uB,EAAU8vB,OAAO,GAAKlB,GACtDkD,CAAAA,EAAU,CAACA,CAAAA,EAET9xB,EAAU6vB,OAAO,GAAKlB,GAAS3uB,QAAAA,EAAU8vB,OAAO,EAClDgC,CAAAA,EAAU,CAACA,CAAAA,EAETT,iBAAiBpgD,IACnB6gD,CAAAA,EAAU,CAACA,CAAAA,GAGf,IAAII,EAAYD,IAAgBH,EAChC,GAAII,EAAW,CACb,IAAIC,EAAmBlhD,EAAO2gD,yBAAyB,GAAGt0B,CAAC,CAC3DrsB,EAAOiM,GAAG,CAAC,QAAS40C,GACpBR,uBAAuBrgD,EAAQ,QAAS,SAAU,IAAKkhD,EACzD,CACA,OAAOD,CACT,CAmKA,SAASG,YAAY7C,CAAS,CAAExvB,CAAS,CAAE1C,CAAC,CAAEC,CAAC,CAAEhtB,CAAO,EACtDA,EAAUA,GAAW,CAAC,EACtB,IAEqB6sB,EAAUxe,EAAQC,EAAQyzC,EAG3CC,EAAOC,EALPvhD,EAAS+uB,EAAU/uB,MAAM,CACzB+M,EAAe/M,EAAO+M,YAAY,CAAEC,EAAehN,EAAOgN,YAAY,CACtE+xC,EAAKz/C,EAAQy/C,EAAE,CACfC,EAAsBV,oBAAoBC,EAAWv+C,GACrDwhD,EAAgB1C,mBAAmB9+C,EAAQ++C,EAAIC,GACjCyC,EAAe1yB,EAAU0yB,YAAY,CAEvD,GAAID,EACF,MAAO,GAET,GAAIC,EACF9zC,EAASohB,EAAUphB,MAAM,CAAG8zC,EAC5B7zC,EAASmhB,EAAUnhB,MAAM,CAAG6zC,MAEzB,CAgBH,GAfAt1B,EAAWyzB,cAAc7wB,EAAWA,EAAU6vB,OAAO,CAAE7vB,EAAU8vB,OAAO,CAAExyB,EAAGC,GAM7Eg1B,EAAQvC,MAAAA,EAAavzB,EAAKW,EAASE,CAAC,EAAI,EACxCk1B,EAAQxC,MAAAA,EAAavzB,EAAKW,EAASG,CAAC,EAAI,EACnCyC,EAAUuyB,KAAK,EAClBvyB,CAAAA,EAAUuyB,KAAK,CAAGA,CAAAA,EAEfvyB,EAAUwyB,KAAK,EAClBxyB,CAAAA,EAAUwyB,KAAK,CAAGA,CAAAA,EAGhBvhD,EAAO0hD,eAAe,EACvB3yB,CAAAA,EAAUuyB,KAAK,GAAKA,GAASvyB,EAAUwyB,KAAK,GAAKA,CAAAA,EAElD,MAAO,GAKT,GAFAF,EAAMrhD,EAAO2gD,yBAAyB,GAElC3B,GAAuB,CAACD,EAAI,CAE9B,IAAIld,EAAW99B,KAAKkf,GAAG,CAACkJ,EAASE,CAAC,EAAItoB,KAAKkf,GAAG,CAACkJ,EAASG,CAAC,EACrDq1B,EAAW5yB,EAAU4yB,QAAQ,CAG7Bj0C,EAAQm0B,EAFW99B,CAAAA,KAAKkf,GAAG,CAACo+B,EAAIh1B,CAAC,CAAGs1B,EAASh0C,MAAM,CAAG3N,EAAO2N,MAAM,EACjE5J,KAAKkf,GAAG,CAACo+B,EAAI/0B,CAAC,CAAGq1B,EAAS/zC,MAAM,CAAG5N,EAAO4N,MAAM,GAEtDD,EAASg0C,EAASh0C,MAAM,CAAGD,EAC3BE,EAAS+zC,EAAS/zC,MAAM,CAAGF,CAC7B,MAEEC,EAAS5J,KAAKkf,GAAG,CAACkJ,EAASE,CAAC,CAAGrsB,EAAO2N,MAAM,CAAG0zC,EAAIh1B,CAAC,EACpDze,EAAS7J,KAAKkf,GAAG,CAACkJ,EAASG,CAAC,CAAGtsB,EAAO4N,MAAM,CAAGyzC,EAAI/0B,CAAC,EAGlDqyB,oBAAoB5vB,KACtBphB,GAAU,EACVC,GAAU,GAERmhB,EAAUuyB,KAAK,GAAKA,GAASvC,MAAAA,IAC/BhwB,EAAU6vB,OAAO,CAAGf,CAAQ,CAAC9uB,EAAU6vB,OAAO,CAAC,CAC/CjxC,GAAU,GACVohB,EAAUuyB,KAAK,CAAGA,GAEhBvyB,EAAUwyB,KAAK,GAAKA,GAASxC,MAAAA,IAC/BhwB,EAAU8vB,OAAO,CAAGhB,CAAQ,CAAC9uB,EAAU8vB,OAAO,CAAC,CAC/CjxC,GAAU,GACVmhB,EAAUwyB,KAAK,CAAGA,EAEtB,CAEA,IAAIK,EAAY5hD,EAAO2N,MAAM,CAAEk0C,EAAY7hD,EAAO4N,MAAM,CAUxD,OATKmxC,GAMHA,MAAAA,GAAc/+C,EAAOiM,GAAG,CAAC,SAAU0B,GACnCoxC,MAAAA,GAAc/+C,EAAOiM,GAAG,CAAC,SAAU2B,KANnC,GAAiB5N,EAAOiM,GAAG,CAAC,SAAU0B,GACtC,GAAiB3N,EAAOiM,GAAG,CAAC,SAAU2B,IAOjCg0C,IAAc5hD,EAAO2N,MAAM,EAAIk0C,IAAc7hD,EAAO4N,MAAM,CAsHnE6U,EAASq/B,uBAAuB,CAlnBhC,SAAiCvD,CAAS,CAAEL,CAAO,CAAED,CAAY,EAC/D,IACIe,EAAsBV,oBAAoBC,EAAWN,GACrDc,EAAK,SAOT,CANIb,IAAAA,EAAQ7xB,CAAC,EAAU6xB,IAAAA,EAAQ5xB,CAAC,CAC9ByyB,EAAK,IAEgB,IAAdb,EAAQ7xB,CAAC,EAAU6xB,IAAAA,EAAQ5xB,CAAC,EACnCyyB,CAAAA,EAAK,KAEHD,mBAAmBb,EAAcc,EAAIC,IATxB,cAaVzB,CAAQ,CADPS,mBAAmBC,EAAcC,GACvB,CAAG,SACvB,EAomBAz7B,EAASs/B,sBAAsB,CA3lB/B,SAAgCxD,CAAS,CAAEL,CAAO,CAAED,CAAY,SAE9D,IAAIC,EAAQ7xB,CAAC,EAAU4xB,EAAa+D,YAAY,EAG5C9D,IAAAA,EAAQ5xB,CAAC,EAAU2xB,EAAagE,YAAY,CAJ/B,cAQVzE,CAAO,CADNQ,mBAAmBC,EAAcC,GAAW,EACnC,CAAG,SACtB,EAklBAz7B,EAASy/B,2BAA2B,CAzkBpC,SAAqC3D,CAAS,CAAEL,CAAO,CAAED,CAAY,SACnE,CAAa,CAACA,EAAapiD,MAAM,CAACsmD,YAAY,CAAC,CACtC1/B,EAASs/B,sBAAsB,CAACxD,EAAWL,EAASD,GAEtDx7B,EAASq/B,uBAAuB,CAACvD,EAAWL,EAASD,EAC9D,EAqkBAx7B,EAAS2/B,oBAAoB,CAAGzC,kBAAkB,WAAYN,oBA7P9D,SAA8Bd,CAAS,CAAExvB,CAAS,CAAE1C,CAAC,CAAEC,CAAC,EACtD,IACItsB,EAAS4uB,EAAE5uB,MAAM,CACjBqiD,EAAariD,EAAOy/C,sBAAsB,CAACz/C,EAAOu/C,cAAc,GAAI3wB,EAAEgwB,OAAO,CAAEhwB,EAAEiwB,OAAO,EAE5F,GAAI7+C,EAAOiN,YAAY,CACrB,MAAO,GAGT,IAAIq1C,EAAYv+C,KAAK+d,KAAK,CAAC8M,EAAE2zB,EAAE,CAAGF,EAAW/1B,CAAC,CAAEsC,EAAE4zB,EAAE,CAAGH,EAAWh2B,CAAC,EAE/Dd,EAAQO,EAAiB22B,KADT3gC,KAAK,CAACwK,EAAI+1B,EAAW/1B,CAAC,CAAED,EAAIg2B,EAAWh2B,CAAC,EACpBi2B,EAAY1zB,EAAEkF,KAAK,EACvD4uB,EAAa,GAEjB,GAAI1iD,EAAO2iD,SAAS,CAAG,EAAG,CACxB,IAAIA,EAAa3iD,EAAO2iD,SAAS,CAC7BC,EAAiB5iD,EAAO4iD,aAAa,EAAID,EACzCE,EAAmB9+C,KAAKof,IAAI,CAACoI,EAAQo3B,GAAaA,EAClDG,EAAkB/+C,KAAKif,KAAK,CAACuI,EAAQo3B,GAAaA,CAElD5+C,CAAAA,KAAKkf,GAAG,CAACsI,EAAQu3B,GAAmBF,EACtCr3B,EAAQu3B,EAED/+C,KAAKkf,GAAG,CAACsI,EAAQs3B,GAAoBD,GAC5Cr3B,CAAAA,EAAQs3B,CAAAA,CAEZ,CAUA,OAPIt3B,EAAQ,GACVA,CAAAA,EAAQ,IAAMA,CAAAA,EAEhBA,GAAS,IAETm3B,EAAa1iD,EAAOurB,KAAK,GAAKA,EAC9BvrB,EAAOurB,KAAK,CAAGA,EACRm3B,CACT,IAyNAjgC,EAASsgC,cAAc,CAAGpD,kBAAkB,UAAWN,oBA9GvD,SAA+Bd,CAAS,CAAExvB,CAAS,CAAE1C,CAAC,CAAEC,CAAC,EACvD,OAAO80B,YAAY7C,EAAWxvB,EAAW1C,EAAGC,EAC9C,IA6GA7J,EAASugC,QAAQ,CAAGrD,kBAAkB,UAAWN,oBAlGjD,SAAsBd,CAAS,CAAExvB,CAAS,CAAE1C,CAAC,CAAEC,CAAC,EAC9C,OAAO80B,YAAY7C,EAAWxvB,EAAW1C,EAAGC,EAAI,CAAEyyB,GAAI,GAAI,EAC5D,IAiGAt8B,EAASwgC,QAAQ,CAAGtD,kBAAkB,UAAWN,oBAtFjD,SAAsBd,CAAS,CAAExvB,CAAS,CAAE1C,CAAC,CAAEC,CAAC,EAC9C,OAAO80B,YAAY7C,EAAWxvB,EAAW1C,EAAGC,EAAI,CAAEyyB,GAAI,GAAI,EAC5D,IAqFAt8B,EAASygC,kBAAkB,CA1E3B,SAA4B3E,CAAS,CAAExvB,CAAS,CAAE1C,CAAC,CAAEC,CAAC,SAEpD,CAAa,CAACyC,EAAU/uB,MAAM,CAACnE,MAAM,CAACsmD,YAAY,CAAC,CAC1C1/B,EAAS0gC,YAAY,CAAC5E,EAAWxvB,EAAW1C,EAAGC,GAEjD7J,EAASwgC,QAAQ,CAAC1E,EAAWxvB,EAAW1C,EAAGC,EACpD,EAqEA7J,EAAS2gC,kBAAkB,CA1D3B,SAA4B7E,CAAS,CAAExvB,CAAS,CAAE1C,CAAC,CAAEC,CAAC,SAEpD,CAAa,CAACyC,EAAU/uB,MAAM,CAACnE,MAAM,CAACsmD,YAAY,CAAC,CAC1C1/B,EAAS4gC,YAAY,CAAC9E,EAAWxvB,EAAW1C,EAAGC,GAEjD7J,EAASugC,QAAQ,CAACzE,EAAWxvB,EAAW1C,EAAGC,EACpD,EAqDA7J,EAAS6gC,WAAW,CAAG3D,kBAAkB,WAAYN,oBA1CrD,SAAqBd,CAAS,CAAExvB,CAAS,CAAE1C,CAAC,CAAEC,CAAC,EAC7C,IAAItsB,EAAS+uB,EAAU/uB,MAAM,CAAEggD,EAAaJ,cAAc7wB,EAAWA,EAAU6vB,OAAO,CAAE7vB,EAAU8vB,OAAO,CAAExyB,EAAGC,GAC1Gi3B,EAAgBvjD,EAAO6d,WAAW,CAAI7d,CAAAA,EAAOiuB,aAAa,CAAGjuB,EAAO2N,MAAM,CAAG,GAC7E61C,EAAa7E,oBAAoB5vB,GAAa,EAAI,EAClD00B,EAAWzjD,EAAO2E,KAAK,CACvB++C,EAAW3/C,KAAKkf,GAAG,CAAC+8B,EAAW3zB,CAAC,CAAGm3B,EAAaxjD,EAAO2N,MAAM,EAAI41C,EAErE,OADAvjD,EAAOiM,GAAG,CAAC,QAASlI,KAAKI,GAAG,CAACu/C,EAAU,IAChCD,IAAaC,CACtB,IAmCAjhC,EAAS0gC,YAAY,CAzWrB,SAAsB5E,CAAS,CAAExvB,CAAS,CAAE1C,CAAC,CAAEC,CAAC,EAO9C,IAA2DsyB,EAAvD5+C,EAAS+uB,EAAU/uB,MAAM,CAAEghD,EAAchhD,EAAOyzB,KAAK,CAAWorB,EAAU9vB,EAAU8vB,OAAO,OAC/F,CAAI7+C,EAAOiiD,YAAY,GAGnBjB,IAAAA,EAIApC,EAFE+E,cADqC50B,EAAW6uB,EAAQA,EAAQvxB,EAAGC,GAC9CD,CAAC,CAAG,EAEjBoxB,EAIAC,GAIRsD,EAAc,GAChBpC,CAAAA,EAAUC,QAAAA,EAAkBpB,EAAOC,CAAAA,EAEjCsD,EAAc,GAChBpC,CAAAA,EAAUC,QAAAA,EAAkBnB,EAAQD,CAAAA,EAGlC2C,iBAAiBpgD,IACnB4+C,CAAAA,EAAUA,IAAYnB,EAAOC,EAAQD,CAAAA,GAKzC1uB,EAAU6vB,OAAO,CAAGA,EAEbgF,kBAD8B,UAAWvE,oBAAoBuB,cAChDrC,EAAWxvB,EAAW1C,EAAGC,GAC/C,EAmUA7J,EAAS4gC,YAAY,CAxTrB,SAAsB9E,CAAS,CAAExvB,CAAS,CAAE1C,CAAC,CAAEC,CAAC,EAO9C,IAA2DuyB,EAAvD7+C,EAAS+uB,EAAU/uB,MAAM,CAAEghD,EAAchhD,EAAO0zB,KAAK,CAAWkrB,EAAU7vB,EAAU6vB,OAAO,OAC/F,CAAI5+C,EAAOgiD,YAAY,GAGnBhB,IAAAA,EAIAnC,EAFE8E,cADqC50B,EAAW6uB,EAAQA,EAAQvxB,EAAGC,GAC9CA,CAAC,CAAG,EAtaR,MA4aTqxB,GAIRqD,EAAc,GAChBnC,CAAAA,EAAUD,IAAYnB,EAjbH,MAibgBE,CAAAA,EAEjCqD,EAAc,GAChBnC,CAAAA,EAAUD,IAAYnB,EAAOE,EApbV,KAobmBkG,EAGpCzD,iBAAiBpgD,IACnB6+C,CAAAA,EAAUA,QAAAA,EAAkBlB,EAxbT,KAwbkBkG,GAKzC90B,EAAU8vB,OAAO,CAAGA,EAEb+E,kBAD8B,UAAWvE,oBAAoB8B,cAChD5C,EAAWxvB,EAAW1C,EAAGC,GAC/C,EAkRA7J,EAASqhC,WAAW,CA1BpB,SAAqBvF,CAAS,CAAExvB,CAAS,CAAE1C,CAAC,CAAEC,CAAC,EAC7C,IAAItsB,EAAS+uB,EAAU/uB,MAAM,CACzB+jD,EAAU13B,EAAI0C,EAAUmxB,OAAO,CAC/B8D,EAAS13B,EAAIyC,EAAUoxB,OAAO,CAC9B8D,EAAQ,CAACjkD,EAAOwL,GAAG,CAAC,kBAAoBxL,EAAOoO,IAAI,GAAK21C,EACxDG,EAAQ,CAAClkD,EAAOwL,GAAG,CAAC,kBAAoBxL,EAAOmO,GAAG,GAAK61C,EAM3D,OALAC,GAASjkD,EAAOiM,GAAG,CAAC,OAAQ83C,GAC5BG,GAASlkD,EAAOiM,GAAG,CAAC,MAAO+3C,GACvBC,CAAAA,GAASC,CAAAA,GACX9F,UAAU,SAAUe,gBAAgBZ,EAAWxvB,EAAW1C,EAAGC,IAExD23B,GAASC,CAClB,EAeAzhC,EAAS0hC,qBAAqB,CAtkB9B,SAA+B5F,CAAS,CAAEL,CAAO,CAAED,CAAY,EAC7D,IAAImG,EAAgB7F,CAAS,CAACN,EAAapiD,MAAM,CAACsmD,YAAY,CAAC,QAC/D,IAAIjE,EAAQ7xB,CAAC,CAEJ+3B,EAAgB,QAAU,SAE/BlG,IAAAA,EAAQ5xB,CAAC,CAEJ83B,EAAgB,QAAU,eAErC,EA6jBA3hC,EAAS4hC,oBAAoB,CAnjB7B,SAA8B9F,CAAS,CAAEL,CAAO,CAAED,CAAY,SAC5D,EAAiBhxC,YAAY,CACpB,cAEFixC,EAAQoG,WAAW,EAgjB5B7hC,EAAS27B,SAAS,CAAGA,UACrB37B,EAAS48B,mBAAmB,CAAGA,oBAC/B58B,EAASk9B,iBAAiB,CAAGA,kBAC7Bl9B,EAASm9B,aAAa,CAAGA,cACzBz4C,EAAOo9C,aAAa,CAAG9hC,CAEzB,EAAoCiB,GAM9B/B,EAAmBxa,CADnBA,EAASuT,EAAOvT,MAAM,EAAKuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,IACnByb,IAAI,CAACjB,gBAAgB,CA0FnDc,CAzFIA,EAAWtb,EAAOo9C,aAAa,EAyF1BC,mBAAmB,CA5E5B,SAA8Bx/B,CAAG,CAAE5W,CAAI,CAAED,CAAG,CAAEs2C,CAAa,CAAExG,CAAY,EACvEwG,EAAgBA,GAAiB,CAAC,EAClC,IAOiBx+C,EAPby+C,EAAQ,IAAI,CAACC,KAAK,EAAIF,EAAchnC,UAAU,EAAIwgC,EAAaxgC,UAAU,CACzEmnC,EAAQ,IAAI,CAACC,KAAK,EAAIJ,EAAchnC,UAAU,EAAIwgC,EAAaxgC,UAAU,CACzED,EAAqB,KAA4C,IAArCinC,EAAcjnC,kBAAkB,CAC1DinC,EAAcjnC,kBAAkB,CAAGygC,EAAazgC,kBAAkB,CAEpEma,EAAS,CAACna,GAAuBinC,CAAAA,EAAc7mC,iBAAiB,EAAIqgC,EAAargC,iBAAiB,EAClGknC,EAAS12C,EACT22C,EAAQ52C,EACZ6W,EAAIggC,IAAI,GACRhgC,EAAIigC,SAAS,CAAGR,EAAc9mC,WAAW,EAAIsgC,EAAatgC,WAAW,CACrEqH,EAAIkgC,WAAW,CAAGT,EAAc7mC,iBAAiB,EAAIqgC,EAAargC,iBAAiB,CAE/E8mC,EAAQE,GACV3+C,EAAOy+C,EACP1/B,EAAItX,KAAK,CAAC,EAAKk3C,EAAQF,GACvBK,EAAQ52C,EAAMu2C,EAAQE,GAEfA,EAAQF,GACfz+C,EAAO2+C,EACP5/B,EAAItX,KAAK,CAACg3C,EAAQE,EAAO,GACzBE,EAAS12C,EAAOw2C,EAAQF,GAGxBz+C,EAAOy+C,EAGT1/B,EAAImgC,SAAS,CAAG,EAChBngC,EAAIogC,SAAS,GACbpgC,EAAIqgC,GAAG,CAACP,EAAQC,EAAO9+C,EAAO,EAAG,EAAG,EAAIlC,KAAKsnB,EAAE,CAAE,IACjDrG,CAAG,CAzBcxH,EAAqB,SAAW,OAyBlC,GACXma,GACF3S,EAAI2S,MAAM,GAEZ3S,EAAIsgC,OAAO,EACb,EAyCA7iC,EAAS8iC,mBAAmB,CA5B5B,SAA6BvgC,CAAG,CAAE5W,CAAI,CAAED,CAAG,CAAEs2C,CAAa,CAAExG,CAAY,EACtEwG,EAAgBA,GAAiB,CAAC,EAClC,IAAIC,EAAQ,IAAI,CAACC,KAAK,EAAIF,EAAchnC,UAAU,EAAIwgC,EAAaxgC,UAAU,CACzEmnC,EAAQ,IAAI,CAACC,KAAK,EAAIJ,EAAchnC,UAAU,EAAIwgC,EAAaxgC,UAAU,CACzED,EAAqB,KAA4C,IAArCinC,EAAcjnC,kBAAkB,CAC1DinC,EAAcjnC,kBAAkB,CAAGygC,EAAazgC,kBAAkB,CAEpEma,EAAS,CAACna,GACRinC,CAAAA,EAAc7mC,iBAAiB,EAAIqgC,EAAargC,iBAAiB,EAChE4nC,EAAWd,EAAQ,EAAGe,EAAWb,EAAQ,EAChD5/B,EAAIggC,IAAI,GACRhgC,EAAIigC,SAAS,CAAGR,EAAc9mC,WAAW,EAAIsgC,EAAatgC,WAAW,CACrEqH,EAAIkgC,WAAW,CAAGT,EAAc7mC,iBAAiB,EAAIqgC,EAAargC,iBAAiB,CAEnFoH,EAAImgC,SAAS,CAAG,EAChBngC,EAAIE,SAAS,CAAC9W,EAAMD,GACpB6W,EAAIuP,MAAM,CAAC5S,EAAiBs8B,EAAa1yB,KAAK,GAI9CvG,CAAG,CAACyf,CAdajnB,EAAqB,SAAW,QAchC,OAAO,CAAC,CAACgoC,EAAU,CAACC,EAAUf,EAAOE,GAClDjtB,GACF3S,EAAI0gC,UAAU,CAAC,CAACF,EAAU,CAACC,EAAUf,EAAOE,GAE9C5/B,EAAIsgC,OAAO,EACb,EAkBAn+C,CARIA,EAASuT,EAAOvT,MAAM,EAAKuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,IAQ1Cw+C,OAAO,CANd,SAAiBrmD,CAAO,EACtB,IAAK,IAAImM,KAAKnM,EACZ,IAAI,CAACmM,EAAE,CAAGnM,CAAO,CAACmM,EAAE,EAMxBtE,EAAOw+C,OAAO,CAACpoC,SAAS,CAA0C,CAUhEqoC,QAAS,GAaTC,WAAY,QASZt6B,MAAO,EASPc,EAAG,EASHC,EAAG,EAcH4zB,QAAS,EAQTC,QAAS,EAQTwE,MAAO,KAQPE,MAAO,KAQPiB,WAAY,KAQZC,WAAY,KAQZzB,YAAa,YAQb0B,eAAgB,GAUhB1G,cAAe,WAAiD,EAUhE2G,iBAAkB,WAAiD,EAUnEC,eAAgB,WAAiD,EASjEC,iBAAkB,WAChB,OAAO,IAAI,CAAC7G,aAAa,EAU3B8G,oBAAqB,WACnB,OAAO,IAAI,CAACH,gBAAgB,EAU9BI,kBAAmB,WACjB,OAAO,IAAI,CAACH,cAAc,EAY5BI,mBAAoB,SAAS/H,CAAS,CAAEL,CAAAA,EACtC,OAAOA,EAAQoG,WAAW,EAU5BiC,cAAe,SAAShI,CAAS,CAAEL,CAAAA,EACjC,OAAOA,EAAQ2H,UAAU,EAS3BW,cAAe,SAASvI,CAAY,CAAEwI,CAAU,EAC9C,IAAIC,EAAmBzI,EAAa0I,mBAAmB,QACvD,GAAwB,KAAwC,IAAjCD,CAAgB,CAACD,EAAW,CAClDC,CAAgB,CAACD,EAAW,CAE9B,IAAI,CAACb,OAAO,EAQrBgB,cAAe,SAASC,CAAAA,EACtB,IAAI,CAACjB,OAAO,CAAGiB,CACjB,EAGAC,gBAAiB,SAASzF,CAAG,CAAE0F,CAAAA,EAI7B,OAHY5/C,EAAOyb,IAAI,CAACE,cAAc,CAAC,CACrCuJ,EAAG,IAAI,CAACA,CAAC,CAAGg1B,EAAIh1B,CAAC,CAAG,IAAI,CAAC6zB,OAAO,CAChC5zB,EAAG,IAAI,CAACA,CAAC,CAAG+0B,EAAI/0B,CAAC,CAAG,IAAI,CAAC6zB,OAAO,EAAI4G,EAExC,EAWAC,iBAAkB,SAASC,CAAW,CAAEC,CAAgB,CAAEC,CAAO,CAAEC,CAAO,CAAEC,CAAO,EACjF,IAAIC,EACAC,EACAC,EACAC,EACA/C,EAAQ2C,EAAY,IAAI,CAACvB,UAAU,CAAG,IAAI,CAACnB,KAAK,CAChDC,EAAQyC,EAAY,IAAI,CAACtB,UAAU,CAAG,IAAI,CAAClB,KAAK,CACpD,GAAIH,GAASE,GAASF,IAAUE,EAAO,CAErC,IAAI8C,EAAuB3jD,KAAK+d,KAAK,CAAC8iC,EAAOF,GACzCiD,EAAmB5jD,KAAK8d,IAAI,CAAC6iC,EAAQA,EAAQE,EAAQA,GAAS,EAC9DgD,EAAWF,EAAuBvgD,EAAOyb,IAAI,CAACjB,gBAAgB,CAACslC,GAC/DY,EAAe9jD,KAAKsnB,EAAE,CAAG,EAAIq8B,EAAuBvgD,EAAOyb,IAAI,CAACjB,gBAAgB,CAACslC,GACrFK,EAAgBK,EAAmBxgD,EAAOyb,IAAI,CAAC0I,GAAG,CAACs8B,GACnDL,EAAgBI,EAAmBxgD,EAAOyb,IAAI,CAACM,GAAG,CAAC0kC,GAEnDJ,EAAoBG,EAAmBxgD,EAAOyb,IAAI,CAAC0I,GAAG,CAACu8B,GACvDJ,EAAoBE,EAAmBxgD,EAAOyb,IAAI,CAACM,GAAG,CAAC2kC,EACzD,KACK,CAKHF,EAAmBlqC,YAFFinC,CAAAA,GAAUE,EAASF,EAAQwC,CAAAA,EAI5C,IAAIU,EAAWzgD,EAAOyb,IAAI,CAACjB,gBAAgB,CAAC,GAAKslC,GACjDK,EAAgBE,EAAoBG,EAAmBxgD,EAAOyb,IAAI,CAAC0I,GAAG,CAACs8B,GACvEL,EAAgBE,EAAoBE,EAAmBxgD,EAAOyb,IAAI,CAACM,GAAG,CAAC0kC,EACzE,CAEA,MAAO,CACLE,GAAI,CACFz7B,EAAG86B,EAAUM,EACbn7B,EAAG86B,EAAUI,CACf,EACAO,GAAI,CACF17B,EAAG86B,EAAUG,EACbh7B,EAAG86B,EAAUG,CACf,EACAS,GAAI,CACF37B,EAAG86B,EAAUG,EACbh7B,EAAG86B,EAAUG,CACf,EACAU,GAAI,CACF57B,EAAG86B,EAAUM,EACbn7B,EAAG86B,EAAUI,CACf,CACF,CACF,EAcAU,OAAQ,SAASljC,CAAG,CAAE5W,CAAI,CAAED,CAAG,CAAEs2C,CAAa,CAAExG,CAAY,EAGnD,WADCwG,CAAAA,CADRA,EAAgBA,GAAiB,CAAC,GACZ/mC,WAAW,EAAIugC,EAAavgC,WAAW,EAEzDvW,EAAOo9C,aAAa,CAACC,mBAAmB,CAACl7B,IAAI,CAAC,IAAI,CAAEtE,EAAK5W,EAAMD,EAAKs2C,EAAexG,GAGnF92C,EAAOo9C,aAAa,CAACgB,mBAAmB,CAACj8B,IAAI,CAAC,IAAI,CAAEtE,EAAK5W,EAAMD,EAAKs2C,EAAexG,EAEzF,CACF,EAGD,WAEC,aAEA,GAAI92C,GAAOghD,YAAY,CAAE,CACvBhhD,GAAO6jC,IAAI,CAAC,2CACZ,MACF,CAGA,IAAIxpB,EAASra,GAAOyb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAClCunB,EAAmB5hC,GAAOyb,IAAI,CAACmmB,gBAAgB,CAC/Ctd,EAAkBtkB,GAAOyb,IAAI,CAAC6I,eAAe,CAE7C3I,GADU3b,GAAOyb,IAAI,CAACnB,OAAO,CACZta,GAAOyb,IAAI,CAACE,cAAc,EAC3CwM,EAAkBnoB,GAAOyb,IAAI,CAAC0M,eAAe,CAC7Cua,EAAgB1iC,GAAOyb,IAAI,CAACinB,aAAa,CACzC7W,EAAsB7rB,GAAOyb,IAAI,CAACoQ,mBAAmB,CAErDo1B,EAAoB,MAAU,wCAelCjhD,CAAAA,GAAOghD,YAAY,CAAGhhD,GAAOyb,IAAI,CAACG,WAAW,CAAC5b,GAAOqjB,aAAa,CAA8C,CAQ9Gqa,WAAY,SAASqC,CAAE,CAAE5nC,CAAO,EAC9BA,GAAYA,CAAAA,EAAU,CAAE,GACxB,IAAI,CAAC+oD,mBAAmB,CAAG,IAAI,CAACC,cAAc,CAACn5C,IAAI,CAAC,IAAI,EACxD,IAAI,CAACo5C,qBAAqB,CAAG,IAAI,CAAC35C,gBAAgB,CAACO,IAAI,CAAC,IAAI,EAC5D,IAAI,CAACq5C,WAAW,CAACthB,EAAI5nC,EACvB,EAQAnD,gBAAiB,GAUjBssD,gBAAiB,KASjBC,aAAc,GAUdC,aAAc,KAQdC,qBAAsB,GAOtBC,SAAU,GAYV9rC,kBAAmB,GAOnB+rC,qBAAsB,GAOtBC,oBAAqB,GAOrB3gB,sBAAuB,GAWvB4gB,kBAAmB7hD,GAAO6f,OAAO,CAAC/hB,MAAM,GAQxCgkD,cAAe,GAQfC,WAAY,GAOZC,oBAAqB,GAWrBC,UAAW,CAAE,EAYbC,cAAe,GASf/xB,SAAUv0B,KAAAA,EAOVylD,YAAa,SAASthB,CAAE,CAAE5nC,CAAO,EAC/B,IAAIgqD,EAAK,IAAI,CAACf,qBAAqB,CACnC,IAAI,CAAC1kD,QAAQ,CAAG,EAAE,CAClB,IAAI,CAAC0lD,kBAAkB,CAACriB,GACxB,IAAI,CAACsiB,YAAY,CAAClqD,GAEb,IAAI,CAACmqD,WAAW,EACnB,IAAI,CAACC,kBAAkB,GAGrBpqD,EAAQqpD,YAAY,EACtB,IAAI,CAACgB,eAAe,CAACrqD,EAAQqpD,YAAY,CAAEW,GAEzChqD,EAAQmpD,eAAe,EACzB,IAAI,CAACmB,kBAAkB,CAACtqD,EAAQmpD,eAAe,CAAEa,GAE/ChqD,EAAQnD,eAAe,EACzB,IAAI,CAACC,kBAAkB,CAACkD,EAAQnD,eAAe,CAAEmtD,GAE/ChqD,EAAQopD,YAAY,EACtB,IAAI,CAACmB,eAAe,CAACvqD,EAAQopD,YAAY,CAAEY,GAE7C,IAAI,CAAC5qC,UAAU,EACjB,EAKAorC,iBAAkB,WAChB,OAAQ3iD,GAAOqgB,gBAAgB,CAAG,GAAK,IAAI,CAAC2hC,mBAAmB,EAOjEY,iBAAkB,WAChB,OAAO,IAAI,CAACD,gBAAgB,GAAK/lD,KAAKI,GAAG,CAAC,EAAGgD,GAAOqgB,gBAAgB,EAAI,CAC1E,EAKAkiC,mBAAoB,WAClB,GAAK,IAAI,CAACI,gBAAgB,IAG1B,IAAIE,EAAa7iD,GAAOqgB,gBAAgB,CACxC,IAAI,CAACyiC,mBAAmB,CAACD,EAAY,IAAI,CAACE,aAAa,CAAE,IAAI,CAACC,gBAAgB,EAC1E,IAAI,CAACC,aAAa,EACpB,IAAI,CAACH,mBAAmB,CAACD,EAAY,IAAI,CAACI,aAAa,CAAE,IAAI,CAACC,UAAU,EAE5E,EAEAJ,oBAAqB,SAASD,CAAU,CAAEnuD,CAAM,CAAEN,CAAO,EACvDM,EAAOsrC,YAAY,CAAC,QAAS,IAAI,CAACxiC,KAAK,CAAGqlD,GAC1CnuD,EAAOsrC,YAAY,CAAC,SAAU,IAAI,CAAC3iC,MAAM,CAAGwlD,GAC5CzuD,EAAQmS,KAAK,CAACs8C,EAAYA,EAC5B,EASAtrC,WAAY,WAEV,OADA,IAAI,CAAC4rC,OAAO,CAAGvhB,EAAiB,IAAI,CAACmhB,aAAa,EAC3C,IAAI,EAkDbP,gBAAiB,SAAUp8C,CAAK,CAAEwc,CAAQ,CAAEzqB,CAAO,EACjD,OAAO,IAAI,CAACirD,mBAAmB,CAAC,eAAgBh9C,EAAOwc,EAAUzqB,EACnE,EAkDAsqD,mBAAoB,SAAUr8C,CAAK,CAAEwc,CAAQ,CAAEzqB,CAAO,EACpD,OAAO,IAAI,CAACirD,mBAAmB,CAAC,kBAAmBh9C,EAAOwc,EAAUzqB,EACtE,EAuBAuqD,gBAAiB,SAASnB,CAAY,CAAE3+B,CAAQ,EAC9C,OAAO,IAAI,CAACygC,mBAAmB,CAAC,eAAgB9B,EAAc3+B,EAChE,EAuBA3tB,mBAAoB,SAASD,CAAe,CAAE4tB,CAAQ,EACpD,OAAO,IAAI,CAACygC,mBAAmB,CAAC,kBAAmBruD,EAAiB4tB,EACtE,EAUAwgC,oBAAqB,SAAS3/B,CAAQ,CAAErd,CAAK,CAAEwc,CAAQ,CAAEzqB,CAAO,EAkB9D,MAjBI,iBAAOiO,EACTpG,GAAOyb,IAAI,CAACpD,SAAS,CAACjS,EAAO,SAAS3G,CAAG,CAAE6jD,CAAO,EAChD,GAAI7jD,EAAK,CACP,IAAI8jD,EAAW,IAAIvjD,GAAOC,KAAK,CAACR,EAAKtH,EACrC,KAAI,CAACsrB,EAAS,CAAG8/B,EACjBA,EAAS7uD,MAAM,CAAG,IAAI,CAExBkuB,GAAYA,EAASnjB,EAAK6jD,EAC5B,EAAG,IAAI,CAAEnrD,GAAWA,EAAQgI,WAAW,GAGvChI,GAAWiO,EAAMo9C,UAAU,CAACrrD,GAC5B,IAAI,CAACsrB,EAAS,CAAGrd,EACjBA,GAAUA,CAAAA,EAAM1R,MAAM,CAAG,IAAI,EAC7BkuB,GAAYA,EAASxc,EAAO,KAGvB,IAAI,EAUbi9C,oBAAqB,SAAS5/B,CAAQ,CAAEvZ,CAAK,CAAE0Y,CAAQ,EAIrD,OAHA,IAAI,CAACa,EAAS,CAAGvZ,EACjB,IAAI,CAACqZ,aAAa,CAACrZ,EAAOuZ,GAC1B,IAAI,CAACG,YAAY,CAAC1Z,EAAOuZ,EAAUb,GAC5B,IAAI,EAMb6gC,qBAAsB,WACpB,IAAIrrD,EAAUyzB,IACd,GAAI,CAACzzB,IAGAA,EAAQqD,KAAK,EAChBrD,CAAAA,EAAQqD,KAAK,CAAG,CAAE,GAEhB,KAA8B,IAAvBrD,EAAQ0lB,UAAU,EAL3B,MAAMmjC,EAQR,OAAO7oD,CACT,EAMAiqD,aAAc,SAAUlqD,CAAO,EAC7B,IAAI4qD,EAAgB,IAAI,CAACA,aAAa,CACtC,IAAI,CAACz/B,WAAW,CAACnrB,GAEjB,IAAI,CAACqF,KAAK,CAAG,IAAI,CAACA,KAAK,EAAIqX,SAASkuC,EAAcvlD,KAAK,CAAE,KAAO,EAChE,IAAI,CAACH,MAAM,CAAG,IAAI,CAACA,MAAM,EAAIwX,SAASkuC,EAAc1lD,MAAM,CAAE,KAAO,EAE9D,IAAI,CAAC0lD,aAAa,CAACtnD,KAAK,GAI7BsnD,EAAcvlD,KAAK,CAAG,IAAI,CAACA,KAAK,CAChCulD,EAAc1lD,MAAM,CAAG,IAAI,CAACA,MAAM,CAElC0lD,EAActnD,KAAK,CAAC+B,KAAK,CAAG,IAAI,CAACA,KAAK,CAAG,KACzCulD,EAActnD,KAAK,CAAC4B,MAAM,CAAG,IAAI,CAACA,MAAM,CAAG,KAE3C,IAAI,CAACwkD,iBAAiB,CAAG,IAAI,CAACA,iBAAiB,CAAC39C,KAAK,GACvD,EAOAk+C,mBAAoB,SAAUp2B,CAAQ,EAEhCA,GAAYA,EAASlO,UAAU,CACjC,IAAI,CAACilC,aAAa,CAAG/2B,EAGrB,IAAI,CAAC+2B,aAAa,CAAG/iD,GAAOyb,IAAI,CAAC6lB,OAAO,CAACtV,IAAa,IAAI,CAACy3B,oBAAoB,GAGjFzjD,GAAOyb,IAAI,CAAC+lB,QAAQ,CAAC,IAAI,CAACuhB,aAAa,CAAE,gBACzC,IAAI,CAACW,oBAAoB,CAAG,IAAI,CAACX,aAAa,CAACtnD,KAAK,CAChD,IAAI,CAAC6mD,WAAW,EAClB,IAAI,CAACqB,iBAAiB,CAAC,IAAI,CAACZ,aAAa,EAG3C,IAAI,CAACC,gBAAgB,CAAG,IAAI,CAACD,aAAa,CAACjlC,UAAU,CAAC,KACxD,EAMA8lC,SAAU,WACR,OAAO,IAAI,CAACpmD,KAAK,EAOnBqmD,UAAW,WACT,OAAO,IAAI,CAACxmD,MAAM,EAYpBymD,SAAU,SAAUhrD,CAAK,CAAEX,CAAO,EAChC,OAAO,IAAI,CAAC4rD,aAAa,CAAC,CAAEvmD,MAAO1E,CAAM,EAAGX,EAC9C,EAWA6rD,UAAW,SAAUlrD,CAAK,CAAEX,CAAO,EACjC,OAAO,IAAI,CAAC4rD,aAAa,CAAC,CAAE1mD,OAAQvE,CAAM,EAAGX,EAC/C,EAaA4rD,cAAe,SAAUE,CAAU,CAAE9rD,CAAO,EAC1C,IAAI+rD,EAIJ,IAAK,IAAI9hC,KAFTjqB,EAAUA,GAAW,CAAC,EAEL8rD,EACfC,EAAWD,CAAU,CAAC7hC,EAAK,CAEtBjqB,EAAQgsD,OAAO,GAClB,IAAI,CAACC,sBAAsB,CAAChiC,EAAM6hC,CAAU,CAAC7hC,EAAK,EAClD8hC,GAAY,KACZ,IAAI,CAACG,cAAc,CAAG,IAGnBlsD,EAAQmsD,aAAa,EACxB,IAAI,CAACC,gBAAgB,CAACniC,EAAM8hC,GAahC,OAVI,IAAI,CAACM,mBAAmB,EAC1B,IAAI,CAACv6C,gBAAgB,EAAI,IAAI,CAACA,gBAAgB,CAACw6C,eAAe,CAAC,IAAI,CAACvB,UAAU,EAEhF,IAAI,CAACX,kBAAkB,GACvB,IAAI,CAAChrC,UAAU,GAEVpf,EAAQgsD,OAAO,EAClB,IAAI,CAAC18C,gBAAgB,GAGhB,IAAI,EAWb28C,uBAAwB,SAAUhiC,CAAI,CAAEtpB,CAAK,EAa3C,OAZA,IAAI,CAACiqD,aAAa,CAAC3gC,EAAK,CAAGtpB,EAEvB,IAAI,CAACmqD,aAAa,EACpB,KAAI,CAACA,aAAa,CAAC7gC,EAAK,CAAGtpB,CAAAA,EAGzB,IAAI,CAAC4rD,aAAa,EACpB,KAAI,CAACA,aAAa,CAACtiC,EAAK,CAAGtpB,CAAAA,EAG7B,IAAI,CAACspB,EAAK,CAAGtpB,EAEN,IAAI,EAWbyrD,iBAAkB,SAAUniC,CAAI,CAAEtpB,CAAK,EAWrC,OAVA,IAAI,CAACiqD,aAAa,CAACtnD,KAAK,CAAC2mB,EAAK,CAAGtpB,EAE7B,IAAI,CAACmqD,aAAa,EACpB,KAAI,CAACA,aAAa,CAACxnD,KAAK,CAAC2mB,EAAK,CAAGtpB,CAAAA,EAG/B,IAAI,CAAC6rD,SAAS,EAChB,KAAI,CAACA,SAAS,CAAClpD,KAAK,CAAC2mB,EAAK,CAAGtpB,CAAAA,EAGxB,IAAI,EAOb6/C,QAAS,WACP,OAAO,IAAI,CAACkJ,iBAAiB,CAAC,EAAE,EASlC+C,qBAAsB,SAAUC,CAAG,EACjC,IAGInsD,EAAQ4L,EAAG4d,EAHX4iC,EAAe,IAAI,CAACC,aAAa,CACjCC,EAAmB,IAAI,CAAC1D,eAAe,CACvC2D,EAAgB,IAAI,CAACzD,YAAY,CAGrC,IAAKl9C,EAAI,EADT,IAAI,CAACu9C,iBAAiB,CAAGgD,EACb3iC,EAAM,IAAI,CAACxlB,QAAQ,CAACnE,MAAM,CAAE+L,EAAI4d,EAAK5d,IAE/C5L,CADAA,EAAS,IAAI,CAACgE,QAAQ,CAAC4H,EAAE,EAClB4gD,KAAK,EAAIxsD,EAAO0O,SAAS,CAAC,IAanC,OAXI09C,GACFA,EAAa19C,SAAS,GAEpB49C,GACFA,EAAiB59C,SAAS,CAAC,IAEzB69C,GACFA,EAAc79C,SAAS,CAAC,IAE1B,IAAI,CAAC+9C,sBAAsB,GAC3B,IAAI,CAACvvC,iBAAiB,EAAI,IAAI,CAACnO,gBAAgB,GACxC,IAAI,EAab29C,YAAa,SAAUtgC,CAAK,CAAEhsB,CAAK,EAEjC,IAAIusD,EAASvgC,EAAO+/B,EAAM,IAAI,CAAChD,iBAAiB,CAAC39C,KAAK,CAAC,GACvD4gB,EAAQnJ,EAAemJ,EAAOqD,EAAgB,IAAI,CAAC05B,iBAAiB,GACpEgD,CAAG,CAAC,EAAE,CAAG/rD,EACT+rD,CAAG,CAAC,EAAE,CAAG/rD,EACT,IAAIwsD,EAAQ3pC,EAAemJ,EAAO+/B,GAGlC,OAFAA,CAAG,CAAC,EAAE,EAAIQ,EAAOngC,CAAC,CAAGogC,EAAMpgC,CAAC,CAC5B2/B,CAAG,CAAC,EAAE,EAAIQ,EAAOlgC,CAAC,CAAGmgC,EAAMngC,CAAC,CACrB,IAAI,CAACy/B,oBAAoB,CAACC,EACnC,EAQAU,QAAS,SAAUzsD,CAAK,EAEtB,OADA,IAAI,CAACssD,WAAW,CAAC,IAAIplD,GAAOilB,KAAK,CAAC,EAAG,GAAInsB,GAClC,IAAI,EASb0sD,YAAa,SAAU1gC,CAAK,EAC1B,IAAI+/B,EAAM,IAAI,CAAChD,iBAAiB,CAAC39C,KAAK,CAAC,GAGvC,OAFA2gD,CAAG,CAAC,EAAE,CAAG,CAAC//B,EAAMI,CAAC,CACjB2/B,CAAG,CAAC,EAAE,CAAG,CAAC//B,EAAMK,CAAC,CACV,IAAI,CAACy/B,oBAAoB,CAACC,EACnC,EAQAY,YAAa,SAAU3gC,CAAK,EAC1B,OAAO,IAAI,CAAC0gC,WAAW,CAAC,IAAIxlD,GAAOilB,KAAK,CACtC,CAACH,EAAMI,CAAC,CAAG,IAAI,CAAC28B,iBAAiB,CAAC,EAAE,CACpC,CAAC/8B,EAAMK,CAAC,CAAG,IAAI,CAAC08B,iBAAiB,CAAC,EAAE,EAExC,EAMA6D,WAAY,WACV,OAAO,IAAI,CAAC3C,aAAa,EAO3BxgC,eAAgB,SAASW,CAAG,EAC1B,IAAI,CAACw+B,QAAQ,EAAIx+B,EAAIyiC,UAAU,GAC/BziC,EAAIc,IAAI,CAAC,SAAU,IAAI,EACvBd,EAAI9b,SAAS,GACb,IAAI,CAAC4a,IAAI,CAAC,eAAgB,CAAEnpB,OAAQqqB,CAAI,GACxCA,EAAIlB,IAAI,CAAC,QACX,EAMAW,iBAAkB,SAASO,CAAG,EAC5B,IAAI,CAAClB,IAAI,CAAC,iBAAkB,CAAEnpB,OAAQqqB,CAAI,GAC1CA,EAAIlB,IAAI,CAAC,WACT,OAAOkB,EAAIxuB,MAAM,EASnBkxD,aAAc,SAAS/nC,CAAG,EAExB,OADAA,EAAIgoC,SAAS,CAAC,EAAG,EAAG,IAAI,CAACroD,KAAK,CAAE,IAAI,CAACH,MAAM,EACpC,IAAI,EAObygB,WAAY,WACV,OAAO,IAAI,CAACklC,gBAAgB,EAQ9BntC,MAAO,WAcL,OAbA,IAAI,CAACrO,MAAM,CAACsa,KAAK,CAAC,IAAI,CAAE,IAAI,CAACe,UAAU,IACvC,IAAI,CAACy+B,eAAe,CAAG,KACvB,IAAI,CAACE,YAAY,CAAG,KACpB,IAAI,CAACxsD,eAAe,CAAG,GACvB,IAAI,CAACusD,YAAY,CAAG,GAChB,IAAI,CAACuE,iBAAiB,GACxB,IAAI,CAAC97C,GAAG,CAAC,WAAY,IAAI,CAAC+7C,oBAAoB,EAC9C,IAAI,CAACC,eAAe,CAAG,KACvB,IAAI,CAACF,iBAAiB,CAAG,IAE3B,IAAI,CAACF,YAAY,CAAC,IAAI,CAAC5C,gBAAgB,EACvC,IAAI,CAAChhC,IAAI,CAAC,kBACV,IAAI,CAACpM,iBAAiB,EAAI,IAAI,CAACnO,gBAAgB,GACxC,IAAI,EAQbsO,UAAW,WACT,IAAIkwC,EAAiB,IAAI,CAACjD,gBAAgB,CAE1C,OADA,IAAI,CAACkD,YAAY,CAACD,EAAgB,IAAI,CAACvpD,QAAQ,EACxC,IAAI,EAabykD,eAAgB,WACd,IAAI,CAACgF,WAAW,CAAG,EACnB,IAAI,CAACpwC,SAAS,EAChB,EASAtO,iBAAkB,WAIhB,OAHK,IAAI,CAAC0+C,WAAW,EACnB,KAAI,CAACA,WAAW,CAAGnmD,GAAOyb,IAAI,CAACypB,gBAAgB,CAAC,IAAI,CAACgc,mBAAmB,GAEnE,IAAI,EAUbiE,uBAAwB,WACtB,IAAI1+B,EAAS,CAAE,EAAGjpB,EAAQ,IAAI,CAACA,KAAK,CAAEH,EAAS,IAAI,CAACA,MAAM,CACtD+oD,EAAOj+B,EAAgB,IAAI,CAAC05B,iBAAiB,EAMjD,OALAp7B,EAAOk6B,EAAE,CAAGhlC,EAAe,CAAEuJ,EAAG,EAAGC,EAAG,CAAE,EAAGihC,GAC3C3/B,EAAOq6B,EAAE,CAAGnlC,EAAe,CAAEuJ,EAAG1nB,EAAO2nB,EAAG9nB,CAAO,EAAG+oD,GACpD3/B,EAAOm6B,EAAE,CAAG,IAAI5gD,GAAOilB,KAAK,CAACwB,EAAOq6B,EAAE,CAAC57B,CAAC,CAAEuB,EAAOk6B,EAAE,CAACx7B,CAAC,EACrDsB,EAAOo6B,EAAE,CAAG,IAAI7gD,GAAOilB,KAAK,CAACwB,EAAOk6B,EAAE,CAACz7B,CAAC,CAAEuB,EAAOq6B,EAAE,CAAC37B,CAAC,EACrD,IAAI,CAAC88B,SAAS,CAAGx7B,EACVA,CACT,EAEA4/B,sBAAuB,WACjB,IAAI,CAACF,WAAW,GAClBnmD,GAAOyb,IAAI,CAACkrB,eAAe,CAAC,IAAI,CAACwf,WAAW,EAC5C,IAAI,CAACA,WAAW,CAAG,EAEvB,EASAD,aAAc,SAASroC,CAAG,CAAEvW,CAAO,EACjC,IAAI8d,EAAI,IAAI,CAACy8B,iBAAiB,CAAEv2B,EAAO,IAAI,CAAC6E,QAAQ,CACpD,IAAI,CAACk2B,qBAAqB,GAC1B,IAAI,CAAClB,sBAAsB,GAC3B,IAAI,CAACS,YAAY,CAAC/nC,GAClB7d,GAAOyb,IAAI,CAACulB,iBAAiB,CAACnjB,EAAK,IAAI,CAACojB,qBAAqB,EAC7D,IAAI,CAACjf,IAAI,CAAC,gBAAiB,CAAEnE,IAAKA,CAAK,GACvC,IAAI,CAACyoC,iBAAiB,CAACzoC,GAEvBA,EAAIggC,IAAI,GAERhgC,EAAI+J,SAAS,CAACxC,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,EAChD,IAAI,CAACmhC,cAAc,CAAC1oC,EAAKvW,GACzBuW,EAAIsgC,OAAO,GACP,CAAC,IAAI,CAACwD,oBAAoB,EAAI,IAAI,CAACW,WAAW,EAChD,IAAI,CAACkE,YAAY,CAAC3oC,GAEhByN,IACFA,EAAK52B,MAAM,CAAG,IAAI,CAElB42B,EAAKm7B,WAAW,GAChBn7B,EAAKo7B,cAAc,CAAG,GACtBp7B,EAAKq7B,WAAW,CAAC,CAAEC,YAAa,EAAK,GACrC,IAAI,CAACC,oBAAoB,CAAChpC,IAE5B,IAAI,CAACipC,cAAc,CAACjpC,GAChB,IAAI,CAAC8jC,oBAAoB,EAAI,IAAI,CAACW,WAAW,EAC/C,IAAI,CAACkE,YAAY,CAAC3oC,GAEpB,IAAI,CAACmE,IAAI,CAAC,eAAgB,CAAEnE,IAAKA,CAAK,EACxC,EAMAgpC,qBAAsB,SAAShpC,CAAG,EAChC,IAAIuH,EAAI,IAAI,CAACy8B,iBAAiB,CAAEv2B,EAAO,IAAI,CAAC6E,QAAQ,CACpDtS,EAAIggC,IAAI,GACRhgC,EAAI+J,SAAS,CAACxC,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,EAGhDvH,EAAIkpC,wBAAwB,CAAG,iBAC/Bz7B,EAAK1D,SAAS,CAAC/J,GACfA,EAAItX,KAAK,CAAC,EAAI+kB,EAAK07B,KAAK,CAAE,EAAI17B,EAAK27B,KAAK,EACxCppC,EAAII,SAAS,CAACqN,EAAK47B,YAAY,CAAE,CAAC57B,EAAK67B,iBAAiB,CAAE,CAAC77B,EAAK87B,iBAAiB,EACjFvpC,EAAIsgC,OAAO,EACb,EAOAoI,eAAgB,SAAS1oC,CAAG,CAAEvW,CAAO,EACnC,IAAIhD,EAAG4d,EACP,IAAK5d,EAAI,EAAG4d,EAAM5a,EAAQ/O,MAAM,CAAE+L,EAAI4d,EAAK,EAAE5d,EAC3CgD,CAAO,CAAChD,EAAE,EAAIgD,CAAO,CAAChD,EAAE,CAACy8C,MAAM,CAACljC,EAEpC,EAOAwpC,2BAA4B,SAASxpC,CAAG,CAAE4F,CAAQ,EAChD,IAAIlb,EAAO,IAAI,CAACkb,EAAW,QAAQ,CAAE/qB,EAAS,IAAI,CAAC+qB,EAAW,QAAQ,CAClE2B,EAAI,IAAI,CAACy8B,iBAAiB,CAAEyF,EAAW,IAAI,CAAC7jC,EAAW,MAAM,CACjE,GAAI,GAAU/qB,GAGd,GAAI6P,EAAM,CACRsV,EAAIggC,IAAI,GACRhgC,EAAIogC,SAAS,GACbpgC,EAAI0pC,MAAM,CAAC,EAAG,GACd1pC,EAAI2pC,MAAM,CAAC,IAAI,CAAChqD,KAAK,CAAE,GACvBqgB,EAAI2pC,MAAM,CAAC,IAAI,CAAChqD,KAAK,CAAE,IAAI,CAACH,MAAM,EAClCwgB,EAAI2pC,MAAM,CAAC,EAAG,IAAI,CAACnqD,MAAM,EACzBwgB,EAAI4pC,SAAS,GACb5pC,EAAIigC,SAAS,CAAGv1C,EAAKm/C,MAAM,CACvBn/C,EAAKm/C,MAAM,CAAC7pC,EAAK,IAAI,EACrBtV,EACA++C,GACFzpC,EAAI+J,SAAS,CAACxC,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,EAElDvH,EAAI+J,SAAS,CAAC,EAAG,EAAG,EAAG,EAAGrf,EAAKwwC,OAAO,EAAI,EAAGxwC,EAAKywC,OAAO,EAAI,GAC7D,IAAInnB,EAAItpB,EAAKo/C,iBAAiB,EAAIp/C,EAAKq/C,gBAAgB,CACvD/1B,GAAKhU,EAAI+J,SAAS,CAACiK,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,EACrDhU,EAAItV,IAAI,GACRsV,EAAIsgC,OAAO,EACb,CACIzlD,IACFmlB,EAAIggC,IAAI,GACJyJ,GACFzpC,EAAI+J,SAAS,CAACxC,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,EAElD1sB,EAAOqoD,MAAM,CAACljC,GACdA,EAAIsgC,OAAO,IAEf,EAMAmI,kBAAmB,SAASzoC,CAAG,EAC7B,IAAI,CAACwpC,0BAA0B,CAACxpC,EAAK,aACvC,EAMAipC,eAAgB,SAASjpC,CAAG,EAC1B,IAAI,CAACwpC,0BAA0B,CAACxpC,EAAK,UACvC,EAQAgqC,UAAW,WACT,MAAO,CACL7gD,IAAK,IAAI,CAAC3J,MAAM,CAAG,EACnB4J,KAAM,IAAI,CAACzJ,KAAK,CAAG,CACrB,CACF,EAMA46C,eAAgB,WACd,OAAO,IAAIp4C,GAAOilB,KAAK,CAAC,IAAI,CAACznB,KAAK,CAAG,EAAG,IAAI,CAACH,MAAM,CAAG,EACxD,EAOAyqD,cAAe,SAAUpvD,CAAM,EAC7B,OAAO,IAAI,CAACqvD,aAAa,CAACrvD,EAAQ,IAAIsH,GAAOilB,KAAK,CAAC,IAAI,CAACmzB,cAAc,GAAGlzB,CAAC,CAAExsB,EAAO0/C,cAAc,GAAGjzB,CAAC,EACvG,EAQA6iC,cAAe,SAAUtvD,CAAM,EAC7B,OAAO,IAAI,CAACqvD,aAAa,CAACrvD,EAAQ,IAAIsH,GAAOilB,KAAK,CAACvsB,EAAO0/C,cAAc,GAAGlzB,CAAC,CAAE,IAAI,CAACkzB,cAAc,GAAGjzB,CAAC,EACvG,EAQAve,aAAc,SAASlO,CAAM,EAC3B,IAAI82B,EAAS,IAAI,CAAC4oB,cAAc,GAChC,OAAO,IAAI,CAAC2P,aAAa,CAACrvD,EAAQ82B,EACpC,EAQAy4B,qBAAsB,SAASvvD,CAAM,EACnC,IAAIwvD,EAAW,IAAI,CAACC,WAAW,GAC/B,OAAO,IAAI,CAACJ,aAAa,CAACrvD,EAAQwvD,EACpC,EAQAE,sBAAuB,SAAS1vD,CAAM,EACpC,IAAIwvD,EAAW,IAAI,CAACC,WAAW,GAE/B,OADA,IAAI,CAACJ,aAAa,CAACrvD,EAAQ,IAAIsH,GAAOilB,KAAK,CAACijC,EAAShjC,CAAC,CAAExsB,EAAO0/C,cAAc,GAAGjzB,CAAC,GAC1E,IAAI,EASbkjC,sBAAuB,SAAS3vD,CAAM,EACpC,IAAIwvD,EAAW,IAAI,CAACC,WAAW,GAE/B,OAAO,IAAI,CAACJ,aAAa,CAACrvD,EAAQ,IAAIsH,GAAOilB,KAAK,CAACvsB,EAAO0/C,cAAc,GAAGlzB,CAAC,CAAEgjC,EAAS/iC,CAAC,EAC1F,EAOAgjC,YAAa,WAGX,OAAOxsC,EAFM,IAAI,CAACy8B,cAAc,GACrBjwB,EAAgB,IAAI,CAAC05B,iBAAiB,EAEnD,EASAkG,cAAe,SAASrvD,CAAM,CAAE82B,CAAM,EAIpC,OAHA92B,EAAO+2B,mBAAmB,CAACD,EAAQ,SAAU,UAC7C92B,EAAO0O,SAAS,GAChB,IAAI,CAACwO,iBAAiB,EAAI,IAAI,CAACnO,gBAAgB,GACxC,IAAI,EAQb6gD,eAAgB,SAAUC,CAAmB,EAC3C,OAAO,IAAI,CAACC,gBAAgB,CAACD,EAC/B,EAOAE,SAAU,SAAUF,CAAmB,EACrC,OAAO,IAAI,CAACG,eAAe,CAAC,WAAYH,EAC1C,EAOAC,iBAAkB,SAAUD,CAAmB,EAC7C,OAAO,IAAI,CAACG,eAAe,CAAC,mBAAoBH,EAClD,EAKAG,gBAAiB,SAAUprB,CAAU,CAAEirB,CAAmB,EAExD,IAAIp4B,EAAW,IAAI,CAACA,QAAQ,CAAE5mB,EAAO,CACnC+S,QAAStc,GAAOsc,OAAO,CACvBhV,QAAS,IAAI,CAACqhD,UAAU,CAACrrB,EAAYirB,EACvC,EAQA,OAPIp4B,GAAY,CAACA,EAASy4B,iBAAiB,EACzCr/C,CAAAA,EAAK4mB,QAAQ,CAAG,IAAI,CAAChU,SAAS,CAAC,IAAI,CAACgU,QAAQ,CAAEmN,EAAYirB,EAAAA,EAE5DluC,EAAO9Q,EAAM,IAAI,CAACs/C,oBAAoB,CAACvrB,EAAYirB,IAEnDvoD,GAAOyb,IAAI,CAACiQ,sBAAsB,CAAC,IAAI,CAAEniB,EAAMg/C,GAExCh/C,CACT,EAKAo/C,WAAY,SAASrrB,CAAU,CAAEirB,CAAmB,EAClD,OAAO,IAAI,CAAC7rD,QAAQ,CAACyL,MAAM,CAAC,SAASzP,CAAM,EACzC,MAAO,CAACA,EAAOkwD,iBAAiB,GAC/BvgD,GAAG,CAAC,SAASk7C,CAAQ,EACtB,OAAO,IAAI,CAACpnC,SAAS,CAAConC,EAAUjmB,EAAYirB,EAC9C,EAAG,IAAI,CACT,EAKApsC,UAAW,SAASonC,CAAQ,CAAEjmB,CAAU,CAAEirB,CAAmB,EAGtD,IAAI,CAAC9G,oBAAoB,GAC5BqH,EAAgBvF,EAAS9B,oBAAoB,CAC7C8B,EAAS9B,oBAAoB,CAAG,IAGlC,IAPIqH,EAOApwD,EAAS6qD,CAAQ,CAACjmB,EAAW,CAACirB,GAIlC,OAHK,IAAI,CAAC9G,oBAAoB,EAC5B8B,CAAAA,EAAS9B,oBAAoB,CAAGqH,CAAAA,EAE3BpwD,CACT,EAKAmwD,qBAAsB,SAASvrB,CAAU,CAAEirB,CAAmB,EAC5D,IAAIh/C,EAAO,CAAC,EAAGw/C,EAAU,IAAI,CAACzH,eAAe,CAAEE,EAAe,IAAI,CAACA,YAAY,CAC3EwH,EAAU,IAAI,CAACh0D,eAAe,CAAEusD,EAAe,IAAI,CAACA,YAAY,CA2BpE,OAzBIyH,GAAWA,EAAQP,QAAQ,CACxBO,EAAQJ,iBAAiB,EAC5Br/C,CAAAA,EAAKjM,UAAU,CAAG0rD,EAAQP,QAAQ,CAACF,EAAAA,EAG9BS,GACPz/C,CAAAA,EAAKjM,UAAU,CAAG0rD,CAAAA,EAGhBzH,GAAgBA,EAAakH,QAAQ,CAClClH,EAAaqH,iBAAiB,EACjCr/C,CAAAA,EAAK0/C,OAAO,CAAG1H,EAAakH,QAAQ,CAACF,EAAAA,EAGhChH,GACPh4C,CAAAA,EAAK0/C,OAAO,CAAG1H,CAAAA,EAGbwH,GAAW,CAACA,EAAQH,iBAAiB,EACvCr/C,CAAAA,EAAK+3C,eAAe,CAAG,IAAI,CAACnlC,SAAS,CAAC4sC,EAASzrB,EAAYirB,EAAAA,EAEzD/G,GAAgB,CAACA,EAAaoH,iBAAiB,EACjDr/C,CAAAA,EAAKi4C,YAAY,CAAG,IAAI,CAACrlC,SAAS,CAACqlC,EAAclkB,EAAYirB,EAAAA,EAGxDh/C,CACT,EAWA2/C,WAAY,SAAUxwD,CAAM,EAC1B,GAAI,CAACA,EACH,OAAO,IAAI,CAEb,IACI4L,EAAG4e,EAAKimC,EADRC,EAAkB,IAAI,CAACrE,aAAa,CAExC,GAAIrsD,IAAW0wD,GAAmB1wD,oBAAAA,EAAOkB,IAAI,CAE3C,IAAK0K,EAAI6kD,CADTA,EAAOC,EAAgB1sD,QAAQ,EACjBnE,MAAM,CAAE+L,KACpB4e,EAAMimC,CAAI,CAAC7kD,EAAE,CACbggB,EAAgB,IAAI,CAAC5nB,QAAQ,CAAEwmB,GAC/B,IAAI,CAACxmB,QAAQ,CAAC2sD,OAAO,CAACnmC,QAIxBoB,EAAgB,IAAI,CAAC5nB,QAAQ,CAAEhE,GAC/B,IAAI,CAACgE,QAAQ,CAAC2sD,OAAO,CAAC3wD,GAGxB,OADA,IAAI,CAACkd,iBAAiB,EAAI,IAAI,CAACnO,gBAAgB,GACxC,IAAI,EAUb6hD,aAAc,SAAU5wD,CAAM,EAC5B,GAAI,CAACA,EACH,OAAO,IAAI,CAEb,IACI4L,EAAG4e,EAAKimC,EADRC,EAAkB,IAAI,CAACrE,aAAa,CAExC,GAAIrsD,IAAW0wD,GAAmB1wD,oBAAAA,EAAOkB,IAAI,CAE3C,IAAK0K,EAAI,EADT6kD,EAAOC,EAAgB1sD,QAAQ,CACnB4H,EAAI6kD,EAAK5wD,MAAM,CAAE+L,IAC3B4e,EAAMimC,CAAI,CAAC7kD,EAAE,CACbggB,EAAgB,IAAI,CAAC5nB,QAAQ,CAAEwmB,GAC/B,IAAI,CAACxmB,QAAQ,CAAC7I,IAAI,CAACqvB,QAIrBoB,EAAgB,IAAI,CAAC5nB,QAAQ,CAAEhE,GAC/B,IAAI,CAACgE,QAAQ,CAAC7I,IAAI,CAAC6E,GAGrB,OADA,IAAI,CAACkd,iBAAiB,EAAI,IAAI,CAACnO,gBAAgB,GACxC,IAAI,EAcbxB,cAAe,SAAUvN,CAAM,CAAE6wD,CAAY,EAC3C,GAAI,CAAC7wD,EACH,OAAO,IAAI,CAEb,IACI4L,EAAG4e,EAAKqB,EAAKilC,EAAQL,EADrBC,EAAkB,IAAI,CAACrE,aAAa,CACT0E,EAAY,EAE3C,GAAI/wD,IAAW0wD,GAAmB1wD,oBAAAA,EAAOkB,IAAI,CAE3C,IAAK0K,EAAI,EADT6kD,EAAOC,EAAgB1sD,QAAQ,CACnB4H,EAAI6kD,EAAK5wD,MAAM,CAAE+L,IAC3B4e,EAAMimC,CAAI,CAAC7kD,EAAE,CACbigB,CAAAA,EAAM,IAAI,CAAC7nB,QAAQ,CAACglB,OAAO,CAACwB,EAAAA,EAClB,EAAIumC,IACZD,EAASjlC,EAAM,EACfD,EAAgB,IAAI,CAAC5nB,QAAQ,CAAEwmB,GAC/B,IAAI,CAACxmB,QAAQ,CAAC2X,MAAM,CAACm1C,EAAQ,EAAGtmC,IAElCumC,SAKU,IADZllC,CAAAA,EAAM,IAAI,CAAC7nB,QAAQ,CAACglB,OAAO,CAAChpB,EAAAA,IAG1B8wD,EAAS,IAAI,CAACE,kBAAkB,CAAChxD,EAAQ6rB,EAAKglC,GAC9CjlC,EAAgB,IAAI,CAAC5nB,QAAQ,CAAEhE,GAC/B,IAAI,CAACgE,QAAQ,CAAC2X,MAAM,CAACm1C,EAAQ,EAAG9wD,IAIpC,OADA,IAAI,CAACkd,iBAAiB,EAAI,IAAI,CAACnO,gBAAgB,GACxC,IAAI,EAMbiiD,mBAAoB,SAAShxD,CAAM,CAAE6rB,CAAG,CAAEglC,CAAY,EACpD,IAAIC,EAAQllD,EAEZ,GAAIilD,EAIF,KAHAC,EAASjlC,EAGJjgB,EAAIigB,EAAM,EAAGjgB,GAAK,EAAG,EAAEA,EAM1B,GAJqB5L,EAAOixD,oBAAoB,CAAC,IAAI,CAACjtD,QAAQ,CAAC4H,EAAE,GAC5C5L,EAAOkxD,uBAAuB,CAAC,IAAI,CAACltD,QAAQ,CAAC4H,EAAE,GAC/C,IAAI,CAAC5H,QAAQ,CAAC4H,EAAE,CAACslD,uBAAuB,CAAClxD,GAE1C,CAClB8wD,EAASllD,EACT,KACF,CACF,MAGAklD,EAASjlC,EAAM,EAGjB,OAAOilC,CACT,EAaAl0D,aAAc,SAAUoD,CAAM,CAAE6wD,CAAY,EAC1C,GAAI,CAAC7wD,EACH,OAAO,IAAI,CAEb,IACI4L,EAAG4e,EAAKqB,EAAKilC,EAAQL,EADrBC,EAAkB,IAAI,CAACrE,aAAa,CACT0E,EAAY,EAE3C,GAAI/wD,IAAW0wD,GAAmB1wD,oBAAAA,EAAOkB,IAAI,CAE3C,IAAK0K,EAAI6kD,CADTA,EAAOC,EAAgB1sD,QAAQ,EACjBnE,MAAM,CAAE+L,KACpB4e,EAAMimC,CAAI,CAAC7kD,EAAE,CACbigB,CAAAA,EAAM,IAAI,CAAC7nB,QAAQ,CAACglB,OAAO,CAACwB,EAAAA,EAClB,IAAI,CAACxmB,QAAQ,CAACnE,MAAM,CAAG,EAAIkxD,IACnCD,EAASjlC,EAAM,EACfD,EAAgB,IAAI,CAAC5nB,QAAQ,CAAEwmB,GAC/B,IAAI,CAACxmB,QAAQ,CAAC2X,MAAM,CAACm1C,EAAQ,EAAGtmC,IAElCumC,QAIFllC,CAAAA,EAAM,IAAI,CAAC7nB,QAAQ,CAACglB,OAAO,CAAChpB,EAAAA,IAChB,IAAI,CAACgE,QAAQ,CAACnE,MAAM,CAAG,IAEjCixD,EAAS,IAAI,CAACK,kBAAkB,CAACnxD,EAAQ6rB,EAAKglC,GAC9CjlC,EAAgB,IAAI,CAAC5nB,QAAQ,CAAEhE,GAC/B,IAAI,CAACgE,QAAQ,CAAC2X,MAAM,CAACm1C,EAAQ,EAAG9wD,IAIpC,OADA,IAAI,CAACkd,iBAAiB,EAAI,IAAI,CAACnO,gBAAgB,GACxC,IAAI,EAMboiD,mBAAoB,SAASnxD,CAAM,CAAE6rB,CAAG,CAAEglC,CAAY,EACpD,IAAIC,EAAQllD,EAAG4d,EAEf,GAAIqnC,EAIF,KAAKjlD,EAHIigB,EAGJjgB,EAAIigB,EAAM,EAAGrC,EAAM,IAAI,CAACxlB,QAAQ,CAACnE,MAAM,CAAE+L,EAAI4d,EAAK,EAAE5d,EAMvD,GAJqB5L,EAAOixD,oBAAoB,CAAC,IAAI,CAACjtD,QAAQ,CAAC4H,EAAE,GAC5C5L,EAAOkxD,uBAAuB,CAAC,IAAI,CAACltD,QAAQ,CAAC4H,EAAE,GAC/C,IAAI,CAAC5H,QAAQ,CAAC4H,EAAE,CAACslD,uBAAuB,CAAClxD,GAE1C,CAClB8wD,EAASllD,EACT,KACF,CACF,MAGAklD,EAASjlC,EAAM,EAGjB,OAAOilC,CACT,EASAjC,OAAQ,SAAU7uD,CAAM,CAAEuT,CAAK,EAG7B,OAFAqY,EAAgB,IAAI,CAAC5nB,QAAQ,CAAEhE,GAC/B,IAAI,CAACgE,QAAQ,CAAC2X,MAAM,CAACpI,EAAO,EAAGvT,GACxB,IAAI,CAACkd,iBAAiB,EAAI,IAAI,CAACnO,gBAAgB,EACxD,EAOA6P,QAAS,WA6BP,OA3BI,IAAI,CAAC6uC,WAAW,GAClBnmD,GAAOyb,IAAI,CAACkrB,eAAe,CAAC,IAAI,CAACwf,WAAW,EAC5C,IAAI,CAACA,WAAW,CAAG,GAErB,IAAI,CAACh/C,aAAa,CAAC,SAASzO,CAAM,EAChCA,EAAO4e,OAAO,EAAI5e,EAAO4e,OAAO,EAClC,GACA,IAAI,CAAC5a,QAAQ,CAAG,EAAE,CACd,IAAI,CAAC4kD,eAAe,EAAI,IAAI,CAACA,eAAe,CAAChqC,OAAO,EACtD,IAAI,CAACgqC,eAAe,CAAChqC,OAAO,GAE9B,IAAI,CAACgqC,eAAe,CAAG,KACnB,IAAI,CAACE,YAAY,EAAI,IAAI,CAACA,YAAY,CAAClqC,OAAO,EAChD,IAAI,CAACkqC,YAAY,CAAClqC,OAAO,GAE3B,IAAI,CAACkqC,YAAY,CAAG,KACpB,IAAI,CAACwE,eAAe,CAAG,KACvB,IAAI,CAAChD,gBAAgB,CAAG,KAExB,IAAI,CAACD,aAAa,CAAC+G,SAAS,CAACtiD,MAAM,CAAC,gBACpCxH,GAAOyb,IAAI,CAACujB,QAAQ,CAAC,IAAI,CAAC+jB,aAAa,CAAE,IAAI,CAACW,oBAAoB,EAClE,OAAO,IAAI,CAACA,oBAAoB,CAEhC,IAAI,CAACX,aAAa,CAAC/iB,YAAY,CAAC,QAAS,IAAI,CAACxiC,KAAK,EACnD,IAAI,CAACulD,aAAa,CAAC/iB,YAAY,CAAC,SAAU,IAAI,CAAC3iC,MAAM,EACrD2C,GAAOyb,IAAI,CAACqnB,gBAAgB,CAAC,IAAI,CAACigB,aAAa,EAC/C,IAAI,CAACA,aAAa,CAAGnnD,KAAAA,EACd,IAAI,EAObuN,SAAU,WACR,MAAO,oBAAsB,IAAI,CAACga,UAAU,GAArC,iBACkB,IAAI,CAACzmB,QAAQ,CAACnE,MAAM,CAAG,KAClD,CACF,GAEA8hB,EAAOra,GAAOghD,YAAY,CAAC5qC,SAAS,CAAEpW,GAAO+hB,UAAU,EACvD1H,EAAOra,GAAOghD,YAAY,CAAC5qC,SAAS,CAAEpW,GAAOsiB,UAAU,EACvDjI,EAAOra,GAAOghD,YAAY,CAAC5qC,SAAS,CAAEpW,GAAO+pD,eAAe,EAE5D1vC,EAAOra,GAAOghD,YAAY,CAAoC,CAO5DgJ,WAAY,yCAWZC,SAAU,SAAU3sB,CAAU,EAC5B,IAAIyC,EAAKlU,IAET,GAAI,CAACkU,GAAM,CAACA,EAAGjiB,UAAU,CACvB,OAAO,KAGT,IAAID,EAAMkiB,EAAGjiB,UAAU,CAAC,aACnBD,GAME,gBAFCyf,EAGG,KAA2B,IAApBzf,EAAIqsC,WAAW,CAGtB,IAEb,CACF,GAoBAlqD,GAAOghD,YAAY,CAAC5qC,SAAS,CAACc,MAAM,CAAGlX,GAAOghD,YAAY,CAAC5qC,SAAS,CAACqyC,QAAQ,CAEzEzoD,GAAOqf,YAAY,GACrBrf,GAAOghD,YAAY,CAAC5qC,SAAS,CAAC+zC,eAAe,CAAG,WAC9C,IAAIxnB,EAAOD,EAAc,IAAI,CAACqgB,aAAa,EAC3C,OAAOpgB,GAAQA,EAAKwnB,eAAe,EACrC,EACAnqD,GAAOghD,YAAY,CAAC5qC,SAAS,CAACg0C,gBAAgB,CAAG,SAASC,CAAI,EAC5D,IAAI1nB,EAAOD,EAAc,IAAI,CAACqgB,aAAa,EAC3C,OAAOpgB,GAAQA,EAAKynB,gBAAgB,CAACC,EACvC,EAEJ,IAMArqD,GAAOsqD,SAAS,CAAGtqD,GAAOyb,IAAI,CAACG,WAAW,CAA0C,CAOlF1R,MAAO,eAOP1M,MAAO,EASP+sD,OAAQ,KAORC,cAAe,QAOfnjC,eAAgB,QAOhBC,iBAA0B,GAO1BmjC,gBAAiB,KAQjBC,oBAAqB,GAQrBjG,gBAAiB,SAAU5mC,CAAG,EAC5BA,EAAIkgC,WAAW,CAAG,IAAI,CAAC7zC,KAAK,CAC5B2T,EAAImgC,SAAS,CAAG,IAAI,CAACxgD,KAAK,CAC1BqgB,EAAI8sC,OAAO,CAAG,IAAI,CAACH,aAAa,CAChC3sC,EAAI+sC,UAAU,CAAG,IAAI,CAACtjC,gBAAgB,CACtCzJ,EAAIgtC,QAAQ,CAAG,IAAI,CAACxjC,cAAc,CAClCxJ,EAAIqsC,WAAW,CAAC,IAAI,CAACO,eAAe,EAAI,EAAE,CAC5C,EAOAK,kBAAmB,SAASjtC,CAAG,EAC7B,IAAIuH,EAAI,IAAI,CAAC1wB,MAAM,CAACmtD,iBAAiB,CACrChkC,EAAIggC,IAAI,GACRhgC,EAAI+J,SAAS,CAACxC,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAClD,EAMA2lC,WAAY,WACV,GAAK,IAAI,CAACR,MAAM,EAIhB,IAAI71D,EAAS,IAAI,CAACA,MAAM,CACpB61D,EAAS,IAAI,CAACA,MAAM,CACpB1sC,EAAMnpB,EAAOwuD,UAAU,CACvBpkB,EAAOpqC,EAAOikD,OAAO,GACrBjkD,GAAUA,EAAOiuD,gBAAgB,IACnC7jB,CAAAA,GAAQ9+B,GAAOqgB,gBAAgB,EAGjCxC,EAAImtC,WAAW,CAAGT,EAAOrgD,KAAK,CAC9B2T,EAAIotC,UAAU,CAAGV,EAAOW,IAAI,CAAGpsB,EAC/BjhB,EAAIstC,aAAa,CAAGZ,EAAOxR,OAAO,CAAGja,EACrCjhB,EAAIutC,aAAa,CAAGb,EAAOvR,OAAO,CAAGla,EACvC,EAEAusB,gBAAiB,WAEf,OAAOnhD,EAAAA,IADSlK,GAAOmnC,KAAK,CAAC,IAAI,CAACj9B,KAAK,EAC1ByhC,QAAQ,IAAU,CAAC,CAAC,IAAI,CAAC4e,MAAM,EAO9Ce,aAAc,WACZ,IAAIztC,EAAM,IAAI,CAACnpB,MAAM,CAACwuD,UAAU,CAEhCrlC,EAAImtC,WAAW,CAAG,GAClBntC,EAAIotC,UAAU,CAAGptC,EAAIstC,aAAa,CAAGttC,EAAIutC,aAAa,CAAG,CAC3D,EAOAG,iBAAkB,SAAStT,CAAO,EAChC,OAAOA,EAAQ/yB,CAAC,CAAG,GAAK+yB,EAAQ/yB,CAAC,CAAG,IAAI,CAACxwB,MAAM,CAACkvD,QAAQ,IAAM3L,EAAQ9yB,CAAC,CAAG,GAAK8yB,EAAQ9yB,CAAC,CAAG,IAAI,CAACzwB,MAAM,CAACmvD,SAAS,EAClH,CACF,GAOE7jD,GAAOwrD,WAAW,CAAGxrD,GAAOyb,IAAI,CAACG,WAAW,CAAC5b,GAAOsqD,SAAS,CAA6C,CAOxGmB,SAAU,GASVC,iBAAkB,GAOlBC,gBAAiB,WAOjBjuB,WAAY,SAAShpC,CAAM,EACzB,IAAI,CAACA,MAAM,CAAGA,EACd,IAAI,CAACk3D,OAAO,CAAG,EAAE,EAGnBP,gBAAiB,WACf,OAAO,IAAI,CAAChuB,SAAS,CAAC,oBAAsB,IAAI,CAACwuB,gBAAgB,EAOnEC,aAAc,SAAUjuC,CAAG,CAAEub,CAAE,CAAEC,CAAE,EACjC,IAAIK,EAAWN,EAAGO,YAAY,CAACN,GAE/B,OADAxb,EAAIkuC,gBAAgB,CAAC3yB,EAAGlU,CAAC,CAAEkU,EAAGjU,CAAC,CAAEuU,EAASxU,CAAC,CAAEwU,EAASvU,CAAC,EAChDuU,CACT,EAMAsyB,YAAa,SAAS/T,CAAO,CAAE9/C,CAAO,EAC/B,IAAI,CAACzD,MAAM,CAACu3D,YAAY,CAAC9zD,EAAQ2P,CAAC,IAGvC,IAAI,CAAC4jD,gBAAgB,CAAGvzD,EAAQ2P,CAAC,CAAC,IAAI,CAAC6jD,eAAe,CAAC,CACvD,IAAI,CAACO,kBAAkB,CAACjU,GAGxB,IAAI,CAACkU,mBAAmB,CAAClU,GACzB,IAAI,CAACmU,OAAO,GACd,EAMAC,YAAa,SAASpU,CAAO,CAAE9/C,CAAO,EACpC,GAAK,IAAI,CAACzD,MAAM,CAACu3D,YAAY,CAAC9zD,EAAQ2P,CAAC,IAGvC,IAAI,CAAC4jD,gBAAgB,CAAGvzD,EAAQ2P,CAAC,CAAC,IAAI,CAAC6jD,eAAe,CAAC,EACnD,EAA6B,IAA7B,IAAI,CAACjB,mBAAmB,EAAa,IAAI,CAACa,gBAAgB,CAACtT,EAAAA,GAG3D,IAAI,CAACkU,mBAAmB,CAAClU,IAAY,IAAI,CAAC2T,OAAO,CAACrzD,MAAM,CAAG,IAC7D,GAAI,IAAI,CAAC8yD,eAAe,GAGtB,IAAI,CAAC32D,MAAM,CAACkxD,YAAY,CAAC,IAAI,CAAClxD,MAAM,CAACwuD,UAAU,EAC/C,IAAI,CAACkJ,OAAO,OAET,CACH,IAAI3lC,EAAS,IAAI,CAACmlC,OAAO,CAAErzD,EAASkuB,EAAOluB,MAAM,CAAEslB,EAAM,IAAI,CAACnpB,MAAM,CAACwuD,UAAU,CAE/E,IAAI,CAAC4H,iBAAiB,CAACjtC,GACnB,IAAI,CAACyuC,MAAM,GACbzuC,EAAIogC,SAAS,GACbpgC,EAAI0pC,MAAM,CAAC,IAAI,CAAC+E,MAAM,CAACpnC,CAAC,CAAE,IAAI,CAAConC,MAAM,CAACnnC,CAAC,GAEzC,IAAI,CAACmnC,MAAM,CAAG,IAAI,CAACR,YAAY,CAACjuC,EAAK4I,CAAM,CAACluB,EAAS,EAAE,CAAEkuB,CAAM,CAACluB,EAAS,EAAE,CAAE,IAC7EslB,EAAI2S,MAAM,GACV3S,EAAIsgC,OAAO,EACb,EAEJ,EAKAoO,UAAW,SAASp0D,CAAO,QACzB,CAAK,IAAI,CAACzD,MAAM,CAACu3D,YAAY,CAAC9zD,EAAQ2P,CAAC,IAGvC,IAAI,CAAC4jD,gBAAgB,CAAG,GACxB,IAAI,CAACY,MAAM,CAAG1wD,KAAAA,EACd,IAAI,CAAC4wD,mBAAmB,GACjB,GACT,EAMAN,mBAAoB,SAASjU,CAAO,EAElC,IAAI33C,EAAI,IAAIN,GAAOilB,KAAK,CAACgzB,EAAQ/yB,CAAC,CAAE+yB,EAAQ9yB,CAAC,EAE7C,IAAI,CAACsnC,MAAM,GACX,IAAI,CAACC,SAAS,CAACpsD,GACf,IAAI,CAAC5L,MAAM,CAACwuD,UAAU,CAACqE,MAAM,CAACjnD,EAAE4kB,CAAC,CAAE5kB,EAAE6kB,CAAC,CACxC,EAMAunC,UAAW,SAAS5nC,CAAK,QACvB,CAAI,KAAI,CAAC8mC,OAAO,CAACrzD,MAAM,CAAG,GAAKusB,EAAM2U,EAAE,CAAC,IAAI,CAACmyB,OAAO,CAAC,IAAI,CAACA,OAAO,CAACrzD,MAAM,CAAG,EAAE,KAGzE,IAAI,CAACmzD,gBAAgB,EAAI,IAAI,CAACE,OAAO,CAACrzD,MAAM,CAAG,IACjD,IAAI,CAACszD,gBAAgB,CAAG,GACxB,IAAI,CAACD,OAAO,CAACz9B,GAAG,IAElB,IAAI,CAACy9B,OAAO,CAAC/3D,IAAI,CAACixB,GACX,GACT,EAMA2nC,OAAQ,WACN,IAAI,CAACb,OAAO,CAAG,EAAE,CACjB,IAAI,CAACnH,eAAe,CAAC,IAAI,CAAC/vD,MAAM,CAACwuD,UAAU,EAC3C,IAAI,CAAC6H,UAAU,GACf,IAAI,CAACc,gBAAgB,CAAG,EAC1B,EAMAM,oBAAqB,SAASlU,CAAO,EACnC,IAAI0U,EAAe,IAAI3sD,GAAOilB,KAAK,CAACgzB,EAAQ/yB,CAAC,CAAE+yB,EAAQ9yB,CAAC,EACxD,OAAO,IAAI,CAACunC,SAAS,CAACC,EACxB,EAOAP,QAAS,SAASvuC,CAAG,EACnB,IAAIvZ,EAAG4d,EACHkX,EAAK,IAAI,CAACwyB,OAAO,CAAC,EAAE,CACpBvyB,EAAK,IAAI,CAACuyB,OAAO,CAAC,EAAE,CAQxB,GAPA/tC,EAAMA,GAAO,IAAI,CAACnpB,MAAM,CAACwuD,UAAU,CACnC,IAAI,CAAC4H,iBAAiB,CAACjtC,GACvBA,EAAIogC,SAAS,GAKT,QAAI,CAAC2N,OAAO,CAACrzD,MAAM,EAAU6gC,EAAGlU,CAAC,GAAKmU,EAAGnU,CAAC,EAAIkU,EAAGjU,CAAC,GAAKkU,EAAGlU,CAAC,CAAE,CAC/D,IAAI3nB,EAAQ,IAAI,CAACA,KAAK,CAAG,IACzB47B,EAAK,IAAIp5B,GAAOilB,KAAK,CAACmU,EAAGlU,CAAC,CAAEkU,EAAGjU,CAAC,EAChCkU,EAAK,IAAIr5B,GAAOilB,KAAK,CAACoU,EAAGnU,CAAC,CAAEmU,EAAGlU,CAAC,EAChCiU,EAAGlU,CAAC,EAAI1nB,EACR67B,EAAGnU,CAAC,EAAI1nB,CACV,CAGA,IAAK8G,EAFDijD,MAAM,CAACnuB,EAAGlU,CAAC,CAAEkU,EAAGjU,CAAC,EAEhB7gB,EAAI,EAAG4d,EAAM,IAAI,CAAC0pC,OAAO,CAACrzD,MAAM,CAAE+L,EAAI4d,EAAK5d,IAG9C,IAAI,CAACwnD,YAAY,CAACjuC,EAAKub,EAAIC,GAC3BD,EAAK,IAAI,CAACwyB,OAAO,CAACtnD,EAAE,CACpB+0B,EAAK,IAAI,CAACuyB,OAAO,CAACtnD,EAAI,EAAE,CAK1BuZ,EAAI2pC,MAAM,CAACpuB,EAAGlU,CAAC,CAAEkU,EAAGjU,CAAC,EACrBtH,EAAI2S,MAAM,GACV3S,EAAIsgC,OAAO,EACb,EAOAyO,uBAAwB,SAAUnmC,CAAM,EACtC,IAAI0S,EAAa,IAAI,CAAC37B,KAAK,CAAG,IAC9B,OAAOwC,GAAOyb,IAAI,CAACyd,uBAAuB,CAACzS,EAAQ0S,EACrD,EAOA0zB,gBAAiB,SAAUj4B,CAAQ,EAEjC,MAAOG,0BADU/0B,GAAOyb,IAAI,CAACkZ,QAAQ,CAACC,EAExC,EAOAk4B,WAAY,SAASl4B,CAAQ,EAC3B,IAAItJ,EAAO,IAAItrB,GAAO+sD,IAAI,CAACn4B,EAAU,CACnCrsB,KAAM,KACNioB,OAAQ,IAAI,CAACtmB,KAAK,CAClBwM,YAAa,IAAI,CAAClZ,KAAK,CACvBgtD,cAAe,IAAI,CAACA,aAAa,CACjCljC,iBAAkB,IAAI,CAACA,gBAAgB,CACvCD,eAAgB,IAAI,CAACA,cAAc,CACnCojC,gBAAiB,IAAI,CAACA,eAAe,GAOvC,OALI,IAAI,CAACF,MAAM,GACb,IAAI,CAACA,MAAM,CAACyC,YAAY,CAAG,GAC3B1hC,EAAKi/B,MAAM,CAAG,IAAIvqD,GAAOitD,MAAM,CAAC,IAAI,CAAC1C,MAAM,GAGtCj/B,CACT,EAKA4hC,eAAgB,SAASzmC,CAAM,CAAEiU,CAAQ,EACvC,GAAIjU,EAAOluB,MAAM,EAAI,EACnB,OAAOkuB,EAET,IACIniB,EAD8B6oD,EAAmBvwD,KAAKge,GAAG,CAAC8f,EAAnD,IAAI,CAAChmC,MAAM,CAACikD,OAAO,GAAiD,GACxEhrB,EAAIlH,EAAOluB,MAAM,CAAG,EAAG60D,EAAY3mC,CAAM,CAAC,EAAE,CAAE4mC,EAAY,CAACD,EAAU,CAE5E,IAAK9oD,EAAI,EAAGA,EAAIqpB,EAAI,EAAGrpB,IACT1H,KAAKge,GAAG,CAACwyC,EAAUloC,CAAC,CAAGuB,CAAM,CAACniB,EAAE,CAAC4gB,CAAC,CAAE,GAAKtoB,KAAKge,GAAG,CAACwyC,EAAUjoC,CAAC,CAAGsB,CAAM,CAACniB,EAAE,CAAC6gB,CAAC,CAAE,IACxEgoC,GAEfE,EAAUx5D,IAAI,CADdu5D,EAAY3mC,CAAM,CAACniB,EAAE,EASzB,OADA+oD,EAAUx5D,IAAI,CAAC4yB,CAAM,CAACkH,EAAE,EACjB0/B,CACT,EAOAb,oBAAqB,WAEnB3uC,IADc,CAACnpB,MAAM,CAACwuD,UAAU,CAC5BuE,SAAS,GACT,IAAI,CAACgE,QAAQ,EACf,KAAI,CAACG,OAAO,CAAG,IAAI,CAACsB,cAAc,CAAC,IAAI,CAACtB,OAAO,CAAE,IAAI,CAACH,QAAQ,GAEhE,IAAI72B,EAAW,IAAI,CAACg4B,sBAAsB,CAAC,IAAI,CAAChB,OAAO,EACvD,GAAI,IAAI,CAACiB,eAAe,CAACj4B,GAAW,CAKlC,IAAI,CAAClgC,MAAM,CAAC+S,gBAAgB,GAC5B,MACF,CAEA,IAAI6jB,EAAO,IAAI,CAACwhC,UAAU,CAACl4B,GAC3B,IAAI,CAAClgC,MAAM,CAACkxD,YAAY,CAAC,IAAI,CAAClxD,MAAM,CAACwuD,UAAU,EAC/C,IAAI,CAACxuD,MAAM,CAACstB,IAAI,CAAC,sBAAuB,CAAEsJ,KAAMA,CAAK,GACrD,IAAI,CAAC52B,MAAM,CAAC+Q,GAAG,CAAC6lB,GAChB,IAAI,CAAC52B,MAAM,CAAC+S,gBAAgB,GAC5B6jB,EAAKlkB,SAAS,GACd,IAAI,CAACkkD,YAAY,GAIjB,IAAI,CAAC52D,MAAM,CAACstB,IAAI,CAAC,eAAgB,CAAEsJ,KAAMA,CAAK,EAChD,CACF,GAMFtrB,GAAOstD,WAAW,CAAGttD,GAAOyb,IAAI,CAACG,WAAW,CAAC5b,GAAOsqD,SAAS,CAA6C,CAOxG9sD,MAAO,GAOPkgC,WAAY,SAAShpC,CAAM,EACzB,IAAI,CAACA,MAAM,CAAGA,EACd,IAAI,CAAC+xB,MAAM,CAAG,EAAE,EAOlB8mC,QAAS,SAAStV,CAAO,EACvB,IAAInzB,EAAQ,IAAI,CAAC0oC,QAAQ,CAACvV,GACtBp6B,EAAM,IAAI,CAACnpB,MAAM,CAACwuD,UAAU,CAChC,IAAI,CAAC4H,iBAAiB,CAACjtC,GACvB,IAAI,CAAC4vC,GAAG,CAAC5vC,EAAKiH,GACdjH,EAAIsgC,OAAO,EACb,EAEAsP,IAAK,SAAS5vC,CAAG,CAAEiH,CAAK,EACtBjH,EAAIigC,SAAS,CAAGh5B,EAAMvc,IAAI,CAC1BsV,EAAIogC,SAAS,GACbpgC,EAAIqgC,GAAG,CAACp5B,EAAMI,CAAC,CAAEJ,EAAMK,CAAC,CAAEL,EAAM4oC,MAAM,CAAE,EAAG9wD,EAAAA,KAAKsnB,EAAE,CAAM,IACxDrG,EAAI4pC,SAAS,GACb5pC,EAAItV,IAAI,EACV,EAKAyjD,YAAa,SAAS/T,CAAO,EAC3B,IAAI,CAACxxB,MAAM,CAACluB,MAAM,CAAG,EACrB,IAAI,CAAC7D,MAAM,CAACkxD,YAAY,CAAC,IAAI,CAAClxD,MAAM,CAACwuD,UAAU,EAC/C,IAAI,CAAC6H,UAAU,GACf,IAAI,CAACwC,OAAO,CAACtV,EACf,EAMAmU,QAAS,WACP,IAAmC9nD,EAAG4d,EAAlCrE,EAAO,IAAI,CAACnpB,MAAM,CAACwuD,UAAU,CAC7Bz8B,EAAS,IAAI,CAACA,MAAM,CAExB,IAAKniB,IADD,CAACwmD,iBAAiB,CAACjtC,GAClBvZ,EAAI,EAAG4d,EAAMuE,EAAOluB,MAAM,CAAE+L,EAAI4d,EAAK5d,IACxC,IAAI,CAACmpD,GAAG,CAAC5vC,EAAK4I,CAAM,CAACniB,EAAE,EAEzBuZ,EAAIsgC,OAAO,EACb,EAMAkO,YAAa,SAASpU,CAAO,EACM,KAA7B,IAAI,CAACyS,mBAAmB,EAAa,IAAI,CAACa,gBAAgB,CAACtT,KAG3D,IAAI,CAACoT,eAAe,IACtB,IAAI,CAAC32D,MAAM,CAACkxD,YAAY,CAAC,IAAI,CAAClxD,MAAM,CAACwuD,UAAU,EAC/C,IAAI,CAACsK,QAAQ,CAACvV,GACd,IAAI,CAACmU,OAAO,IAGZ,IAAI,CAACmB,OAAO,CAACtV,GAEjB,EAKAsU,UAAW,WACT,IAA+DjoD,EAAG4d,EAA9DyrC,EAA4B,IAAI,CAACj5D,MAAM,CAACkhB,iBAAiB,CAC7D,IAAI,CAAClhB,MAAM,CAACkhB,iBAAiB,CAAG,GAEhC,IAAIg4C,EAAU,EAAE,CAEhB,IAAKtpD,EAAI,EAAG4d,EAAM,IAAI,CAACuE,MAAM,CAACluB,MAAM,CAAE+L,EAAI4d,EAAK5d,IAAK,CAClD,IAAIwgB,EAAQ,IAAI,CAAC2B,MAAM,CAACniB,EAAE,CACtBupD,EAAS,IAAI7tD,GAAO8tD,MAAM,CAAC,CACzBJ,OAAQ5oC,EAAM4oC,MAAM,CACpBzmD,KAAM6d,EAAMI,CAAC,CACble,IAAK8d,EAAMK,CAAC,CACZsyB,QAAS,SACTC,QAAS,SACTnvC,KAAMuc,EAAMvc,IAAI,EAGtB,KAAI,CAACgiD,MAAM,EAAKsD,CAAAA,EAAOtD,MAAM,CAAG,IAAIvqD,GAAOitD,MAAM,CAAC,IAAI,CAAC1C,MAAM,GAE7DqD,EAAQ/5D,IAAI,CAACg6D,EACf,CACA,IAAI3I,EAAQ,IAAIllD,GAAOwrB,KAAK,CAACoiC,EAC7B1I,CAAAA,EAAMxwD,MAAM,CAAG,IAAI,CAACA,MAAM,CAE1B,IAAI,CAACA,MAAM,CAACstB,IAAI,CAAC,sBAAuB,CAAEsJ,KAAM45B,CAAM,GACtD,IAAI,CAACxwD,MAAM,CAAC+Q,GAAG,CAACy/C,GAChB,IAAI,CAACxwD,MAAM,CAACstB,IAAI,CAAC,eAAgB,CAAEsJ,KAAM45B,CAAM,GAE/C,IAAI,CAACxwD,MAAM,CAACkxD,YAAY,CAAC,IAAI,CAAClxD,MAAM,CAACwuD,UAAU,EAC/C,IAAI,CAACoI,YAAY,GACjB,IAAI,CAAC52D,MAAM,CAACkhB,iBAAiB,CAAG+3C,EAChC,IAAI,CAACj5D,MAAM,CAAC+S,gBAAgB,EAC9B,EAMA+lD,SAAU,SAASvV,CAAO,EACxB,IAAI0U,EAAe,IAAI3sD,GAAOilB,KAAK,CAACgzB,EAAQ/yB,CAAC,CAAE+yB,EAAQ9yB,CAAC,EAEpD4oC,EAAe/tD,GAAOyb,IAAI,CAAC+I,YAAY,CACrC5nB,KAAKI,GAAG,CAAC,EAAG,IAAI,CAACQ,KAAK,CAAG,IAAK,IAAI,CAACA,KAAK,CAAG,IAAM,EAEnDwwD,EAAc,IAAIhuD,GAAOmnC,KAAK,CAAC,IAAI,CAACj9B,KAAK,EACtC0hC,QAAQ,CAAC5rC,GAAOyb,IAAI,CAAC+I,YAAY,CAAC,EAAG,KAAO,KAC5C6mB,MAAM,GAOb,OALAshB,EAAae,MAAM,CAAGK,EACtBpB,EAAapkD,IAAI,CAAGylD,EAEpB,IAAI,CAACvnC,MAAM,CAAC5yB,IAAI,CAAC84D,GAEVA,CACT,CACF,GAKA3sD,GAAOiuD,UAAU,CAAGjuD,GAAOyb,IAAI,CAACG,WAAW,CAAE5b,GAAOsqD,SAAS,CAA4C,CAOvG9sD,MAAoB,GAOpB0wD,QAAoB,GAOpBC,SAAoB,EAOpBC,iBAAoB,EAOpBC,cAAsB,GAOtBC,oBAAsB,GAOtB5wB,WAAY,SAAShpC,CAAM,EACzB,IAAI,CAACA,MAAM,CAAGA,EACd,IAAI,CAAC65D,WAAW,CAAG,EAAE,EAOvBvC,YAAa,SAAS/T,CAAO,EAC3B,IAAI,CAACsW,WAAW,CAACh2D,MAAM,CAAG,EAC1B,IAAI,CAAC7D,MAAM,CAACkxD,YAAY,CAAC,IAAI,CAAClxD,MAAM,CAACwuD,UAAU,EAC/C,IAAI,CAAC6H,UAAU,GAEf,IAAI,CAACyD,aAAa,CAACvW,GACnB,IAAI,CAAC8I,MAAM,CAAC,IAAI,CAAC0N,gBAAgB,CACnC,EAMApC,YAAa,SAASpU,CAAO,EACM,KAA7B,IAAI,CAACyS,mBAAmB,EAAa,IAAI,CAACa,gBAAgB,CAACtT,KAG/D,IAAI,CAACuW,aAAa,CAACvW,GACnB,IAAI,CAAC8I,MAAM,CAAC,IAAI,CAAC0N,gBAAgB,EACnC,EAKAlC,UAAW,WACT,IAAIoB,EAA4B,IAAI,CAACj5D,MAAM,CAACkhB,iBAAiB,CAC7D,IAAI,CAAClhB,MAAM,CAACkhB,iBAAiB,CAAG,GAIhC,IAAK,IAFD84C,EAAQ,EAAE,CAELpqD,EAAI,EAAGqqD,EAAO,IAAI,CAACJ,WAAW,CAACh2D,MAAM,CAAE+L,EAAIqqD,EAAMrqD,IAGxD,IAAK,IAFDsqD,EAAa,IAAI,CAACL,WAAW,CAACjqD,EAAE,CAE3BmxB,EAAI,EAAGC,EAAOk5B,EAAWr2D,MAAM,CAAEk9B,EAAIC,EAAMD,IAAK,CAEvD,IAAIo5B,EAAO,IAAI7uD,GAAO8uD,IAAI,CAAC,CACzBtxD,MAAOoxD,CAAU,CAACn5B,EAAE,CAACj4B,KAAK,CAC1BH,OAAQuxD,CAAU,CAACn5B,EAAE,CAACj4B,KAAK,CAC3ByJ,KAAM2nD,CAAU,CAACn5B,EAAE,CAACvQ,CAAC,CAAG,EACxBle,IAAK4nD,CAAU,CAACn5B,EAAE,CAACtQ,CAAC,CAAG,EACvBsyB,QAAS,SACTC,QAAS,SACTnvC,KAAM,IAAI,CAAC2B,KAAK,GAElBwkD,EAAM76D,IAAI,CAACg7D,EACb,CAGE,IAAI,CAACP,mBAAmB,EAC1BI,CAAAA,EAAQ,IAAI,CAACK,kBAAkB,CAACL,EAAAA,EAGlC,IAAIxJ,EAAQ,IAAIllD,GAAOwrB,KAAK,CAACkjC,EAC7B,KAAI,CAACnE,MAAM,EAAIrF,EAAMpgD,GAAG,CAAC,SAAU,IAAI9E,GAAOitD,MAAM,CAAC,IAAI,CAAC1C,MAAM,GAChE,IAAI,CAAC71D,MAAM,CAACstB,IAAI,CAAC,sBAAuB,CAAEsJ,KAAM45B,CAAM,GACtD,IAAI,CAACxwD,MAAM,CAAC+Q,GAAG,CAACy/C,GAChB,IAAI,CAACxwD,MAAM,CAACstB,IAAI,CAAC,eAAgB,CAAEsJ,KAAM45B,CAAM,GAE/C,IAAI,CAACxwD,MAAM,CAACkxD,YAAY,CAAC,IAAI,CAAClxD,MAAM,CAACwuD,UAAU,EAC/C,IAAI,CAACoI,YAAY,GACjB,IAAI,CAAC52D,MAAM,CAACkhB,iBAAiB,CAAG+3C,EAChC,IAAI,CAACj5D,MAAM,CAAC+S,gBAAgB,EAC9B,EAMAsnD,mBAAoB,SAASL,CAAK,EAGhC,IAAuB1pD,EAAKV,EAAG4d,EAA3B8sC,EAAc,CAAE,EAEpB,IAAK1qD,EAAI,EAAG4d,EAAMwsC,EAAMn2D,MAAM,CAAE+L,EAAI4d,EAAK5d,IAElC0qD,CAAW,CADhBhqD,EAAM0pD,CAAK,CAACpqD,EAAE,CAAC2C,IAAI,CAAG,GAAKynD,CAAK,CAACpqD,EAAE,CAAC0C,GAAG,CAClB,EACnBgoD,CAAAA,CAAW,CAAChqD,EAAI,CAAG0pD,CAAK,CAACpqD,EAAE,EAG/B,IAAI2qD,EAAmB,EAAE,CACzB,IAAKjqD,KAAOgqD,EACVC,EAAiBp7D,IAAI,CAACm7D,CAAW,CAAChqD,EAAI,EAGxC,OAAOiqD,CACT,EAKAlO,OAAQ,SAAS6N,CAAU,EACzB,IAAkCtqD,EAAG4d,EAAjCrE,EAAM,IAAI,CAACnpB,MAAM,CAACwuD,UAAU,CAKhC,IAAK5+C,EAJDw5C,SAAS,CAAG,IAAI,CAAC5zC,KAAK,CAE1B,IAAI,CAAC4gD,iBAAiB,CAACjtC,GAElBvZ,EAAI,EAAG4d,EAAM0sC,EAAWr2D,MAAM,CAAE+L,EAAI4d,EAAK5d,IAAK,CACjD,IAAIwgB,EAAQ8pC,CAAU,CAACtqD,EAAE,MACI,IAAlBwgB,EAAMnnB,OAAO,EACtBkgB,CAAAA,EAAIqxC,WAAW,CAAGpqC,EAAMnnB,OAAO,EAEjCkgB,EAAIsxC,QAAQ,CAACrqC,EAAMI,CAAC,CAAEJ,EAAMK,CAAC,CAAEL,EAAMtnB,KAAK,CAAEsnB,EAAMtnB,KAAK,CACzD,CACAqgB,EAAIsgC,OAAO,EACb,EAKAiO,QAAS,WACP,IAAkC9nD,EAAGqqD,EAAjC9wC,EAAM,IAAI,CAACnpB,MAAM,CAACwuD,UAAU,CAKhC,IAAK5+C,EAJDw5C,SAAS,CAAG,IAAI,CAAC5zC,KAAK,CAE1B,IAAI,CAAC4gD,iBAAiB,CAACjtC,GAElBvZ,EAAI,EAAGqqD,EAAO,IAAI,CAACJ,WAAW,CAACh2D,MAAM,CAAE+L,EAAIqqD,EAAMrqD,IACpD,IAAI,CAACy8C,MAAM,CAAC,IAAI,CAACwN,WAAW,CAACjqD,EAAE,EAEjCuZ,EAAIsgC,OAAO,EACb,EAKAqQ,cAAe,SAASvW,CAAO,EAC7B,IAAI,CAACwW,gBAAgB,CAAG,EAAE,CAE1B,IAAIvpC,EAAGC,EAAG3nB,EAAgC8G,EAAzBopD,EAAS,IAAI,CAAClwD,KAAK,CAAG,EAEvC,IAAK8G,EAAI,EAAGA,EAAI,IAAI,CAAC4pD,OAAO,CAAE5pD,IAAK,CAEjC4gB,EAAIllB,GAAOyb,IAAI,CAAC+I,YAAY,CAACyzB,EAAQ/yB,CAAC,CAAGwoC,EAAQzV,EAAQ/yB,CAAC,CAAGwoC,GAC7DvoC,EAAInlB,GAAOyb,IAAI,CAAC+I,YAAY,CAACyzB,EAAQ9yB,CAAC,CAAGuoC,EAAQzV,EAAQ9yB,CAAC,CAAGuoC,GAG3DlwD,EADE,IAAI,CAAC4wD,gBAAgB,CACfpuD,GAAOyb,IAAI,CAAC+I,YAAY,CAE9B5nB,KAAKI,GAAG,CAAC,EAAG,IAAI,CAACmxD,QAAQ,CAAG,IAAI,CAACC,gBAAgB,EACjD,IAAI,CAACD,QAAQ,CAAG,IAAI,CAACC,gBAAgB,EAG/B,IAAI,CAACD,QAAQ,CAGvB,IAAIrpC,EAAQ,IAAI9kB,GAAOilB,KAAK,CAACC,EAAGC,EAChCL,CAAAA,EAAMtnB,KAAK,CAAGA,EAEV,IAAI,CAAC6wD,aAAa,EACpBvpC,CAAAA,EAAMnnB,OAAO,CAAGqC,GAAOyb,IAAI,CAAC+I,YAAY,CAAC,EAAG,KAAO,KAGrD,IAAI,CAACiqC,gBAAgB,CAAC56D,IAAI,CAACixB,EAC7B,CAEA,IAAI,CAACypC,WAAW,CAAC16D,IAAI,CAAC,IAAI,CAAC46D,gBAAgB,CAC7C,CACF,GAMAzuD,GAAOovD,YAAY,CAAGpvD,GAAOyb,IAAI,CAACG,WAAW,CAAC5b,GAAOwrD,WAAW,CAA8C,CAE5G6D,cAAe,WAEb,IAEIC,EAAgBtvD,GAAOyb,IAAI,CAACoQ,mBAAmB,GAC/C0jC,EAAaD,EAAcxxC,UAAU,CAAC,MAU1C,OARAwxC,EAAc9xD,KAAK,CAAG8xD,EAAcjyD,MAAM,CAAG8wD,GAE7CoB,EAAWzR,SAAS,CAAG,IAAI,CAAC5zC,KAAK,CACjCqlD,EAAWtR,SAAS,GACpBsR,EAAWrR,GAAG,CAACiQ,GAAcA,GAAcA,GAAc,EAAGvxD,EAAAA,KAAKsnB,EAAE,CAAM,IACzEqrC,EAAW9H,SAAS,GACpB8H,EAAWhnD,IAAI,GAER+mD,CACT,EAEAE,sBAAuB,WACrB,OAAOC,OAAO,IAAI,CAACJ,aAAa,EAAE3lD,OAAO,CAAC,aAAc,IAAM,IAAI,CAACQ,KAAK,CAAG,IAC7E,EAMAwlD,WAAY,SAAS7xC,CAAG,EACtB,OAAOA,EAAI8xC,aAAa,CAAC,IAAI,CAAC9rC,MAAM,EAAI,IAAI,CAACwrC,aAAa,GAAI,SAChE,EAMA5K,gBAAiB,SAAS5mC,CAAG,EAC3B,IAAI,CAACwf,SAAS,CAAC,kBAAmBxf,GAClCA,EAAIkgC,WAAW,CAAG,IAAI,CAAC2R,UAAU,CAAC7xC,EACpC,EAKAivC,WAAY,SAASl4B,CAAQ,EAC3B,IAAItJ,EAAO,IAAI,CAAC+R,SAAS,CAAC,aAAczI,GACpCg7B,EAAUtkC,EAAKukC,iBAAiB,GAAGnoB,SAAS,CAACpc,EAAK5U,WAAW,CAAG,GAOpE,OALA4U,EAAKkF,MAAM,CAAG,IAAIxwB,GAAO8jB,OAAO,CAAC,CAC/BD,OAAQ,IAAI,CAACA,MAAM,EAAI,IAAI,CAAC2rC,qBAAqB,GACjDzW,QAAS,CAAC6W,EAAQ1qC,CAAC,CACnB8zB,QAAS,CAAC4W,EAAQzqC,CAAC,GAEdmG,CACT,CACF,GACC,WAEC,IAAI2S,EAAaj+B,GAAOyb,IAAI,CAACwiB,UAAU,CACnCzjB,EAAmBxa,GAAOyb,IAAI,CAACjB,gBAAgB,CAC/CikB,EAAez+B,GAAOyb,IAAI,CAACgjB,YAAY,CAsxC3C,IAAK,IAAIrc,KA7uCTpiB,GAAO8U,MAAM,CAAG9U,GAAOyb,IAAI,CAACG,WAAW,CAAC5b,GAAOghD,YAAY,CAAwC,CAQjGtjB,WAAY,SAASqC,CAAE,CAAE5nC,CAAO,EAC9BA,GAAYA,CAAAA,EAAU,CAAE,GACxB,IAAI,CAAC+oD,mBAAmB,CAAG,IAAI,CAACC,cAAc,CAACn5C,IAAI,CAAC,IAAI,EACxD,IAAI,CAACo5C,qBAAqB,CAAG,IAAI,CAAC35C,gBAAgB,CAACO,IAAI,CAAC,IAAI,EAC5D,IAAI,CAACq5C,WAAW,CAACthB,EAAI5nC,GACrB,IAAI,CAAC23D,gBAAgB,GACrB,IAAI,CAACC,kBAAkB,EACzB,EASAxY,eAAqB,GAcrBD,YAAuB,WASvB0Y,gBAAwB,GASxBC,iBAAwB,GAWxBC,YAAuB,SAWvBlV,aAAwB,WAOxBsH,YAAwB,GAOxB6N,UAAwB,GAYxBC,aAAwB,WAcxBC,gBAA2B,KAO3BC,eAAwB,2BAOxBC,mBAAwB,EAAE,CAO1BC,qBAAwB,2BAOxBC,mBAAwB,EAOxBC,wBAAyB,GAOzBj5C,YAAwB,OAOxBC,WAAwB,OAOxBi5C,cAAwB,UAOxBC,kBAAwB,YAQxBC,iBAA0B,cAO1BC,eAAwB,mBAOxBn6C,mBAAwB,GAOxBE,oBAAwB,EAWxBk6C,eAAwB,GAUxBl6D,cAAwB,GAQxB+f,uBAAwB,GAQxB4kC,UAAW,EASXC,cAAe,KAQfuV,gBAAiB,GAQjBC,eAAgB,GAQhBC,gBAAiB,GAMjBC,QAAS,EAAE,CAOXC,oBAAqB,GAOrBC,eAAgB,KAOhBC,gBAAiB,EAAE,CAKnBxB,iBAAkB,WAChB,IAAI,CAACyB,iBAAiB,CAAG,KACzB,IAAI,CAACC,cAAc,CAAG,KACtB,IAAI,CAACC,mBAAmB,GACxB,IAAI,CAACC,kBAAkB,GACvB,IAAI,CAACC,mBAAmB,GAExB,IAAI,CAACpP,kBAAkB,GAEvB,IAAI,CAACt4C,gBAAgB,CAAGjK,GAAOwrD,WAAW,EAAI,IAAIxrD,GAAOwrD,WAAW,CAAC,IAAI,EAEzE,IAAI,CAACj0C,UAAU,EACjB,EAOAq6C,uBAAwB,WACtB,IACIl5D,EAAQm5D,EAAcC,EADtBC,EAAgB,IAAI,CAACxqD,gBAAgB,GAGzC,GAAIwqD,EAAcx5D,MAAM,CAAG,GAAK,CAAC,IAAI,CAACqe,sBAAsB,CAAE,CAC5Di7C,EAAe,EAAE,CACjBC,EAAqB,EAAE,CACvB,IAAK,IAAIxtD,EAAI,EAAG/L,EAAS,IAAI,CAACmE,QAAQ,CAACnE,MAAM,CAAE+L,EAAI/L,EAAQ+L,IACzD5L,EAAS,IAAI,CAACgE,QAAQ,CAAC4H,EAAE,CACrBytD,KAAAA,EAAcrwC,OAAO,CAAChpB,GACxBm5D,EAAah+D,IAAI,CAAC6E,GAGlBo5D,EAAmBj+D,IAAI,CAAC6E,EAGxBq5D,CAAAA,EAAcx5D,MAAM,CAAG,GACzB,KAAI,CAACwsD,aAAa,CAACroD,QAAQ,CAAGo1D,CAAAA,EAEhCD,EAAah+D,IAAI,CAACiuB,KAAK,CAAC+vC,EAAcC,EACxC,MAEED,EAAe,IAAI,CAACn1D,QAAQ,CAE9B,OAAOm1D,CACT,EAOA97C,UAAW,YACL,IAAI,CAACi8C,eAAe,EAAK,IAAI,CAACR,cAAc,EAAK,IAAI,CAAC36D,aAAa,GACrE,IAAI,CAAC+uD,YAAY,CAAC,IAAI,CAAC1C,UAAU,EACjC,IAAI,CAAC8O,eAAe,CAAG,IAErB,IAAI,CAAC3N,cAAc,GACrB,IAAI,CAAC4N,cAAc,CAAC,IAAI,CAAC/O,UAAU,EACnC,IAAI,CAACmB,cAAc,CAAG,IAExB,IAAI4B,EAAiB,IAAI,CAACjD,gBAAgB,CAE1C,OADA,IAAI,CAACkD,YAAY,CAACD,EAAgB,IAAI,CAAC2L,sBAAsB,IACtD,IAAI,EAGbK,eAAgB,SAASp0C,CAAG,EAC1BA,EAAIggC,IAAI,GACJ,IAAI,CAAChnD,aAAa,EAAI,IAAI,CAAC2tD,mBAAmB,GAChD,IAAI,CAACv6C,gBAAgB,EAAI,IAAI,CAACA,gBAAgB,CAACmiD,OAAO,GACtD,IAAI,CAAC4F,eAAe,CAAG,IAGrB,IAAI,CAAC7B,SAAS,EAAI,IAAI,CAACqB,cAAc,GACvC,IAAI,CAACU,cAAc,CAACr0C,GACpB,IAAI,CAACm0C,eAAe,CAAG,IAEzBn0C,EAAIsgC,OAAO,EACb,EAQAgU,UAAW,WACT,IAAIt0C,EAAM,IAAI,CAACqlC,UAAU,CAIzB,OAHA,IAAI,CAAC0C,YAAY,CAAC/nC,GAClB,IAAI,CAACo0C,cAAc,CAACp0C,GACpB,IAAI,CAACmE,IAAI,CAAC,gBACH,IAAI,EAMbowC,kBAAmB,SAAU15D,CAAM,CAAEu/C,CAAO,EAC1C,IAAIpmB,EAAIn5B,EAAOw3B,mBAAmB,GAC9BmiC,EAAYryD,GAAOyb,IAAI,CAAC0M,eAAe,CAAC0J,GACxCygC,EAAa,IAAI,CAACC,iBAAiB,CAACta,GACxC,OAAOj4C,GAAOyb,IAAI,CAACE,cAAc,CAAC22C,EAAYD,EAChD,EASAG,oBAAqB,SAAU35D,CAAM,CAAEqsB,CAAC,CAAEC,CAAC,EAGzC,GAAItsB,EAAO4tD,WAAW,IAAM5tD,EAAOquD,YAAY,EAAIruD,IAAW,IAAI,CAACksD,aAAa,CAAE,CAChF,IAAI0N,EAAoB,IAAI,CAACL,iBAAiB,CAACv5D,EAAQ,CAACqsB,EAAGA,EAAGC,EAAGA,CAAC,GAC9DutC,EAAkB91D,KAAKI,GAAG,CAACnE,EAAOsuD,iBAAiB,CAAIsL,EAAkBvtC,CAAC,CAAGrsB,EAAOmuD,KAAK,CAAG,GAC5F2L,EAAkB/1D,KAAKI,GAAG,CAACnE,EAAOuuD,iBAAiB,CAAIqL,EAAkBttC,CAAC,CAAGtsB,EAAOouD,KAAK,CAAG,GAE5F35B,EAAgBttB,GAAOyb,IAAI,CAAC6R,aAAa,CAC3Cz0B,EAAO+5D,aAAa,CAAEh2D,KAAKC,KAAK,CAAC61D,GAAkB91D,KAAKC,KAAK,CAAC81D,GAAkB,IAAI,CAAC97C,mBAAmB,EAE1G,OAAOyW,CACT,CAEA,IAAIzP,EAAM,IAAI,CAACg1C,YAAY,CACvBC,EAAgBj6D,EAAOk6D,wBAAwB,CAAE3tC,EAAI,IAAI,CAACy8B,iBAAiB,CAE/EhpD,EAAOk6D,wBAAwB,CAAG,GAElC,IAAI,CAACnN,YAAY,CAAC/nC,GAElBA,EAAIggC,IAAI,GACRhgC,EAAI+J,SAAS,CAACxC,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,EAChDvsB,EAAOkoD,MAAM,CAACljC,GACdA,EAAIsgC,OAAO,GAEXtlD,EAAOk6D,wBAAwB,CAAGD,EAElC,IAAIxlC,EAAgBttB,GAAOyb,IAAI,CAAC6R,aAAa,CAC3CzP,EAAKqH,EAAGC,EAAG,IAAI,CAACtO,mBAAmB,EAErC,OAAOyW,CACT,EAOA0lC,uBAAwB,SAASlrD,CAAC,EAUhC,OAPI5K,MAAMC,OAAO,CAAC,IAAI,CAACizD,YAAY,EACX,CAAC,CAAC,IAAI,CAACA,YAAY,CAAC3+C,IAAI,CAAC,SAASzM,CAAG,EAAI,MAAO8C,CAAW,IAAXA,CAAC,CAAC9C,EAAI,GAGtD8C,CAAC,CAAC,IAAI,CAACsoD,YAAY,CAAC,EAW9C6C,sBAAuB,SAAUnrD,CAAC,CAAEjP,CAAM,EACxC,IAAIk5D,EAAgB,IAAI,CAACxqD,gBAAgB,GACrCu9C,EAAe,IAAI,CAACC,aAAa,CAErC,MACE,CAAClsD,GAEAA,GACCisD,GACAiN,EAAcx5D,MAAM,CAAG,GACvBw5D,KAAAA,EAAcrwC,OAAO,CAAC7oB,IACtBisD,IAAiBjsD,GACjB,CAAC,IAAI,CAACm6D,sBAAsB,CAAClrD,IAE9BjP,GAAU,CAACA,EAAOqO,OAAO,EAEzBrO,GACC,CAACA,EAAOuP,UAAU,EAClB08C,GACAA,IAAiBjsD,CAEvB,EAYAq6D,uBAAwB,SAAUr6D,CAAM,CAAEs6D,CAAM,CAAEtnD,CAAM,MAKlDunD,EAJJ,GAAKv6D,EAaL,MAPIs6D,UAAAA,GAAsBA,WAAAA,GAAuBA,WAAAA,GAAuBA,aAAAA,EACtEC,EAAkB,IAAI,CAACpD,eAAe,EAAIn3D,EAAOm3D,eAAe,CAE9C,WAAXmD,GACPC,CAAAA,EAAkB,IAAI,CAACnD,gBAAgB,EAAIp3D,EAAOo3D,gBAAgB,EAG7DmD,EAAkB,CAACvnD,EAASA,CACrC,EAMAwnD,qBAAsB,SAASx6D,CAAM,CAAE6/C,CAAM,EAC3C,IAAI3zB,EAAS,CACXG,EAAGrsB,EAAO4+C,OAAO,CACjBtyB,EAAGtsB,EAAO6+C,OAAO,EAgBnB,MAbIgB,OAAAA,GAAmBA,OAAAA,GAAmBA,OAAAA,EACxC3zB,EAAOG,CAAC,CAAG,QAEJwzB,CAAAA,OAAAA,GAAmBA,OAAAA,GAAmBA,OAAAA,CAAW,GACxD3zB,CAAAA,EAAOG,CAAC,CAAG,QAGTwzB,OAAAA,GAAmBA,OAAAA,GAAmBA,OAAAA,EACxC3zB,EAAOI,CAAC,CAAG,SAEJuzB,CAAAA,OAAAA,GAAmBA,OAAAA,GAAmBA,OAAAA,CAAW,GACxD3zB,CAAAA,EAAOI,CAAC,CAAG,OAENJ,CACT,EASAuuC,qBAAsB,SAASC,CAAe,CAAE7a,CAAM,CAAE5wC,CAAC,CAAEjP,CAAM,EAC/D,GAAI,CAAC6/C,GAAU,CAAC6a,EACd,MAAO,OAET,IAAIxc,EAAUl+C,EAAOyiB,QAAQ,CAACo9B,EAAO,CACrC,OAAO3B,EAAQqI,aAAa,CAACt3C,EAAGivC,EAASl+C,EAC3C,EAOA26D,uBAAwB,SAAU1rD,CAAC,CAAEjP,CAAM,CAAE06D,CAAe,EAC1D,GAAK16D,GAIL,IAAIo/C,EAAU,IAAI,CAACha,UAAU,CAACn2B,GAAI4wC,EAAS7/C,EAAO46D,QAAQ,CACtD1c,EAAUl+C,EAAOyiB,QAAQ,CAACo9B,EAAO,CACjCP,EAAgBob,GAAoB7a,EAClC3B,EAAQiI,gBAAgB,CAACl3C,EAAGjP,EAAQk+C,GAAW/2C,GAAOo9C,aAAa,CAACT,WAAW,CACjFwW,EAAS,IAAI,CAACG,oBAAoB,CAACC,EAAiB7a,EAAQ5wC,EAAGjP,GAC/DksB,EAAS,IAAI,CAACsuC,oBAAoB,CAACx6D,EAAQ6/C,GAC3C7sC,EAAS/D,CAAC,CAAC,IAAI,CAACooD,WAAW,CAAC,CAC5BtoC,EAAY,CACV/uB,OAAQA,EACRs6D,OAAQA,EACRhb,cAAeA,EACfO,OAAQA,EACRlyC,OAAQ3N,EAAO2N,MAAM,CACrBC,OAAQ5N,EAAO4N,MAAM,CACrB6lB,MAAOzzB,EAAOyzB,KAAK,CACnBC,MAAO1zB,EAAO0zB,KAAK,CAEnBwsB,QAASd,EAAQ/yB,CAAC,CAAGrsB,EAAOoO,IAAI,CAChC+xC,QAASf,EAAQ9yB,CAAC,CAAGtsB,EAAOmO,GAAG,CAC/BywC,QAAS1yB,EAAOG,CAAC,CACjBwyB,QAAS3yB,EAAOI,CAAC,CACjBk2B,GAAIpD,EAAQ/yB,CAAC,CACbk2B,GAAInD,EAAQ9yB,CAAC,CACbuuC,MAAOzb,EAAQ/yB,CAAC,CAChByuC,MAAO1b,EAAQ9yB,CAAC,CAIhBwH,MAAOnS,EAAiB3hB,EAAOurB,KAAK,EAEpC5mB,MAAO3E,EAAO2E,KAAK,CAAG3E,EAAO2N,MAAM,CACnCsF,SAAUhE,EAAEgE,QAAQ,CACpBD,OAAQA,EACR2uC,SAAUx6C,GAAOyb,IAAI,CAAC4R,mBAAmB,CAACx0B,EAC5C,EAEA,IAAI,CAACq6D,sBAAsB,CAACr6D,EAAQs6D,EAAQtnD,KAC9C+b,EAAU6vB,OAAO,CAAG,SACpB7vB,EAAU8vB,OAAO,CAAG,UAEtB9vB,EAAU4yB,QAAQ,CAAC/C,OAAO,CAAG1yB,EAAOG,CAAC,CACrC0C,EAAU4yB,QAAQ,CAAC9C,OAAO,CAAG3yB,EAAOI,CAAC,CACrC,IAAI,CAACosC,iBAAiB,CAAG3pC,EACzB,IAAI,CAACgsC,gBAAgB,CAAC9rD,GACxB,EAOA+rD,UAAW,SAAU/6D,CAAK,EACxB,IAAI,CAACmqD,aAAa,CAACxnD,KAAK,CAACq4D,MAAM,CAAGh7D,CACpC,EAMAo5D,eAAgB,SAAUr0C,CAAG,EAC3B,IAAIk2C,EAAW,IAAI,CAACvC,cAAc,CAC9BwC,EAAgB,IAAIh0D,GAAOilB,KAAK,CAAC8uC,EAAS1Y,EAAE,CAAE0Y,EAAS3Y,EAAE,EACzD/pB,EAAQrxB,GAAOyb,IAAI,CAACE,cAAc,CAACq4C,EAAe,IAAI,CAACnS,iBAAiB,EACxEoS,EAAiB,IAAIj0D,GAAOilB,KAAK,CAAC8uC,EAAS1Y,EAAE,CAAG0Y,EAAS9sD,IAAI,CAAE8sD,EAAS3Y,EAAE,CAAG2Y,EAAS/sD,GAAG,EACzFktD,EAASl0D,GAAOyb,IAAI,CAACE,cAAc,CAACs4C,EAAgB,IAAI,CAACpS,iBAAiB,EAC1E/5B,EAAOlrB,KAAKG,GAAG,CAACs0B,EAAMnM,CAAC,CAAEgvC,EAAOhvC,CAAC,EACjC+C,EAAOrrB,KAAKG,GAAG,CAACs0B,EAAMlM,CAAC,CAAE+uC,EAAO/uC,CAAC,EACjC4C,EAAOnrB,KAAKI,GAAG,CAACq0B,EAAMnM,CAAC,CAAEgvC,EAAOhvC,CAAC,EACjCgD,EAAOtrB,KAAKI,GAAG,CAACq0B,EAAMlM,CAAC,CAAE+uC,EAAO/uC,CAAC,EACjCgvC,EAAe,IAAI,CAAC1D,kBAAkB,CAAG,CAEzC,KAAI,CAACH,cAAc,GACrBzyC,EAAIigC,SAAS,CAAG,IAAI,CAACwS,cAAc,CACnCzyC,EAAIsxC,QAAQ,CAACrnC,EAAMG,EAAMF,EAAOD,EAAMI,EAAOD,IAG1C,IAAI,CAACwoC,kBAAkB,EAAK,IAAI,CAACD,oBAAoB,GAG1D3yC,EAAImgC,SAAS,CAAG,IAAI,CAACyS,kBAAkB,CACvC5yC,EAAIkgC,WAAW,CAAG,IAAI,CAACyS,oBAAoB,CAE3C1oC,GAAQqsC,EACRlsC,GAAQksC,EACRpsC,GAAQosC,EACRjsC,GAAQisC,EAERn0D,GAAOmW,MAAM,CAACC,SAAS,CAACg+C,YAAY,CAACjyC,IAAI,CAAC,IAAI,CAAEtE,EAAK,IAAI,CAAC0yC,kBAAkB,EAC5E1yC,EAAI0gC,UAAU,CAACz2B,EAAMG,EAAMF,EAAOD,EAAMI,EAAOD,GACjD,EAWAosC,WAAY,SAAUvsD,CAAC,CAAEwsD,CAAS,EAChC,IAAI,IAAI,CAACvD,cAAc,EAIvB,IAIIwD,EAAcC,EAHdvc,EAAU,IAAI,CAACha,UAAU,CAACn2B,EADb,IAEbg9C,EAAe,IAAI,CAACC,aAAa,CACjC0P,EAAW,IAAI,CAACltD,gBAAgB,GAEhC24C,EAAUzhB,EAAa32B,GACvB4sD,EAAsBD,EAAUl8D,MAAM,CAAG,GAAK,CAAC+7D,GAAcG,IAAAA,EAASl8D,MAAM,CAQhF,GAHA,IAAI,CAAC44D,OAAO,CAAG,EAAE,CAGbuD,GAAuB5P,EAAa6P,iBAAiB,CAAC1c,EAASiI,IAG/DuU,EAASl8D,MAAM,CAAG,GAAK,CAAC+7D,GAAaxP,IAAiB,IAAI,CAAC8P,sBAAsB,CAAC,CAAC9P,EAAa,CAAE7M,GAFpG,OAAO6M,EAKT,GAAI2P,IAAAA,EAASl8D,MAAM,EACjBusD,IAAiB,IAAI,CAAC8P,sBAAsB,CAAC,CAAC9P,EAAa,CAAE7M,GAAU,CACvE,GAAI,CAAC,IAAI,CAACrhC,sBAAsB,CAC9B,OAAOkuC,EAGPyP,EAAezP,EACf0P,EAAmB,IAAI,CAACrD,OAAO,CAC/B,IAAI,CAACA,OAAO,CAAG,EAAE,CAGrB,IAAIt4D,EAAS,IAAI,CAAC+7D,sBAAsB,CAAC,IAAI,CAACl4D,QAAQ,CAAEu7C,GAKxD,OAJInwC,CAAC,CAAC,IAAI,CAACuoD,eAAe,CAAC,EAAIx3D,GAAU07D,GAAgB17D,IAAW07D,IAClE17D,EAAS07D,EACT,IAAI,CAACpD,OAAO,CAAGqD,GAEV37D,EACT,EAUAg8D,aAAc,SAAS5c,CAAO,CAAE/0B,CAAG,CAAE4xC,CAAa,EAChD,GAAI5xC,GACAA,EAAIu7B,OAAO,EACXv7B,EAAIhc,OAAO,EAGXgc,EAAI6xC,aAAa,CAAC9c,MAEf,IAAI,CAACthC,kBAAkB,GAAIuM,EAAIvM,kBAAkB,EAAMuM,EAAI8xC,SAAS,EAEnE,CADgB,IAAI,CAACxC,mBAAmB,CAACtvC,EAAK4xC,EAAc5vC,CAAC,CAAE4vC,EAAc3vC,CAAC,GAMlF,MAAO,EAGb,EASAyvC,uBAAwB,SAASttD,CAAO,CAAE2wC,CAAO,EAK/C,IAHA,IAAIp/C,EAA4Bo8D,EAApB3wD,EAAIgD,EAAQ/O,MAAM,CAGvB+L,KAAK,CACV,IAAI4wD,EAAa5tD,CAAO,CAAChD,EAAE,CACvB6wD,EAAeD,EAAWhQ,KAAK,CACjC,IAAI,CAACkN,iBAAiB,CAAC8C,EAAWhQ,KAAK,CAAEjN,GAAWA,EACtD,GAAI,IAAI,CAAC4c,YAAY,CAACM,EAAcD,EAAYjd,GAAU,CAEpDp/C,CADJA,EAASyO,CAAO,CAAChD,EAAE,EACR8wD,cAAc,EAAIv8D,aAAkBmH,GAAOwrB,KAAK,EACzDypC,CAAAA,EAAY,IAAI,CAACL,sBAAsB,CAAC/7D,EAAO6D,QAAQ,CAAEu7C,EAAAA,GAC5C,IAAI,CAACkZ,OAAO,CAACt9D,IAAI,CAACohE,GAEjC,KACF,CACF,CACA,OAAOp8D,CACT,EAOA05D,kBAAmB,SAASta,CAAO,EACjC,OAAOj4C,GAAOyb,IAAI,CAACE,cAAc,CAC/Bs8B,EACAj4C,GAAOyb,IAAI,CAAC0M,eAAe,CAAC,IAAI,CAAC05B,iBAAiB,EAEtD,EAoBA5jB,WAAY,SAAUn2B,CAAC,CAAEutD,CAAU,EAEjC,GAAI,IAAI,CAACC,gBAAgB,EAAI,CAACD,EAC5B,OAAO,IAAI,CAACC,gBAAgB,CAE9B,GAAI,IAAI,CAACC,QAAQ,EAAIF,EACnB,OAAO,IAAI,CAACE,QAAQ,CAGtB,IAKIC,EALAvd,EAAUha,EAAWn2B,GACrBm7C,EAAgB,IAAI,CAACA,aAAa,CAClC1oB,EAAS0oB,EAAc1gB,qBAAqB,GAC5CkzB,EAAcl7B,EAAO/8B,KAAK,EAAI,EAC9Bk4D,EAAen7B,EAAOl9B,MAAM,EAAI,EAGhC,EAACo4D,GAAe,CAACC,CAAAA,IACf,QAASn7B,GAAU,WAAYA,GACjCm7B,CAAAA,EAAe94D,KAAKkf,GAAG,CAAEye,EAAOvzB,GAAG,CAAGuzB,EAAOoc,MAAM,GAEjD,UAAWpc,GAAU,SAAUA,GACjCk7B,CAAAA,EAAc74D,KAAKkf,GAAG,CAAEye,EAAOqc,KAAK,CAAGrc,EAAOtzB,IAAI,IAItD,IAAI,CAACsQ,UAAU,GACf0gC,EAAQ/yB,CAAC,CAAG+yB,EAAQ/yB,CAAC,CAAG,IAAI,CAACi+B,OAAO,CAACl8C,IAAI,CACzCgxC,EAAQ9yB,CAAC,CAAG8yB,EAAQ9yB,CAAC,CAAG,IAAI,CAACg+B,OAAO,CAACn8C,GAAG,CACnCquD,GACHpd,CAAAA,EAAU,IAAI,CAACsa,iBAAiB,CAACta,EAAAA,EAGnC,IAAI0d,EAAgB,IAAI,CAAC/S,gBAAgB,GAiBzC,OAhBsB,IAAlB+S,IACF1d,EAAQ/yB,CAAC,EAAIywC,EACb1d,EAAQ9yB,CAAC,EAAIwwC,GAKbH,EAFEC,IAAAA,GAAqBC,IAAAA,EAEZ,CAAEl4D,MAAO,EAAGH,OAAQ,CAAE,EAGtB,CACTG,MAAOylD,EAAczlD,KAAK,CAAGi4D,EAC7Bp4D,OAAQ4lD,EAAc5lD,MAAM,CAAGq4D,CACjC,EAGK,CACLxwC,EAAG+yB,EAAQ/yB,CAAC,CAAGswC,EAASh4D,KAAK,CAC7B2nB,EAAG8yB,EAAQ9yB,CAAC,CAAGqwC,EAASn4D,MAAM,CAElC,EAMAq0D,mBAAoB,WAClB,IAAIkE,EAAmB,IAAI,CAAC7S,aAAa,CAACtpD,SAAS,CAACiQ,OAAO,CAAC,qBAAsB,IAC9Eq5C,EAAgB,IAAI,CAACA,aAAa,CAAEE,EAAgB,IAAI,CAACA,aAAa,CAGtEA,EACFA,EAAcxpD,SAAS,CAAG,IAG1BwpD,EAAgB,IAAI,CAACQ,oBAAoB,GACzC,IAAI,CAACR,aAAa,CAAGA,GAEvBjjD,GAAOyb,IAAI,CAAC+lB,QAAQ,CAACyhB,EAAe,gBAAkB2S,GAEtD,IAAI,CAACjR,SAAS,CAAC76B,WAAW,CAACm5B,GAE3B,IAAI,CAAC4S,gBAAgB,CAAC9S,EAAeE,GACrC,IAAI,CAACU,iBAAiB,CAACV,GACvB,IAAI,CAACC,UAAU,CAAGD,EAAcnlC,UAAU,CAAC,KAC7C,EAMAg4C,cAAe,WACb,OAAO,IAAI,CAAC5S,UAAU,EAMxB6M,mBAAoB,WAClB,IAAI,CAACrL,aAAa,CAAG,IAAI,CAACjB,oBAAoB,GAC9C,IAAI,CAACiB,aAAa,CAAC1kB,YAAY,CAAC,QAAS,IAAI,CAACxiC,KAAK,EACnD,IAAI,CAACknD,aAAa,CAAC1kB,YAAY,CAAC,SAAU,IAAI,CAAC3iC,MAAM,EACrD,IAAI,CAACw1D,YAAY,CAAG,IAAI,CAACnO,aAAa,CAAC5mC,UAAU,CAAC,KACpD,EAKA2zC,oBAAqB,WACnB,IAAI,CAAC9M,SAAS,CAAG3kD,GAAOyb,IAAI,CAACgmB,WAAW,CAAC,IAAI,CAACshB,aAAa,CAAE,MAAO,CAClE,MAAS,IAAI,CAAC+N,cAAc,GAE9B9wD,GAAOyb,IAAI,CAACujB,QAAQ,CAAC,IAAI,CAAC2lB,SAAS,CAAE,CACnCnnD,MAAO,IAAI,CAACA,KAAK,CAAG,KACpBH,OAAQ,IAAI,CAACA,MAAM,CAAG,KACtBwsB,SAAU,UACZ,GACA7pB,GAAOyb,IAAI,CAACmlB,uBAAuB,CAAC,IAAI,CAAC+jB,SAAS,CACpD,EAMAhB,kBAAmB,SAAUvrD,CAAO,EAClC,IAAIoF,EAAQ,IAAI,CAACA,KAAK,EAAIpF,EAAQoF,KAAK,CACnCH,EAAS,IAAI,CAACA,MAAM,EAAIjF,EAAQiF,MAAM,CAE1C2C,GAAOyb,IAAI,CAACujB,QAAQ,CAAC5mC,EAAS,CAC5ByxB,SAAU,WACVrsB,MAAOA,EAAQ,KACfH,OAAQA,EAAS,KACjB4J,KAAM,EACND,IAAK,EACL,eAAgB,IAAI,CAAC46C,mBAAmB,CAAG,eAAiB,OAC5D,mBAAoB,IAAI,CAACA,mBAAmB,CAAG,eAAiB,MAClE,GACAxpD,EAAQoF,KAAK,CAAGA,EAChBpF,EAAQiF,MAAM,CAAGA,EACjB2C,GAAOyb,IAAI,CAACmlB,uBAAuB,CAACxoC,EACtC,EAQAy9D,iBAAkB,SAAUE,CAAM,CAAEC,CAAI,EACtCA,EAAKv6D,KAAK,CAACyjC,OAAO,CAAG62B,EAAOt6D,KAAK,CAACyjC,OAAO,EAO3C+2B,oBAAqB,WACnB,OAAO,IAAI,CAAC/S,UAAU,EAOxBgT,oBAAqB,WACnB,OAAO,IAAI,CAACjT,aAAa,EAO3Bj9C,gBAAiB,WACf,OAAO,IAAI,CAAC++C,aAAa,EAO3Bx9C,iBAAkB,WAChB,IAAI4uD,EAAS,IAAI,CAACpR,aAAa,QAC/B,EACE,oBAAIoR,EAAOv8D,IAAI,EAA0Bu8D,EAAOz5D,QAAQ,CAC/Cy5D,EAAOz5D,QAAQ,CAACwH,KAAK,CAAC,GAGtB,CAACiyD,EAAO,CAGZ,EAAE,EAOXxzC,iBAAkB,SAASO,CAAG,EAExBA,IAAQ,IAAI,CAAC6hC,aAAa,GAC5B,IAAI,CAAC/iC,IAAI,CAAC,2BAA4B,CAAEnpB,OAAQqqB,CAAI,GACpD,IAAI,CAACkzC,oBAAoB,GACzB,IAAI,CAACp0C,IAAI,CAAC,oBAAqB,CAAEnpB,OAAQqqB,CAAI,GAC7CA,EAAIlB,IAAI,CAAC,eAEPkB,IAAQ,IAAI,CAACmuC,cAAc,GAC7B,IAAI,CAACA,cAAc,CAAG,KACtB,IAAI,CAACC,eAAe,CAAG,EAAE,EAE3B,IAAI,CAACj0B,SAAS,CAAC,mBAAoBna,EACrC,EAOAmzC,qBAAsB,SAASC,CAAU,CAAExuD,CAAC,EAC1C,IAAIyuD,EAAmB,GAAOjvD,EAAU,IAAI,CAACC,gBAAgB,GACzDivD,EAAQ,EAAE,CAAEC,EAAU,EAAE,CAC5BH,EAAWrvC,OAAO,CAAC,SAASyvC,CAAS,EACA,KAA/BpvD,EAAQoa,OAAO,CAACg1C,KAClBH,EAAmB,GACnBG,EAAU10C,IAAI,CAAC,aAAc,CAC3Bla,EAAGA,EACHjP,OAAQ69D,CACV,GACAD,EAAQ5iE,IAAI,CAAC6iE,GAEjB,GACApvD,EAAQ2f,OAAO,CAAC,SAASvuB,CAAM,EACM,KAA/B49D,EAAW50C,OAAO,CAAChpB,KACrB69D,EAAmB,GACnB79D,EAAOspB,IAAI,CAAC,WAAY,CACtBla,EAAGA,EACHjP,OAAQH,CACV,GACA89D,EAAM3iE,IAAI,CAAC6E,GAEf,GACI49D,EAAW/9D,MAAM,CAAG,GAAK+O,EAAQ/O,MAAM,CAAG,EAC5Cg+D,GAAoB,IAAI,CAACv0C,IAAI,CAAC,oBAAqB,CACjDla,EAAGA,EACH6uD,SAAUH,EACVI,WAAYH,CACd,GAEOnvD,EAAQ/O,MAAM,CAAG,EACxB,IAAI,CAACypB,IAAI,CAAC,oBAAqB,CAC7Bla,EAAGA,EACH6uD,SAAUH,CACZ,GAEOF,EAAW/9D,MAAM,CAAG,GAC3B,IAAI,CAACypB,IAAI,CAAC,oBAAqB,CAC7Bla,EAAGA,EACH8uD,WAAYH,CACd,EAEJ,EASA5vD,gBAAiB,SAAUnO,CAAM,CAAEoP,CAAC,EAClC,IAAI+uD,EAAiB,IAAI,CAACtvD,gBAAgB,GAG1C,OAFA,IAAI,CAACuvD,gBAAgB,CAACp+D,EAAQoP,GAC9B,IAAI,CAACuuD,oBAAoB,CAACQ,EAAgB/uD,GACnC,IAAI,EAabgvD,iBAAkB,SAASp+D,CAAM,CAAEoP,CAAC,QAClC,EAAI,IAAI,CAACi9C,aAAa,GAAKrsD,GAGvB,CAAC,IAAI,CAAC09D,oBAAoB,CAACtuD,EAAGpP,IAG9BA,EAAOq+D,QAAQ,CAAC,CAAEjvD,EAAGA,CAAE,MAG3B,IAAI,CAACi9C,aAAa,CAAGrsD,EACd,GACT,EAYA09D,qBAAsB,SAAStuD,CAAC,CAAEpP,CAAM,EACtC,IAAIwqB,EAAM,IAAI,CAAC6hC,aAAa,CAC5B,GAAI7hC,EAAK,CAEP,GAAIA,EAAI8zC,UAAU,CAAC,CAAElvD,EAAGA,EAAGpP,OAAQA,CAAO,GACxC,MAAO,EAET,KAAI,CAACqsD,aAAa,CAAG,IACvB,CACA,MAAO,EACT,EAWA19C,oBAAqB,SAAUS,CAAC,EAC9B,IAAI+uD,EAAiB,IAAI,CAACtvD,gBAAgB,GAAIu9C,EAAe,IAAI,CAAC9+C,eAAe,GAMjF,OALI6wD,EAAet+D,MAAM,EACvB,IAAI,CAACypB,IAAI,CAAC,2BAA4B,CAAEnpB,OAAQisD,EAAch9C,EAAGA,CAAE,GAErE,IAAI,CAACsuD,oBAAoB,CAACtuD,GAC1B,IAAI,CAACuuD,oBAAoB,CAACQ,EAAgB/uD,GACnC,IAAI,EAQbwP,QAAS,WACP,IAAIoqB,EAAU,IAAI,CAACijB,SAAS,CAe5B,OAdA,IAAI,CAACsS,eAAe,GACpBv1B,EAAQ1X,WAAW,CAAC,IAAI,CAACi5B,aAAa,EACtCvhB,EAAQ1X,WAAW,CAAC,IAAI,CAAC+4B,aAAa,EACtC,IAAI,CAAC8P,YAAY,CAAG,KACpB,IAAI,CAAC3P,UAAU,CAAG,KAClB,CAAC,gBAAiB,gBAAgB,CAACj8B,OAAO,CAAC,CAAC,SAAS7uB,CAAO,EAC1D4H,GAAOyb,IAAI,CAACqnB,gBAAgB,CAAC,IAAI,CAAC1qC,EAAQ,EAC1C,IAAI,CAACA,EAAQ,CAAGwD,KAAAA,CAClB,GAAGoM,IAAI,CAAC,IAAI,GACR05B,EAAQv0B,UAAU,EACpBu0B,EAAQv0B,UAAU,CAACw0B,YAAY,CAAC,IAAI,CAACohB,aAAa,CAAE,IAAI,CAAC4B,SAAS,EAEpE,OAAO,IAAI,CAACA,SAAS,CACrB3kD,GAAOghD,YAAY,CAAC5qC,SAAS,CAACkB,OAAO,CAAC6K,IAAI,CAAC,IAAI,EACxC,IAAI,EAQbtM,MAAO,WAIL,OAFA,IAAI,CAACxO,mBAAmB,GACxB,IAAI,CAACu+C,YAAY,CAAC,IAAI,CAAC1C,UAAU,EAC1B,IAAI,CAAC7lB,SAAS,CAAC,QACxB,EAMAmpB,aAAc,SAAS3oC,CAAG,EACxB,IAAIinC,EAAe,IAAI,CAACC,aAAa,CAEjCD,GACFA,EAAaoS,eAAe,CAACr5C,EAEjC,EAKA1B,UAAW,SAASonC,CAAQ,CAAEjmB,CAAU,CAAEirB,CAAmB,EAK3D,IAAI4O,EAAqB,IAAI,CAACC,8BAA8B,CAAC7T,GACzD7qD,EAAS,IAAI,CAAC2kC,SAAS,CAAC,YAAakmB,EAAUjmB,EAAYirB,GAG/D,OADA,IAAI,CAAC8O,6BAA6B,CAAC9T,EAAU4T,GACtCz+D,CACT,EAQA0+D,+BAAgC,SAAS7T,CAAQ,EAC/C,GAAIA,CAAAA,EAAS2B,KAAK,EAAI3B,oBAAAA,EAAS2B,KAAK,CAACtrD,IAAI,EAA0B,IAAI,CAACmrD,aAAa,GAAKxB,EAAS2B,KAAK,CAWtG,OAAO,KARP,IAAIoS,EAAiB,CAAC,EAKtB,MAJAC,CAHmB,QAAS,QAAS,QAAS,OAAQ,SAAU,SAAU,QAAS,QAAS,MAAM,CAGtFtwC,OAAO,CAAC,SAAS7E,CAAI,EAC/Bk1C,CAAc,CAACl1C,EAAK,CAAGmhC,CAAQ,CAACnhC,EAAK,GAEvCpiB,GAAOyb,IAAI,CAAC8T,oBAAoB,CAACg0B,EAAU,IAAI,CAACwB,aAAa,CAAC11B,aAAa,IACpEioC,CAKX,EAQAD,8BAA+B,SAAS9T,CAAQ,CAAE+T,CAAc,EAC1DA,GACF/T,EAASz+C,GAAG,CAACwyD,EAEjB,EAKAE,cAAe,SAASC,CAAM,CAAElU,CAAQ,CAAEr5B,CAAO,EAG/C,IAAIitC,EAAqB,IAAI,CAACC,8BAA8B,CAAC7T,GAC7D,IAAI,CAAClmB,SAAS,CAAC,gBAAiBo6B,EAAQlU,EAAUr5B,GAClD,IAAI,CAACmtC,6BAA6B,CAAC9T,EAAU4T,EAC/C,EAEAvS,qBAAsB,SAAUC,CAAG,EAC7B,IAAI,CAACjvC,iBAAiB,EAAI,IAAI,CAACmvC,aAAa,EAAI,IAAI,CAACA,aAAa,CAACiQ,SAAS,EAC9E,IAAI,CAACjQ,aAAa,CAAC2S,eAAe,GAEpC13D,GAAOghD,YAAY,CAAC5qC,SAAS,CAACwuC,oBAAoB,CAACziC,IAAI,CAAC,IAAI,CAAE0iC,EAChE,CACF,GAIiB7kD,GAAOghD,YAAY,CACrB,cAAT5+B,GACFpiB,CAAAA,GAAO8U,MAAM,CAACsN,EAAK,CAAGpiB,GAAOghD,YAAY,CAAC5+B,EAAK,CAGrD,IACC,WAEC,IAAI0b,EAAc99B,GAAOyb,IAAI,CAACqiB,WAAW,CACrCC,EAAiB/9B,GAAOyb,IAAI,CAACsiB,cAAc,CAE3C45B,EAAkB,CAAEC,QAAS,EAAM,EAEvC,SAASC,WAAW/vD,CAAC,CAAEhP,CAAK,EAC1B,OAAOgP,EAAE5M,MAAM,EAAK4M,EAAE5M,MAAM,GAAKpC,EAAQ,CAC3C,CAEAkH,GAAOyb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAACra,GAAO8U,MAAM,CAACsB,SAAS,CAAwC,CAOvF0hD,YAAa,KAMbnG,oBAAqB,WAInB,IAAI,CAACsF,eAAe,GACpB,IAAI,CAACc,WAAW,GAChB,IAAI,CAACC,WAAW,CAACl6B,EAAa,MAChC,EAMAm6B,gBAAiB,WACf,OAAO,IAAI,CAAC7G,mBAAmB,CAAG,UAAY,OAChD,EAEA4G,YAAa,SAASE,CAAO,CAAEC,CAAc,EAC3C,IAAIC,EAAgB,IAAI,CAACnV,aAAa,CAClCoV,EAAkB,IAAI,CAACJ,eAAe,GAC1CC,EAAQl4D,GAAOrM,MAAM,CAAE,SAAU,IAAI,CAAC2kE,SAAS,EAC/CJ,EAAQE,EAAeC,EAAkB,OAAQ,IAAI,CAACE,YAAY,EAClEL,EAAQE,EAAeC,EAAkB,OAAQ,IAAI,CAACG,YAAY,CAAEb,GACpEO,EAAQE,EAAeC,EAAkB,MAAO,IAAI,CAACI,WAAW,EAChEP,EAAQE,EAAeC,EAAkB,QAAS,IAAI,CAACK,aAAa,EACpER,EAAQE,EAAe,QAAS,IAAI,CAACO,aAAa,EAClDT,EAAQE,EAAe,cAAe,IAAI,CAACQ,cAAc,EACzDV,EAAQE,EAAe,WAAY,IAAI,CAACS,cAAc,EACtDX,EAAQE,EAAe,WAAY,IAAI,CAACU,WAAW,EACnDZ,EAAQE,EAAe,YAAa,IAAI,CAACW,YAAY,EACrDb,EAAQE,EAAe,YAAa,IAAI,CAACY,YAAY,EACrDd,EAAQE,EAAe,OAAQ,IAAI,CAACa,OAAO,EACtC,IAAI,CAAC7H,mBAAmB,EAC3B8G,EAAQE,EAAe,aAAc,IAAI,CAACc,aAAa,CAAEvB,GAEpC,aAAnB,OAAOwB,SAA2BhB,KAAkBgB,UACtDA,OAAO,CAAChB,EAAe,CAACC,EAAe,UAAW,IAAI,CAACgB,UAAU,EACjED,OAAO,CAAChB,EAAe,CAACC,EAAe,OAAQ,IAAI,CAACiB,OAAO,EAC3DF,OAAO,CAAChB,EAAe,CAACC,EAAe,cAAe,IAAI,CAACkB,oBAAoB,EAC/EH,OAAO,CAAChB,EAAe,CAACC,EAAe,QAAS,IAAI,CAACmB,QAAQ,EAC7DJ,OAAO,CAAChB,EAAe,CAACC,EAAe,YAAa,IAAI,CAACoB,YAAY,EAEzE,EAKAvC,gBAAiB,WACf,IAAI,CAACe,WAAW,CAACj6B,EAAgB,UAEjC,IAAIs6B,EAAkB,IAAI,CAACJ,eAAe,GAC1Cl6B,EAAe/9B,GAAOwc,QAAQ,CAAE67C,EAAkB,KAAM,IAAI,CAACoB,UAAU,EACvE17B,EAAe/9B,GAAOwc,QAAQ,CAAE,WAAY,IAAI,CAACk9C,WAAW,CAAE/B,GAC9D55B,EAAe/9B,GAAOwc,QAAQ,CAAE67C,EAAkB,OAAQ,IAAI,CAACG,YAAY,CAAEb,GAC7E55B,EAAe/9B,GAAOwc,QAAQ,CAAE,YAAa,IAAI,CAACg8C,YAAY,CAAEb,EAClE,EAKAI,YAAa,WACP,IAAI,CAAC4B,WAAW,GAIpB,IAAI,CAACpB,YAAY,CAAG,IAAI,CAACA,YAAY,CAACvwD,IAAI,CAAC,IAAI,EAC/C,IAAI,CAACkxD,aAAa,CAAG,IAAI,CAACA,aAAa,CAAClxD,IAAI,CAAC,IAAI,EACjD,IAAI,CAACwwD,YAAY,CAAG,IAAI,CAACA,YAAY,CAACxwD,IAAI,CAAC,IAAI,EAC/C,IAAI,CAACyxD,UAAU,CAAG,IAAI,CAACA,UAAU,CAACzxD,IAAI,CAAC,IAAI,EAC3C,IAAI,CAAC0xD,WAAW,CAAG,IAAI,CAACA,WAAW,CAAC1xD,IAAI,CAAC,IAAI,EAC7C,IAAI,CAACswD,SAAS,CAAG,IAAI,CAACA,SAAS,CAACtwD,IAAI,CAAC,IAAI,EACzC,IAAI,CAACoxD,UAAU,CAAG,IAAI,CAACA,UAAU,CAACpxD,IAAI,CAAC,IAAI,EAC3C,IAAI,CAACqxD,OAAO,CAAG,IAAI,CAACA,OAAO,CAACrxD,IAAI,CAAC,IAAI,EACrC,IAAI,CAACuxD,QAAQ,CAAG,IAAI,CAACA,QAAQ,CAACvxD,IAAI,CAAC,IAAI,EACvC,IAAI,CAACwxD,YAAY,CAAG,IAAI,CAACA,YAAY,CAACxxD,IAAI,CAAC,IAAI,EAC/C,IAAI,CAACsxD,oBAAoB,CAAG,IAAI,CAACA,oBAAoB,CAACtxD,IAAI,CAAC,IAAI,EAC/D,IAAI,CAAC2wD,aAAa,CAAG,IAAI,CAACA,aAAa,CAAC3wD,IAAI,CAAC,IAAI,EACjD,IAAI,CAACywD,WAAW,CAAG,IAAI,CAACA,WAAW,CAACzwD,IAAI,CAAC,IAAI,EAC7C,IAAI,CAAC0wD,aAAa,CAAG,IAAI,CAACA,aAAa,CAAC1wD,IAAI,CAAC,IAAI,EACjD,IAAI,CAAC4wD,cAAc,CAAG,IAAI,CAACA,cAAc,CAAC5wD,IAAI,CAAC,IAAI,EACnD,IAAI,CAAC6wD,cAAc,CAAG,IAAI,CAACA,cAAc,CAAC7wD,IAAI,CAAC,IAAI,EACnD,IAAI,CAAC8wD,WAAW,CAAG,IAAI,CAACA,WAAW,CAAC9wD,IAAI,CAAC,IAAI,EAC7C,IAAI,CAAC+wD,YAAY,CAAG,IAAI,CAACa,mBAAmB,CAAC5xD,IAAI,CAAC,IAAI,CAAE,aACxD,IAAI,CAACgxD,YAAY,CAAG,IAAI,CAACY,mBAAmB,CAAC5xD,IAAI,CAAC,IAAI,CAAE,aACxD,IAAI,CAACixD,OAAO,CAAG,IAAI,CAACA,OAAO,CAACjxD,IAAI,CAAC,IAAI,EACrC,IAAI,CAAC2xD,WAAW,CAAG,GACrB,EAOAP,WAAY,SAAStxD,CAAC,CAAE+xD,CAAI,EAC1B,IAAI,CAACC,oBAAoB,EAAI,IAAI,CAACA,oBAAoB,CAAChyD,EAAG+xD,EAC5D,EAOAR,QAAS,SAASvxD,CAAC,CAAE+xD,CAAI,EACvB,IAAI,CAACE,QAAQ,EAAI,IAAI,CAACA,QAAQ,CAACjyD,EAAG+xD,EACpC,EAMAlB,cAAe,SAAS7wD,CAAC,EACvB,IAAI,CAACkyD,cAAc,CAAClyD,EACtB,EAMA2wD,YAAa,SAAS3wD,CAAC,EACrB,IAAIjP,EAAS,IAAI,CAACw4D,cAAc,CAChC,IAAI,CAACrvC,IAAI,CAAC,YAAa,CAAEnpB,OAAQA,EAAQiP,EAAGA,CAAE,GAC9C,IAAI,CAACupD,cAAc,CAAG,KACtBx4D,GAAUA,EAAOmpB,IAAI,CAAC,WAAY,CAAEla,EAAGA,CAAE,GAEzC,IAAI01B,EAAQ,IAAI,CAChB,IAAI,CAAC8zB,eAAe,CAACrqC,OAAO,CAAC,SAASgzC,CAAO,EAC3Cz8B,EAAMxb,IAAI,CAAC,YAAa,CAAEnpB,OAAQA,EAAQiP,EAAGA,CAAE,GAC/CmyD,GAAWphE,EAAOmpB,IAAI,CAAC,WAAY,CAAEla,EAAGA,CAAE,EAC5C,GACA,IAAI,CAACwpD,eAAe,CAAG,EAAE,CAErB,IAAI,CAACtL,eAAe,EACtB,IAAI,CAACA,eAAe,CAAC/+B,OAAO,CAAC,SAAS/D,CAAG,EACnCA,EAAI8xC,SAAS,EACf9xC,EAAIg3C,cAAc,CAAC7gE,KAAK,EAE5B,EAEJ,EAMAq/D,cAAe,SAAS5wD,CAAC,EAOlB,IAAI,CAACypD,iBAAiB,EAAK,IAAI,CAAC8C,UAAU,CAACvsD,KAC9C,IAAI,CAACka,IAAI,CAAC,aAAc,CAAEnpB,OAAQ,KAAMiP,EAAGA,CAAE,GAC7C,IAAI,CAACupD,cAAc,CAAG,KACtB,IAAI,CAACC,eAAe,CAAG,EAAE,CAE7B,EAOAgI,qBAAsB,SAASxxD,CAAC,CAAE+xD,CAAI,EACpC,IAAI,CAACM,qBAAqB,EAAI,IAAI,CAACA,qBAAqB,CAACryD,EAAG+xD,EAC9D,EAOAN,SAAU,SAASzxD,CAAC,CAAE+xD,CAAI,EACxB,IAAI,CAACO,SAAS,EAAI,IAAI,CAACA,SAAS,CAACtyD,EAAG+xD,EACtC,EAOAL,aAAc,SAAS1xD,CAAC,CAAE+xD,CAAI,EAC5B,IAAI,CAACQ,aAAa,EAAI,IAAI,CAACA,aAAa,CAACvyD,EAAG+xD,EAC9C,EAOAf,YAAa,SAAShxD,CAAC,EACrBA,EAAEgD,cAAc,GAChB,IAAIjS,EAAS,IAAI,CAAC+gE,mBAAmB,CAAC,WAAY9xD,GAClD,IAAI,CAACwyD,qBAAqB,CAACzhE,EAAQiP,EACrC,EASAmxD,QAAS,SAAUnxD,CAAC,EAElB,OADA,IAAI,CAAC8xD,mBAAmB,CAAC,cAAe9xD,GACjC,IAAI,CAAC8xD,mBAAmB,CAAC,OAAQ9xD,EAC1C,EAMA8wD,eAAgB,SAAU9wD,CAAC,EAKzB,OAJI,IAAI,CAACkpD,eAAe,GACtBlpD,EAAEyyD,eAAe,GACjBzyD,EAAEgD,cAAc,IAEX,EACT,EAMA+tD,eAAgB,SAAU/wD,CAAC,EACzB,IAAI,CAAC0yD,wBAAwB,CAAC1yD,GAC9B,IAAI,CAAC2yD,YAAY,CAAC3yD,EAAG,YACrB,IAAI,CAAC4yD,wBAAwB,CAAC5yD,EAChC,EAQA6yD,aAAc,SAASC,CAAG,EACxB,IAAIt8B,EAAiBs8B,EAAIt8B,cAAc,QAEvC,EACSA,CAAc,CAAC,EAAE,EAAIA,CAAc,CAAC,EAAE,CAACu8B,UAAU,CAGtD,IAAI,CAACzJ,mBAAmB,CACnBwJ,EAAIE,SAAS,CAGf,EACT,EAOA7O,aAAc,SAAS2O,CAAG,QACxB,CAAsB,IAAlBA,EAAIG,SAAS,EAGK,KAAlBH,EAAIG,SAAS,GAGA,aAAbH,EAAIhhE,IAAI,EAAmBghE,IAAAA,EAAII,OAAO,CAACziE,MAAM,GAG7CqiE,EAAIt8B,cAAc,EACbs8B,EAAIt8B,cAAc,CAAC,EAAE,CAACu8B,UAAU,GAAK,IAAI,CAAC/C,WAAW,CAGhE,EAMAoB,cAAe,SAASpxD,CAAC,EACvBA,EAAEgD,cAAc,GACS,OAArB,IAAI,CAACgtD,WAAW,EAClB,KAAI,CAACA,WAAW,CAAG,IAAI,CAAC6C,YAAY,CAAC7yD,EAAAA,EAEvC,IAAI,CAACmzD,aAAa,CAACnzD,GACnB,IAAI,CAAC4yD,wBAAwB,GAC7B,IAAItC,EAAgB,IAAI,CAACnV,aAAa,CAClCoV,EAAkB,IAAI,CAACJ,eAAe,GAC1Cn6B,EAAY99B,GAAOwc,QAAQ,CAAE,WAAY,IAAI,CAACk9C,WAAW,CAAE/B,GAC3D75B,EAAY99B,GAAOwc,QAAQ,CAAE,YAAa,IAAI,CAACg8C,YAAY,CAAEb,GAE7D55B,EAAeq6B,EAAeC,EAAkB,OAAQ,IAAI,CAACE,YAAY,CAC3E,EAMAA,aAAc,SAAUzwD,CAAC,EACvB,IAAI,CAACmzD,aAAa,CAACnzD,GACnB,IAAI,CAAC4yD,wBAAwB,GAC7B,IAAItC,EAAgB,IAAI,CAACnV,aAAa,CAClCoV,EAAkB,IAAI,CAACJ,eAAe,GAC1Cl6B,EAAeq6B,EAAeC,EAAkB,OAAQ,IAAI,CAACG,YAAY,CAAEb,GAC3E75B,EAAY99B,GAAOwc,QAAQ,CAAE67C,EAAkB,KAAM,IAAI,CAACoB,UAAU,EACpE37B,EAAY99B,GAAOwc,QAAQ,CAAE67C,EAAkB,OAAQ,IAAI,CAACG,YAAY,CAAEb,EAC5E,EAMA+B,YAAa,SAAS5xD,CAAC,EACrB,IAAIA,CAAAA,EAAEkzD,OAAO,CAACziE,MAAM,CAAG,IAIvB,IAAI,CAAC2iE,WAAW,CAACpzD,GACjB,IAAI,CAAC4yD,wBAAwB,GAC7B,IAAI,CAAC5C,WAAW,CAAG,KACnB,IAAIO,EAAkB,IAAI,CAACJ,eAAe,GAC1Cl6B,EAAe/9B,GAAOwc,QAAQ,CAAE,WAAY,IAAI,CAACk9C,WAAW,CAAE/B,GAC9D55B,EAAe/9B,GAAOwc,QAAQ,CAAE,YAAa,IAAI,CAACg8C,YAAY,CAAEb,GAChE,IAAIn6B,EAAQ,IAAI,CACZ,IAAI,CAAC29B,iBAAiB,EACxBhkD,aAAa,IAAI,CAACgkD,iBAAiB,EAErC,IAAI,CAACA,iBAAiB,CAAG/jD,WAAW,WAGlC0mB,EAAYN,EAAMylB,aAAa,CAAEoV,EAAkB,OAAQ76B,EAAM+6B,YAAY,EAC7E/6B,EAAM29B,iBAAiB,CAAG,CAC5B,EAAG,KACL,EAMA1B,WAAY,SAAU3xD,CAAC,EACrB,IAAI,CAACozD,WAAW,CAACpzD,GACjB,IAAI,CAAC4yD,wBAAwB,GAC7B,IAAItC,EAAgB,IAAI,CAACnV,aAAa,CAClCoV,EAAkB,IAAI,CAACJ,eAAe,GACtC,IAAI,CAAChM,YAAY,CAACnkD,KACpBi2B,EAAe/9B,GAAOwc,QAAQ,CAAE67C,EAAkB,KAAM,IAAI,CAACoB,UAAU,EACvE17B,EAAe/9B,GAAOwc,QAAQ,CAAE67C,EAAkB,OAAQ,IAAI,CAACG,YAAY,CAAEb,GAC7E75B,EAAYs6B,EAAeC,EAAkB,OAAQ,IAAI,CAACG,YAAY,CAAEb,GAE5E,EAMAa,aAAc,SAAU1wD,CAAC,EACvB,CAAC,IAAI,CAAC85C,mBAAmB,EAAI95C,EAAEgD,cAAc,EAAIhD,EAAEgD,cAAc,GACjE,IAAI,CAACswD,aAAa,CAACtzD,EACrB,EAKAwwD,UAAW,WACT,IAAI,CAAC/gD,UAAU,EACjB,EAOA8jD,cAAe,SAASxiE,CAAM,EAC5B,IAAIisD,EAAe,IAAI,CAACC,aAAa,OAErC,CACG,CAACD,GAAiB,CAAC,CAACjsD,GACpBisD,EAAAA,KAAgBjsD,GAAWisD,IAAiBjsD,IAMtCisD,GAAgBA,EAAakQ,SAAS,CAKxC,GACT,EASAkG,YAAa,SAAUpzD,CAAC,EACtB,IA6CI4wC,EAAQT,EA7CRp/C,EAAQ+uB,EAAY,IAAI,CAAC2pC,iBAAiB,CAC1C+J,EAAgB,IAAI,CAAC9J,cAAc,CAAE+J,EAAe,GACpDC,EAAW,CAACF,GAAkBA,IAAAA,EAAcr0D,IAAI,EAAUq0D,IAAAA,EAAct0D,GAAG,CAM/E,GALA,IAAI,CAACwzD,wBAAwB,CAAC1yD,GAC9BjP,EAAS,IAAI,CAACohE,OAAO,CACrB,IAAI,CAACQ,YAAY,CAAC3yD,EAAG,aAGjB+vD,WAAW/vD,EAvaD,GAuakB,CAC1B,IAAI,CAACmpD,cAAc,EACrB,IAAI,CAACwJ,YAAY,CAAC3yD,EAAG,KAzaX,EAya8B0zD,GAE1C,MACF,CAEA,GAAI3D,WAAW/vD,EA9aiB,GA8aC,CAC3B,IAAI,CAACopD,eAAe,EACtB,IAAI,CAACuJ,YAAY,CAAC3yD,EAAG,KAhbO,EAgba0zD,GAE3C,IAAI,CAACd,wBAAwB,GAC7B,MACF,CAEA,GAAI,IAAI,CAAC7jE,aAAa,EAAI,IAAI,CAAC2tD,mBAAmB,CAAE,CAClD,IAAI,CAACiX,uBAAuB,CAAC3zD,GAC7B,MACF,CAEA,GAAK,IAAI,CAACmkD,YAAY,CAACnkD,IAOvB,GAJI8f,IACF,IAAI,CAAC8zC,yBAAyB,CAAC5zD,GAC/ByzD,EAAe3zC,EAAU2wB,eAAe,EAEtC,CAACijB,EAAS,CACZ,IAAIG,EAAkB9iE,IAAW,IAAI,CAACksD,aAAa,CACnD,IAAI,CAAC6W,kBAAkB,CAAC9zD,GACnByzD,GACHA,CAAAA,EACE,IAAI,CAACF,aAAa,CAACxiE,IAClB,CAAC8iE,GAAmB9iE,IAAW,IAAI,CAACksD,aAAa,CAGxD,CAEA,GAAIlsD,EAAQ,CAKV,GAJA6/C,EAAS7/C,EAAO87D,iBAAiB,CAC/B,IAAI,CAAC12B,UAAU,CAACn2B,EAAG,IACnB9H,GAAOyb,IAAI,CAACgjB,YAAY,CAAC32B,IAEvBjP,EAAOuP,UAAU,EAAIvP,IAAW,IAAI,CAACksD,aAAa,EAAIlsD,OAAAA,EAAOgjE,QAAQ,CACvE,IAAI,CAACh1D,eAAe,CAAChO,EAAQiP,GAC7ByzD,EAAe,OAEZ,CACH,IAAIxkB,EAAUl+C,EAAOyiB,QAAQ,CAACo9B,EAAO,CACjCqG,EAAiBhI,GAAWA,EAAQmI,iBAAiB,CAACp3C,EAAGjP,EAAQk+C,GACjEgI,IACF9G,EAAU,IAAI,CAACha,UAAU,CAACn2B,GAC1Bi3C,EAAej3C,EAAG8f,EAAWqwB,EAAQ/yB,CAAC,CAAE+yB,EAAQ9yB,CAAC,EAErD,CACAtsB,EAAOijE,QAAQ,CAAG,EACpB,CAGA,GAAIl0C,GAAcA,CAAAA,EAAU/uB,MAAM,GAAKA,GAAU+uB,EAAU8wB,MAAM,GAAKA,CAAAA,EAAS,CAC7E,IAAIqjB,EAAkBn0C,EAAU/uB,MAAM,EAAI+uB,EAAU/uB,MAAM,CAACyiB,QAAQ,CAACsM,EAAU8wB,MAAM,CAAC,CACjFsjB,EAAyBD,GAAmBA,EAAgB7c,iBAAiB,CAACp3C,EAAGjP,EAAQk+C,GAC7FkB,EAAUA,GAAW,IAAI,CAACha,UAAU,CAACn2B,GACrCk0D,GAA0BA,EAAuBl0D,EAAG8f,EAAWqwB,EAAQ/yB,CAAC,CAAE+yB,EAAQ9yB,CAAC,CACrF,CACA,IAAI,CAAC82C,mBAAmB,CAACn0D,EAAGjP,GAC5B,IAAI,CAAC4hE,YAAY,CAAC3yD,EAAG,KAze2B,EAyeT0zD,GACvC,IAAI,CAAChK,cAAc,CAAG,KACtB,IAAI,CAACD,iBAAiB,CAAG,KAEzB14D,GAAWA,CAAAA,EAAO46D,QAAQ,CAAG,GACzB8H,EACF,IAAI,CAAC9zD,gBAAgB,GAEb+zD,GACR,IAAI,CAACrJ,SAAS,GAElB,EASAyH,oBAAqB,SAASsC,CAAS,CAAEp0D,CAAC,EACxC,IAAIjP,EAAS,IAAI,CAACw7D,UAAU,CAACvsD,GACzBqpD,EAAU,IAAI,CAACA,OAAO,CACtBh5D,EAAU,CACR2P,EAAGA,EACHjP,OAAQA,EACRsjE,WAAYhL,CACd,EAGJ,GAFA,IAAI,CAACnvC,IAAI,CAACk6C,EAAW/jE,GACrBU,GAAUA,EAAOmpB,IAAI,CAACk6C,EAAW/jE,GAC7B,CAACg5D,EACH,OAAOt4D,EAET,IAAK,IAAIyL,EAAI,EAAGA,EAAI6sD,EAAQ54D,MAAM,CAAE+L,IAClC6sD,CAAO,CAAC7sD,EAAE,CAAC0d,IAAI,CAACk6C,EAAW/jE,GAE7B,OAAOU,CACT,EAWA4hE,aAAc,SAAS3yD,CAAC,CAAEo0D,CAAS,CAAEhhE,CAAM,CAAEsgE,CAAO,EAClD,IAAI3iE,EAAS,IAAI,CAACohE,OAAO,CACrB9I,EAAU,IAAI,CAACA,OAAO,EAAI,EAAE,CAC5Bh5D,EAAU,CACR2P,EAAGA,EACHjP,OAAQA,EACRsjE,WAAYhL,EACZj2D,OAAQA,GAhiBkC,EAiiB1CsgE,QAASA,GAAW,GACpBvjB,QAAS,IAAI,CAACsd,QAAQ,CACtB6G,gBAAiB,IAAI,CAAC9G,gBAAgB,CACtC1tC,UAAW,IAAI,CAAC2pC,iBAAiB,CAErB,QAAd2K,IACF/jE,EAAQkE,aAAa,CAAG,IAAI,CAACg4D,UAAU,CAACvsD,GACxC3P,EAAQkkE,iBAAiB,CAAG,IAAI,CAAClL,OAAO,EAE1C,IAAI,CAACnvC,IAAI,CAAC,SAAWk6C,EAAW/jE,GAChCU,GAAUA,EAAOmpB,IAAI,CAAC,QAAUk6C,EAAW/jE,GAC3C,IAAK,IAAImM,EAAI,EAAGA,EAAI6sD,EAAQ54D,MAAM,CAAE+L,IAClC6sD,CAAO,CAAC7sD,EAAE,CAAC0d,IAAI,CAAC,QAAUk6C,EAAW/jE,EAEzC,EAMAujE,0BAA2B,SAAS5zD,CAAC,EAEnC,IAAI8f,EAAY,IAAI,CAAC2pC,iBAAiB,CAClC14D,EAAS+uB,EAAU/uB,MAAM,CACzBV,EAAU,CACR2P,EAAGA,EACHjP,OAAQA,EACR+uB,UAAWA,EACXurC,OAAQvrC,EAAUurC,MAAM,CAG1Bt6D,CAAAA,EAAOyjE,QAAQ,EACjBzjE,CAAAA,EAAOyjE,QAAQ,CAAG,IAGpBzjE,EAAOuO,SAAS,GAEZwgB,CAAAA,EAAU2wB,eAAe,EAAK,IAAI,CAACmJ,QAAQ,EAAI7oD,EAAO0jE,eAAe,KACvE,IAAI,CAACC,KAAK,CAAC,WAAYrkE,EAE3B,EAMAskE,0BAA2B,SAAS30D,CAAC,EACnC,IAAI,CAAC08C,mBAAmB,CAAG,GACvB,IAAI,CAACx+C,eAAe,IACtB,IAAI,CAACqB,mBAAmB,CAACS,GAAGL,gBAAgB,GAE9C,IAAIwwC,EAAU,IAAI,CAACha,UAAU,CAACn2B,GAC9B,IAAI,CAACmC,gBAAgB,CAAC+hD,WAAW,CAAC/T,EAAS,CAAEnwC,EAAGA,EAAGmwC,QAASA,CAAQ,GACpE,IAAI,CAACwiB,YAAY,CAAC3yD,EAAG,OACvB,EAMA40D,0BAA2B,SAAS50D,CAAC,EACnC,GAAI,IAAI,CAAC08C,mBAAmB,CAAE,CAC5B,IAAIvM,EAAU,IAAI,CAACha,UAAU,CAACn2B,GAC9B,IAAI,CAACmC,gBAAgB,CAACoiD,WAAW,CAACpU,EAAS,CAAEnwC,EAAGA,EAAGmwC,QAASA,CAAQ,EACtE,CACA,IAAI,CAAC4b,SAAS,CAAC,IAAI,CAACjD,iBAAiB,EACrC,IAAI,CAAC6J,YAAY,CAAC3yD,EAAG,OACvB,EAMA2zD,wBAAyB,SAAS3zD,CAAC,EACjC,IAAImwC,EAAU,IAAI,CAACha,UAAU,CAACn2B,EAC9B,KAAI,CAAC08C,mBAAmB,CAAG,IAAI,CAACv6C,gBAAgB,CAACsiD,SAAS,CAAC,CAAEzkD,EAAGA,EAAGmwC,QAASA,CAAQ,GACpF,IAAI,CAACwiB,YAAY,CAAC3yD,EAAG,KACvB,EAUAmzD,cAAe,SAAUnzD,CAAC,EACxB,IAAI,CAAC0yD,wBAAwB,CAAC1yD,GAC9B,IAAI,CAAC2yD,YAAY,CAAC3yD,EAAG,eACrB,IAAIjP,EAAS,IAAI,CAACohE,OAAO,CAEzB,GAAIpC,WAAW/vD,EA7nBD,GA6nBkB,CAC1B,IAAI,CAACmpD,cAAc,EACrB,IAAI,CAACwJ,YAAY,CAAC3yD,EAAG,OA/nBX,GAioBZ,MACF,CAEA,GAAI+vD,WAAW/vD,EApoBiB,GAooBC,CAC3B,IAAI,CAACopD,eAAe,EACtB,IAAI,CAACuJ,YAAY,CAAC3yD,EAAG,OAtoBO,GAwoB9B,MACF,CAEA,GAAI,IAAI,CAACjR,aAAa,CAAE,CACtB,IAAI,CAAC4lE,yBAAyB,CAAC30D,GAC/B,MACF,CAEA,GAAK,IAAI,CAACmkD,YAAY,CAACnkD,KAKnB,IAAI,CAACypD,iBAAiB,EAI1B,IAAItZ,EAAU,IAAI,CAACsd,QAAQ,CAE3B,IAAI,CAACoH,gBAAgB,CAAG1kB,EACxB,IAAIsjB,EAAe,IAAI,CAACF,aAAa,CAACxiE,GAClC+jE,EAAc,IAAI,CAACC,YAAY,CAAC/0D,EAAGjP,GAmBvC,GAlBI,IAAI,CAACo6D,qBAAqB,CAACnrD,EAAGjP,GAChC,IAAI,CAACwO,mBAAmB,CAACS,GAElB80D,IACP,IAAI,CAACE,eAAe,CAACh1D,EAAGjP,GACxBA,EAAS,IAAI,CAACksD,aAAa,GAGzB,IAAI,CAACoL,SAAS,EAAK,GACpB,GAAQ/nD,UAAU,EAAKvP,EAAOm8D,SAAS,EAAIn8D,IAAW,IAAI,CAACksD,aAAa,GACzE,KAAI,CAACyM,cAAc,CAAG,CACpBnW,GAAI,IAAI,CAACia,gBAAgB,CAACpwC,CAAC,CAC3Bk2B,GAAI,IAAI,CAACka,gBAAgB,CAACnwC,CAAC,CAC3Bne,IAAK,EACLC,KAAM,CACR,GAGEpO,EAAQ,CACV,IAAI06D,EAAkB16D,IAAW,IAAI,CAACksD,aAAa,CAC/ClsD,EAAOuP,UAAU,EAAIvP,SAAAA,EAAOgjE,QAAQ,EACtC,IAAI,CAACh1D,eAAe,CAAChO,EAAQiP,GAE/B,IAAI4wC,EAAS7/C,EAAO87D,iBAAiB,CACnC,IAAI,CAAC12B,UAAU,CAACn2B,EAAG,IACnB9H,GAAOyb,IAAI,CAACgjB,YAAY,CAAC32B,IAG3B,GADAjP,EAAO46D,QAAQ,CAAG/a,EACd7/C,IAAW,IAAI,CAACksD,aAAa,EAAKrM,CAAAA,GAAU,CAACkkB,CAAAA,EAAc,CAC7D,IAAI,CAACpJ,sBAAsB,CAAC1rD,EAAGjP,EAAQ06D,GACvC,IAAIxc,EAAUl+C,EAAOyiB,QAAQ,CAACo9B,EAAO,CACjCT,EAAU,IAAI,CAACha,UAAU,CAACn2B,GAC1Bg3C,EAAmB/H,GAAWA,EAAQkI,mBAAmB,CAACn3C,EAAGjP,EAAQk+C,GACrE+H,GACFA,EAAiBh3C,EAAG,IAAI,CAACypD,iBAAiB,CAAEtZ,EAAQ/yB,CAAC,CAAE+yB,EAAQ9yB,CAAC,CAEpE,CACF,CACA,IAAI,CAACs1C,YAAY,CAAC3yD,EAAG,QAEpByzD,CAAAA,GAAgBqB,CAAAA,GAAgB,IAAI,CAACn1D,gBAAgB,GACxD,EAMAizD,yBAA0B,WACxB,IAAI,CAACT,OAAO,CAAG,KACf,IAAI,CAAC1E,QAAQ,CAAG,KAChB,IAAI,CAACD,gBAAgB,CAAG,IAC1B,EAOAkF,yBAA0B,SAAS1yD,CAAC,EAElC,IAAI,CAAC4yD,wBAAwB,GAC7B,IAAI,CAACnF,QAAQ,CAAG,IAAI,CAACt3B,UAAU,CAACn2B,EAAG,IACnC,IAAI,CAACwtD,gBAAgB,CAAG,IAAI,CAAC/C,iBAAiB,CAAC,IAAI,CAACgD,QAAQ,EAC5D,IAAI,CAAC0E,OAAO,CAAG,IAAI,CAAC1I,iBAAiB,CAAG,IAAI,CAACA,iBAAiB,CAAC14D,MAAM,CAAG,IAAI,CAACw7D,UAAU,CAACvsD,IAAM,IAChG,EAKA8rD,iBAAkB,SAAS9rD,CAAC,EAC1B,IAAI2f,EAAI,IAAI,CAAC8pC,iBAAiB,CAC9B,IAAI,CAAC7P,QAAQ,EAAIj6B,EAAE5uB,MAAM,CAACkkE,SAAS,GACnC,IAAI,CAAC/6C,IAAI,CAAC,mBAAoB,CAC5Bla,EAAGA,EACH8f,UAAWH,CACb,EACF,EAWA2zC,cAAe,SAAUtzD,CAAC,EAKxB,GAJA,IAAI,CAAC2yD,YAAY,CAAC3yD,EAAG,eACrB,IAAI,CAAC0yD,wBAAwB,CAAC1yD,GAG1B,IAAI,CAACjR,aAAa,CAAE,CACtB,IAAI,CAAC6lE,yBAAyB,CAAC50D,GAC/B,MACF,CAEA,GAAK,IAAI,CAACmkD,YAAY,CAACnkD,IAIvB,IAXIjP,EAAQo/C,EAWRqjB,EAAgB,IAAI,CAAC9J,cAAc,CAGnC8J,GACFrjB,EAAU,IAAI,CAACqd,gBAAgB,CAE/BgG,EAAcr0D,IAAI,CAAGgxC,EAAQ/yB,CAAC,CAAGo2C,EAAcjgB,EAAE,CACjDigB,EAAct0D,GAAG,CAAGixC,EAAQ9yB,CAAC,CAAGm2C,EAAclgB,EAAE,CAEhD,IAAI,CAAC+W,SAAS,IAEN,IAAI,CAACZ,iBAAiB,CAM9B,IAAI,CAACyL,gBAAgB,CAACl1D,IALtBjP,EAAS,IAAI,CAACw7D,UAAU,CAACvsD,IAAM,KAC/B,IAAI,CAACm0D,mBAAmB,CAACn0D,EAAGjP,GAC5B,IAAI,CAACokE,kBAAkB,CAACpkE,EAAQiP,IAKlC,IAAI,CAAC2yD,YAAY,CAAC3yD,EAAG,QACrB,IAAI,CAAC4yD,wBAAwB,GAC/B,EAQAuC,mBAAoB,SAASpkE,CAAM,CAAEiP,CAAC,EACpC,IAAIupD,EAAiB,IAAI,CAACA,cAAc,CACpCC,EAAkB,IAAI,CAACA,eAAe,CAAEH,EAAU,IAAI,CAACA,OAAO,CAC9D54D,EAASqE,KAAKI,GAAG,CAACs0D,EAAgB/4D,MAAM,CAAE44D,EAAQ54D,MAAM,EAE5D,IAAI,CAAC2kE,wBAAwB,CAACrkE,EAAQiP,EAAG,CACvCq1D,UAAW9L,EACX+L,OAAQ,WACRC,aAAc,YACdC,MAAO,YACPC,YAAa,YACf,GACA,IAAK,IAAIj5D,EAAI,EAAGA,EAAI/L,EAAQ+L,IAC1B,IAAI,CAAC44D,wBAAwB,CAAC/L,CAAO,CAAC7sD,EAAE,CAAEwD,EAAG,CAC3Cq1D,UAAW7L,CAAe,CAAChtD,EAAE,CAC7B84D,OAAQ,WACRE,MAAO,WACT,EAEF,KAAI,CAACjM,cAAc,CAAGx4D,EACtB,IAAI,CAACy4D,eAAe,CAAG,IAAI,CAACH,OAAO,CAACrzD,MAAM,EAC5C,EAQAw8D,sBAAuB,SAASzhE,CAAM,CAAEiP,CAAC,EACvC,IAAI01D,EAAqB,IAAI,CAACA,kBAAkB,CAC5ClM,EAAkB,IAAI,CAACA,eAAe,CAAEH,EAAU,IAAI,CAACA,OAAO,CAC9D54D,EAASqE,KAAKI,GAAG,CAACs0D,EAAgB/4D,MAAM,CAAE44D,EAAQ54D,MAAM,EAE5D,IAAI,CAAC2kE,wBAAwB,CAACrkE,EAAQiP,EAAG,CACvCq1D,UAAWK,EACXJ,OAAQ,YACRE,MAAO,WACT,GACA,IAAK,IAAIh5D,EAAI,EAAGA,EAAI/L,EAAQ+L,IAC1B,IAAI,CAAC44D,wBAAwB,CAAC/L,CAAO,CAAC7sD,EAAE,CAAEwD,EAAG,CAC3Cq1D,UAAW7L,CAAe,CAAChtD,EAAE,CAC7B84D,OAAQ,YACRE,MAAO,WACT,EAEF,KAAI,CAACE,kBAAkB,CAAG3kE,CAC5B,EAcAqkE,yBAA0B,SAASrkE,CAAM,CAAEiP,CAAC,CAAE21D,CAAM,EAClD,IAAIC,EAAOC,EAAQR,EAAYM,EAAON,SAAS,CAC3CS,EAAgBT,IAActkE,EAAQ0kE,EAAcE,EAAOF,WAAW,CAAEF,EAAeI,EAAOJ,YAAY,CAC1GO,IACFF,EAAQ,CAAE51D,EAAGA,EAAGjP,OAAQA,EAAQglE,eAAgBV,CAAU,EAC1DQ,EAAS,CAAE71D,EAAGA,EAAGjP,OAAQskE,EAAWW,WAAYjlE,CAAO,GAG9CskE,GAAaS,IAEtBP,GAAgB,IAAI,CAACr7C,IAAI,CAACq7C,EAAcM,GACxCR,EAAUn7C,IAAI,CAACy7C,EAAOL,MAAM,CAAEO,IAJtB9kE,GAAU+kE,IAOlBL,GAAe,IAAI,CAACv7C,IAAI,CAACu7C,EAAaG,GACtC7kE,EAAOmpB,IAAI,CAACy7C,EAAOH,KAAK,CAAEI,GAE9B,EAMA1D,eAAgB,SAASlyD,CAAC,EACxB,IAAI,CAAC0yD,wBAAwB,CAAC1yD,GAC9B,IAAI,CAAC2yD,YAAY,CAAC3yD,EAAG,SACrB,IAAI,CAAC4yD,wBAAwB,EAC/B,EAMAsC,iBAAkB,SAASl1D,CAAC,EAC1B,IAAImwC,EAAU,IAAI,CAACha,UAAU,CAACn2B,GAC1B8f,EAAY,IAAI,CAAC2pC,iBAAiB,CAEtC3pC,EAAUm2C,KAAK,CAAG,GAClBn2C,EAAU9b,QAAQ,CAAGhE,EAAEgE,QAAQ,CAC/B8b,EAAU/b,MAAM,CAAG/D,CAAC,CAAC,IAAI,CAACooD,WAAW,CAAC,CAEtC,IAAI,CAAC8N,uBAAuB,CAACl2D,EAAG8f,EAAWqwB,GAC3CrwB,EAAU2wB,eAAe,EAAI,IAAI,CAAC9wC,gBAAgB,EACpD,EAKAu2D,wBAAyB,SAASl2D,CAAC,CAAE8f,CAAS,CAAEqwB,CAAO,EACrD,IAAI/yB,EAAI+yB,EAAQ/yB,CAAC,CACbC,EAAI8yB,EAAQ9yB,CAAC,CACbguC,EAASvrC,EAAUurC,MAAM,CACzB5a,EAAkB,GAClBJ,EAAgBvwB,EAAUuwB,aAAa,CAIvCA,GACFI,CAAAA,EAAkBJ,EAAcrwC,EAAG8f,EAAW1C,EAAGC,EAAAA,EAEpC,SAAXguC,GAAqB5a,IACvB3wB,EAAU/uB,MAAM,CAACijE,QAAQ,CAAG,GAC5B,IAAI,CAACjI,SAAS,CAACjsC,EAAU/uB,MAAM,CAAC6e,UAAU,EAAI,IAAI,CAACA,UAAU,GAE/DkQ,EAAU2wB,eAAe,CAAG3wB,EAAU2wB,eAAe,EAAIA,CAC3D,EAKAikB,MAAOx8D,GAAOo9C,aAAa,CAACnG,SAAS,CAQrCglB,oBAAqB,SAAUn0D,CAAC,CAAEjP,CAAM,EACtC,GAAI,CAACA,EAEH,OADA,IAAI,CAACg7D,SAAS,CAAC,IAAI,CAAClD,aAAa,EAC1B,GAET,IAAIl5C,EAAc5e,EAAO4e,WAAW,EAAI,IAAI,CAACA,WAAW,CACpD2xC,EAAkB,IAAI,CAACrE,aAAa,EAAI,wBAAI,CAACA,aAAa,CAACnrD,IAAI,CAC7D,IAAI,CAACmrD,aAAa,CAAG,KAEvBrM,EAAS,CAAC,CAAC0Q,GAAmB,CAACA,EAAgB9sD,QAAQ,CAACzD,EAAAA,GAI3CA,EAAO87D,iBAAiB,CAAC,IAAI,CAAC12B,UAAU,CAACn2B,EAAG,KAExD4wC,EAWH,IAAI,CAACmb,SAAS,CAAC,IAAI,CAACoK,eAAe,CAACvlB,EAAQ7/C,EAAQiP,KAVhDjP,EAAOu8D,cAAc,EAGvB,IAAI,CAACjE,OAAO,CAACrzD,MAAM,GAAGogE,OAAO,GAAG71D,GAAG,CAAC,SAAS4xD,CAAO,EAClDxiD,EAAcwiD,EAAQxiD,WAAW,EAAIA,CACvC,GAEF,IAAI,CAACo8C,SAAS,CAACp8C,GAKnB,EAKAwmD,gBAAiB,SAASvlB,CAAM,CAAE7/C,CAAM,CAAEiP,CAAC,EACzC,IAAIivC,EAAUl+C,EAAOyiB,QAAQ,CAACo9B,EAAO,CACrC,OAAO3B,EAAQoI,kBAAkB,CAACr3C,EAAGivC,EAASl+C,EAChD,CACF,EACF,IAGMkE,EAAMH,KAAKG,GAAG,CACdC,EAAMJ,KAAKI,GAAG,CAElBgD,GAAOyb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAACra,GAAO8U,MAAM,CAACsB,SAAS,CAAwC,CAQvFymD,aAAc,SAAS/0D,CAAC,CAAEjP,CAAM,EAC9B,IAAIisD,EAAe,IAAI,CAACC,aAAa,CACrC,OAAOD,GAAgB,IAAI,CAACkO,sBAAsB,CAAClrD,IAAMjP,GAAUA,EAAOuP,UAAU,EAAI,IAAI,CAAC+nD,SAAS,EAC/FrL,CAAAA,IAAiBjsD,GAAUisD,oBAAAA,EAAalrD,IAAI,GAA2B,CAACf,EAAOk+D,QAAQ,CAAC,CAAEjvD,EAAGA,CAAE,EACxG,EAOAg1D,gBAAiB,SAAUh1D,CAAC,CAAEjP,CAAM,EAClC,IAAIisD,EAAe,IAAI,CAACC,aAAa,EAEjCD,EAAa2O,QAAQ,EAGrB56D,CAAAA,IAAWisD,GAIT,CAFJjsD,EAAS,IAAI,CAACw7D,UAAU,CAACvsD,EAAG,MAEZjP,EAAOuP,UAAU,IAI/B08C,GAAgBA,oBAAAA,EAAalrD,IAAI,CACnC,IAAI,CAACukE,sBAAsB,CAACtlE,EAAQiP,GAGpC,IAAI,CAACs2D,sBAAsB,CAACvlE,EAAQiP,GAExC,EAKAq2D,uBAAwB,SAAStlE,CAAM,CAAEiP,CAAC,EACxC,IAAIshD,EAAkB,IAAI,CAACrE,aAAa,CACpCsZ,EAAuBjV,EAAgB1sD,QAAQ,CAACwH,KAAK,CAAC,GACtDklD,EAAgB9sD,QAAQ,CAACzD,IAC3BuwD,EAAgBkV,gBAAgB,CAACzlE,GACjC,IAAI,CAACw4D,cAAc,CAAGx4D,EACtB,IAAI,CAACy4D,eAAe,CAAG,IAAI,CAACH,OAAO,CAACrzD,MAAM,GACX,IAA3BsrD,EAAgBtqD,IAAI,IAEtB,IAAI,CAACg4D,gBAAgB,CAAC1N,EAAgBj+C,IAAI,CAAC,GAAIrD,KAIjDshD,EAAgBmV,aAAa,CAAC1lE,GAC9B,IAAI,CAACw4D,cAAc,CAAGjI,EACtB,IAAI,CAACkI,eAAe,CAAG,IAAI,CAACH,OAAO,CAACrzD,MAAM,IAE5C,IAAI,CAACu4D,oBAAoB,CAACgI,EAAsBv2D,EAClD,EAKAs2D,uBAAwB,SAASvlE,CAAM,CAAEiP,CAAC,EACxC,IAAI+uD,EAAiB,IAAI,CAACtvD,gBAAgB,GAAI29C,EAAQ,IAAI,CAACsZ,YAAY,CAAC3lE,EACxE,KAAI,CAACw4D,cAAc,CAAGnM,EAItB,IAAI,CAAC4R,gBAAgB,CAAC5R,EAAOp9C,GAC7B,IAAI,CAACuuD,oBAAoB,CAACQ,EAAgB/uD,EAC5C,EAMA02D,aAAc,SAAS3lE,CAAM,EAC3B,IAAIyO,EAAU,IAAI,CAAC5K,QAAQ,CAEvB+hE,EAAeC,EADSh9C,OAAO,CAAC,IAAI,CAACqjC,aAAa,EAAIz9C,EAAQoa,OAAO,CAAC7oB,GAElE,CAAC,IAAI,CAACksD,aAAa,CAAElsD,EAAO,CAC5B,CAACA,EAAQ,IAAI,CAACksD,aAAa,CAAC,CAEpC,OADA,IAAI,CAACA,aAAa,CAACiQ,SAAS,EAAI,IAAI,CAACjQ,aAAa,CAAC4Z,WAAW,GACvD,IAAI3+D,GAAO4+D,eAAe,CAACH,EAAc,CAC9C/pE,OAAQ,IAAI,EAEhB,EAMAmqE,sBAAuB,SAAU/2D,CAAC,EAEhC,IACIg3D,EADA5Z,EAAQ,IAAI,CAAC6Z,eAAe,CAACj3D,EAI7Bo9C,CAAiB,IAAjBA,EAAM3sD,MAAM,CACd,IAAI,CAACsO,eAAe,CAACq+C,CAAK,CAAC,EAAE,CAAEp9C,GAExBo9C,EAAM3sD,MAAM,CAAG,IACtBumE,EAAS,IAAI9+D,GAAO4+D,eAAe,CAAC1Z,EAAMgZ,OAAO,GAAI,CACnDxpE,OAAQ,IAAI,GAEd,IAAI,CAACmS,eAAe,CAACi4D,EAAQh3D,GAEjC,EAKAi3D,gBAAiB,SAASj3D,CAAC,EAYzB,IAAK,IAVDk3D,EADA9Z,EAAQ,EAAE,CAEVxyB,EAAK,IAAI,CAAC8+B,cAAc,CAACnW,EAAE,CAC3B1oB,EAAK,IAAI,CAAC6+B,cAAc,CAACpW,EAAE,CAC3BxoB,EAAKF,EAAK,IAAI,CAAC8+B,cAAc,CAACvqD,IAAI,CAClC4rB,EAAKF,EAAK,IAAI,CAAC6+B,cAAc,CAACxqD,GAAG,CACjCi4D,EAAgB,IAAIj/D,GAAOilB,KAAK,CAACloB,EAAI21B,EAAIE,GAAK71B,EAAI41B,EAAIE,IACtDqsC,EAAgB,IAAIl/D,GAAOilB,KAAK,CAACjoB,EAAI01B,EAAIE,GAAK51B,EAAI21B,EAAIE,IACtDssC,EAAiB,CAAC,IAAI,CAACzO,uBAAuB,CAC9C8K,EAAU9oC,IAAOE,GAAMD,IAAOE,EAEzBvuB,EAAI,IAAI,CAAC5H,QAAQ,CAACnE,MAAM,CAAE+L,MAG7B,EAFJ06D,EAAgB,IAAI,CAACtiE,QAAQ,CAAC4H,EAAE,GAET06D,EAAc52D,UAAU,EAAK42D,EAAcvgB,OAAO,EAIrE0gB,CAAAA,GAAmBH,EAAcI,kBAAkB,CAACH,EAAeC,EAAe,KAClFF,EAAcK,qBAAqB,CAACJ,EAAeC,EAAe,KACjEC,GAAkBH,EAAcjK,aAAa,CAACkK,EAAe,KAAM,KACnEE,GAAkBH,EAAcjK,aAAa,CAACmK,EAAe,KAAM,OAEtEha,EAAMrxD,IAAI,CAACmrE,GAEPxD,EAX4D/c,IAuBpE,OANIyG,EAAM3sD,MAAM,CAAG,GACjB2sD,CAAAA,EAAQA,EAAM/8C,MAAM,CAAC,SAASzP,CAAM,EAClC,MAAO,CAACA,EAAOq+D,QAAQ,CAAC,CAAEjvD,EAAGA,CAAE,EACjC,IAGKo9C,CACT,EAKA0W,mBAAoB,SAAS9zD,CAAC,EACxB,IAAI,CAACqoD,SAAS,EAAI,IAAI,CAACqB,cAAc,EACvC,IAAI,CAACqN,qBAAqB,CAAC/2D,GAE7B,IAAI,CAAC+rD,SAAS,CAAC,IAAI,CAAClD,aAAa,EAEjC,IAAI,CAACa,cAAc,CAAG,IACxB,CACF,GAIAxxD,GAAOyb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAACra,GAAOghD,YAAY,CAAC5qC,SAAS,CAA8C,CAkCnGtN,UAAW,SAAU3Q,CAAO,EAC1BA,GAAYA,CAAAA,EAAU,CAAE,GAExB,IAAI4G,EAAS5G,EAAQ4G,MAAM,EAAI,MAC3BktB,EAAU9zB,EAAQ8zB,OAAO,EAAI,EAC7BowB,EAAa,CAAClkD,EAAQkkD,UAAU,EAAI,GAAMlkD,CAAAA,EAAQ6pD,mBAAmB,CAAG,IAAI,CAACY,gBAAgB,GAAK,GAClG52B,EAAW,IAAI,CAACszC,eAAe,CAACjjB,EAAYlkD,GAChD,OAAO6H,GAAOyb,IAAI,CAAC3S,SAAS,CAACkjB,EAAUjtB,EAAQktB,EACjD,EAeAqzC,gBAAiB,SAASjjB,CAAU,CAAEkjB,CAAQ,EAC5CljB,EAAaA,GAAc,EAE3B,IAAImjB,EAAc,CAACD,CADnBA,EAAWA,GAAY,CAAE,GACG/hE,KAAK,EAAI,IAAI,CAACA,KAAK,EAAI6+C,EAC/CojB,EAAe,CAACF,EAASliE,MAAM,EAAI,IAAI,CAACA,MAAM,EAAIg/C,EAClDvd,EAAO,IAAI,CAAC6Z,OAAO,GACnB+mB,EAAgB,IAAI,CAACliE,KAAK,CAC1BmiE,EAAiB,IAAI,CAACtiE,MAAM,CAC5BuiE,EAAU9gC,EAAOud,EACjBwjB,EAAK,IAAI,CAAChe,iBAAiB,CAC3Br1B,EAAa,CAACqzC,CAAE,CAAC,EAAE,CAAIN,CAAAA,EAASt4D,IAAI,EAAI,IAAMo1C,EAC9C5vB,EAAa,CAACozC,CAAE,CAAC,EAAE,CAAIN,CAAAA,EAASv4D,GAAG,EAAI,IAAMq1C,EAC7CyjB,EAAsB,IAAI,CAACxd,WAAW,CAEtCyd,EAAiB,IAAI,CAAC/d,mBAAmB,CACzCh2B,EAAWhsB,GAAOyb,IAAI,CAACoQ,mBAAmB,GAC1Cm0C,EAAqB,IAAI,CAAC9c,UAAU,CAkBxC,OAjBAl3B,EAASxuB,KAAK,CAAGgiE,EACjBxzC,EAAS3uB,MAAM,CAAGoiE,EAClB,IAAI,CAACvc,UAAU,CAAG,KAClB,IAAI,CAAClB,mBAAmB,CAAG,GAC3B,IAAI,CAACM,WAAW,CAAG,GACnB,IAAI,CAACT,iBAAiB,CATV,CAAC+d,EAAS,EAAG,EAAGA,EAASpzC,EAAYC,EAAW,CAU5D,IAAI,CAACjvB,KAAK,CAAGgiE,EACb,IAAI,CAACniE,MAAM,CAAGoiE,EACd,IAAI,CAACta,sBAAsB,GAC3B,IAAI,CAACe,YAAY,CAACl6B,EAASlO,UAAU,CAAC,MAAO,IAAI,CAACphB,QAAQ,EAC1D,IAAI,CAACmlD,iBAAiB,CAAGge,EACzB,IAAI,CAACriE,KAAK,CAAGkiE,EACb,IAAI,CAACriE,MAAM,CAAGsiE,EACd,IAAI,CAACxa,sBAAsB,GAC3B,IAAI,CAAC7C,WAAW,CAAGwd,EACnB,IAAI,CAAC9d,mBAAmB,CAAG+d,EAC3B,IAAI,CAAC7c,UAAU,CAAG8c,EACXh0C,CACT,CACF,GAGFhsB,GAAOyb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAACra,GAAOghD,YAAY,CAAC5qC,SAAS,CAA8C,CAsBnGN,aAAc,SAAUmqD,CAAI,CAAEr9C,CAAQ,CAAEsH,CAAO,EAC7C,GAAK+1C,GAKL,IAAIC,EAAa,iBAAQD,EACrBE,KAAKC,KAAK,CAACH,GACXjgE,GAAOyb,IAAI,CAAC/iB,MAAM,CAACqO,KAAK,CAACk5D,GAEzBziC,EAAQ,IAAI,CACZrN,EAAW+vC,EAAW/vC,QAAQ,CAC9Bva,EAAoB,IAAI,CAACA,iBAAiB,CAoB9C,OAlBA,IAAI,CAACA,iBAAiB,CAAG,GAEzB,OAAOsqD,EAAW/vC,QAAQ,CAE1B,IAAI,CAACkwC,eAAe,CAACH,EAAW54D,OAAO,CAAE,SAAU6iB,CAAgB,EACjEqT,EAAM3nB,KAAK,GACX2nB,EAAM8iC,aAAa,CAACJ,EAAY,WAC1B/vC,EACFqN,EAAM6iC,eAAe,CAAC,CAAClwC,EAAS,CAAE,SAAUowC,CAAmB,EAC7D/iC,EAAMrN,QAAQ,CAAGowC,CAAmB,CAAC,EAAE,CACvC/iC,EAAMgjC,aAAa,CAACr+C,IAAI,CAACqb,EAAO0iC,EAAY/1C,EAAkBvU,EAAmBgN,EACnF,GAGA4a,EAAMgjC,aAAa,CAACr+C,IAAI,CAACqb,EAAO0iC,EAAY/1C,EAAkBvU,EAAmBgN,EAErF,EACF,EAAGsH,GACI,IAAI,CACb,EASAs2C,cAAe,SAASN,CAAU,CAAE/1C,CAAgB,CAAEvU,CAAiB,CAAEgN,CAAQ,EAC/E,IAAI4a,EAAQ,IAAI,CAChBrT,EAAiBlD,OAAO,CAAC,SAAS/D,CAAG,CAAEjX,CAAK,EAG1CuxB,EAAMhb,QAAQ,CAACU,EAAKjX,EACtB,GACA,IAAI,CAAC2J,iBAAiB,CAAGA,EAEzB,OAAOsqD,EAAW54D,OAAO,CACzB,OAAO44D,EAAW5e,eAAe,CACjC,OAAO4e,EAAW1e,YAAY,CAC9B,OAAO0e,EAAW5iE,UAAU,CAC5B,OAAO4iE,EAAWjX,OAAO,CAKzB,IAAI,CAAC3lC,WAAW,CAAC48C,GACjB,IAAI,CAACnqD,SAAS,GACd6M,GAAYA,GACd,EAOA09C,cAAe,SAASJ,CAAU,CAAEt9C,CAAQ,EAC1C,IAAI69C,EAAS,CACXzrE,gBAAiB,GACjBusD,aAAc,GACdD,gBAAiB,GACjBE,aAAc,EAChB,EAEA,GAAI,CAAC0e,EAAW5e,eAAe,EAAI,CAAC4e,EAAW1e,YAAY,EAAI,CAAC0e,EAAW5iE,UAAU,EAAI,CAAC4iE,EAAWjX,OAAO,CAAE,CAC5GrmC,GAAYA,IACZ,MACF,CAEA,IAAI89C,WAAa,WACXD,EAAOnf,eAAe,EAAImf,EAAOjf,YAAY,EAAIif,EAAOzrE,eAAe,EAAIyrE,EAAOlf,YAAY,EAChG3+B,GAAYA,GAEhB,EAEA,IAAI,CAAC+9C,cAAc,CAAC,kBAAmBT,EAAW5e,eAAe,CAAEmf,EAAQC,YAC3E,IAAI,CAACC,cAAc,CAAC,eAAgBT,EAAW1e,YAAY,CAAEif,EAAQC,YACrE,IAAI,CAACC,cAAc,CAAC,kBAAmBT,EAAW5iE,UAAU,CAAEmjE,EAAQC,YACtE,IAAI,CAACC,cAAc,CAAC,eAAgBT,EAAWjX,OAAO,CAAEwX,EAAQC,WAClE,EASAC,eAAgB,SAASl9C,CAAQ,CAAE3qB,CAAK,CAAE2nE,CAAM,CAAE79C,CAAQ,EACxD,IAAI4a,EAAQ,IAAI,CAEhB,GAAI,CAAC1kC,EAAO,CACV2nE,CAAM,CAACh9C,EAAS,CAAG,GACnBb,GAAYA,IACZ,MACF,CAEIa,oBAAAA,GAAkCA,iBAAAA,EACpCzjB,GAAOyb,IAAI,CAACwO,cAAc,CAAC,CAACnxB,EAAM,CAAE,SAAS8nE,CAAa,EACxDpjC,CAAK,CAAC/Z,EAAS,CAAGm9C,CAAa,CAAC,EAAE,CAClCH,CAAM,CAACh9C,EAAS,CAAG,GACnBb,GAAYA,GACd,GAGA,IAAI,CAAC,MAAQ5iB,GAAOyb,IAAI,CAACuN,MAAM,CAACzO,UAAU,CAACkJ,EAAU,IAAM,CAAC3qB,EAAO,WACjE2nE,CAAM,CAACh9C,EAAS,CAAG,GACnBb,GAAYA,GACd,EAEJ,EAQAy9C,gBAAiB,SAAU/4D,CAAO,CAAEsb,CAAQ,CAAEsH,CAAO,EACnD,GAAI,CAAC5iB,GAAWA,IAAAA,EAAQ/O,MAAM,CAAQ,CACpCqqB,GAAYA,EAAS,EAAE,EACvB,MACF,CAEA5iB,GAAOyb,IAAI,CAACwO,cAAc,CAAC3iB,EAAS,SAAS6iB,CAAgB,EAC3DvH,GAAYA,EAASuH,EACvB,EAAG,KAAMD,EACX,EAOA22C,WAAY,SAAU9hE,CAAM,CAAE6jB,CAAQ,EACpC,IAAI,CAAC7b,KAAK,CAAC,SAAUA,CAAK,EACxB6b,EAAS7b,EAAM+B,SAAS,CAAC/J,GAC3B,EACF,EAQA+hE,yBAA0B,SAAU/hE,CAAM,CAAEs9C,CAAU,CAAEz5B,CAAQ,EAC9D,IAAI,CAAC7b,KAAK,CAAC,SAAUA,CAAK,EACxB6b,EAAS7b,EAAMg6D,uBAAuB,CAAChiE,EAAQs9C,GACjD,EACF,EAOAt1C,MAAO,SAAU6b,CAAQ,CAAEgJ,CAAU,EACnC,IAAIriB,EAAO42D,KAAKa,SAAS,CAAC,IAAI,CAAC9pD,MAAM,CAAC0U,IACtC,IAAI,CAACq1C,gBAAgB,CAAC,SAASl6D,CAAK,EAClCA,EAAM+O,YAAY,CAACvM,EAAM,WACvBqZ,GAAYA,EAAS7b,EACvB,EACF,EACF,EAQAk6D,iBAAkB,SAASr+C,CAAQ,EACjC,IAAImd,EAAK//B,GAAOyb,IAAI,CAACoQ,mBAAmB,EAExCkU,CAAAA,EAAGviC,KAAK,CAAG,IAAI,CAACA,KAAK,CACrBuiC,EAAG1iC,MAAM,CAAG,IAAI,CAACA,MAAM,CAEvB,IAAI0J,EAAQ,IAAI/G,GAAO8U,MAAM,CAACirB,EAC1B,KAAI,CAACuhB,eAAe,EACtBv6C,EAAM07C,kBAAkB,CAAC,IAAI,CAACnB,eAAe,CAAC5hD,GAAG,CAAE,WACjDqH,EAAMgP,SAAS,GACf6M,GAAYA,EAAS7b,EACvB,GACAA,EAAMm6D,sBAAsB,CAAG,IAAI,CAACA,sBAAsB,CAC1Dn6D,EAAMo6D,sBAAsB,CAAG,IAAI,CAACA,sBAAsB,EAG1Dv+C,GAAYA,EAAS7b,EAEzB,CACF,GAMMsT,EAASra,CADTA,EAASuT,EAAOvT,MAAM,EAAKuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,IAC7Byb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAClCtT,EAAQ/G,EAAOyb,IAAI,CAAC/iB,MAAM,CAACqO,KAAK,CAChCuT,EAAUta,EAAOyb,IAAI,CAACnB,OAAO,CAC7BC,EAAava,EAAOyb,IAAI,CAACuN,MAAM,CAACzO,UAAU,CAC1CC,EAAmBxa,EAAOyb,IAAI,CAACjB,gBAAgB,CAC/CC,EAAgB,CAACza,EAAOqf,YAAY,CAGpCrf,EAAOmW,MAAM,GAuCjBnW,EAAOmW,MAAM,CAAGnW,EAAOyb,IAAI,CAACG,WAAW,CAAC5b,EAAOqjB,aAAa,CAAwC,CASlGzpB,KAA0B,SAQ1B69C,QAA0B,OAQ1BC,QAA0B,MAO1B1wC,IAA0B,EAO1BC,KAA0B,EAO1BzJ,MAA0B,EAO1BH,OAA0B,EAO1BmJ,OAA0B,EAO1BC,OAA0B,EAO1BqmB,MAA0B,GAO1BC,MAA0B,GAO1BpvB,QAA0B,EAO1BymB,MAA0B,EAO1BkI,MAA0B,EAO1BC,MAA0B,EAO1BjW,WAA0B,GAO1B8qD,gBAA+B,GAO/B/qD,mBAA0B,GAO1BoB,YAA0B,KAO1BC,WAA0B,KAO1BkhC,QAA0B,EAO1Bl7C,YAA0B,mBAO1B2jE,gBAA0B,KAO1B7qD,YAA0B,mBAQ1BC,kBAA0B,KAO1BF,YAAsB,OAOtB+qD,gBAA0B,KAU1BtR,gBAA0B,GAU1BC,iBAA0B,GAQ1B1nD,KAA0B,aAS1Bg5D,SAA0B,UAO1Bxa,yBAA0B,cAQ1B/xD,gBAA0B,GAQ1B+9D,yBAAmC,GAQnCviC,OAA0B,KAO1B9Z,YAA0B,EAM1B+zC,gBAA0B,KAO1B+W,iBAAkB,EAOlBhX,cAA0B,OAO1BnjC,eAA0B,QAO1BC,iBAA0B,EAO1BijC,OAA0B,KAO1BkX,wBAA0B,GAU1BC,kBAA0B,EAO1BC,cAA0B,EAQ1Bv5D,WAA0B,GAO1BlB,QAA0B,GAO1Bu3C,QAA0B,GAO1BmjB,YAA0B,GAO1BC,WAA0B,GAO1BlrD,mBAA0B,GAO1B8qC,qBAA0B,GAO1B/7C,cAA0B,GAO1BC,cAA0B,GAO1BG,aAA0B,GAO1BF,aAA0B,GAO1BC,aAA0B,GAO1Bi1C,aAA0B,GAO1BD,aAA0B,GAO1BN,gBAA0B,GAQ1BqO,kBAA0B,GAU1BnuC,cAA0BA,EAY1BqnD,eAA2B,GAW3BC,aAA2B,GAa3Bj7C,cAA4B,GAQ5Bk7C,MAAsB,GAUtBvO,SAAU,EAOVwO,WAAsB,OAWtBpG,SAAoB,OAQpBqG,gBAAiB,sTAKf54C,KAAK,CAAC,KASR64C,gBAAiB,wKAGf74C,KAAK,CAAC,KAMR84C,gBAAiB,8BAEf94C,KAAK,CAAC,KASR6G,SAAUv0B,KAAAA,EASVuzB,SAAU,GAYVkzC,mBAAoB,GAMpB3kC,WAAY,SAASvlC,CAAO,EACtBA,GACF,IAAI,CAACqrD,UAAU,CAACrrD,EAEpB,EAMA43D,mBAAoB,WAClB,IAAI,CAACuS,gBAAgB,CAAG,CAAC,EACzB,IAAI,CAACpb,YAAY,CAAGlnD,EAAOyb,IAAI,CAACoQ,mBAAmB,GACnD,IAAI,CAAC+mC,aAAa,CAAG,IAAI,CAAC1L,YAAY,CAACppC,UAAU,CAAC,MAClD,IAAI,CAACykD,kBAAkB,GAEvB,IAAI,CAACP,KAAK,CAAG,EACf,EAiBAQ,gBAAiB,SAASC,CAAI,EAC5B,IAAI1iD,EAAqB/f,EAAO+f,kBAAkB,CAC9CviB,EAAQilE,EAAKjlE,KAAK,CAAEH,EAASolE,EAAKplE,MAAM,CACxCL,EAAMgD,EAAOggB,iBAAiB,CAAEjjB,EAAMiD,EAAOigB,iBAAiB,CAClE,GAAIziB,GAASR,GAAOK,GAAUL,GAAOQ,EAAQH,GAAU0iB,EAOrD,OANIviB,EAAQT,GACV0lE,CAAAA,EAAKjlE,KAAK,CAAGT,CAAAA,EAEXM,EAASN,GACX0lE,CAAAA,EAAKplE,MAAM,CAAGN,CAAAA,EAET0lE,EAET,IAAyBC,EAAc1iE,EAAOyb,IAAI,CAAC+S,eAAe,CAAzDhxB,EAAQH,EAAsD0iB,GACnE6O,EAAW5uB,EAAOyb,IAAI,CAACmT,QAAQ,CAC/B1J,EAAI0J,EAAS7xB,EAAK2lE,EAAYx9C,CAAC,CAAEloB,GACjCmoB,EAAIyJ,EAAS7xB,EAAK2lE,EAAYv9C,CAAC,CAAEnoB,GAWrC,OAVIQ,EAAQ0nB,IACVu9C,EAAKzb,KAAK,EAAIxpD,EAAQ0nB,EACtBu9C,EAAKjlE,KAAK,CAAG0nB,EACbu9C,EAAKE,MAAM,CAAG,IAEZtlE,EAAS8nB,IACXs9C,EAAKxb,KAAK,EAAI5pD,EAAS8nB,EACvBs9C,EAAKplE,MAAM,CAAG8nB,EACds9C,EAAKE,MAAM,CAAG,IAETF,CACT,EAaAG,0BAA2B,WACzB,IAAIC,EAAc,IAAI,CAACC,qBAAqB,GAExC5oB,EAAM,IAAI,CAACV,yBAAyB,CAAC,EAAG,GACxCupB,EAAU7oB,EAAIh1B,CAAC,CAAG29C,EAAYr8D,MAAM,CAAG,IAAI,CAACA,MAAM,CAClDw8D,EAAU9oB,EAAI/0B,CAAC,CAAG09C,EAAYp8D,MAAM,CAAG,IAAI,CAACA,MAAM,CACtD,MAAO,CAILjJ,MAAOulE,EArtBQ,EAstBf1lE,OAAQ2lE,EAttBO,EAutBfhc,MAAO6b,EAAYr8D,MAAM,CACzBygD,MAAO4b,EAAYp8D,MAAM,CACzBye,EAAG69C,EACH59C,EAAG69C,CACL,CACF,EAQAT,mBAAoB,WAClB,IAAI3kD,EAAe,IAAI,CAAClpB,MAAM,CAC9B,GAAI,IAAI,CAACqtE,YAAY,EAAInkD,GAAgBA,EAAa2zC,iBAAiB,CAAE,CACvE,IAAI14D,EAAS+kB,EAAa2zC,iBAAiB,CAAC14D,MAAM,CAC9Cs6D,EAASv1C,EAAa2zC,iBAAiB,CAAC4B,MAAM,CAClD,GAAI,IAAI,GAAKt6D,GAAUs6D,EAAOjvD,KAAK,EAAIivD,UAAAA,EAAOjvD,KAAK,CAAC,EAAG,GACrD,MAAO,EAEX,CACA,IAG8C++D,EAAcC,EAHxDxuE,EAAS,IAAI,CAACwyD,YAAY,CAC1Bub,EAAO,IAAI,CAACD,eAAe,CAAC,IAAI,CAACI,yBAAyB,IAC1DO,EAAenjE,EAAOigB,iBAAiB,CACvCziB,EAAQilE,EAAKjlE,KAAK,CAAEH,EAASolE,EAAKplE,MAAM,CACxC2pD,EAAQyb,EAAKzb,KAAK,CAAEC,EAAQwb,EAAKxb,KAAK,CACtCmc,EAAoB5lE,IAAU,IAAI,CAAC6lE,UAAU,EAAIhmE,IAAW,IAAI,CAACimE,WAAW,CAC5EC,EAAc,IAAI,CAACvc,KAAK,GAAKA,GAAS,IAAI,CAACC,KAAK,GAAKA,EACrDuc,EAAeJ,GAAqBG,EACpCE,EAAkB,EAAGC,EAAmB,EAAGC,EAAqB,GACpE,GAAIP,EAAmB,CACrB,IAAIQ,EAAc,IAAI,CAAC1c,YAAY,CAAC1pD,KAAK,CACrCqmE,EAAe,IAAI,CAAC3c,YAAY,CAAC7pD,MAAM,CACvCymE,EAActmE,EAAQomE,GAAevmE,EAASwmE,EAGlDF,EAAqBG,GAFD,CAACtmE,EAAQomE,GAAAA,GAAqBvmE,EAASwmE,GAAAA,CAAe,GACpED,EAAcT,GAAgBU,EAAeV,EAE/CW,GAAe,CAACrB,EAAKE,MAAM,EAAKnlE,CAAAA,EAAQ2lE,GAAgB9lE,EAAS8lE,CAAAA,IACnEM,EAAkBjmE,GAAAA,EAClBkmE,EAAmBrmE,GAAAA,EAEvB,QAOA,IANQ,YAAY2C,EAAO2oB,IAAI,EAAI,IAAI,CAAC2C,IAAI,GAC1Ck4C,EAAe,GACfG,EAAqB,GACrBF,GAAmB,IAAI,CAACM,eAAe,CAAC,GAAK,IAAI,CAAC/c,KAAK,CACvD0c,GAAoB,IAAI,CAACK,eAAe,CAAC,GAAK,IAAI,CAAC9c,KAAK,IAEtDuc,IACEG,GACFjvE,EAAO8I,KAAK,CAAGZ,KAAKof,IAAI,CAACxe,EAAQimE,GACjC/uE,EAAO2I,MAAM,CAAGT,KAAKof,IAAI,CAAC3e,EAASqmE,KAGnC,IAAI,CAAC9Q,aAAa,CAACoR,YAAY,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAC/C,IAAI,CAACpR,aAAa,CAAC/M,SAAS,CAAC,EAAG,EAAGnxD,EAAO8I,KAAK,CAAE9I,EAAO2I,MAAM,GAEhE4lE,EAAeR,EAAKv9C,CAAC,CAAG,EACxBg+C,EAAgBT,EAAKt9C,CAAC,CAAG,EACzB,IAAI,CAACgiC,iBAAiB,CAAGvqD,KAAKC,KAAK,CAACnI,EAAO8I,KAAK,CAAG,EAAIylE,GAAgBA,EACvE,IAAI,CAAC7b,iBAAiB,CAAGxqD,KAAKC,KAAK,CAACnI,EAAO2I,MAAM,CAAG,EAAI6lE,GAAiBA,EACzE,IAAI,CAACG,UAAU,CAAG7lE,EAClB,IAAI,CAAC8lE,WAAW,CAAGjmE,EACnB,IAAI,CAACu1D,aAAa,CAAC70C,SAAS,CAAC,IAAI,CAACopC,iBAAiB,CAAE,IAAI,CAACC,iBAAiB,EAC3E,IAAI,CAACwL,aAAa,CAACrsD,KAAK,CAACygD,EAAOC,GAChC,IAAI,CAACD,KAAK,CAAGA,EACb,IAAI,CAACC,KAAK,CAAGA,EACN,GAGX,EAMAzD,WAAY,SAASrrD,CAAO,EAC1B,IAAI,CAACmrB,WAAW,CAACnrB,GACjB,IAAI,CAACorB,aAAa,CAACprB,EAAQoQ,IAAI,CAAE,QACjC,IAAI,CAACgb,aAAa,CAACprB,EAAQq4B,MAAM,CAAE,UACnC,IAAI,CAAC5M,YAAY,CAACzrB,EAAQoQ,IAAI,CAAE,QAChC,IAAI,CAACqb,YAAY,CAACzrB,EAAQq4B,MAAM,CAAE,SACpC,EAMA5I,UAAW,SAAS/J,CAAG,EACrB,IAAIomD,EAAoB,IAAK,CAAC/e,KAAK,EAAI,CAAC,IAAI,CAACA,KAAK,CAACwB,cAAc,EAC7D,IAAI,CAACxB,KAAK,EAAI,IAAI,CAACxwD,MAAM,EAAImpB,IAAQ,IAAI,CAACnpB,MAAM,CAACwuD,UAAU,CAC3DrxB,EAAI,IAAI,CAAC3B,mBAAmB,CAAC,CAAC+zC,GAClCpmD,EAAI+J,SAAS,CAACiK,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAClD,EAOA42B,SAAU,SAASF,CAAmB,EACpC,IAAIv5B,EAAsBhvB,EAAOmW,MAAM,CAAC6Y,mBAAmB,CAEvDt2B,EAAS,CACPkB,KAA0B,IAAI,CAACA,IAAI,CACnC0iB,QAA0Btc,EAAOsc,OAAO,CACxCm7B,QAA0B,IAAI,CAACA,OAAO,CACtCC,QAA0B,IAAI,CAACA,OAAO,CACtCzwC,KAA0BqT,EAAQ,IAAI,CAACrT,IAAI,CAAE+nB,GAC7ChoB,IAA0BsT,EAAQ,IAAI,CAACtT,GAAG,CAAEgoB,GAC5CxxB,MAA0B8c,EAAQ,IAAI,CAAC9c,KAAK,CAAEwxB,GAC9C3xB,OAA0Bid,EAAQ,IAAI,CAACjd,MAAM,CAAE2xB,GAC/CzmB,KAA0B,IAAK,CAACA,IAAI,EAAI,IAAI,CAACA,IAAI,CAACkgD,QAAQ,CAAI,IAAI,CAAClgD,IAAI,CAACkgD,QAAQ,GAAK,IAAI,CAAClgD,IAAI,CAC9FioB,OAA0B,IAAK,CAACA,MAAM,EAAI,IAAI,CAACA,MAAM,CAACi4B,QAAQ,CAAI,IAAI,CAACj4B,MAAM,CAACi4B,QAAQ,GAAK,IAAI,CAACj4B,MAAM,CACtG9Z,YAA0B4D,EAAQ,IAAI,CAAC5D,WAAW,CAAEsY,GACpDy7B,gBAA0B,IAAI,CAACA,eAAe,CAAG,IAAI,CAACA,eAAe,CAAC3sD,MAAM,GAAK,IAAI,CAAC2sD,eAAe,CACrGD,cAA0B,IAAI,CAACA,aAAa,CAC5CgX,iBAA0B,IAAI,CAACA,gBAAgB,CAC/Cn6C,eAA0B,IAAI,CAACA,cAAc,CAC7CP,cAA0B,IAAI,CAACA,aAAa,CAC5CQ,iBAA0BhN,EAAQ,IAAI,CAACgN,gBAAgB,CAAE0H,GACzDxoB,OAA0B8T,EAAQ,IAAI,CAAC9T,MAAM,CAAEwoB,GAC/CvoB,OAA0B6T,EAAQ,IAAI,CAAC7T,MAAM,CAAEuoB,GAC/C5K,MAA0B9J,EAAQ,IAAI,CAAC8J,KAAK,CAAE4K,GAC9ClC,MAA0B,IAAI,CAACA,KAAK,CACpCC,MAA0B,IAAI,CAACA,KAAK,CACpCpvB,QAA0B2c,EAAQ,IAAI,CAAC3c,OAAO,CAAEqxB,GAChDu7B,OAA0B,IAAK,CAACA,MAAM,EAAI,IAAI,CAACA,MAAM,CAAC9B,QAAQ,CAAI,IAAI,CAAC8B,MAAM,CAAC9B,QAAQ,GAAK,IAAI,CAAC8B,MAAM,CACtG9L,QAA0B,IAAI,CAACA,OAAO,CACtCzpD,gBAA0B,IAAI,CAACA,eAAe,CAC9CusE,SAA0B,IAAI,CAACA,QAAQ,CACvCU,WAA0B,IAAI,CAACA,UAAU,CACzClb,yBAA0B,IAAI,CAACA,wBAAwB,CACvDz6B,MAA0BhS,EAAQ,IAAI,CAACgS,KAAK,CAAE0C,GAC9CzC,MAA0BjS,EAAQ,IAAI,CAACiS,KAAK,CAAEyC,EAChD,EAaJ,OAXI,IAAI,CAACmB,QAAQ,EAAI,CAAC,IAAI,CAACA,QAAQ,CAACy4B,iBAAiB,GACnDlwD,EAAOy3B,QAAQ,CAAG,IAAI,CAACA,QAAQ,CAACs4B,QAAQ,CAACF,GACzC7vD,EAAOy3B,QAAQ,CAAChB,QAAQ,CAAG,IAAI,CAACgB,QAAQ,CAAChB,QAAQ,CACjDz2B,EAAOy3B,QAAQ,CAACkyC,kBAAkB,CAAG,IAAI,CAAClyC,QAAQ,CAACkyC,kBAAkB,EAGvEriE,EAAOyb,IAAI,CAACiQ,sBAAsB,CAAC,IAAI,CAAEhzB,EAAQ6vD,GAC5C,IAAI,CAAC9G,oBAAoB,EAC5B/oD,CAAAA,EAAS,IAAI,CAACwrE,oBAAoB,CAACxrE,EAAAA,EAG9BA,CACT,EAOA8vD,iBAAkB,SAASD,CAAmB,EAE5C,OAAO,IAAI,CAACE,QAAQ,CAACF,EACvB,EAMA2b,qBAAsB,SAASxrE,CAAM,EACnC,IAAI0d,EAAYpW,EAAOyb,IAAI,CAACqN,QAAQ,CAACpwB,EAAOkB,IAAI,EAAEwc,SAAS,CAgB3D,OAdA8rD,EADgCA,eAAe,CAC/Bj7C,OAAO,CAAC,SAAS7E,CAAI,EACtB,SAATA,GAAmBA,QAAAA,IAGnB1pB,CAAM,CAAC0pB,EAAK,GAAKhM,CAAS,CAACgM,EAAK,EAClC,OAAO1pB,CAAM,CAAC0pB,EAAK,CAGjBllB,MAAMC,OAAO,CAACzE,CAAM,CAAC0pB,EAAK,GAAKllB,MAAMC,OAAO,CAACiZ,CAAS,CAACgM,EAAK,GAC3D1pB,IAAAA,CAAM,CAAC0pB,EAAK,CAAC7pB,MAAM,EAAU6d,IAAAA,CAAS,CAACgM,EAAK,CAAC7pB,MAAM,EACtD,OAAOG,CAAM,CAAC0pB,EAAK,CAEvB,GAEO1pB,CACT,EAMAyQ,SAAU,WACR,MAAO,YAAcoR,EAAW,IAAI,CAAC3gB,IAAI,EAAI,GAC/C,EAMAuqE,iBAAkB,WAKhB,GAAI,CAAC,IAAI,CAACjf,KAAK,CACb,MAAO,CACL1+C,OAAQ,IAAI,CAACA,MAAM,CACnBC,OAAQ,IAAI,CAACA,MAAM,EAIvB,IAAItO,EAAU6H,EAAOyb,IAAI,CAAC2Q,WAAW,CAAC,IAAI,CAAC8D,mBAAmB,IAC9D,MAAO,CAAE1pB,OAAQ5J,KAAKkf,GAAG,CAAC3jB,EAAQqO,MAAM,EAAGC,OAAQ7J,KAAKkf,GAAG,CAAC3jB,EAAQsO,MAAM,CAAE,CAC9E,EAMAq8D,sBAAuB,WACrB,IAAIv8D,EAAQ,IAAI,CAAC49D,gBAAgB,GAAI39D,EAASD,EAAMC,MAAM,CAAEC,EAASF,EAAME,MAAM,CACjF,GAAI,IAAI,CAAC/R,MAAM,CAAE,CACf,IAAIoqC,EAAO,IAAI,CAACpqC,MAAM,CAACikD,OAAO,GAC1ByrB,EAAS,IAAI,CAAC1vE,MAAM,CAACkuD,gBAAgB,GACzCp8C,GAAUs4B,EAAOslC,EACjB39D,GAAUq4B,EAAOslC,CACnB,CACA,MAAO,CAAE59D,OAAQA,EAAQC,OAAQA,CAAO,CAC1C,EAMA49D,iBAAkB,WAChB,IAAI1mE,EAAU,IAAI,CAACA,OAAO,CAI1B,OAHI,IAAI,CAACunD,KAAK,EACZvnD,CAAAA,GAAW,IAAI,CAACunD,KAAK,CAACmf,gBAAgB,IAEjC1mE,CACT,EAQAqmB,KAAM,SAAShf,CAAG,CAAElM,CAAK,EACvB,IAAIwrE,EAAwBt/D,WAAAA,GAAoBA,WAAAA,EAC5Cu/D,EAAY,IAAI,CAACv/D,EAAI,GAAKlM,EAAO0rE,EAAmB,GAgCxD,OA9BIF,GACFxrE,CAAAA,EAAQ,IAAI,CAAC2rE,eAAe,CAAC3rE,EAAAA,EAE3BkM,WAAAA,GAAoBlM,EAAQ,GAC9B,IAAI,CAACg0B,KAAK,CAAG,CAAC,IAAI,CAACA,KAAK,CACxBh0B,GAAS,IAEFkM,WAAAA,GAAoBlM,EAAQ,GACnC,IAAI,CAACi0B,KAAK,CAAG,CAAC,IAAI,CAACA,KAAK,CACxBj0B,GAAS,IAEFkM,WAAAA,IAAoBlM,GAAWA,aAAiBkH,EAAOitD,MAAM,CAGrD,UAARjoD,GAAmB,IAAI,CAACkgD,KAAK,EACpC,IAAI,CAACA,KAAK,CAACpgD,GAAG,CAAC,QAAShM,GAHxBA,EAAQ,IAAIkH,EAAOitD,MAAM,CAACn0D,GAM5B,IAAI,CAACkM,EAAI,CAAGlM,EAERyrE,IACFC,EAAmB,IAAI,CAACtf,KAAK,EAAI,IAAI,CAACA,KAAK,CAACwf,UAAU,GAClD,IAAI,CAACvC,eAAe,CAACzgD,OAAO,CAAC1c,GAAO,IACtC,IAAI,CAACg9D,KAAK,CAAG,GACbwC,GAAoB,IAAI,CAACtf,KAAK,CAACpgD,GAAG,CAAC,QAAS,KAErC0/D,GAAoB,IAAI,CAACtC,eAAe,CAACxgD,OAAO,CAAC1c,GAAO,IAC/D,IAAI,CAACkgD,KAAK,CAACpgD,GAAG,CAAC,QAAS,KAGrB,IAAI,EASb6/D,WAAY,WAEZ,EAQAC,qBAAsB,kBACpB,IAAQ,CAAClwE,MAAM,EAAI,IAAI,CAACA,MAAM,CAACmtD,iBAAiB,CACvC,IAAI,CAACntD,MAAM,CAACmtD,iBAAiB,CAE/B7hD,EAAO6f,OAAO,CAAC/hB,MAAM,EAC9B,EAQA+mE,aAAc,WACZ,OAAO,QAAI,CAAClnE,OAAO,EAChB,CAAC,IAAI,CAACH,KAAK,EAAI,CAAC,IAAI,CAACH,MAAM,EAAI,QAAI,CAACqZ,WAAW,EAChD,CAAC,IAAI,CAAC+nC,OAAO,EAOjBsC,OAAQ,SAASljC,CAAG,GAEd,IAAI,CAACgnD,YAAY,IAGjB,MAAI,CAACnwE,MAAM,GAAI,IAAI,CAACA,MAAM,CAACwtD,aAAa,EAAK,IAAI,CAACgD,KAAK,EAAK,IAAI,CAAC4f,UAAU,MAG/EjnD,EAAIggC,IAAI,GACR,IAAI,CAACknB,wBAAwB,CAAClnD,GAC9B,IAAI,CAACmnD,uBAAuB,CAACnnD,GAC7B,IAAI,CAAC+J,SAAS,CAAC/J,GACf,IAAI,CAAConD,WAAW,CAACpnD,GACjB,IAAI,CAACktC,UAAU,CAACltC,EAAK,IAAI,EACrB,IAAI,CAAC4oC,WAAW,IAClB,IAAI,CAACE,WAAW,GAChB,IAAI,CAACue,iBAAiB,CAACrnD,KAGvB,IAAI,CAACsnD,kBAAkB,GACvB,IAAI,CAACnD,KAAK,CAAG,GACb,IAAI,CAACoD,UAAU,CAACvnD,GACZ,IAAI,CAACpD,aAAa,EAAI,IAAI,CAACqnD,cAAc,EAC3C,IAAI,CAAC/E,SAAS,CAAC,CAAEsI,YAAa,iBAAkB,IAGpDxnD,EAAIsgC,OAAO,GACb,EAEAwI,YAAa,SAASxuD,CAAO,EAC3BA,EAAUA,GAAW,CAAC,EACjB,IAAI,CAAC+uD,YAAY,EAAK,IAAI,CAAC0L,aAAa,EAC3C,IAAI,CAAC7C,kBAAkB,GAErB,IAAI,CAACuV,YAAY,KACnB,IAAI,CAACxD,cAAc,EAAI,IAAI,CAAC/E,SAAS,CAAC,CAAEsI,YAAa,iBAAkB,GACvE,IAAI,CAACD,UAAU,CAAC,IAAI,CAACxS,aAAa,CAAEz6D,EAAQyuD,WAAW,EACvD,IAAI,CAACob,KAAK,CAAG,GAEjB,EAKAmD,mBAAoB,WAClB,IAAI,CAACje,YAAY,CAAG,KACpB,IAAI,CAAC0L,aAAa,CAAG,KACrB,IAAI,CAACyQ,UAAU,CAAG,EAClB,IAAI,CAACC,WAAW,CAAG,CACrB,EAYAiC,UAAW,WACT,OAAO,IAAI,CAAC/0C,MAAM,EAAI,oBAAI,CAACA,MAAM,EAAsB,QAAI,CAAC9Z,WAAW,EAazE8uD,QAAS,WACP,OAAO,IAAI,CAACj9D,IAAI,EAAI,oBAAI,CAACA,IAAI,EAW/Bk9D,iBAAkB,mBACZ,gBAAI,CAACxD,UAAU,EACjB,IAAI,CAACuD,OAAO,IAAM,IAAI,CAACD,SAAS,KAAM,iBAAO,IAAI,CAAChb,MAAM,IAGtD,IAAI,CAACp6B,QAAQ,EAenBs2B,YAAa,WAKX,OAJA,IAAI,CAACif,UAAU,CAAG,IAAI,CAACD,gBAAgB,IACrC,IAAI,CAAChrD,aAAa,EACjB,EAAC,IAAI,CAACyqC,KAAK,EAAI,CAAC,IAAI,CAACA,KAAK,CAACwf,UAAU,IAEjC,IAAI,CAACgB,UAAU,EAQxBC,eAAgB,WACd,MAAO,CAAC,CAAC,IAAI,CAACpb,MAAM,EAAK,SAAI,CAACA,MAAM,CAACxR,OAAO,EAAU,QAAI,CAACwR,MAAM,CAACvR,OAAO,CAC3E,EAOA4sB,oBAAqB,SAAS/nD,CAAG,CAAEsS,CAAQ,EAWzC,GAVAtS,EAAIggC,IAAI,GAGJ1tB,EAAShB,QAAQ,CACnBtR,EAAIkpC,wBAAwB,CAAG,kBAG/BlpC,EAAIkpC,wBAAwB,CAAG,iBAG7B52B,EAASkyC,kBAAkB,CAAE,CAC/B,IAAIxwC,EAAI7xB,EAAOyb,IAAI,CAAC0M,eAAe,CAAC,IAAI,CAAC+H,mBAAmB,IAC5DrS,EAAI+J,SAAS,CAACiK,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAClD,CACA1B,EAASvI,SAAS,CAAC/J,GACnBA,EAAItX,KAAK,CAAC,EAAI4pB,EAAS62B,KAAK,CAAE,EAAI72B,EAAS82B,KAAK,EAChDppC,EAAII,SAAS,CAACkS,EAAS+2B,YAAY,CAAE,CAAC/2B,EAASg3B,iBAAiB,CAAE,CAACh3B,EAASi3B,iBAAiB,EAC7FvpC,EAAIsgC,OAAO,EACb,EAMAinB,WAAY,SAASvnD,CAAG,CAAE+oC,CAAW,EACnC,IAAIif,EAAe,IAAI,CAACt9D,IAAI,CAAEu9D,EAAiB,IAAI,CAACt1C,MAAM,CACtDo2B,GACF,IAAI,CAACr+C,IAAI,CAAG,QACZ,IAAI,CAACioB,MAAM,CAAG,GACd,IAAI,CAACu1C,sBAAsB,CAACloD,IAG5B,IAAI,CAACyoC,iBAAiB,CAACzoC,GAEzB,IAAI,CAACuuC,OAAO,CAACvuC,GACb,IAAI,CAACmoD,aAAa,CAACnoD,EAAK,IAAI,CAACsS,QAAQ,EACrC,IAAI,CAAC5nB,IAAI,CAAGs9D,EACZ,IAAI,CAACr1C,MAAM,CAAGs1C,CAChB,EAOAE,cAAe,SAAUnoD,CAAG,CAAEsS,CAAQ,EAC/BA,IAILA,EAASz7B,MAAM,CAAG,IAAI,CAACA,MAAM,CAC7By7B,EAASs2B,WAAW,GACpBt2B,EAASu2B,cAAc,CAAG,GAC1Bv2B,EAASw2B,WAAW,CAAC,CAAEC,YAAa,EAAK,GACzC,IAAI,CAACgf,mBAAmB,CAAC/nD,EAAKsS,GAChC,EAMA+0C,kBAAmB,SAASrnD,CAAG,EAC7BA,EAAItX,KAAK,CAAC,EAAI,IAAI,CAACygD,KAAK,CAAE,EAAI,IAAI,CAACC,KAAK,EACxCppC,EAAII,SAAS,CAAC,IAAI,CAACipC,YAAY,CAAE,CAAC,IAAI,CAACC,iBAAiB,CAAE,CAAC,IAAI,CAACC,iBAAiB,CACnF,EAOAke,aAAc,SAASW,CAAU,EAC/B,GAAI,IAAI,CAACpB,YAAY,GACnB,MAAO,GAET,GAAI,IAAI,CAAC3d,YAAY,EAAI,IAAI,CAAC0L,aAAa,EAAI,CAACqT,GAAc,IAAI,CAAC1D,kBAAkB,GAEnF,MAAO,GAGP,GAAI,IAAI,CAACP,KAAK,EACX,IAAI,CAAC7xC,QAAQ,EAAI,IAAI,CAACA,QAAQ,CAACkyC,kBAAkB,EACjD,IAAI,CAACP,cAAc,EAAI,IAAI,CAACvF,eAAe,CAAC,mBAC7C,CACA,GAAI,IAAI,CAACrV,YAAY,EAAI,IAAI,CAAC0L,aAAa,EAAI,CAACqT,EAAY,CAC1D,IAAIzoE,EAAQ,IAAI,CAAC6lE,UAAU,CAAG,IAAI,CAACrc,KAAK,CACpC3pD,EAAS,IAAI,CAACimE,WAAW,CAAG,IAAI,CAACrc,KAAK,CAC1C,IAAI,CAAC2L,aAAa,CAAC/M,SAAS,CAAC,CAACroD,EAAQ,EAAG,CAACH,EAAS,EAAGG,EAAOH,EAC/D,CACA,MAAO,EACT,CAEF,MAAO,EACT,EAOAipD,kBAAmB,SAASzoC,CAAG,EAC7B,GAAK,IAAI,CAAC7oB,eAAe,EAGzB,IAAIklD,EAAM,IAAI,CAACgsB,4BAA4B,EAC3CroD,CAAAA,EAAIigC,SAAS,CAAG,IAAI,CAAC9oD,eAAe,CAEpC6oB,EAAIsxC,QAAQ,CACV,CAACjV,EAAIh1B,CAAC,CAAG,EACT,CAACg1B,EAAI/0B,CAAC,CAAG,EACT+0B,EAAIh1B,CAAC,CACLg1B,EAAI/0B,CAAC,EAIP,IAAI,CAACghD,aAAa,CAACtoD,GACrB,EAMAonD,YAAa,SAASpnD,CAAG,EACnB,IAAI,CAACqnC,KAAK,EAAI,CAAC,IAAI,CAACA,KAAK,CAACwB,cAAc,CAC1C7oC,EAAIqxC,WAAW,CAAG,IAAI,CAACmV,gBAAgB,GAGvCxmD,EAAIqxC,WAAW,EAAI,IAAI,CAACvxD,OAAO,EAInCyoE,iBAAkB,SAASvoD,CAAG,CAAEwoD,CAAI,EAClC,IAAI71C,EAAS61C,EAAK71C,MAAM,CACpBA,IACF3S,EAAImgC,SAAS,CAAGqoB,EAAK3vD,WAAW,CAChCmH,EAAI8sC,OAAO,CAAG0b,EAAK7b,aAAa,CAChC3sC,EAAIyoD,cAAc,CAAGD,EAAK7E,gBAAgB,CAC1C3jD,EAAIgtC,QAAQ,CAAGwb,EAAKh/C,cAAc,CAClCxJ,EAAI+sC,UAAU,CAAGyb,EAAK/+C,gBAAgB,CAClCkJ,EAAOk3B,MAAM,CACXl3B,eAAAA,EAAO+1C,aAAa,EAAqB/1C,EAAOm3B,iBAAiB,EAAIn3B,EAAOo3B,gBAAgB,CAK9F,IAAI,CAAC4e,mCAAmC,CAAC3oD,EAAK2S,IAI9C3S,EAAIkgC,WAAW,CAAGvtB,EAAOk3B,MAAM,CAAC7pC,EAAK,IAAI,EACzC,IAAI,CAAC4oD,8BAA8B,CAAC5oD,EAAK2S,IAK3C3S,EAAIkgC,WAAW,CAAGsoB,EAAK71C,MAAM,CAGnC,EAEAk2C,eAAgB,SAAS7oD,CAAG,CAAEwoD,CAAI,EAChC,IAAI99D,EAAO89D,EAAK99D,IAAI,CAChBA,IACEA,EAAKm/C,MAAM,EACb7pC,EAAIigC,SAAS,CAAGv1C,EAAKm/C,MAAM,CAAC7pC,EAAK,IAAI,EACrC,IAAI,CAAC4oD,8BAA8B,CAAC5oD,EAAKwoD,EAAK99D,IAAI,GAGlDsV,EAAIigC,SAAS,CAAGv1C,EAGtB,EAEAw9D,uBAAwB,SAASloD,CAAG,EAClCA,EAAIqxC,WAAW,CAAG,EAClBrxC,EAAIkgC,WAAW,CAAG,cAClBlgC,EAAIigC,SAAS,CAAG,SAClB,EAQAsW,aAAc,SAASv2C,CAAG,CAAE8oD,CAAS,EAC9BA,GAAaA,IAAAA,EAAUpuE,MAAM,GAI9B,EAAIouE,EAAUpuE,MAAM,EACtBouE,EAAU9yE,IAAI,CAACiuB,KAAK,CAAC6kD,EAAWA,GAElC9oD,EAAIqsC,WAAW,CAACyc,GAClB,EAQAzP,gBAAiB,SAASr5C,CAAG,CAAEy/B,CAAa,EAC1C,IAEInlD,EAASyuE,EAAapgB,EAFtB3B,EAAM,IAAI,CAAC+f,oBAAoB,GAC/B13C,EAAS,IAAI,CAACgD,mBAAmB,GAGrC02C,EAAc,KAAoC,IAA7BtpB,CADrBA,EAAgBA,GAAiB,CAAE,GACAukB,UAAU,CAAmBvkB,EAAcukB,UAAU,CAAG,IAAI,CAACA,UAAU,CAC1Grb,EAAe,KAAqC,IAA9BlJ,EAAcskB,WAAW,CAAmBtkB,EAAcskB,WAAW,CAAG,IAAI,CAACA,WAAW,CAC9G10C,EAASltB,EAAOyb,IAAI,CAACyQ,yBAAyB,CAAC24B,EAAK33B,GACpD/0B,EAAU6H,EAAOyb,IAAI,CAAC2Q,WAAW,CAACc,GAClCrP,EAAIggC,IAAI,GACRhgC,EAAIE,SAAS,CAAC5lB,EAAQq0B,UAAU,CAAEr0B,EAAQs0B,UAAU,EACpD5O,EAAImgC,SAAS,CAAG,EAAI,IAAI,CAAC0jB,iBAAiB,CACrC,IAAI,CAACxc,KAAK,EACbrnC,CAAAA,EAAIqxC,WAAW,CAAG,IAAI,CAAC4M,QAAQ,CAAG,IAAI,CAAC2F,uBAAuB,CAAG,GAE/D,IAAI,CAAC30C,KAAK,EACZ30B,CAAAA,EAAQisB,KAAK,EAAI,KAEnBvG,EAAIuP,MAAM,CAAC5S,EAAiB,IAAI,CAAC0qC,KAAK,CAAG/sD,EAAQisB,KAAK,CAAG,IAAI,CAACA,KAAK,GAC/Dk5B,EAAcupB,kBAAkB,EAAI,IAAI,CAAC3hB,KAAK,CAChD0hB,GAAe,IAAI,CAACE,kBAAkB,CAACjpD,EAAK1lB,EAASmlD,GAGrDspB,GAAe,IAAI,CAACA,WAAW,CAAC/oD,EAAKy/B,GAEvCkJ,GAAgB,IAAI,CAACA,YAAY,CAAC3oC,EAAKy/B,GACvCz/B,EAAIsgC,OAAO,EACb,EAMA4M,WAAY,SAASltC,CAAG,EACtB,GAAK,IAAI,CAAC0sC,MAAM,EAIhB,IAAgDwc,EAA5Cxc,EAAS,IAAI,CAACA,MAAM,CAAE71D,EAAS,IAAI,CAACA,MAAM,CAC1CsyE,EAAQtyE,GAAWA,EAAOmtD,iBAAiB,CAAC,EAAE,EAAK,EACnDolB,EAAQvyE,GAAWA,EAAOmtD,iBAAiB,CAAC,EAAE,EAAK,EAErDklB,EADExc,EAAO2c,UAAU,CACT,CAAE1gE,OAAQ,EAAGC,OAAQ,CAAE,EAGvB,IAAI,CAAC09D,gBAAgB,GAE7BzvE,GAAUA,EAAOiuD,gBAAgB,KACnCqkB,GAAShnE,EAAOqgB,gBAAgB,CAChC4mD,GAASjnE,EAAOqgB,gBAAgB,EAElCxC,EAAImtC,WAAW,CAAGT,EAAOrgD,KAAK,CAC9B2T,EAAIotC,UAAU,CAAGV,EAAOW,IAAI,CAAGlrD,EAAOwgB,yBAAyB,CAC5DwmD,CAAAA,EAAQC,CAAAA,EAAUF,CAAAA,EAAQvgE,MAAM,CAAGugE,EAAQtgE,MAAM,EAAI,EACxDoX,EAAIstC,aAAa,CAAGZ,EAAOxR,OAAO,CAAGiuB,EAAQD,EAAQvgE,MAAM,CAC3DqX,EAAIutC,aAAa,CAAGb,EAAOvR,OAAO,CAAGiuB,EAAQF,EAAQtgE,MAAM,CAC7D,EAMA0/D,cAAe,SAAStoD,CAAG,EACpB,IAAI,CAAC0sC,MAAM,GAIhB1sC,EAAImtC,WAAW,CAAG,GAClBntC,EAAIotC,UAAU,CAAGptC,EAAIstC,aAAa,CAAGttC,EAAIutC,aAAa,CAAG,EAC3D,EASAqb,+BAAgC,SAAS5oD,CAAG,CAAE2F,CAAM,EAClD,GAAI,CAACA,GAAU,CAACA,EAAOkkC,MAAM,CAC3B,MAAO,CAAE3O,QAAS,EAAGC,QAAS,CAAE,EAElC,IAAIvxB,EAAIjE,EAAOmkC,iBAAiB,EAAInkC,EAAOokC,gBAAgB,CACvD7O,EAAU,CAAC,IAAI,CAACv7C,KAAK,CAAG,EAAIgmB,EAAOu1B,OAAO,EAAI,EAC9CC,EAAU,CAAC,IAAI,CAAC37C,MAAM,CAAG,EAAImmB,EAAOw1B,OAAO,EAAI,EAWnD,MATIx1B,eAAAA,EAAO+iD,aAAa,CACtB1oD,EAAI+J,SAAS,CAAC,IAAI,CAACpqB,KAAK,CAAE,EAAG,EAAG,IAAI,CAACH,MAAM,CAAE07C,EAASC,GAGtDn7B,EAAI+J,SAAS,CAAC,EAAG,EAAG,EAAG,EAAGmxB,EAASC,GAEjCvxB,GACF5J,EAAI+J,SAAS,CAACH,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,EAE3C,CAAEsxB,QAASA,EAASC,QAASA,CAAQ,CAC9C,EAMAmuB,oBAAqB,SAAStpD,CAAG,EAC3B,eAAI,CAACokD,UAAU,EACjB,IAAI,CAACmF,aAAa,CAACvpD,GACnB,IAAI,CAACwpD,WAAW,CAACxpD,KAGjB,IAAI,CAACwpD,WAAW,CAACxpD,GACjB,IAAI,CAACupD,aAAa,CAACvpD,GAEvB,EASAuuC,QAAS,WAET,EAMAib,YAAa,SAASxpD,CAAG,EAClB,IAAI,CAACtV,IAAI,GAIdsV,EAAIggC,IAAI,GACR,IAAI,CAAC6oB,cAAc,CAAC7oD,EAAK,IAAI,EACzB,gBAAI,CAAC0jD,QAAQ,CACf1jD,EAAItV,IAAI,CAAC,WAGTsV,EAAItV,IAAI,GAEVsV,EAAIsgC,OAAO,GACb,EAMAipB,cAAe,SAASvpD,CAAG,EACzB,GAAI,IAAK,CAAC2S,MAAM,EAAI,QAAI,CAAC9Z,WAAW,EASpC,GALI,IAAI,CAAC6zC,MAAM,EAAI,CAAC,IAAI,CAACA,MAAM,CAACyC,YAAY,EAC1C,IAAI,CAACmZ,aAAa,CAACtoD,GAGrBA,EAAIggC,IAAI,GACJ,IAAI,CAAC/2B,aAAa,EAAI,IAAI,CAACo+B,KAAK,CAAE,CACpC,IAAI6hB,EAAU,IAAI,CAAC5C,gBAAgB,GACnCtmD,EAAItX,KAAK,CAAC,EAAIwgE,EAAQvgE,MAAM,CAAE,EAAIugE,EAAQtgE,MAAM,CAClD,MACS,IAAI,CAACqgB,aAAa,EACzBjJ,EAAItX,KAAK,CAAC,EAAI,IAAI,CAACC,MAAM,CAAE,EAAI,IAAI,CAACC,MAAM,EAE5C,IAAI,CAAC2tD,YAAY,CAACv2C,EAAK,IAAI,CAAC4sC,eAAe,EAC3C,IAAI,CAAC2b,gBAAgB,CAACvoD,EAAK,IAAI,EAC/BA,EAAI2S,MAAM,GACV3S,EAAIsgC,OAAO,GACb,EAaAqoB,oCAAqC,SAAS3oD,CAAG,CAAE2F,CAAM,EACvD,IACiD8jD,EAD7C7E,EAAO,IAAI,CAACD,eAAe,CAAC,IAAI,CAACI,yBAAyB,IAC1D2E,EAAUvnE,EAAOyb,IAAI,CAACoQ,mBAAmB,GAAU8pC,EAAgB,IAAI,CAACjhE,MAAM,CAACkuD,gBAAgB,GAC/FplD,EAAQilE,EAAKv9C,CAAC,CAAG,IAAI,CAAC1e,MAAM,CAAGmvD,EAAet4D,EAASolE,EAAKt9C,CAAC,CAAG,IAAI,CAAC1e,MAAM,CAAGkvD,CAClF4R,CAAAA,EAAQ/pE,KAAK,CAAGA,EAChB+pE,EAAQlqE,MAAM,CAAGA,EAEjBiqE,CADAA,EAAOC,EAAQzpD,UAAU,CAAC,OACrBmgC,SAAS,GAAIqpB,EAAK/f,MAAM,CAAC,EAAG,GAAI+f,EAAK9f,MAAM,CAAChqD,EAAO,GAAI8pE,EAAK9f,MAAM,CAAChqD,EAAOH,GAC/EiqE,EAAK9f,MAAM,CAAC,EAAGnqD,GAASiqE,EAAK7f,SAAS,GACtC6f,EAAKvpD,SAAS,CAACvgB,EAAQ,EAAGH,EAAS,GACnCiqE,EAAK/gE,KAAK,CACRk8D,EAAKzb,KAAK,CAAG,IAAI,CAACxgD,MAAM,CAAGmvD,EAC3B8M,EAAKxb,KAAK,CAAG,IAAI,CAACxgD,MAAM,CAAGkvD,GAE7B,IAAI,CAAC8Q,8BAA8B,CAACa,EAAM9jD,GAC1C8jD,EAAKxpB,SAAS,CAAGt6B,EAAOkkC,MAAM,CAAC7pC,GAC/BypD,EAAK/+D,IAAI,GACTsV,EAAIE,SAAS,CAAC,CAAC,IAAI,CAACvgB,KAAK,CAAG,EAAI,IAAI,CAACkZ,WAAW,CAAG,EAAG,CAAC,IAAI,CAACrZ,MAAM,CAAG,EAAI,IAAI,CAACqZ,WAAW,CAAG,GAC5FmH,EAAItX,KAAK,CACPovD,EAAgB,IAAI,CAACnvD,MAAM,CAAGi8D,EAAKzb,KAAK,CACxC2O,EAAgB,IAAI,CAAClvD,MAAM,CAAGg8D,EAAKxb,KAAK,EAE1CppC,EAAIkgC,WAAW,CAAGupB,EAAK3X,aAAa,CAAC4X,EAAS,YAChD,EAQAC,uBAAwB,WACtB,MAAO,CAAEtiD,EAAG,IAAI,CAACje,IAAI,CAAG,IAAI,CAACzJ,KAAK,CAAG,EAAG2nB,EAAG,IAAI,CAACne,GAAG,CAAG,IAAI,CAAC3J,MAAM,CAAG,CAAE,CACxE,EASAoqE,4BAA6B,WAC3B,GAAI,IAAI,CAAC53C,eAAe,CAAE,CACxB,IAAI13B,EAAU6H,EAAOyb,IAAI,CAAC2Q,WAAW,CAAC,IAAI,CAACyD,eAAe,CAC1D,KAAI,CAAC/C,KAAK,CAAG,GACb,IAAI,CAACC,KAAK,CAAG,GACb,IAAI,CAACjoB,GAAG,CAAC,SAAU3M,EAAQqO,MAAM,EACjC,IAAI,CAAC1B,GAAG,CAAC,SAAU3M,EAAQsO,MAAM,EACjC,IAAI,CAAC2d,KAAK,CAAGjsB,EAAQisB,KAAK,CAC1B,IAAI,CAACkI,KAAK,CAAGn0B,EAAQm0B,KAAK,CAC1B,IAAI,CAACC,KAAK,CAAG,CACf,CACF,EASAm7C,uBAAwB,SAASC,CAA0B,EACzD,IAAIn4C,EAAS,IAAI,CAACg4C,sBAAsB,EACpC,KAAI,CAAC33C,eAAe,GACtB,IAAI,CAAC43C,2BAA2B,GAChCj4C,EAASxvB,EAAOyb,IAAI,CAACE,cAAc,CAAC6T,EAAQ,IAAI,CAACK,eAAe,GAElE,IAAI,CAACA,eAAe,CAAG,KACnB83C,IACF,IAAI,CAACnhE,MAAM,EAAImhE,EAA2BnhE,MAAM,CAChD,IAAI,CAACC,MAAM,EAAIkhE,EAA2BlhE,MAAM,CAChD,IAAI,CAACmhE,KAAK,CAAGD,EAA2BC,KAAK,CAC7C,IAAI,CAACC,KAAK,CAAGF,EAA2BE,KAAK,CAC7Cr4C,EAAOtK,CAAC,EAAIyiD,EAA2BG,UAAU,CACjDt4C,EAAOrK,CAAC,EAAIwiD,EAA2BI,SAAS,CAChD,IAAI,CAACvqE,KAAK,CAAGmqE,EAA2BnqE,KAAK,CAC7C,IAAI,CAACH,MAAM,CAAGsqE,EAA2BtqE,MAAM,EAEjD,IAAI,CAACoyB,mBAAmB,CAACD,EAAQ,SAAU,SAC7C,EAOAzoB,MAAO,SAAS6b,CAAQ,CAAE2lC,CAAmB,EAC3C,IAAIyf,EAAa,IAAI,CAACvf,QAAQ,CAACF,EAC3B,KAAI,CAACtrB,WAAW,CAACzS,UAAU,CAC7B,IAAI,CAACyS,WAAW,CAACzS,UAAU,CAACw9C,EAAYplD,GAGxC5iB,EAAOmW,MAAM,CAAC8xD,WAAW,CAAC,SAAUD,EAAYplD,EAEpD,EAuBAslD,aAAc,SAAStlD,CAAQ,CAAEzqB,CAAO,EACtC,IAAI6zB,EAAW,IAAI,CAACszC,eAAe,CAACnnE,GAIpC,OAHIyqB,GACFA,EAAS,IAAI5iB,EAAOC,KAAK,CAAC+rB,IAErB,IAAI,EAgBbszC,gBAAiB,SAASnnE,CAAO,EAC/BA,GAAYA,CAAAA,EAAU,CAAE,GAExB,IAAIgwE,EAAQnoE,EAAOyb,IAAI,CAAE2sD,EAAaD,EAAM96C,mBAAmB,CAAC,IAAI,EAChEg7C,EAAgB,IAAI,CAACnjB,KAAK,CAC1BojB,EAAiB,IAAI,CAAC/d,MAAM,CAAEzuC,EAAMlf,KAAKkf,GAAG,CAC5CugC,EAAa,CAAClkD,EAAQkkD,UAAU,EAAI,GAAMlkD,CAAAA,EAAQ6pD,mBAAmB,CAAGhiD,EAAOqgB,gBAAgB,CAAG,EACtG,QAAO,IAAI,CAAC6kC,KAAK,CACb/sD,EAAQowE,gBAAgB,EAC1BJ,EAAMh7C,oBAAoB,CAAC,IAAI,EAE7Bh1B,EAAQqwE,aAAa,EACvB,KAAI,CAACje,MAAM,CAAG,MAGhB,IAG0Bwc,EACS9b,EAC/BztD,EAAOH,EALP0iC,EAAK//B,EAAOyb,IAAI,CAACoQ,mBAAmB,GAEpC48C,EAAe,IAAI,CAACC,eAAe,CAAC,GAAM,IAC1Cne,EAAS,IAAI,CAACA,MAAM,CACpBoe,EAAe,CAAEzjD,EAAG,EAAGC,EAAG,CAAE,EAG5BolC,IACFU,EAAaV,EAAOW,IAAI,CAEtB6b,EADExc,EAAO2c,UAAU,CACT,CAAE1gE,OAAQ,EAAGC,OAAQ,CAAE,EAGvB,IAAI,CAAC09D,gBAAgB,GAGjCwE,EAAazjD,CAAC,CAAG,EAAItoB,KAAKC,KAAK,CAACif,EAAIyuC,EAAOxR,OAAO,EAAIkS,GAAenvC,EAAIirD,EAAQvgE,MAAM,EACvFmiE,EAAaxjD,CAAC,CAAG,EAAIvoB,KAAKC,KAAK,CAACif,EAAIyuC,EAAOvR,OAAO,EAAIiS,GAAenvC,EAAIirD,EAAQtgE,MAAM,GAEzFjJ,EAAQirE,EAAajrE,KAAK,CAAGmrE,EAAazjD,CAAC,CAC3C7nB,EAASorE,EAAaprE,MAAM,CAAGsrE,EAAaxjD,CAAC,CAG7C4a,EAAGviC,KAAK,CAAGZ,KAAKof,IAAI,CAACxe,GACrBuiC,EAAG1iC,MAAM,CAAGT,KAAKof,IAAI,CAAC3e,GACtB,IAAI3I,EAAS,IAAIsL,EAAOghD,YAAY,CAACjhB,EAAI,CACvCiiB,oBAAqB,GACrBpsC,kBAAmB,GACnBssC,cAAe,EACjB,EACuB,UAAnB/pD,EAAQ4G,MAAM,EAChBrK,CAAAA,EAAOM,eAAe,CAAG,QAE3B,IAAI,CAACy6B,mBAAmB,CAAC,IAAIzvB,EAAOilB,KAAK,CAACvwB,EAAO8I,KAAK,CAAG,EAAG9I,EAAO2I,MAAM,CAAG,GAAI,SAAU,UAE1F,IAAIurE,EAAiB,IAAI,CAACl0E,MAAM,CAChCA,EAAO+Q,GAAG,CAAC,IAAI,EACf,IAAIumB,EAAWt3B,EAAO4qE,eAAe,CAACjjB,GAAc,EAAGlkD,GAcvD,OAbA,IAAI,CAACoyD,MAAM,CAAG+d,EACd,IAAI,CAACxjE,GAAG,CAAC,SAAU8jE,GACfP,GACF,KAAI,CAACnjB,KAAK,CAAGmjB,CAAAA,EAEf,IAAI,CAACvjE,GAAG,CAACsjE,GAAYhhE,SAAS,GAI9B1S,EAAOgI,QAAQ,CAAG,EAAE,CACpBhI,EAAO4iB,OAAO,GACd5iB,EAAS,KAEFs3B,CACT,EAiBAljB,UAAW,SAAS3Q,CAAO,EAEzB,OADAA,GAAYA,CAAAA,EAAU,CAAE,GACjB6H,EAAOyb,IAAI,CAAC3S,SAAS,CAAC,IAAI,CAACw2D,eAAe,CAACnnE,GAAUA,EAAQ4G,MAAM,EAAI,MAAO5G,EAAQ8zB,OAAO,EAAI,EAC1G,EAOA48C,OAAQ,SAASjvE,CAAI,EACnB,OAAOkH,UAAUvI,MAAM,CAAG,EAAI2E,MAAMgO,IAAI,CAACpK,WAAW2M,QAAQ,CAAC,IAAI,CAAC7T,IAAI,EAAI,IAAI,CAACA,IAAI,GAAKA,CAC1F,EAMAupB,WAAY,WACV,OAAO,CACT,EAOAjM,OAAQ,SAASqxC,CAAmB,EAElC,OAAO,IAAI,CAACE,QAAQ,CAACF,EACvB,EAQAn7B,OAAQ,SAAShJ,CAAK,EACpB,IAAI0kD,EAAqB,CAAC,eAAI,CAACrxB,OAAO,EAAiB,eAAI,CAACC,OAAO,GAAkB,IAAI,CAACuY,gBAAgB,CAY1G,OAVI6Y,GACF,IAAI,CAACC,kBAAkB,GAGzB,IAAI,CAACjkE,GAAG,CAAC,QAASsf,GAEd0kD,GACF,IAAI,CAACE,YAAY,GAGZ,IAAI,EASbC,QAAS,WAEP,OADA,IAAI,CAACv0E,MAAM,EAAI,IAAI,CAACA,MAAM,CAACozD,aAAa,CAAC,IAAI,EACtC,IAAI,EASbohB,gBAAiB,WAEf,OADA,IAAI,CAACx0E,MAAM,EAAI,IAAI,CAACA,MAAM,CAAC0zD,qBAAqB,CAAC,IAAI,EAC9C,IAAI,EASb+gB,QAAS,WAEP,OADA,IAAI,CAACz0E,MAAM,EAAI,IAAI,CAACA,MAAM,CAACszD,aAAa,CAAC,IAAI,EACtC,IAAI,EASbohB,gBAAiB,WAEf,OADA,IAAI,CAAC10E,MAAM,EAAI,IAAI,CAACA,MAAM,CAAC2zD,qBAAqB,CAAC,IAAI,EAC9C,IAAI,EASb74B,OAAQ,WAEN,OADA,IAAI,CAAC96B,MAAM,EAAI,IAAI,CAACA,MAAM,CAACkS,YAAY,CAAC,IAAI,EACrC,IAAI,EASbyiE,eAAgB,WAEd,OADA,IAAI,CAAC30E,MAAM,EAAI,IAAI,CAACA,MAAM,CAACuzD,oBAAoB,CAAC,IAAI,EAC7C,IAAI,EASbqhB,gBAAiB,SAASxhE,CAAC,CAAEmwC,CAAO,EAClCA,EAAUA,GAAW,IAAI,CAACvjD,MAAM,CAACupC,UAAU,CAACn2B,GAC5C,IAAIyhE,EAAW,IAAIvpE,EAAOilB,KAAK,CAACgzB,EAAQ/yB,CAAC,CAAE+yB,EAAQ9yB,CAAC,EAChDqkD,EAAgB,IAAI,CAAC3Z,iBAAiB,GAK1C,OAJI,IAAI,CAACzrC,KAAK,EACZmlD,CAAAA,EAAWvpE,EAAOyb,IAAI,CAACoJ,WAAW,CAChC0kD,EAAUC,EAAehvD,EAAiB,CAAC,IAAI,CAAC4J,KAAK,IAElD,CACLc,EAAGqkD,EAASrkD,CAAC,CAAGskD,EAActkD,CAAC,CAC/BC,EAAGokD,EAASpkD,CAAC,CAAGqkD,EAAcrkD,CAAC,CAEnC,EAOA4/C,yBAA0B,SAAUlnD,CAAG,EACjC,IAAI,CAACkpC,wBAAwB,EAC/BlpC,CAAAA,EAAIkpC,wBAAwB,CAAG,IAAI,CAACA,wBAAwB,CAEhE,EAMAzvC,QAAS,WACHtX,EAAOqlC,iBAAiB,EAC1BrlC,EAAOqlC,iBAAiB,CAACd,cAAc,CAAC,IAAI,CAEhD,CACF,GAEAvkC,EAAOyb,IAAI,CAACguD,eAAe,EAAIzpE,EAAOyb,IAAI,CAACguD,eAAe,CAACzpE,EAAOmW,MAAM,EAExEkE,EAAOra,EAAOmW,MAAM,CAACC,SAAS,CAAEpW,EAAO+hB,UAAU,EAUjD/hB,EAAOmW,MAAM,CAAC6Y,mBAAmB,CAAG,EASpChvB,EAAOmW,MAAM,CAACyU,aAAa,CAAG,CAAC,WAAW,CAE1C5qB,EAAOmW,MAAM,CAAC8xD,WAAW,CAAG,SAASxuE,CAAS,CAAEf,CAAM,CAAEkqB,CAAQ,CAAE8mD,CAAU,EAC1E,IAAIn/C,EAAQvqB,CAAM,CAACvG,EAAU,CAC7Bf,EAASqO,EAAMrO,EAAQ,IACvBsH,EAAOyb,IAAI,CAACqP,eAAe,CAAC,CAACpyB,EAAO6P,IAAI,CAAE7P,EAAO83B,MAAM,CAAC,CAAE,SAASzF,CAAQ,EAC9C,SAAhBA,CAAQ,CAAC,EAAE,EACpBryB,CAAAA,EAAO6P,IAAI,CAAGwiB,CAAQ,CAAC,EAAE,EAEA,SAAhBA,CAAQ,CAAC,EAAE,EACpBryB,CAAAA,EAAO83B,MAAM,CAAGzF,CAAQ,CAAC,EAAE,EAE7B/qB,EAAOyb,IAAI,CAACiP,uBAAuB,CAAChyB,EAAQA,EAAQ,WAClD,IAAI6qD,EAAWmmB,EAAa,IAAIn/C,EAAM7xB,CAAM,CAACgxE,EAAW,CAAEhxE,GAAU,IAAI6xB,EAAM7xB,EAC9EkqB,CAAAA,GAAYA,EAAS2gC,EACvB,EACF,EACF,EAQAvjD,EAAOmW,MAAM,CAACwzD,KAAK,CAAG,GAIlBnvD,EAAmBxa,GAAOyb,IAAI,CAACjB,gBAAgB,CAC/Ce,EAAgB,CACdtU,KAAM,IACNuoB,OAAQ,EACRonB,MAAO,EACT,EACAp7B,EAAgB,CACdxU,IAAK,IACLwoB,OAAQ,EACRmnB,OAAQ,EACV,EAEJ32C,GAAOyb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAACra,GAAOmW,MAAM,CAACC,SAAS,CAAwC,CAWvFwzD,uBAAwB,SAAS9kD,CAAK,CAAE+kD,CAAW,CAAEC,CAAW,CAAEC,CAAS,CAAEC,CAAS,EACpF,IAEIjxB,EAASC,EAASkB,EAFlBh1B,EAAIJ,EAAMI,CAAC,CACXC,EAAIL,EAAMK,CAAC,CAyCf,MAtCI,iBAAO0kD,EACTA,EAActuD,CAAa,CAACsuD,EAAY,CAGxCA,GAAe,GAGb,iBAAOE,EACTA,EAAYxuD,CAAa,CAACwuD,EAAU,CAGpCA,GAAa,GAGfhxB,EAAUgxB,EAAYF,EAElB,iBAAOC,EACTA,EAActuD,CAAa,CAACsuD,EAAY,CAGxCA,GAAe,GAGb,iBAAOE,EACTA,EAAYxuD,CAAa,CAACwuD,EAAU,CAGpCA,GAAa,GAGfhxB,EAAUgxB,EAAYF,EAElB/wB,CAAAA,GAAWC,CAAAA,IACbkB,EAAM,IAAI,CAACV,yBAAyB,GACpCt0B,EAAIJ,EAAMI,CAAC,CAAG6zB,EAAUmB,EAAIh1B,CAAC,CAC7BC,EAAIL,EAAMK,CAAC,CAAG6zB,EAAUkB,EAAI/0B,CAAC,EAGxB,IAAInlB,GAAOilB,KAAK,CAACC,EAAGC,EAC7B,EASA8kD,uBAAwB,SAASnlD,CAAK,CAAE2yB,CAAO,CAAEC,CAAO,EACtD,IAAIp3C,EAAI,IAAI,CAACspE,sBAAsB,CAAC9kD,EAAO2yB,EAASC,EAAS,SAAU,iBACvE,IAAQ,CAACtzB,KAAK,CACLpkB,GAAOyb,IAAI,CAACoJ,WAAW,CAACvkB,EAAGwkB,EAAOtK,EAAiB,IAAI,CAAC4J,KAAK,GAE/D9jB,CACT,EASAg4C,uBAAwB,SAAS9oB,CAAM,CAAEioB,CAAO,CAAEC,CAAO,EACvD,IAAIp3C,EAAI,IAAI,CAACspE,sBAAsB,CAACp6C,EAAQ,SAAU,SAAUioB,EAASC,UACzE,IAAQ,CAACtzB,KAAK,CACLpkB,GAAOyb,IAAI,CAACoJ,WAAW,CAACvkB,EAAGkvB,EAAQhV,EAAiB,IAAI,CAAC4J,KAAK,GAEhE9jB,CACT,EAMA83C,eAAgB,WACd,IAAI8xB,EAAU,IAAIlqE,GAAOilB,KAAK,CAAC,IAAI,CAAChe,IAAI,CAAE,IAAI,CAACD,GAAG,EAClD,OAAO,IAAI,CAACijE,sBAAsB,CAACC,EAAS,IAAI,CAACzyB,OAAO,CAAE,IAAI,CAACC,OAAO,CACxE,EAiBAyyB,iBAAkB,SAAS1yB,CAAO,CAAEC,CAAO,EACzC,IAAIloB,EAAS,IAAI,CAAC4oB,cAAc,GAChC,OAAO,IAAI,CAACE,sBAAsB,CAAC9oB,EAAQioB,EAASC,EACtD,EASAoB,aAAc,SAASh0B,CAAK,CAAE2yB,CAAO,CAAEC,CAAO,EAC5C,IACIp3C,EAAG+4B,EADH7J,EAAS,IAAI,CAAC4oB,cAAc,GAchC,OAVE93C,EADE,KAAmB,IAAZm3C,GAA2B,KAAmB,IAAZC,EACvC,IAAI,CAACkyB,sBAAsB,CAACp6C,EAAQ,SAAU,SAAUioB,EAASC,GAGjE,IAAI13C,GAAOilB,KAAK,CAAC,IAAI,CAAChe,IAAI,CAAE,IAAI,CAACD,GAAG,EAG1CqyB,EAAK,IAAIr5B,GAAOilB,KAAK,CAACH,EAAMI,CAAC,CAAEJ,EAAMK,CAAC,EAClC,IAAI,CAACf,KAAK,EACZiV,CAAAA,EAAKr5B,GAAOyb,IAAI,CAACoJ,WAAW,CAACwU,EAAI7J,EAAQ,CAAChV,EAAiB,IAAI,CAAC4J,KAAK,IAEhEiV,EAAGuO,cAAc,CAACtnC,EAC3B,EAkBAmvB,oBAAqB,SAASqX,CAAG,CAAE2Q,CAAO,CAAEC,CAAO,EACjD,IAAIloB,EAAS,IAAI,CAACy6C,sBAAsB,CAACnjC,EAAK2Q,EAASC,GACnD7tB,EAAW,IAAI,CAACyuB,sBAAsB,CAAC9oB,EAAQ,IAAI,CAACioB,OAAO,CAAE,IAAI,CAACC,OAAO,EAC7E,IAAI,CAAC5yC,GAAG,CAAC,OAAQ+kB,EAAS3E,CAAC,EAC3B,IAAI,CAACpgB,GAAG,CAAC,MAAO+kB,EAAS1E,CAAC,CAC5B,EAKAilD,eAAgB,SAAS3kD,CAAE,EACzB,IAII4kD,EAAYC,EAJZlmD,EAAQ5J,EAAiB,IAAI,CAAC4J,KAAK,EACnCmmD,EAAY,IAAI,CAACC,cAAc,GAC/BC,EAAQzqE,GAAOyb,IAAI,CAAC0I,GAAG,CAACC,GAASmmD,EACjCG,EAAQ1qE,GAAOyb,IAAI,CAACM,GAAG,CAACqI,GAASmmD,EAKnCF,EADE,iBAAO,IAAI,CAAC5yB,OAAO,CACRl8B,CAAa,CAAC,IAAI,CAACk8B,OAAO,CAAC,CAG3B,IAAI,CAACA,OAAO,CAAG,GAG5B6yB,EADE,iBAAO7kD,EACElK,CAAa,CAACkK,EAAG,CAGjBA,EAAK,GAElB,IAAI,CAACxe,IAAI,EAAIwjE,EAASH,CAAAA,EAAWD,CAAAA,EACjC,IAAI,CAACrjE,GAAG,EAAI0jE,EAASJ,CAAAA,EAAWD,CAAAA,EAChC,IAAI,CAACjjE,SAAS,GACd,IAAI,CAACqwC,OAAO,CAAGhyB,CACjB,EAOAsjD,mBAAoB,WAClB,IAAI,CAAC4B,gBAAgB,CAAG,IAAI,CAAClzB,OAAO,CACpC,IAAI,CAACmzB,gBAAgB,CAAG,IAAI,CAAClzB,OAAO,CAEpC,IAAIloB,EAAS,IAAI,CAAC4oB,cAAc,EAEhC,KAAI,CAACX,OAAO,CAAG,SACf,IAAI,CAACC,OAAO,CAAG,SAEf,IAAI,CAACzwC,IAAI,CAAGuoB,EAAOtK,CAAC,CACpB,IAAI,CAACle,GAAG,CAAGwoB,EAAOrK,CAAC,EAQrB6jD,aAAc,WACZ,IAAI6B,EAAc,IAAI,CAACvyB,sBAAsB,CAC3C,IAAI,CAACF,cAAc,GACnB,IAAI,CAACuyB,gBAAgB,CACrB,IAAI,CAACC,gBAAgB,CAEvB,KAAI,CAACnzB,OAAO,CAAG,IAAI,CAACkzB,gBAAgB,CACpC,IAAI,CAACjzB,OAAO,CAAG,IAAI,CAACkzB,gBAAgB,CAEpC,IAAI,CAAC3jE,IAAI,CAAG4jE,EAAY3lD,CAAC,CACzB,IAAI,CAACle,GAAG,CAAG6jE,EAAY1lD,CAAC,CAExB,IAAI,CAACwlD,gBAAgB,CAAG,KACxB,IAAI,CAACC,gBAAgB,CAAG,IAC1B,EAKA/a,kBAAmB,WACjB,OAAO,IAAI,CAACvX,sBAAsB,CAAC,IAAI,CAACF,cAAc,GAAI,OAAQ,MACpE,CACF,GAeI59B,EAAmBiB,CADnBA,EAAOzb,GAAOyb,IAAI,EACMjB,gBAAgB,CACxCkB,EAAmBD,EAAKyQ,yBAAyB,CACjDvQ,EAAiBF,EAAKE,cAAc,CAExCF,EAAK/iB,MAAM,CAAC2hB,MAAM,CAACra,GAAOmW,MAAM,CAACC,SAAS,CAAwC,CAYhF00D,QAAS,KAcTC,QAAS,KAQTC,WAAY,KAKZC,eAAgB,KAKhBC,YAAa,KAMb5vD,SAAU,CAAE,EAQZ6vD,WAAY,SAASC,CAAQ,CAAEC,CAAS,SACtC,EACUD,EAAW,IAAI,CAACE,WAAW,GAAK,IAAI,CAACC,cAAc,IAExD,IAAI,CAACR,OAAO,EAAK,IAAI,CAACC,UAAU,EACnC,IAAI,CAAC5jE,SAAS,CAAC,IAETgkE,EAAW,IAAI,CAACL,OAAO,CAAG,IAAI,CAACC,UAAU,CACnD,EAQAQ,UAAW,SAASJ,CAAQ,CAAEC,CAAS,MAxFhB1kD,EAyFrB,OAzFqBA,EAyFE,IAAI,CAACwkD,UAAU,CAACC,EAAUC,GAxF5C,CACL,IAAIrrE,GAAOilB,KAAK,CAAC0B,EAAOg6B,EAAE,CAACz7B,CAAC,CAAEyB,EAAOg6B,EAAE,CAACx7B,CAAC,EACzC,IAAInlB,GAAOilB,KAAK,CAAC0B,EAAOi6B,EAAE,CAAC17B,CAAC,CAAEyB,EAAOi6B,EAAE,CAACz7B,CAAC,EACzC,IAAInlB,GAAOilB,KAAK,CAAC0B,EAAOm6B,EAAE,CAAC57B,CAAC,CAAEyB,EAAOm6B,EAAE,CAAC37B,CAAC,EACzC,IAAInlB,GAAOilB,KAAK,CAAC0B,EAAOk6B,EAAE,CAAC37B,CAAC,CAAEyB,EAAOk6B,EAAE,CAAC17B,CAAC,EAC1C,EA8FDi6C,mBAAoB,SAASqM,CAAO,CAAEC,CAAO,CAAEN,CAAQ,CAAEC,CAAS,EAChE,IAAI1kD,EAAS,IAAI,CAAC6kD,SAAS,CAACJ,EAAUC,GAMtC,MAAOM,iBAAAA,GALmB7iC,YAAY,CAACmB,yBAAyB,CAC1DtjB,EACA8kD,EACAC,GAEc3iC,MAAM,EAU5B4gB,qBAAsB,SAASiiB,CAAK,CAAER,CAAQ,CAAEC,CAAS,EAMvD,MAAOM,iBAAAA,GALmB7iC,YAAY,CAACgB,uBAAuB,CAC5D,IAAI,CAAC0hC,SAAS,CAACJ,EAAUC,GACzBO,EAAMJ,SAAS,CAACJ,EAAUC,IAGRtiC,MAAM,EACrB6iC,EAAMhiB,uBAAuB,CAAC,IAAI,CAAEwhB,EAAUC,IAC9C,IAAI,CAACzhB,uBAAuB,CAACgiB,EAAOR,EAAUC,EACrD,EASAzhB,wBAAyB,SAASgiB,CAAK,CAAER,CAAQ,CAAEC,CAAS,EAI1D,IAHA,IAAI5kD,EAAS,IAAI,CAAC+kD,SAAS,CAACJ,EAAUC,GAClCQ,EAAcT,EAAWQ,EAAMb,OAAO,CAAGa,EAAMZ,UAAU,CACzD1mE,EAAI,EAAGwnE,EAAQF,EAAMG,cAAc,CAACF,GACjCvnE,EAAI,EAAGA,IACZ,GAAI,CAACsnE,EAAM7W,aAAa,CAACtuC,CAAM,CAACniB,EAAE,CAAEwnE,GAClC,MAAO,GAGX,MAAO,EACT,EAUAzM,sBAAuB,SAASoM,CAAO,CAAEC,CAAO,CAAEN,CAAQ,CAAEC,CAAS,EACnE,IAAI5C,EAAe,IAAI,CAACC,eAAe,CAAC0C,EAAUC,GAElD,OACE5C,EAAaxhE,IAAI,EAAIwkE,EAAQvmD,CAAC,EAC9BujD,EAAaxhE,IAAI,CAAGwhE,EAAajrE,KAAK,EAAIkuE,EAAQxmD,CAAC,EACnDujD,EAAazhE,GAAG,EAAIykE,EAAQtmD,CAAC,EAC7BsjD,EAAazhE,GAAG,CAAGyhE,EAAaprE,MAAM,EAAIquE,EAAQvmD,CAAC,EAYvD4vC,cAAe,SAASjwC,CAAK,CAAEgnD,CAAK,CAAEV,CAAQ,CAAEC,CAAS,EACvD,IAAI1kD,EAAS,IAAI,CAACwkD,UAAU,CAACC,EAAUC,GACnCS,EAAQA,GAAS,IAAI,CAACC,cAAc,CAACplD,GACrCkB,EAAU,IAAI,CAACmkD,gBAAgB,CAAClnD,EAAOgnD,GAE3C,OAAQjkD,IAAAA,GAAiBA,EAAU,GAAM,CAC3C,EAQAi9C,WAAY,SAASuG,CAAS,EAC5B,GAAI,CAAC,IAAI,CAAC32E,MAAM,CACd,MAAO,GAET,IAAI+2E,EAAU,IAAI,CAAC/2E,MAAM,CAACutD,SAAS,CAACtB,EAAE,CAAE+qB,EAAU,IAAI,CAACh3E,MAAM,CAACutD,SAAS,CAACnB,EAAE,OAG1E,GAAIr6B,IAFa,CAAC+kD,SAAS,CAAC,GAAMH,GAEvBpoD,IAAI,CAAC,SAAS6B,CAAK,EAC5B,OAAOA,EAAMI,CAAC,EAAIwmD,EAAQxmD,CAAC,EAAIJ,EAAMI,CAAC,EAAIumD,EAAQvmD,CAAC,EACnDJ,EAAMK,CAAC,EAAIumD,EAAQvmD,CAAC,EAAIL,EAAMK,CAAC,EAAIsmD,EAAQtmD,CAAC,IAK1C,IAAI,CAACi6C,kBAAkB,CAACqM,EAASC,EAAS,GAAML,KAG7C,IAAI,CAACY,uBAAuB,CAACR,EAASC,EAASL,EACxD,EAWAY,wBAAyB,SAASR,CAAO,CAAEC,CAAO,CAAEL,CAAS,EAE3D,IAAI9/C,EAAc,CAAErG,EAAG,CAACumD,EAAQvmD,CAAC,CAAGwmD,EAAQxmD,CAAC,EAAI,EAAGC,EAAG,CAACsmD,EAAQtmD,CAAC,CAAGumD,EAAQvmD,CAAC,EAAI,CAAE,UAC/E,IAAI,CAAC4vC,aAAa,CAACxpC,EAAa,KAAM,GAAM8/C,EAIlD,EAOAa,oBAAqB,SAASb,CAAS,EACrC,GAAI,CAAC,IAAI,CAAC32E,MAAM,CACd,MAAO,GAET,IAAI+2E,EAAU,IAAI,CAAC/2E,MAAM,CAACutD,SAAS,CAACtB,EAAE,CAAE+qB,EAAU,IAAI,CAACh3E,MAAM,CAACutD,SAAS,CAACnB,EAAE,OAC1E,EAAI,IAAI,CAACse,kBAAkB,CAACqM,EAASC,EAAS,GAAML,IAO7Cc,IAJuB,CAACX,SAAS,CAAC,GAAMH,GAAW7yE,KAAK,CAAC,SAASssB,CAAK,EAC5E,MAAO,CAACA,EAAMI,CAAC,EAAIwmD,EAAQxmD,CAAC,EAAIJ,EAAMI,CAAC,EAAIumD,EAAQvmD,CAAC,GACnDJ,CAAAA,EAAMK,CAAC,EAAIumD,EAAQvmD,CAAC,EAAIL,EAAMK,CAAC,EAAIsmD,EAAQtmD,CAAC,CAC/C,IAC8B,IAAI,CAAC8mD,uBAAuB,CAACR,EAASC,EAASL,EAC/E,EAOAU,eAAgB,SAASjB,CAAO,EAoC9B,MAlCY,CACVsB,QAAS,CACPtpD,EAAGgoD,EAAQnqB,EAAE,CACb1c,EAAG6mC,EAAQlqB,EAAE,EAEfyrB,UAAW,CACTvpD,EAAGgoD,EAAQlqB,EAAE,CACb3c,EAAG6mC,EAAQhqB,EAAE,EAEfwrB,WAAY,CACVxpD,EAAGgoD,EAAQhqB,EAAE,CACb7c,EAAG6mC,EAAQjqB,EAAE,EAEf0rB,SAAU,CACRzpD,EAAGgoD,EAAQjqB,EAAE,CACb5c,EAAG6mC,EAAQnqB,EAAE,CAEjB,CAkBF,EAUAqrB,iBAAkB,SAASlnD,CAAK,CAAEgnD,CAAK,EACrC,IAAQxiC,EAAYkjC,EAEhBC,EADAC,EAAS,EAGb,IAAK,IAAIC,KAAWb,EAGlB,GAAIW,CAAAA,CAAAA,CAAAA,CAFJA,EAAQX,CAAK,CAACa,EAAQ,EAEX7pD,CAAC,CAACqC,CAAC,CAAGL,EAAMK,CAAC,IAAMsnD,CAAAA,EAAMxoC,CAAC,CAAC9e,CAAC,CAAGL,EAAMK,CAAC,CAADA,GAI5CsnD,CAAAA,CAAAA,CAAAA,EAAO3pD,CAAC,CAACqC,CAAC,EAAIL,EAAMK,CAAC,IAAMsnD,CAAAA,EAAMxoC,CAAC,CAAC9e,CAAC,EAAIL,EAAMK,CAAC,CAADA,IAI9CsnD,EAAO3pD,CAAC,CAACoC,CAAC,GAAKunD,EAAMxoC,CAAC,CAAC/e,CAAC,EAAMunD,EAAM3pD,CAAC,CAACoC,CAAC,EAAIJ,EAAMI,CAAC,CACpDsnD,EAAKC,EAAM3pD,CAAC,CAACoC,CAAC,EAMdokB,EAAK,CAACmjC,EAAMxoC,CAAC,CAAC9e,CAAC,CAAGsnD,EAAM3pD,CAAC,CAACqC,CAAC,EAAKsnD,CAAAA,EAAMxoC,CAAC,CAAC/e,CAAC,CAAGunD,EAAM3pD,CAAC,CAACoC,CAAC,EAIrDsnD,EAAK,CAAErjC,CAAAA,EAHIhkB,CAAC,CAAGkkB,EAAKvkB,EAAMI,CAAC,CACtBunD,CAAAA,EAAM3pD,CAAC,CAACqC,CAAC,CAAGmkB,EAAKmjC,EAAM3pD,CAAC,CAACoC,CAAC,CAEnBkkB,EAAOC,CAAAA,EAAKC,CAAAA,GAItBkjC,GAAM1nD,EAAMI,CAAC,EACfwnD,CAAAA,GAAU,GAGRA,IAAAA,GACF,MAGJ,OAAOA,CACT,EASAhE,gBAAiB,SAAS0C,CAAQ,CAAEC,CAAS,EAC3C,IAAI1kD,EAAS,IAAI,CAAC6kD,SAAS,CAACJ,EAAUC,GACtC,OAAO5vD,EAAKkM,yBAAyB,CAAChB,EACxC,EAOA6jD,eAAgB,WACd,OAAO,IAAI,CAAChxB,yBAAyB,GAAGt0B,CAAC,EAQ3C0nD,gBAAiB,WACf,OAAO,IAAI,CAACpzB,yBAAyB,GAAGr0B,CAAC,EAS3Cs/C,gBAAiB,SAAS3rE,CAAK,SAC7B,KAASgjB,GAAG,CAAChjB,GAAS,IAAI,CAAC6oE,aAAa,CACtC,EAAY,EACH,CAAC,IAAI,CAACA,aAAa,CAGnB,IAAI,CAACA,aAAa,CAGxB,IAAI7oE,EACA,KAEFA,CACT,EAQAyN,MAAO,SAASzN,CAAK,EAGnB,OAFA,IAAI,CAACkrB,IAAI,CAAC,SAAUlrB,GACpB,IAAI,CAACkrB,IAAI,CAAC,SAAUlrB,GACb,IAAI,CAACsO,SAAS,EACvB,EASAylE,aAAc,SAAS/zE,CAAK,CAAEsyE,CAAQ,EAEpC,IAAI0B,EAAqB,IAAI,CAACpE,eAAe,CAAC0C,GAAU5tE,KAAK,CAAG,IAAI,CAACgtE,cAAc,GACnF,OAAO,IAAI,CAACjkE,KAAK,CAACzN,EAAQ,IAAI,CAAC0E,KAAK,CAAGsvE,EACzC,EASAC,cAAe,SAASj0E,CAAK,CAAEsyE,CAAQ,EAErC,IAAI0B,EAAqB,IAAI,CAACpE,eAAe,CAAC0C,GAAU/tE,MAAM,CAAG,IAAI,CAACuvE,eAAe,GACrF,OAAO,IAAI,CAACrmE,KAAK,CAACzN,EAAQ,IAAI,CAACuE,MAAM,CAAGyvE,EAC1C,EAEAvB,eAAgB,WACd,IAAI1mB,EAAM,IAAI,CAAC+f,oBAAoB,GAC/BhsB,EAAU,IAAI,CAACA,OAAO,CAAEx0B,EAAQ5J,EAAiB,IAAI,CAAC4J,KAAK,EAC3DD,EAAM1I,EAAK0I,GAAG,CAACC,GAAQrI,EAAMN,EAAKM,GAAG,CAACqI,GACtC4oD,EAAO7oD,EAAMy0B,EAASq0B,EAAOlxD,EAAM68B,EAASs0B,EAAWF,EAAOC,EAC9DE,EAAgBH,EAAOC,EAAMlC,EAAU,IAAI,CAACO,WAAW,GAEvDN,EAAa,CACfrqB,GAAIhlC,EAAeovD,EAAQpqB,EAAE,CAAEkE,GAC/BjE,GAAIjlC,EAAeovD,EAAQnqB,EAAE,CAAEiE,GAC/BhE,GAAIllC,EAAeovD,EAAQlqB,EAAE,CAAEgE,GAC/B/D,GAAInlC,EAAeovD,EAAQjqB,EAAE,CAAE+D,EACjC,EAaA,OAXIjM,IACFoyB,EAAWrqB,EAAE,CAACz7B,CAAC,EAAIioD,EACnBnC,EAAWrqB,EAAE,CAACx7B,CAAC,EAAI+nD,EACnBlC,EAAWpqB,EAAE,CAAC17B,CAAC,EAAIgoD,EACnBlC,EAAWpqB,EAAE,CAACz7B,CAAC,EAAIgoD,EACnBnC,EAAWnqB,EAAE,CAAC37B,CAAC,EAAIgoD,EACnBlC,EAAWnqB,EAAE,CAAC17B,CAAC,EAAIgoD,EACnBnC,EAAWlqB,EAAE,CAAC57B,CAAC,EAAIioD,EACnBnC,EAAWlqB,EAAE,CAAC37B,CAAC,EAAI+nD,GAGdlC,CACT,EAEAoC,YAAa,WACX,IAAIC,EAAe,IAAI,CAACC,iBAAiB,GACrCC,EAAkB,IAAI,CAACC,oBAAoB,GAC3C3oB,EAAM,IAAI,CAAC+f,oBAAoB,GAC/B6I,EAAc/xD,EAAiBmpC,EAAK0oB,GACpC3tB,EAAclkC,EAAiB+xD,EAAaJ,GAC5CztB,EAAclkC,EAAiBkkC,EAAa,CAAC,EAAIiF,CAAG,CAAC,EAAE,CAAE,EAAG,EAAG,EAAIA,CAAG,CAAC,EAAE,CAAE,EAAG,EAAE,EAChF3K,EAAM,IAAI,CAACwzB,2BAA2B,GACtC/mD,EAAS,CAAC,EAed,OAdA,IAAI,CAACgnD,cAAc,CAAC,SAAS52B,CAAO,CAAE/xC,CAAG,CAAE8xC,CAAY,EACrDnwB,CAAM,CAAC3hB,EAAI,CAAG+xC,EAAQ4I,eAAe,CAACzF,EAAK0F,EAAa9I,EAC1D,GAYOnwB,CACT,EAEA2kD,YAAa,WACX,IAAI+B,EAAe,IAAI,CAACC,iBAAiB,GAErC1tB,EAAclkC,EADI,IAAI,CAAC8xD,oBAAoB,GACKH,GAChDnzB,EAAM,IAAI,CAACV,yBAAyB,GACpCo0B,EAAI1zB,EAAIh1B,CAAC,CAAG,EAAG4M,EAAIooB,EAAI/0B,CAAC,CAAG,EAC/B,MAAO,CAELw7B,GAAIhlC,EAAe,CAAEuJ,EAAG,CAAC0oD,EAAGzoD,EAAG,CAAC2M,CAAE,EAAG8tB,GACrCgB,GAAIjlC,EAAe,CAAEuJ,EAAG0oD,EAAGzoD,EAAG,CAAC2M,CAAE,EAAG8tB,GACpCiB,GAAIllC,EAAe,CAAEuJ,EAAG,CAAC0oD,EAAGzoD,EAAG2M,CAAE,EAAG8tB,GACpCkB,GAAInlC,EAAe,CAAEuJ,EAAG0oD,EAAGzoD,EAAG2M,CAAE,EAAG8tB,EACrC,CACF,EAaAx4C,UAAW,SAASymE,CAAW,SAC7B,IAAI,CAAC9C,OAAO,CAAG,IAAI,CAACO,WAAW,GAG/B,IAAI,CAACN,UAAU,CAAG,IAAI,CAAC9lB,KAAK,CAAG,IAAI,CAAC6lB,OAAO,CAAG,IAAI,CAACQ,cAAc,GAC7DsC,IAIJ,IAAI,CAAC/C,OAAO,CAAG,IAAI,CAACsC,WAAW,GAC/B,IAAI,CAACU,gBAAgB,EAAI,IAAI,CAACA,gBAAgB,IAJrC,IAAI,EAYfR,kBAAmB,WACjB,OAAO7xD,EAAKiR,gBAAgB,CAAC,IAAI,CACnC,EAMA8gD,qBAAsB,WACpB,IAAIh+C,EAAS,IAAI,CAAC4oB,cAAc,GAChC,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG5oB,EAAOtK,CAAC,CAAEsK,EAAOrK,CAAC,CAAC,EAGzC4oD,mBAAoB,SAASzZ,CAAS,EACpC,IAAe0Z,EAAS,GAIxB,MAHI,CAAC1Z,GAAa,IAAI,CAACpP,KAAK,EAC1B8oB,CAAAA,EAAS,IAAI,CAAC9oB,KAAK,CAAC6oB,kBAAkB,CAACzZ,GAF/B,GAE4C2Z,EAE/CD,EAAS,IAAI,CAAChnE,GAAG,CAJd,IAIuB,IAAI,CAACC,IAAI,CAJhC,IAIyC,IAAI,CAACT,MAAM,CAJpD,IAI6D,IAAI,CAACC,MAAM,CAJxE,IAKF,IAAI,CAAC6lB,KAAK,CALR,IAKiB,IAAI,CAACC,KAAK,CAL3B,IAKoC,IAAI,CAACnI,KAAK,CAL9C,IAKuD,IAAI,CAACqzB,OAAO,CALnE,IAK4E,IAAI,CAACC,OAAO,CALxF,IAMF,IAAI,CAACl6C,KAAK,CANR,IAMiB,IAAI,CAACH,MAAM,CAN5B,IAMqC,IAAI,CAACqZ,WAAW,CAAG,IAAI,CAACoW,KAAK,CAAG,IAAI,CAACC,KAAK,EAU3FmD,oBAAqB,SAASokC,CAAS,EACrC,IAAIpnC,EAAS,IAAI,CAACmC,aAAa,GAC/B,GAAIilC,GAAa,CAAC,IAAI,CAACpP,KAAK,CAC1B,OAAOh4B,EAET,IAAIloB,EAAM,IAAI,CAAC+oE,kBAAkB,CAACzZ,GAAY4Z,EAAQ,IAAI,CAAChD,WAAW,EAAK,KAAI,CAACA,WAAW,CAAG,CAAC,UAC/F,EAAUlmE,GAAG,GAAKA,EACTkpE,EAAMp1E,KAAK,EAEhB,IAAI,CAACosD,KAAK,EACZh4B,CAAAA,EAASxR,EAAiB,IAAI,CAACwpC,KAAK,CAACh1B,mBAAmB,CAAC,IAAQhD,EAAAA,EAEnEghD,EAAMlpE,GAAG,CAAGA,EACZkpE,EAAMp1E,KAAK,CAAGo0B,EACPA,EACT,EAOAmC,cAAe,WACb,IAAIrqB,EAAM,IAAI,CAAC+oE,kBAAkB,CAAC,IAAOG,EAAQ,IAAI,CAACjD,cAAc,EAAK,KAAI,CAACA,cAAc,CAAG,CAAC,GAChG,GAAIiD,EAAMlpE,GAAG,GAAKA,EAChB,OAAOkpE,EAAMp1E,KAAK,CAEpB,IAAIq1E,EAAU,IAAI,CAACX,oBAAoB,GACnCr1E,EAAU,CACRisB,MAAO,IAAI,CAACA,KAAK,CACjBoI,WAAY2hD,CAAO,CAAC,EAAE,CACtB1hD,WAAY0hD,CAAO,CAAC,EAAE,CACtB3nE,OAAQ,IAAI,CAACA,MAAM,CACnBC,OAAQ,IAAI,CAACA,MAAM,CACnB6lB,MAAO,IAAI,CAACA,KAAK,CACjBC,MAAO,IAAI,CAACA,KAAK,CACjBO,MAAO,IAAI,CAACA,KAAK,CACjBC,MAAO,IAAI,CAACA,KAAK,EAIvB,OAFAmhD,EAAMlpE,GAAG,CAAGA,EACZkpE,EAAMp1E,KAAK,CAAG2iB,EAAKwR,aAAa,CAAC90B,GAC1B+1E,EAAMp1E,KAAK,EASpBotE,6BAA8B,WAC5B,IAAIxvD,EAAc,IAAI,CAACA,WAAW,CAGlC,MAAO,CAAEwO,EAFD,IAAI,CAAC1nB,KAAK,CAAGkZ,EAENyO,EADP,IAAI,CAAC9nB,MAAM,CAAGqZ,CACF,CACtB,EAUA8iC,0BAA2B,SAASltB,CAAK,CAAEC,CAAK,EACzB,SAAVD,GACTA,CAAAA,EAAQ,IAAI,CAACA,KAAK,EAEC,SAAVC,GACTA,CAAAA,EAAQ,IAAI,CAACA,KAAK,EAEpB,IAAI03B,EAAYt0B,EAAMC,EAClBw+C,EAAS9hD,IAAAA,GAAeC,IAAAA,EAW5B,GATI,IAAI,CAACzF,aAAa,EACpB6I,EAAO,IAAI,CAACnyB,KAAK,CACjBoyB,EAAO,IAAI,CAACvyB,MAAM,GAIlBsyB,EAAOs0B,CADPA,EAAa,IAAI,CAACiiB,4BAA4B,IAC5BhhD,CAAC,CACnB0K,EAAOq0B,EAAW9+B,CAAC,EAEjBipD,EACF,OAAO,IAAI,CAACC,mBAAmB,CAAC1+C,EAAO,IAAI,CAACnpB,MAAM,CAAEopB,EAAO,IAAI,CAACnpB,MAAM,EAExE,IAAIqpB,EAAOrU,EAAKiU,kBAAkB,CAACC,EAAMC,EAAM,CAC7CppB,OAAQ,IAAI,CAACA,MAAM,CACnBC,OAAQ,IAAI,CAACA,MAAM,CACnB6lB,MAAOA,EACPC,MAAOA,CACT,GACA,OAAO,IAAI,CAAC8hD,mBAAmB,CAACv+C,EAAK5K,CAAC,CAAE4K,EAAK3K,CAAC,CAChD,EAUAkpD,oBAAqB,SAAS7wE,CAAK,CAAEH,CAAM,EACzC,OAAO,IAAI,CAACypB,aAAa,CACvB,CAAE5B,EAAG1nB,EAAQ,IAAI,CAACkZ,WAAW,CAAEyO,EAAG9nB,EAAS,IAAI,CAACqZ,WAAW,EAE3D,CAAEwO,EAAG1nB,EAAO2nB,EAAG9nB,CAAO,CAC1B,EAOAqwE,4BAA6B,WAC3B,IAAI7oB,EAAM,IAAI,CAAC+f,oBAAoB,GAGnC,OAAOtkE,EAFG,IAAI,CAACk5C,yBAAyB,GACZqL,EAAK,IACxBnd,SAAS,CAAC,EAAI,IAAI,CAACkR,OAAO,CACrC,CACF,GAEF54C,GAAOyb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAACra,GAAOmW,MAAM,CAACC,SAAS,CAAwC,CAOvF8yC,WAAY,WAOV,OANI,IAAI,CAAChE,KAAK,CACZllD,GAAOghD,YAAY,CAAC5qC,SAAS,CAAC8yC,UAAU,CAAC/mC,IAAI,CAAC,IAAI,CAAC+iC,KAAK,CAAE,IAAI,EAEvD,IAAI,CAACxwD,MAAM,EAClB,IAAI,CAACA,MAAM,CAACw0D,UAAU,CAAC,IAAI,EAEtB,IAAI,EAQbI,aAAc,WAOZ,OANI,IAAI,CAACpE,KAAK,CACZllD,GAAOghD,YAAY,CAAC5qC,SAAS,CAACkzC,YAAY,CAACnnC,IAAI,CAAC,IAAI,CAAC+iC,KAAK,CAAE,IAAI,EAEzD,IAAI,CAACxwD,MAAM,EAClB,IAAI,CAACA,MAAM,CAAC40D,YAAY,CAAC,IAAI,EAExB,IAAI,EASbrjD,cAAe,SAASsjD,CAAY,EAOlC,OANI,IAAI,CAACrE,KAAK,CACZllD,GAAOghD,YAAY,CAAC5qC,SAAS,CAACnQ,aAAa,CAACkc,IAAI,CAAC,IAAI,CAAC+iC,KAAK,CAAE,IAAI,CAAEqE,GAE5D,IAAI,CAAC70D,MAAM,EAClB,IAAI,CAACA,MAAM,CAACuR,aAAa,CAAC,IAAI,CAAEsjD,GAE3B,IAAI,EASbj0D,aAAc,SAASi0D,CAAY,EAOjC,OANI,IAAI,CAACrE,KAAK,CACZllD,GAAOghD,YAAY,CAAC5qC,SAAS,CAAC9gB,YAAY,CAAC6sB,IAAI,CAAC,IAAI,CAAC+iC,KAAK,CAAE,IAAI,CAAEqE,GAE3D,IAAI,CAAC70D,MAAM,EAClB,IAAI,CAACA,MAAM,CAACY,YAAY,CAAC,IAAI,CAAEi0D,GAE1B,IAAI,EASbhC,OAAQ,SAASt7C,CAAK,EAOpB,OANI,IAAI,CAACi5C,KAAK,EAAI,wBAAI,CAACA,KAAK,CAACtrD,IAAI,CAC/BoG,GAAOghD,YAAY,CAAC5qC,SAAS,CAACmxC,MAAM,CAACplC,IAAI,CAAC,IAAI,CAAC+iC,KAAK,CAAE,IAAI,CAAEj5C,GAErD,IAAI,CAACvX,MAAM,EAClB,IAAI,CAACA,MAAM,CAAC6yD,MAAM,CAAC,IAAI,CAAEt7C,GAEpB,IAAI,CAEf,GAEC,WAEC,IAAIoO,EAASra,GAAOyb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAClCi0D,EAAc,kBAKlB,SAASC,UAAUxpD,CAAM,CAAE4G,CAAW,CAAE6iD,CAAK,EAC3C,IAAIC,EAAS,CAAE,EACfD,EAAMvnD,OAAO,CAAC,SAAS7E,CAAI,EACzBqsD,CAAM,CAACrsD,EAAK,CAAG2C,CAAM,CAAC3C,EAAK,GAG7B/H,EAAO0K,CAAM,CAAC4G,EAAY,CAAE8iD,EALH,GAM3B,CA2CAzuE,GAAOyb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAACra,GAAOmW,MAAM,CAACC,SAAS,CAAwC,CAOvFmmD,gBAAiB,SAAS8I,CAAW,EAEnC,IAAIqJ,EAAoB,IADxBrJ,CAAAA,EAAcA,GAAeiJ,CAAAA,SAE7B,OAAWK,IAAI,CAAC,IAAI,CAACD,EAAkB,EAAEn2E,MAAM,CAAG,IAAI,CAAC8sE,EAAY,CAAC9sE,MAAM,EAGnE,CAACq2E,SAtDHA,SAASC,CAAS,CAAEvpC,CAAY,CAAEwpC,CAAS,EAClD,GAAID,IAAcvpC,EAEhB,MAAO,GAEJ,GAAIpoC,MAAMC,OAAO,CAAC0xE,GAAY,CACjC,GAAI,CAAC3xE,MAAMC,OAAO,CAACmoC,IAAiBupC,EAAUt2E,MAAM,GAAK+sC,EAAa/sC,MAAM,CAC1E,MAAO,GAET,IAAK,IAAI+L,EAAI,EAAG4d,EAAM2sD,EAAUt2E,MAAM,CAAE+L,EAAI4d,EAAK5d,IAC/C,GAAI,CAACsqE,SAASC,CAAS,CAACvqE,EAAE,CAAEghC,CAAY,CAAChhC,EAAE,EACzC,MAAO,GAGX,MAAO,EACT,CACK,GAAIuqE,GAAa,iBAAOA,EAAwB,CACnD,IAAmC7pE,EAA/B2pE,EAAOx4D,OAAOw4D,IAAI,CAACE,GACvB,GAAI,CAACvpC,GACD,iBAAOA,GACN,CAACwpC,GAAaH,EAAKp2E,MAAM,GAAK4d,OAAOw4D,IAAI,CAACrpC,GAAc/sC,MAAM,CAEjE,MAAO,GAET,IAAK,IAAI+L,EAAI,EAAG4d,EAAMysD,EAAKp2E,MAAM,CAAE+L,EAAI4d,EAAK5d,IAK1C,GAAIU,WAJJA,CAAAA,EAAM2pE,CAAI,CAACrqE,EAAE,GAIWU,UAAAA,GAGpB,CAAC4pE,SAASC,CAAS,CAAC7pE,EAAI,CAAEsgC,CAAY,CAACtgC,EAAI,EAC7C,MAAO,GAGX,MAAO,EACT,CACF,EAgBqB,IAAI,CAAC0pE,EAAkB,CAAE,IAAI,CAAE,GAClD,EAOA3R,UAAW,SAAS5kE,CAAO,EACzB,IAAIktE,EAAcltE,GAAWA,EAAQktE,WAAW,EAAIiJ,EAChD3iD,EAAc,IAAM05C,SACxB,IAAS,CAAC15C,EAAY,EAGtB4iD,UAAU,IAAI,CAAE5iD,EAAa,IAAI,CAAC05C,EAAY,EAC1CltE,GAAWA,EAAQ+pE,eAAe,EACpCqM,UAAU,IAAI,CAAE5iD,EAAaxzB,EAAQ+pE,eAAe,EAE/C,IAAI,EANF,IAAI,CAACvc,UAAU,CAACxtD,EAO3B,EAOAwtD,WAAY,SAASxtD,CAAO,EAE1B,IAAIktE,EAAcltE,CADlBA,EAAUA,GAAW,CAAE,GACGktE,WAAW,EAAIiJ,EAIzC,OAHAn2E,EAAQktE,WAAW,CAAGA,EACtB,IAAI,CAAC,IAAMA,EAAY,CAAG,CAAE,EAC5B,IAAI,CAACtI,SAAS,CAAC5kE,GACR,IAAI,CAEf,EACF,IAGMqiB,EAAmBxa,GAAOyb,IAAI,CAACjB,gBAAgB,CAEnDxa,GAAOyb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAACra,GAAOmW,MAAM,CAACC,SAAS,CAAwC,CAOvFu+C,kBAAmB,SAAS1c,CAAO,CAAE82B,CAAQ,EAG3C,GAAI,CAAC,IAAI,CAACnN,WAAW,EAAI,IAAI,CAAC1c,KAAK,EAAK,CAAC,IAAI,CAACxwD,MAAM,EAAI,IAAI,CAACA,MAAM,CAACqwD,aAAa,GAAK,IAAI,CACxF,MAAO,GAGT,IAEIl9B,EACAikD,EACqBxnE,EAJrB+2C,EAAKpD,EAAQ/yB,CAAC,CACdk2B,EAAKnD,EAAQ9yB,CAAC,CAEPwpD,EAAOx4D,OAAOw4D,IAAI,CAAC,IAAI,CAAC7D,OAAO,EACtCr1C,EAAIk5C,EAAKp2E,MAAM,CAAG,EAItB,IAHA,IAAI,CAACk7D,QAAQ,CAAG,EAGTh+B,GAAK,EAAGA,IAEb,GADAnxB,EAAIqqE,CAAI,CAACl5C,EAAE,CACN,IAAI,CAACu5C,gBAAgB,CAAC1qE,KAI3BwnE,EAAQ,IAAI,CAACC,cAAc,CAACgD,EAAW,IAAI,CAACjE,OAAO,CAACxmE,EAAE,CAAC2qE,WAAW,CAAG,IAAI,CAACnE,OAAO,CAACxmE,EAAE,CAACo0C,MAAM,EAgBvF7wB,IADJA,CAAAA,EAAU,IAAI,CAACmkD,gBAAgB,CAAC,CAAE9mD,EAAGm2B,EAAIl2B,EAAGi2B,CAAG,EAAG0wB,EAAAA,GAC7BjkD,EAAU,GAAM,GAEnC,OADA,IAAI,CAAC4rC,QAAQ,CAAGnvD,EACTA,EAGX,MAAO,EACT,EAOAqpE,eAAgB,SAASuB,CAAE,EACzB,IAAK,IAAI5qE,KAAK,IAAI,CAACgX,QAAQ,CACzB4zD,EAAG,IAAI,CAAC5zD,QAAQ,CAAChX,EAAE,CAAEA,EAAG,IAAI,CAEhC,EASAwpE,iBAAkB,WAChB,IAAInnD,EAAS,IAAI,CAACmkD,OAAO,CAEzB,IAAK,IAAI/zB,KAAWpwB,EAAQ,CAC1B,IAAIwoD,EAAgB,IAAI,CAAC7zD,QAAQ,CAACy7B,EAAQ,CAC1CpwB,CAAM,CAACowB,EAAQ,CAAC2B,MAAM,CAAGy2B,EAActvB,gBAAgB,CACrD,IAAI,CAACz7B,KAAK,CAAE,IAAI,CAAC9N,UAAU,CAAEqQ,CAAM,CAACowB,EAAQ,CAAC7xB,CAAC,CAAEyB,CAAM,CAACowB,EAAQ,CAAC5xB,CAAC,CAAE,IACrEwB,CAAM,CAACowB,EAAQ,CAACk4B,WAAW,CAAGE,EAActvB,gBAAgB,CAC1D,IAAI,CAACz7B,KAAK,CAAE,IAAI,CAACg9C,eAAe,CAAEz6C,CAAM,CAACowB,EAAQ,CAAC7xB,CAAC,CAAEyB,CAAM,CAACowB,EAAQ,CAAC5xB,CAAC,CAAE,GAC5E,CACF,EAWA6/C,wBAAyB,SAASnnD,CAAG,EACnC,GAAI,CAAC,IAAI,CAACk1C,wBAAwB,EAC/B,IAAI,CAACr+D,MAAM,EAAI,CAAC,IAAI,CAACA,MAAM,CAAC4tD,WAAW,EACvC,IAAI,CAAC5tD,MAAM,EAAI,IAAI,CAACA,MAAM,CAACqwD,aAAa,GAAK,IAAI,CAElD,OAAO,IAAI,CAEblnC,EAAIggC,IAAI,GACR,IAAIruB,EAAS,IAAI,CAAC4oB,cAAc,GAAIg3B,EAAK,IAAI,CAAC1B,2BAA2B,GACrE7oB,EAAM,IAAI,CAACnwD,MAAM,CAACmtD,iBAAiB,CAOvC,OANAhkC,EAAIE,SAAS,CAACyR,EAAOtK,CAAC,CAAEsK,EAAOrK,CAAC,EAChCtH,EAAItX,KAAK,CAAC,EAAIs+C,CAAG,CAAC,EAAE,CAAE,EAAIA,CAAG,CAAC,EAAE,EAChChnC,EAAIuP,MAAM,CAAC5S,EAAiB,IAAI,CAAC4J,KAAK,GACtCvG,EAAIigC,SAAS,CAAG,IAAI,CAACiV,wBAAwB,CAC7Cl1C,EAAIsxC,QAAQ,CAAC,CAACigB,EAAGlqD,CAAC,CAAG,EAAG,CAACkqD,EAAGjqD,CAAC,CAAG,EAAGiqD,EAAGlqD,CAAC,CAAEkqD,EAAGjqD,CAAC,EAC7CtH,EAAIsgC,OAAO,GACJ,IAAI,EAYbyoB,YAAa,SAAS/oD,CAAG,CAAEy/B,CAAa,EACtCA,EAAgBA,GAAiB,CAAC,EAClC,IAAI8xB,EAAK,IAAI,CAAC1B,2BAA2B,GACrCh3D,EAAc,IAAI,CAACgrD,iBAAiB,CACpClkE,EAAQ4xE,EAAGlqD,CAAC,CAAGxO,EACfrZ,EAAS+xE,EAAGjqD,CAAC,CAAGzO,EAChBkrD,EAAc,KAAqC,IAA9BtkB,EAAcskB,WAAW,CAC5CtkB,EAAcskB,WAAW,CAAG,IAAI,CAACA,WAAW,CAC9CyN,EAAe,GAiCnB,OA/BAxxD,EAAIggC,IAAI,GACRhgC,EAAIkgC,WAAW,CAAGT,EAAc5/C,WAAW,EAAI,IAAI,CAACA,WAAW,CAC/D,IAAI,CAAC02D,YAAY,CAACv2C,EAAKy/B,EAAc+jB,eAAe,EAAI,IAAI,CAACA,eAAe,EAE5ExjD,EAAI0gC,UAAU,CACZ,CAAC/gD,EAAQ,EACT,CAACH,EAAS,EACVG,EACAH,GAGEukE,IACF/jD,EAAIogC,SAAS,GACb,IAAI,CAAC0vB,cAAc,CAAC,SAAS52B,CAAO,CAAE/xC,CAAG,CAAE8xC,CAAY,EAGjDC,EAAQ8H,cAAc,EAAI9H,EAAQsI,aAAa,CAACvI,EAAc9xC,KAEhEqqE,EAAe,GACfxxD,EAAI0pC,MAAM,CAACxQ,EAAQ7xB,CAAC,CAAG1nB,EAAOu5C,EAAQ5xB,CAAC,CAAG9nB,GAC1CwgB,EAAI2pC,MAAM,CACRzQ,EAAQ7xB,CAAC,CAAG1nB,EAAQu5C,EAAQgC,OAAO,CACnChC,EAAQ5xB,CAAC,CAAG9nB,EAAS05C,EAAQiC,OAAO,EAG1C,GACIq2B,GACFxxD,EAAI2S,MAAM,IAGd3S,EAAIsgC,OAAO,GACJ,IAAI,EAab2oB,mBAAoB,SAASjpD,CAAG,CAAE1lB,CAAO,CAAEmlD,CAAa,EACtDA,EAAgBA,GAAiB,CAAC,EAClC,IAAIxtB,EAAO9vB,GAAOyb,IAAI,CAACiU,kBAAkB,CAAC,IAAI,CAAClyB,KAAK,CAAE,IAAI,CAACH,MAAM,CAAElF,GAC/Due,EAAc,IAAI,CAACA,WAAW,CAC9BoQ,EAAgB,IAAI,CAACA,aAAa,CAClC46C,EAAoB,IAAI,CAACA,iBAAiB,CAC1ClkE,EACEsyB,EAAK5K,CAAC,CAAGxO,EAAeoQ,CAAAA,EAAgB,IAAI,CAACpyB,MAAM,CAACikD,OAAO,GAAKxgD,EAAQqO,MAAM,EAAIk7D,EACpFrkE,EACEyyB,EAAK3K,CAAC,CAAGzO,EAAeoQ,CAAAA,EAAgB,IAAI,CAACpyB,MAAM,CAACikD,OAAO,GAAKxgD,EAAQsO,MAAM,EAAIi7D,EAYxF,OAXA7jD,EAAIggC,IAAI,GACR,IAAI,CAACuW,YAAY,CAACv2C,EAAKy/B,EAAc+jB,eAAe,EAAI,IAAI,CAACA,eAAe,EAC5ExjD,EAAIkgC,WAAW,CAAGT,EAAc5/C,WAAW,EAAI,IAAI,CAACA,WAAW,CAC/DmgB,EAAI0gC,UAAU,CACZ,CAAC/gD,EAAQ,EACT,CAACH,EAAS,EACVG,EACAH,GAGFwgB,EAAIsgC,OAAO,GACJ,IAAI,EAYbqI,aAAc,SAAS3oC,CAAG,CAAEy/B,CAAa,EACvCA,EAAgBA,GAAiB,CAAC,EAClCz/B,EAAIggC,IAAI,GACR,IAAoD3wB,EAAQ5sB,EAAxDq1D,EAAgB,IAAI,CAACjhE,MAAM,CAACkuD,gBAAgB,GA2BhD,OA1BA/kC,EAAImmD,YAAY,CAACrO,EAAe,EAAG,EAAGA,EAAe,EAAG,GACxD93C,EAAIkgC,WAAW,CAAGlgC,EAAIigC,SAAS,CAAGR,EAAc9mC,WAAW,EAAI,IAAI,CAACA,WAAW,CAC1E,IAAI,CAACH,kBAAkB,EAC1BwH,CAAAA,EAAIkgC,WAAW,CAAGT,EAAc7mC,iBAAiB,EAAI,IAAI,CAACA,iBAAiB,EAE7E,IAAI,CAAC29C,YAAY,CAACv2C,EAAKy/B,EAAcgkB,eAAe,EAAI,IAAI,CAACA,eAAe,EAC5E,IAAI,CAACl6D,SAAS,GACV,IAAI,CAAC89C,KAAK,EAMZh4B,CAAAA,EAAS,IAAI,CAACg4B,KAAK,CAACh1B,mBAAmB,IAEzC,IAAI,CAACy9C,cAAc,CAAC,SAAS52B,CAAO,CAAE/xC,CAAG,CAAE8xC,CAAY,EACrDx2C,EAAIw2C,EAAag0B,OAAO,CAAC9lE,EAAI,CACzB+xC,EAAQsI,aAAa,CAACvI,EAAc9xC,KAClCkoB,GACF5sB,CAAAA,EAAIN,GAAOyb,IAAI,CAACE,cAAc,CAACrb,EAAG4sB,EAAAA,EAEpC6pB,EAAQgK,MAAM,CAACljC,EAAKvd,EAAE4kB,CAAC,CAAE5kB,EAAE6kB,CAAC,CAAEm4B,EAAexG,GAEjD,GACAj5B,EAAIsgC,OAAO,GAEJ,IAAI,EAQb6wB,iBAAkB,SAAS1vB,CAAU,EACnC,OAAO,IAAI,CAAChkC,QAAQ,CAACgkC,EAAW,EAAI,IAAI,CAAChkC,QAAQ,CAACgkC,EAAW,CAACD,aAAa,CAAC,IAAI,CAAEC,EACpF,EASAgwB,kBAAmB,SAAShwB,CAAU,CAAEb,CAAO,EAK7C,OAJK,IAAI,CAACe,mBAAmB,EAC3B,KAAI,CAACA,mBAAmB,CAAG,CAAC,GAE9B,IAAI,CAACA,mBAAmB,CAACF,EAAW,CAAGb,EAChC,IAAI,EAkBb8wB,sBAAuB,SAASp3E,CAAO,EAGrC,IAAK,IAAImI,KAFTnI,GAAYA,CAAAA,EAAU,CAAE,GAEVA,EACZ,IAAI,CAACm3E,iBAAiB,CAAChvE,EAAGnI,CAAO,CAACmI,EAAE,EAEtC,OAAO,IAAI,EAUb02D,WAAY,WAEZ,EASAD,SAAU,WAEV,CACF,GAEF/2D,GAAOyb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAACra,GAAOghD,YAAY,CAAC5qC,SAAS,CAA8C,CAOnGo5D,YAAa,IAUbC,gBAAiB,SAAU/2E,CAAM,CAAEg3E,CAAS,EAG1C,IAAIC,MAAQ,WAAa,EACrBvsC,EAAassC,CAHjBA,EAAYA,GAAa,CAAE,GAGAtsC,UAAU,EAAIusC,MACrC51E,EAAW21E,EAAU31E,QAAQ,EAAI41E,MACjCnyC,EAAQ,IAAI,CAEhB,OAAOx9B,GAAOyb,IAAI,CAAC0pB,OAAO,CAAC,CACzBtsC,OAAQ,IAAI,CACZ0sC,WAAY7sC,EAAOuO,IAAI,CACvBi/B,SAAU,IAAI,CAACkS,cAAc,GAAGlzB,CAAC,CACjC2gB,SAAU,IAAI,CAAC2pC,WAAW,CAC1Bz1E,SAAU,SAASjB,CAAK,EACtBJ,EAAOoM,GAAG,CAAC,OAAQhM,GACnB0kC,EAAM/1B,gBAAgB,GACtB1N,GACF,EACAqpC,WAAY,WACV1qC,EAAO0O,SAAS,GAChBg8B,GACF,CACF,EACF,EAUAwsC,gBAAiB,SAAUl3E,CAAM,CAAEg3E,CAAS,EAG1C,IAAIC,MAAQ,WAAa,EACrBvsC,EAAassC,CAHjBA,EAAYA,GAAa,CAAE,GAGAtsC,UAAU,EAAIusC,MACrC51E,EAAW21E,EAAU31E,QAAQ,EAAI41E,MACjCnyC,EAAQ,IAAI,CAEhB,OAAOx9B,GAAOyb,IAAI,CAAC0pB,OAAO,CAAC,CACzBtsC,OAAQ,IAAI,CACZ0sC,WAAY7sC,EAAOsO,GAAG,CACtBk/B,SAAU,IAAI,CAACkS,cAAc,GAAGjzB,CAAC,CACjC0gB,SAAU,IAAI,CAAC2pC,WAAW,CAC1Bz1E,SAAU,SAASjB,CAAK,EACtBJ,EAAOoM,GAAG,CAAC,MAAOhM,GAClB0kC,EAAM/1B,gBAAgB,GACtB1N,GACF,EACAqpC,WAAY,WACV1qC,EAAO0O,SAAS,GAChBg8B,GACF,CACF,EACF,EAUAysC,SAAU,SAAUn3E,CAAM,CAAEg3E,CAAS,EAGnC,IAAIC,MAAQ,WAAa,EACrBvsC,EAAassC,CAHjBA,EAAYA,GAAa,CAAE,GAGAtsC,UAAU,EAAIusC,MACrC51E,EAAW21E,EAAU31E,QAAQ,EAAI41E,MACjCnyC,EAAQ,IAAI,CAEhB,OAAOx9B,GAAOyb,IAAI,CAAC0pB,OAAO,CAAC,CACzBtsC,OAAQ,IAAI,CACZ0sC,WAAY7sC,EAAOiF,OAAO,CAC1BuoC,SAAU,EACVL,SAAU,IAAI,CAAC2pC,WAAW,CAC1Bz1E,SAAU,SAASjB,CAAK,EACtBJ,EAAOoM,GAAG,CAAC,UAAWhM,GACtB0kC,EAAM/1B,gBAAgB,GACtB1N,GACF,EACAqpC,WAAY,WACV5F,EAAMh2B,MAAM,CAAC9O,GACb0qC,GACF,CACF,EACF,CACF,GAEApjC,GAAOyb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAACra,GAAOmW,MAAM,CAACC,SAAS,CAAwC,CAoBvF+uB,QAAS,WACP,GAAIrkC,CAAAA,SAAS,CAAC,EAAE,EAAI,iBAAOA,SAAS,CAAC,EAAE,CAarC,OAAO,IAAI,CAACgvE,QAAQ,CAAChuD,KAAK,CAAC,IAAI,CAAEhhB,WAZjC,IAAyBshB,EAAM2tD,EAA3BC,EAAiB,EAAE,CAAuBC,EAAM,EAAE,CACtD,IAAK7tD,KAAQthB,SAAS,CAAC,EAAE,CACvBkvE,EAAen8E,IAAI,CAACuuB,GAEtB,IAAK,IAAI9d,EAAI,EAAG4d,EAAM8tD,EAAez3E,MAAM,CAAE+L,EAAI4d,EAAK5d,IACpD8d,EAAO4tD,CAAc,CAAC1rE,EAAE,CACxByrE,EAAgBzrE,IAAM4d,EAAM,EAC5B+tD,EAAIp8E,IAAI,CAAC,IAAI,CAACi8E,QAAQ,CAAC1tD,EAAMthB,SAAS,CAAC,EAAE,CAACshB,EAAK,CAAEthB,SAAS,CAAC,EAAE,CAAEivE,IAEjE,OAAOE,CAKX,EASAH,SAAU,SAASrsD,CAAQ,CAAEgC,CAAE,CAAEttB,CAAO,CAAE43E,CAAa,EACrD,IAAkBG,EAAd1yC,EAAQ,IAAI,CAEhB/X,EAAKA,EAAGtc,QAAQ,GAMdhR,EAJGA,EAIO6H,GAAOyb,IAAI,CAAC/iB,MAAM,CAACqO,KAAK,CAAC5O,GAHzB,CAAE,EAMV,CAACsrB,EAAS/B,OAAO,CAAC,MACpBwuD,CAAAA,EAAWzsD,EAAS6F,KAAK,CAAC,MAG5B,IAAI6mD,EACF3yC,EAAM4kC,eAAe,CAAC1gD,OAAO,CAAC+B,GAAY,IACzCysD,GAAY1yC,EAAM4kC,eAAe,CAAC1gD,OAAO,CAACwuD,CAAQ,CAAC,EAAE,EAAI,GAExD5qC,EAAe4qC,EACf,IAAI,CAAC7rE,GAAG,CAAC6rE,CAAQ,CAAC,EAAE,CAAC,CAACA,CAAQ,CAAC,EAAE,CAAC,CAClC,IAAI,CAAC7rE,GAAG,CAACof,EAEP,UAAUtrB,GACdA,CAAAA,EAAQ+S,IAAI,CAAGo6B,CAAAA,EAGZ6qC,IAED1qD,EADE,CAACA,EAAG/D,OAAO,CAAC,KACT4jB,EAAetyB,WAAWyS,EAAG/b,OAAO,CAAC,IAAK,KAG1CsJ,WAAWyS,IAIpB,IAAI2qD,EAAW,CACbv3E,OAAQ,IAAI,CACZ0sC,WAAYptC,EAAQ+S,IAAI,CACxBg7B,SAAUzgB,EACV0gB,QAAShuC,EAAQy/C,EAAE,CACnB5R,OAAQ7tC,EAAQ6tC,MAAM,CACtBH,SAAU1tC,EAAQ0tC,QAAQ,CAC1BE,MAAO5tC,EAAQ4tC,KAAK,EAAI,SAASjtC,CAAK,CAAEu3E,CAAa,CAAEC,CAAY,EACjE,OAAOn4E,EAAQ4tC,KAAK,CAAC5jB,IAAI,CAACqb,EAAO1kC,EAAOu3E,EAAeC,EACzD,EACAv2E,SAAU,SAAUjB,CAAK,CAAEu3E,CAAa,CAAEC,CAAY,EAChDJ,EACF1yC,CAAK,CAAC0yC,CAAQ,CAAC,EAAE,CAAC,CAACA,CAAQ,CAAC,EAAE,CAAC,CAAGp3E,EAGlC0kC,EAAM14B,GAAG,CAAC2e,EAAU3qB,IAElBi3E,GAGJ53E,EAAQ4B,QAAQ,EAAI5B,EAAQ4B,QAAQ,CAACjB,EAAOu3E,EAAeC,EAC7D,EACAltC,WAAY,SAAUtqC,CAAK,CAAEu3E,CAAa,CAAEC,CAAY,GAClDP,IAIJvyC,EAAMp2B,SAAS,GACfjP,EAAQirC,UAAU,EAAIjrC,EAAQirC,UAAU,CAACtqC,EAAOu3E,EAAeC,GACjE,CACF,SAEA,EACStwE,GAAOyb,IAAI,CAACsrB,YAAY,CAACqpC,EAAS7qC,UAAU,CAAE6qC,EAASlqC,QAAQ,CAAEkqC,EAASvqC,QAAQ,CAAEuqC,GAGpFpwE,GAAOyb,IAAI,CAAC0pB,OAAO,CAACirC,EAE/B,CACF,GACC,SAAS78D,CAAM,EAEd,aAEA,IAAIvT,EAASuT,EAAOvT,MAAM,EAAKuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,GAGjD,GAFaA,EAAOyb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAElCra,EAAO8uD,IAAI,CAAE,CACf9uD,EAAO6jC,IAAI,CAAC,kCACZ,MACF,CASA7jC,EAAO8uD,IAAI,CAAG9uD,EAAOyb,IAAI,CAACG,WAAW,CAAC5b,EAAOmW,MAAM,CAAsC,CAOvF+rD,gBAAiBliE,EAAOmW,MAAM,CAACC,SAAS,CAAC8rD,eAAe,CAACpkE,MAAM,CAAC,KAAM,MAOtElE,KAAM,OAON68B,GAAM,EAONC,GAAM,EAENyrC,gBAAiBniE,EAAOmW,MAAM,CAACC,SAAS,CAAC+rD,eAAe,CAACrkE,MAAM,CAAC,KAAM,MAOtE4/B,WAAY,SAASvlC,CAAO,EAC1B,IAAI,CAACklC,SAAS,CAAC,aAAcllC,GAC7B,IAAI,CAACo4E,SAAS,EAChB,EAMAA,UAAW,WACL,IAAI,CAAC95C,EAAE,EAAI,CAAC,IAAI,CAACC,EAAE,CACrB,IAAI,CAACA,EAAE,CAAG,IAAI,CAACD,EAAE,CAEV,IAAI,CAACC,EAAE,EAAI,CAAC,IAAI,CAACD,EAAE,EAC1B,KAAI,CAACA,EAAE,CAAG,IAAI,CAACC,EAAE,CAErB,EAMA01B,QAAS,SAASvuC,CAAG,EAKnB,IAAI4Y,EAAK,IAAI,CAACA,EAAE,CAAG75B,KAAKG,GAAG,CAAC,IAAI,CAAC05B,EAAE,CAAE,IAAI,CAACj5B,KAAK,CAAG,GAAK,EACnDk5B,EAAK,IAAI,CAACA,EAAE,CAAG95B,KAAKG,GAAG,CAAC,IAAI,CAAC25B,EAAE,CAAE,IAAI,CAACr5B,MAAM,CAAG,GAAK,EACpDuwE,EAAI,IAAI,CAACpwE,KAAK,CACds0B,EAAI,IAAI,CAACz0B,MAAM,CACf6nB,EAAI,CAAC,IAAI,CAAC1nB,KAAK,CAAG,EAClB2nB,EAAI,CAAC,IAAI,CAAC9nB,MAAM,CAAG,EACnBmzE,EAAY/5C,IAAAA,GAAYC,IAAAA,EAG5B7Y,EAAIogC,SAAS,GAEbpgC,EAAI0pC,MAAM,CAACriC,EAAIuR,EAAItR,GAEnBtH,EAAI2pC,MAAM,CAACtiC,EAAI0oD,EAAIn3C,EAAItR,GACvBqrD,GAAa3yD,EAAI4yD,aAAa,CAACvrD,EAAI0oD,EAAI93C,YAAIW,EAAItR,EAAGD,EAAI0oD,EAAGzoD,EAAI2Q,YAAIY,EAAIxR,EAAI0oD,EAAGzoD,EAAIuR,GAEhF7Y,EAAI2pC,MAAM,CAACtiC,EAAI0oD,EAAGzoD,EAAI2M,EAAI4E,GAC1B85C,GAAa3yD,EAAI4yD,aAAa,CAACvrD,EAAI0oD,EAAGzoD,EAAI2M,EAAIgE,YAAIY,EAAIxR,EAAI0oD,EAAI93C,YAAIW,EAAItR,EAAI2M,EAAG5M,EAAI0oD,EAAIn3C,EAAItR,EAAI2M,GAE7FjU,EAAI2pC,MAAM,CAACtiC,EAAIuR,EAAItR,EAAI2M,GACvB0+C,GAAa3yD,EAAI4yD,aAAa,CAACvrD,EAAI4Q,YAAIW,EAAItR,EAAI2M,EAAG5M,EAAGC,EAAI2M,EAAIgE,YAAIY,EAAIxR,EAAGC,EAAI2M,EAAI4E,GAEhF7Y,EAAI2pC,MAAM,CAACtiC,EAAGC,EAAIuR,GAClB85C,GAAa3yD,EAAI4yD,aAAa,CAACvrD,EAAGC,EAAI2Q,YAAIY,EAAIxR,EAAI4Q,YAAIW,EAAItR,EAAGD,EAAIuR,EAAItR,GAErEtH,EAAI4pC,SAAS,GAEb,IAAI,CAAC0f,mBAAmB,CAACtpD,EAC3B,EAOA4qC,SAAU,SAASF,CAAmB,EACpC,OAAO,IAAI,CAAClrB,SAAS,CAAC,WAAY,CAAC,KAAM,KAAK,CAACv/B,MAAM,CAACyqD,GACxD,CAGF,GAWAvoD,EAAO8uD,IAAI,CAACtkC,UAAU,CAAG,SAAS9xB,CAAM,CAAEkqB,CAAQ,EAChD,OAAO5iB,EAAOmW,MAAM,CAAC8xD,WAAW,CAAC,OAAQvvE,EAAQkqB,EACnD,CAEF,EAAoCrG,GACnC,SAAShJ,CAAM,EAEd,aAEA,IAAIvT,EAASuT,EAAOvT,MAAM,EAAKuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,GAC7Cqa,EAASra,EAAOyb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAClCtd,EAAMiD,EAAOyb,IAAI,CAACkG,KAAK,CAAC5kB,GAAG,CAC3BC,EAAMgD,EAAOyb,IAAI,CAACkG,KAAK,CAAC3kB,GAAG,CAE3BwpB,GADUxmB,EAAOyb,IAAI,CAACnB,OAAO,CACLta,EAAOyb,IAAI,CAAC+K,qBAAqB,EAE7D,GAAIxmB,EAAO0wE,QAAQ,CAAE,CACnB1wE,EAAO6jC,IAAI,CAAC,sCACZ,MACF,CAQA7jC,EAAO0wE,QAAQ,CAAG1wE,EAAOyb,IAAI,CAACG,WAAW,CAAC5b,EAAOmW,MAAM,CAA0C,CAO/Fvc,KAAM,WAON6sB,OAAQ,KAWRkqD,iBAAkB,GAElBxO,gBAAiBniE,EAAOmW,MAAM,CAACC,SAAS,CAAC+rD,eAAe,CAACrkE,MAAM,CAAC,UAqBhE4/B,WAAY,SAASjX,CAAM,CAAEtuB,CAAO,EAClCA,EAAUA,GAAW,CAAC,EACtB,IAAI,CAACsuB,MAAM,CAAGA,GAAU,EAAE,CAC1B,IAAI,CAAC4W,SAAS,CAAC,aAAcllC,GAC7B,IAAI,CAACy4E,sBAAsB,CAACz4E,EAC9B,EAKA04E,uBAAwB,WACtB,OAAOrqD,EAAsB,IAAI,CAACC,MAAM,CAAE,IAAI,CAAE,GAClD,EAEAmqD,uBAAwB,SAASz4E,CAAO,EACtC,IAA6C24E,EAAzCC,EAAU,IAAI,CAACC,eAAe,CAAC74E,GAC/B84E,EAAc,IAAI,CAACN,gBAAgB,CAAG,IAAI,CAACj6D,WAAW,CAAG,CAC7D,KAAI,CAAClZ,KAAK,CAAGuzE,EAAQvzE,KAAK,CAAGyzE,EAC7B,IAAI,CAAC5zE,MAAM,CAAG0zE,EAAQ1zE,MAAM,CAAG4zE,EAC1B94E,EAAQ+4E,OAAO,EAClBJ,CAAAA,EAAiB,IAAI,CAAClH,sBAAsB,CAC1C,CAEE1kD,EAAG6rD,EAAQ9pE,IAAI,CAAG,IAAI,CAACyP,WAAW,CAAG,EAAIu6D,EAAc,EACvD9rD,EAAG4rD,EAAQ/pE,GAAG,CAAG,IAAI,CAAC0P,WAAW,CAAG,EAAIu6D,EAAc,CACxD,EACA,OACA,MACA,IAAI,CAACx5B,OAAO,CACZ,IAAI,CAACC,OAAO,GAGY,SAAjBv/C,EAAQ8O,IAAI,EACrB,KAAI,CAACA,IAAI,CAAG9O,EAAQ+4E,OAAO,CAAGH,EAAQ9pE,IAAI,CAAG6pE,EAAe5rD,CAAC,EAEpC,SAAhB/sB,EAAQ6O,GAAG,EACpB,KAAI,CAACA,GAAG,CAAG7O,EAAQ+4E,OAAO,CAAGH,EAAQ/pE,GAAG,CAAG8pE,EAAe3rD,CAAC,EAE7D,IAAI,CAACiW,UAAU,CAAG,CAChBlW,EAAG6rD,EAAQ9pE,IAAI,CAAG,IAAI,CAACzJ,KAAK,CAAG,EAAIyzE,EAAc,EACjD9rD,EAAG4rD,EAAQ/pE,GAAG,CAAG,IAAI,CAAC3J,MAAM,CAAG,EAAI4zE,EAAc,CACnD,CACF,EAYAD,gBAAiB,WAEf,IAAIvqD,EAAS,IAAI,CAACkqD,gBAAgB,CAAG,IAAI,CAACE,sBAAsB,GAAK,IAAI,CAACpqD,MAAM,CAC5EqB,EAAO/qB,EAAI0pB,EAAQ,MAAQ,EAC3BwB,EAAOlrB,EAAI0pB,EAAQ,MAAQ,EAM/B,MAAO,CACLxf,KAAM6gB,EACN9gB,IAAKihB,EACLzqB,MANWuqB,CAFF/qB,EAAIypB,EAAQ,MAAQ,GAEXqB,EAOlBzqB,OANY6qB,CAFHlrB,EAAIypB,EAAQ,MAAQ,GAEVwB,CAOrB,CACF,EAOAwgC,SAAU,SAASF,CAAmB,EACpC,OAAOluC,EAAO,IAAI,CAACgjB,SAAS,CAAC,WAAYkrB,GAAsB,CAC7D9hC,OAAQ,IAAI,CAACA,MAAM,CAAC3oB,MAAM,EAC5B,EACF,EASAqzE,aAAc,SAAStzD,CAAG,EACxB,IAAIiH,EAAO5C,EAAM,IAAI,CAACuE,MAAM,CAACluB,MAAM,CAC/B2sB,EAAI,IAAI,CAACkW,UAAU,CAAClW,CAAC,CACrBC,EAAI,IAAI,CAACiW,UAAU,CAACjW,CAAC,CAEzB,GAAI,CAACjD,GAAOyT,MAAM,IAAI,CAAClP,MAAM,CAACvE,EAAM,EAAE,CAACiD,CAAC,EAGtC,MAAO,GAETtH,EAAIogC,SAAS,GACbpgC,EAAI0pC,MAAM,CAAC,IAAI,CAAC9gC,MAAM,CAAC,EAAE,CAACvB,CAAC,CAAGA,EAAG,IAAI,CAACuB,MAAM,CAAC,EAAE,CAACtB,CAAC,CAAGA,GACpD,IAAK,IAAI7gB,EAAI,EAAGA,EAAI4d,EAAK5d,IACvBwgB,EAAQ,IAAI,CAAC2B,MAAM,CAACniB,EAAE,CACtBuZ,EAAI2pC,MAAM,CAAC1iC,EAAMI,CAAC,CAAGA,EAAGJ,EAAMK,CAAC,CAAGA,GAEpC,MAAO,EACT,EAMAinC,QAAS,SAASvuC,CAAG,EACd,IAAI,CAACszD,YAAY,CAACtzD,IAGvB,IAAI,CAACspD,mBAAmB,CAACtpD,EAC3B,EAMAsF,WAAY,WACV,OAAO,IAAI,CAAC9e,GAAG,CAAC,UAAU9L,MAAM,CAEpC,GAWAyH,EAAO0wE,QAAQ,CAAClmD,UAAU,CAAG,SAAS9xB,CAAM,CAAEkqB,CAAQ,EACpD,OAAO5iB,EAAOmW,MAAM,CAAC8xD,WAAW,CAAC,WAAYvvE,EAAQkqB,EAAU,SACjE,CAEF,EAAoCrG,GACnC,SAAShJ,CAAM,EAEd,aAEA,IAAIvT,EAASuT,EAAOvT,MAAM,EAAKuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,GAC7CjD,EAAMiD,EAAOyb,IAAI,CAACkG,KAAK,CAAC5kB,GAAG,CAC3BC,EAAMgD,EAAOyb,IAAI,CAACkG,KAAK,CAAC3kB,GAAG,CAC3Bqd,EAASra,EAAOyb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAClCtT,EAAQ/G,EAAOyb,IAAI,CAAC/iB,MAAM,CAACqO,KAAK,CAGpC,GAFc/G,EAAOyb,IAAI,CAACnB,OAAO,CAE7Bta,EAAO+sD,IAAI,CAAE,CACf/sD,EAAO6jC,IAAI,CAAC,kCACZ,MACF,CASA7jC,EAAO+sD,IAAI,CAAG/sD,EAAOyb,IAAI,CAACG,WAAW,CAAC5b,EAAOmW,MAAM,CAAsC,CAOvFvc,KAAM,OAON0xB,KAAM,KAEN62C,gBAAiBniE,EAAOmW,MAAM,CAACC,SAAS,CAAC+rD,eAAe,CAACrkE,MAAM,CAAC,OAAQ,YAExEokE,gBAAiBliE,EAAOmW,MAAM,CAACC,SAAS,CAAC8rD,eAAe,CAACpkE,MAAM,CAAC,QAQhE4/B,WAAY,SAAUpS,CAAI,CAAEnzB,CAAO,EACjCA,EAAU4O,EAAM5O,GAAW,CAAC,GAC5B,OAAOA,EAAQmzB,IAAI,CACnB,IAAI,CAAC+R,SAAS,CAAC,aAAcllC,GAC7B,IAAI,CAACi5E,QAAQ,CAAC9lD,GAAQ,EAAE,CAAEnzB,EAC5B,EAOAi5E,SAAU,SAAU9lD,CAAI,CAAEnzB,CAAO,EAC/B,IAAI,CAACmzB,IAAI,CAAGtrB,EAAOyb,IAAI,CAACua,eAAe,CACrC94B,MAAMC,OAAO,CAACmuB,GAAQA,EAAOtrB,EAAOyb,IAAI,CAACqZ,SAAS,CAACxJ,IAGrDtrB,EAAO0wE,QAAQ,CAACt6D,SAAS,CAACw6D,sBAAsB,CAACzuD,IAAI,CAAC,IAAI,CAAEhqB,GAAW,CAAC,EAC1E,EAMAk5E,oBAAqB,SAASxzD,CAAG,EAC/B,IAAIviB,EACAg2E,EAAgB,EAChBC,EAAgB,EAChBrsD,EAAI,EACJC,EAAI,EACJgR,EAAW,EACXC,EAAW,EACXzI,EAAI,CAAC,IAAI,CAACyN,UAAU,CAAClW,CAAC,CACtBuC,EAAI,CAAC,IAAI,CAAC2T,UAAU,CAACjW,CAAC,CAE1BtH,EAAIogC,SAAS,GAEb,IAAK,IAAI35C,EAAI,EAAG4d,EAAM,IAAI,CAACoJ,IAAI,CAAC/yB,MAAM,CAAE+L,EAAI4d,EAAK,EAAE5d,EAIjD,OAAQhJ,CAFRA,EAAU,IAAI,CAACgwB,IAAI,CAAChnB,EAAE,CAEP,CAAC,EAAE,EAEhB,IAAK,IACH4gB,EAAI5pB,CAAO,CAAC,EAAE,CACd6pB,EAAI7pB,CAAO,CAAC,EAAE,CACduiB,EAAI2pC,MAAM,CAACtiC,EAAIyI,EAAGxI,EAAIsC,GACtB,KAEF,KAAK,IACHvC,EAAI5pB,CAAO,CAAC,EAAE,CACd6pB,EAAI7pB,CAAO,CAAC,EAAE,CACdg2E,EAAgBpsD,EAChBqsD,EAAgBpsD,EAChBtH,EAAI0pC,MAAM,CAACriC,EAAIyI,EAAGxI,EAAIsC,GACtB,KAEF,KAAK,IACHvC,EAAI5pB,CAAO,CAAC,EAAE,CACd6pB,EAAI7pB,CAAO,CAAC,EAAE,CACd66B,EAAW76B,CAAO,CAAC,EAAE,CACrB86B,EAAW96B,CAAO,CAAC,EAAE,CACrBuiB,EAAI4yD,aAAa,CACfn1E,CAAO,CAAC,EAAE,CAAGqyB,EACbryB,CAAO,CAAC,EAAE,CAAGmsB,EACb0O,EAAWxI,EACXyI,EAAW3O,EACXvC,EAAIyI,EACJxI,EAAIsC,GAEN,KAEF,KAAK,IACH5J,EAAIkuC,gBAAgB,CAClBzwD,CAAO,CAAC,EAAE,CAAGqyB,EACbryB,CAAO,CAAC,EAAE,CAAGmsB,EACbnsB,CAAO,CAAC,EAAE,CAAGqyB,EACbryB,CAAO,CAAC,EAAE,CAAGmsB,GAEfvC,EAAI5pB,CAAO,CAAC,EAAE,CACd6pB,EAAI7pB,CAAO,CAAC,EAAE,CACd66B,EAAW76B,CAAO,CAAC,EAAE,CACrB86B,EAAW96B,CAAO,CAAC,EAAE,CACrB,KAEF,KAAK,IACL,IAAK,IACH4pB,EAAIosD,EACJnsD,EAAIosD,EACJ1zD,EAAI4pC,SAAS,EAEjB,CAEJ,EAMA2E,QAAS,SAASvuC,CAAG,EACnB,IAAI,CAACwzD,mBAAmB,CAACxzD,GACzB,IAAI,CAACspD,mBAAmB,CAACtpD,EAC3B,EAMA1U,SAAU,WACR,MAAO,kBAAoB,IAAI,CAACga,UAAU,GACxC,eAAiB,IAAI,CAACnc,GAAG,CAAG,aAAe,IAAI,CAACC,IAAI,CAAG,KAC3D,EAOAwhD,SAAU,SAASF,CAAmB,EACpC,OAAOluC,EAAO,IAAI,CAACgjB,SAAS,CAAC,WAAYkrB,GAAsB,CAC7Dj9B,KAAM,IAAI,CAACA,IAAI,CAACjjB,GAAG,CAAC,SAAS8C,CAAI,EAAI,OAAOA,EAAKjH,KAAK,EAAI,EAC5D,EACF,EAOAskD,iBAAkB,SAASD,CAAmB,EAC5C,IAAIzlC,EAAI,IAAI,CAAC2lC,QAAQ,CAAC,CAAC,aAAa,CAAC3qD,MAAM,CAACyqD,IAI5C,OAHIzlC,EAAE2I,UAAU,EACd,OAAO3I,EAAEwI,IAAI,CAERxI,CACT,EAQAK,WAAY,WACV,OAAO,IAAI,CAACmI,IAAI,CAAC/yB,MAAM,EAMzBy4E,gBAAiB,WAWf,IAAK,IAPD11E,EAKAi/B,EAPAi3C,EAAK,EAAE,CACPC,EAAK,EAAE,CAEPH,EAAgB,EAChBC,EAAgB,EAChBrsD,EAAI,EACJC,EAAI,EAGC7gB,EAAI,EAAG4d,EAAM,IAAI,CAACoJ,IAAI,CAAC/yB,MAAM,CAAE+L,EAAI4d,EAAK,EAAE5d,EAAG,CAIpD,OAAQhJ,CAFRA,EAAU,IAAI,CAACgwB,IAAI,CAAChnB,EAAE,CAEP,CAAC,EAAE,EAEhB,IAAK,IACH4gB,EAAI5pB,CAAO,CAAC,EAAE,CACd6pB,EAAI7pB,CAAO,CAAC,EAAE,CACdi/B,EAAS,EAAE,CACX,KAEF,KAAK,IACHrV,EAAI5pB,CAAO,CAAC,EAAE,CACd6pB,EAAI7pB,CAAO,CAAC,EAAE,CACdg2E,EAAgBpsD,EAChBqsD,EAAgBpsD,EAChBoV,EAAS,EAAE,CACX,KAEF,KAAK,IACHA,EAASv6B,EAAOyb,IAAI,CAACme,gBAAgB,CAAC1U,EAAGC,EACvC7pB,CAAO,CAAC,EAAE,CACVA,CAAO,CAAC,EAAE,CACVA,CAAO,CAAC,EAAE,CACVA,CAAO,CAAC,EAAE,CACVA,CAAO,CAAC,EAAE,CACVA,CAAO,CAAC,EAAE,EAEZ4pB,EAAI5pB,CAAO,CAAC,EAAE,CACd6pB,EAAI7pB,CAAO,CAAC,EAAE,CACd,KAEF,KAAK,IACHi/B,EAASv6B,EAAOyb,IAAI,CAACme,gBAAgB,CAAC1U,EAAGC,EACvC7pB,CAAO,CAAC,EAAE,CACVA,CAAO,CAAC,EAAE,CACVA,CAAO,CAAC,EAAE,CACVA,CAAO,CAAC,EAAE,CACVA,CAAO,CAAC,EAAE,CACVA,CAAO,CAAC,EAAE,EAEZ4pB,EAAI5pB,CAAO,CAAC,EAAE,CACd6pB,EAAI7pB,CAAO,CAAC,EAAE,CACd,KAEF,KAAK,IACL,IAAK,IACH4pB,EAAIosD,EACJnsD,EAAIosD,CAER,CACAh3C,EAAOtT,OAAO,CAAC,SAAUnC,CAAK,EAC5B0sD,EAAG39E,IAAI,CAACixB,EAAMI,CAAC,EACfusD,EAAG59E,IAAI,CAACixB,EAAMK,CAAC,CACjB,GACAqsD,EAAG39E,IAAI,CAACqxB,GACRusD,EAAG59E,IAAI,CAACsxB,EACV,CAnEA,IAqEI2C,EAAO/qB,EAAIy0E,IAAO,EAClBvpD,EAAOlrB,EAAI00E,IAAO,EAMtB,MAAO,CACLxqE,KAAM6gB,EACN9gB,IAAKihB,EACLzqB,MANWuqB,CAFF/qB,EAAIw0E,IAAO,GAEF1pD,EAOlBzqB,OANW6qB,CAFFlrB,EAAIy0E,IAAO,GAEFxpD,CAOpB,CACF,CACF,GASAjoB,EAAO+sD,IAAI,CAACviC,UAAU,CAAG,SAAS9xB,CAAM,CAAEkqB,CAAQ,EAChD,GAAI,iBAAOlqB,EAAO+yB,UAAU,CAAe,CACzC,IAAIimD,EAAUh5E,EAAO+yB,UAAU,CAC/BzrB,EAAO2xE,cAAc,CAACD,EAAS,SAAUrmD,CAAQ,EAC/C,IAAIC,EAAOD,CAAQ,CAAC,EAAE,CACtBC,EAAKk4B,UAAU,CAAC9qD,GAChBkqB,GAAYA,EAAS0I,EACvB,EACF,MAEEtrB,EAAOmW,MAAM,CAAC8xD,WAAW,CAAC,OAAQvvE,EAAQkqB,EAAU,OAExD,CAIF,EAAoCrG,GAM9Bxf,EAAMiD,CADNA,EAASuT,EAAOvT,MAAM,EAAKuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,IAChCyb,IAAI,CAACkG,KAAK,CAAC5kB,GAAG,CAC3BC,EAAMgD,EAAOyb,IAAI,CAACkG,KAAK,CAAC3kB,GAAG,CAE3BgD,EAAOwrB,KAAK,GAYhBxrB,EAAOwrB,KAAK,CAAGxrB,EAAOyb,IAAI,CAACG,WAAW,CAAC5b,EAAOmW,MAAM,CAAEnW,EAAOsiB,UAAU,CAAuC,CAO5G1oB,KAAM,QAON8c,YAAa,EAOb0+C,eAAgB,GAOhB+M,gBAAiB,EAAE,CASnByP,cAAe,GASfl0C,WAAY,SAASp2B,CAAO,CAAEnP,CAAO,CAAE05E,CAAgB,EACrD15E,EAAUA,GAAW,CAAC,EACtB,IAAI,CAACuE,QAAQ,CAAG,EAAE,CAIlBm1E,GAAoB,IAAI,CAACx0C,SAAS,CAAC,aAAcllC,GACjD,IAAI,CAACuE,QAAQ,CAAG4K,GAAW,EAAE,CAC7B,IAAK,IAAIhD,EAAI,IAAI,CAAC5H,QAAQ,CAACnE,MAAM,CAAE+L,KACjC,IAAI,CAAC5H,QAAQ,CAAC4H,EAAE,CAAC4gD,KAAK,CAAG,IAAI,CAG/B,GAAK2sB,EAoBH,IAAI,CAACC,qBAAqB,OApBL,CACrB,IAAItiD,EAASr3B,GAAWA,EAAQozB,WAAW,MAKnB3vB,IAApBzD,EAAQs/C,OAAO,EACjB,KAAI,CAACA,OAAO,CAAGt/C,EAAQs/C,OAAO,EAER77C,KAAAA,IAApBzD,EAAQu/C,OAAO,EACjB,KAAI,CAACA,OAAO,CAAGv/C,EAAQu/C,OAAO,EAIhCloB,GAAU,IAAI,CAACuiD,WAAW,GAC1B,IAAI,CAACC,oBAAoB,CAACxiD,GAC1B,OAAOr3B,EAAQozB,WAAW,CAC1B,IAAI,CAAC8R,SAAS,CAAC,aAAcllC,EAC/B,CAKA,IAAI,CAACiP,SAAS,EAChB,EAKA0qE,sBAAuB,WAErB,IAAK,IAAIxtE,EAAI,IAAI,CAAC5H,QAAQ,CAACnE,MAAM,CAAE+L,KACjC,IAAI,CAAC5H,QAAQ,CAAC4H,EAAE,CAAC8C,SAAS,CAFT,GAIrB,EAMA4qE,qBAAsB,SAASxiD,CAAM,EAEnC,IAAK,IADDA,EAASA,GAAU,IAAI,CAAC4oB,cAAc,GACjC9zC,EAAI,IAAI,CAAC5H,QAAQ,CAACnE,MAAM,CAAE+L,KACjC,IAAI,CAAC2tE,mBAAmB,CAAC,IAAI,CAACv1E,QAAQ,CAAC4H,EAAE,CAAEkrB,EAE/C,EAOAyiD,oBAAqB,SAASv5E,CAAM,CAAE82B,CAAM,EAC1C,IAAI0iD,EAAax5E,EAAOuO,IAAI,CACxBkrE,EAAYz5E,EAAOsO,GAAG,CAG1BtO,EAAOoM,GAAG,CAAC,CACTmC,KAAMirE,EAAa1iD,EAAOtK,CAAC,CAC3Ble,IAAKmrE,EAAY3iD,EAAOrK,CAAC,GAE3BzsB,EAAOwsD,KAAK,CAAG,IAAI,CACnBxsD,EAAO0O,SAAS,CAPG,GAQrB,EAMA+B,SAAU,WACR,MAAO,oBAAsB,IAAI,CAACga,UAAU,GAAK,IACnD,EAQAo7C,cAAe,SAAS7lE,CAAM,EAC5B,IAAI05E,EAAS,CAAC,CAAC,IAAI,CAACltB,KAAK,CAqBzB,OApBA,IAAI,CAACmtB,oBAAoB,GACzBryE,EAAOyb,IAAI,CAAC0R,oBAAoB,CAAC,IAAI,EACjCz0B,IACE05E,GAEFpyE,EAAOyb,IAAI,CAACyT,yBAAyB,CAACx2B,EAAQ,IAAI,CAACwsD,KAAK,CAACh1B,mBAAmB,IAE9E,IAAI,CAACxzB,QAAQ,CAAC7I,IAAI,CAAC6E,GACnBA,EAAOwsD,KAAK,CAAG,IAAI,CACnBxsD,EAAOsrB,IAAI,CAAC,SAAU,IAAI,CAACtvB,MAAM,GAEnC,IAAI,CAACq9E,WAAW,GAChB,IAAI,CAACC,oBAAoB,GACzB,IAAI,CAAChQ,KAAK,CAAG,GACToQ,EACF,IAAI,CAACltB,KAAK,CAACqZ,aAAa,GAGxB,IAAI,CAACn3D,SAAS,GAET,IAAI,EASbk3D,iBAAkB,SAAS5lE,CAAM,EAS/B,OARA,IAAI,CAAC25E,oBAAoB,GACzBryE,EAAOyb,IAAI,CAAC0R,oBAAoB,CAAC,IAAI,EAErC,IAAI,CAAC3lB,MAAM,CAAC9O,GACZ,IAAI,CAACq5E,WAAW,GAChB,IAAI,CAACC,oBAAoB,GACzB,IAAI,CAAC5qE,SAAS,GACd,IAAI,CAAC46D,KAAK,CAAG,GACN,IAAI,EAMbz/C,eAAgB,SAAS7pB,CAAM,EAC7B,IAAI,CAACspE,KAAK,CAAG,GACbtpE,EAAOwsD,KAAK,CAAG,IAAI,CACnBxsD,EAAOsrB,IAAI,CAAC,SAAU,IAAI,CAACtvB,MAAM,CACnC,EAKAiuB,iBAAkB,SAASjqB,CAAM,EAC/B,IAAI,CAACspE,KAAK,CAAG,GACb,OAAOtpE,EAAOwsD,KAAK,EAMrBlhC,KAAM,SAAShf,CAAG,CAAElM,CAAK,EACvB,IAAIwL,EAAI,IAAI,CAAC5H,QAAQ,CAACnE,MAAM,CAC5B,GAAI,IAAI,CAACq5E,aAAa,CACpB,KAAOttE,KACL,IAAI,CAAC5H,QAAQ,CAAC4H,EAAE,CAACqgE,UAAU,CAAC3/D,EAAKlM,GAGrC,GAAIkM,WAAAA,EACF,KAAOV,KACL,IAAI,CAAC5H,QAAQ,CAAC4H,EAAE,CAAC0f,IAAI,CAAChf,EAAKlM,GAG/BkH,EAAOmW,MAAM,CAACC,SAAS,CAAC4N,IAAI,CAAC7B,IAAI,CAAC,IAAI,CAAEnd,EAAKlM,EAC/C,EAOA2vD,SAAU,SAASF,CAAmB,EACpC,IAAI+pB,EAAwB,IAAI,CAAC7wB,oBAAoB,CACjD8wB,EAAe,IAAI,CAAC71E,QAAQ,CAC7ByL,MAAM,CAAC,SAAU+a,CAAG,EACnB,MAAO,CAACA,EAAI0lC,iBAAiB,GAE9BvgD,GAAG,CAAC,SAAU6a,CAAG,EAChB,IAAIsvD,EAAmBtvD,EAAIu+B,oBAAoB,CAC/Cv+B,EAAIu+B,oBAAoB,CAAG6wB,EAC3B,IAAIG,EAAOvvD,EAAIulC,QAAQ,CAACF,GAExB,OADArlC,EAAIu+B,oBAAoB,CAAG+wB,EACpBC,CACT,GACEvvD,EAAMljB,EAAOmW,MAAM,CAACC,SAAS,CAACqyC,QAAQ,CAACtmC,IAAI,CAAC,IAAI,CAAEomC,GAEtD,OADArlC,EAAI5b,OAAO,CAAGirE,EACPrvD,CACT,EAOAslC,iBAAkB,SAASD,CAAmB,EAC5C,IAAIgqB,EAAc9mD,EAAa,IAAI,CAACA,UAAU,CAC9C,GAAIA,EACF8mD,EAAe9mD,MAEZ,CACH,IAAI6mD,EAAwB,IAAI,CAAC7wB,oBAAoB,CACrD8wB,EAAe,IAAI,CAAC71E,QAAQ,CAAC2L,GAAG,CAAC,SAAS6a,CAAG,EAC3C,IAAIsvD,EAAmBtvD,EAAIu+B,oBAAoB,CAC/Cv+B,EAAIu+B,oBAAoB,CAAG6wB,EAC3B,IAAIG,EAAOvvD,EAAIslC,gBAAgB,CAACD,GAEhC,OADArlC,EAAIu+B,oBAAoB,CAAG+wB,EACpBC,CACT,EACF,CACA,IAAIvvD,EAAMljB,EAAOmW,MAAM,CAACC,SAAS,CAACoyC,gBAAgB,CAACrmC,IAAI,CAAC,IAAI,CAAEomC,GAE9D,OADArlC,EAAI5b,OAAO,CAAGirE,EACPrvD,CACT,EAMA69B,OAAQ,SAASljC,CAAG,EAClB,IAAI,CAAC6oC,cAAc,CAAG,GACtB,IAAI,CAACrpB,SAAS,CAAC,SAAUxf,GACzB,IAAI,CAAC6oC,cAAc,CAAG,EACxB,EASAD,YAAa,WACX,IAAIisB,EAAW1yE,EAAOmW,MAAM,CAACC,SAAS,CAACqwC,WAAW,CAACtkC,IAAI,CAAC,IAAI,EAC5D,GAAIuwD,EACF,KAAK,IAAIpuE,EAAI,EAAG4d,EAAM,IAAI,CAACxlB,QAAQ,CAACnE,MAAM,CAAE+L,EAAI4d,EAAK5d,IACnD,GAAI,IAAI,CAAC5H,QAAQ,CAAC4H,EAAE,CAACqhE,cAAc,GAEjC,OADA,IAAI,CAACD,UAAU,CAAG,GACX,EAEX,CAEF,OAAOgN,CACT,EAMA/M,eAAgB,WACd,GAAI3lE,EAAOmW,MAAM,CAACC,SAAS,CAACuvD,cAAc,CAACxjD,IAAI,CAAC,IAAI,EAClD,MAAO,GAET,IAAK,IAAI7d,EAAI,EAAG4d,EAAM,IAAI,CAACxlB,QAAQ,CAACnE,MAAM,CAAE+L,EAAI4d,EAAK5d,IACnD,GAAI,IAAI,CAAC5H,QAAQ,CAAC4H,EAAE,CAACqhE,cAAc,GACjC,MAAO,GAGX,MAAO,EACT,EAMAjB,WAAY,WACV,OAAO,IAAI,CAACgB,UAAU,EAAK,IAAI,CAACxgB,KAAK,EAAI,IAAI,CAACA,KAAK,CAACwf,UAAU,EAChE,EAMAU,WAAY,SAASvnD,CAAG,EACtB,IAAK,IAAIvZ,EAAI,EAAG4d,EAAM,IAAI,CAACxlB,QAAQ,CAACnE,MAAM,CAAE+L,EAAI4d,EAAK5d,IACnD,IAAI,CAAC5H,QAAQ,CAAC4H,EAAE,CAACy8C,MAAM,CAACljC,GAE1B,IAAI,CAACmoD,aAAa,CAACnoD,EAAK,IAAI,CAACsS,QAAQ,CACvC,EAKAm1C,aAAc,SAASW,CAAU,EAC/B,GAAI,IAAI,CAAC5oC,SAAS,CAAC,eAAgB4oC,GACjC,MAAO,GAET,GAAI,CAAC,IAAI,CAACnE,cAAc,CACtB,MAAO,GAET,IAAK,IAAIx9D,EAAI,EAAG4d,EAAM,IAAI,CAACxlB,QAAQ,CAACnE,MAAM,CAAE+L,EAAI4d,EAAK5d,IACnD,GAAI,IAAI,CAAC5H,QAAQ,CAAC4H,EAAE,CAACghE,YAAY,CAAC,IAAO,CACvC,GAAI,IAAI,CAACpe,YAAY,CAAE,CAErB,IAAIhiC,EAAI,IAAI,CAACm+C,UAAU,CAAG,IAAI,CAACrc,KAAK,CAAE7hC,EAAI,IAAI,CAACm+C,WAAW,CAAG,IAAI,CAACrc,KAAK,CACvE,IAAI,CAAC2L,aAAa,CAAC/M,SAAS,CAAC,CAAC3gC,EAAI,EAAG,CAACC,EAAI,EAAGD,EAAGC,EAClD,CACA,MAAO,EACT,CAEF,MAAO,EACT,EAWAktD,qBAAsB,WACpB,IAAIM,EAAc,IAAI,CAACtjD,aAAa,GAOpC,OANA,IAAI,CAAC3yB,QAAQ,CAACuqB,OAAO,CAAC,SAASvuB,CAAM,EAEnCsH,EAAOyb,IAAI,CAAC8T,oBAAoB,CAAC72B,EAAQi6E,GACzC,OAAOj6E,EAAOwsD,KAAK,CACnBxsD,EAAO0O,SAAS,EAClB,GACO,IAAI,EAQbwrE,QAAS,WAMP,OAHA,IAAI,CAACl2E,QAAQ,CAACuqB,OAAO,CAAC,SAASvuB,CAAM,EACnCA,EAAOoM,GAAG,CAAC,QAAS,GACtB,GACO,IAAI,CAACutE,oBAAoB,EAClC,EAEA/6D,QAAS,WACP,IAAI,CAAC+lB,SAAS,CAAC,WACf,IAAI,CAACl2B,aAAa,CAAC,SAAUzO,CAAM,EACjCA,EAAO4e,OAAO,EAAI5e,EAAO4e,OAAO,EAClC,GACA,IAAI,CAAC5a,QAAQ,CAAG,EAAE,EASpBm2E,kBAAmB,WACjB,GAAK,IAAI,CAACn+E,MAAM,EAGhB,IAAI4S,EAAU,IAAI,CAAC5K,QAAQ,CAAEhI,EAAS,IAAI,CAACA,MAAM,CACjD,IAAI,CAACgI,QAAQ,CAAG,EAAE,CAClB,IAAIvE,EAAU,IAAI,CAACswD,QAAQ,EAC3B,QAAOtwD,EAAQmP,OAAO,CACtB,IAAI8hD,EAAkB,IAAIppD,EAAO4+D,eAAe,CAAC,EAAE,EAanD,OAZAxV,EAAgBtkD,GAAG,CAAC3M,GACpBixD,EAAgBxvD,IAAI,CAAG,kBACvBlF,EAAO8S,MAAM,CAAC,IAAI,EAClBF,EAAQ2f,OAAO,CAAC,SAASvuB,CAAM,EAC7BA,EAAOwsD,KAAK,CAAGkE,EACf1wD,EAAOspE,KAAK,CAAG,GACfttE,EAAO+Q,GAAG,CAAC/M,EACb,GACA0wD,EAAgB10D,MAAM,CAAGA,EACzB00D,EAAgB1sD,QAAQ,CAAG4K,EAC3B5S,EAAOqwD,aAAa,CAAGqE,EACvBA,EAAgBhiD,SAAS,GAClBgiD,EACT,EAOA0pB,gBAAiB,WACf,OAAO,IAAI,CAACT,oBAAoB,EAClC,EAOAU,iBAAkB,WAKhB,OAHA,IAAI,CAAC5rE,aAAa,CAAC,SAASzO,CAAM,EAChCA,EAAO0O,SAAS,CAFC,GAGnB,GACO,IAAI,EAMb2qE,YAAa,SAASiB,CAAe,EAQnC,IAPA,IAEIlwD,EAAGV,EAAMuE,EAGT8O,EALA+7C,EAAK,EAAE,CACPC,EAAK,EAAE,CAEPjD,EAAQ,CAAC,KAAM,KAAM,KAAM,KAAK,CAChClqE,EAAI,EAAG2uE,EAAO,IAAI,CAACv2E,QAAQ,CAACnE,MAAM,CAC/B26E,EAAO1E,EAAMj2E,MAAM,CAElB+L,EAAI2uE,EAAM,EAAE3uE,EAAG,CAGrB,IAAKmxB,EAAI,EADT9O,EAAS7D,CADTA,EAAI,IAAI,CAACpmB,QAAQ,CAAC4H,EAAE,EACTgnE,WAAW,GACV71C,EAAIy9C,EAAMz9C,IACpBrT,EAAOosD,CAAK,CAAC/4C,EAAE,CACf+7C,EAAG39E,IAAI,CAAC8yB,CAAM,CAACvE,EAAK,CAAC8C,CAAC,EACtBusD,EAAG59E,IAAI,CAAC8yB,CAAM,CAACvE,EAAK,CAAC+C,CAAC,CAExBrC,CAAAA,EAAEioD,OAAO,CAAGpkD,CACd,CAEA,IAAI,CAACwsD,UAAU,CAAC3B,EAAIC,EAAIuB,EAC1B,EAKAG,WAAY,SAAS3B,CAAE,CAAEC,CAAE,CAAEuB,CAAe,EAC1C,IAAII,EAAQ,IAAIpzE,EAAOilB,KAAK,CAACloB,EAAIy0E,GAAKz0E,EAAI00E,IACtC4B,EAAQ,IAAIrzE,EAAOilB,KAAK,CAACjoB,EAAIw0E,GAAKx0E,EAAIy0E,IACtCzqE,EAAMosE,EAAMjuD,CAAC,EAAI,EAAGle,EAAOmsE,EAAMluD,CAAC,EAAI,EACtC1nB,EAAQ61E,EAAOnuD,CAAC,CAAGkuD,EAAMluD,CAAC,EAAK,EAC/B7nB,EAASg2E,EAAOluD,CAAC,CAAGiuD,EAAMjuD,CAAC,EAAK,CACpC,KAAI,CAAC3nB,KAAK,CAAGA,EACb,IAAI,CAACH,MAAM,CAAGA,EACT21E,GAGH,IAAI,CAACvjD,mBAAmB,CAAC,CAAEvK,EAAGje,EAAMke,EAAGne,CAAI,EAAG,OAAQ,MAE1D,CAGF,GASAhH,EAAOwrB,KAAK,CAAChB,UAAU,CAAG,SAAS9xB,CAAM,CAAEkqB,CAAQ,EACjD,IAAItb,EAAU5O,EAAO4O,OAAO,CACxBnP,EAAU6H,EAAOyb,IAAI,CAAC/iB,MAAM,CAACqO,KAAK,CAACrO,EAAQ,IAE/C,GADA,OAAOP,EAAQmP,OAAO,CAClB,iBAAOA,EAAsB,CAE/BtH,EAAO2xE,cAAc,CAACrqE,EAAS,SAAU+jB,CAAQ,EAC/C,IAAI65B,EAAQllD,EAAOyb,IAAI,CAAC2P,gBAAgB,CAACC,EAAU3yB,EAAQ4O,GAC3D49C,EAAMpgD,GAAG,CAAC3M,GACVyqB,GAAYA,EAASsiC,EACvB,GACA,MACF,CACAllD,EAAOyb,IAAI,CAACwO,cAAc,CAAC3iB,EAAS,SAAU6iB,CAAgB,EAC5D,IAAIhyB,EAAU6H,EAAOyb,IAAI,CAAC/iB,MAAM,CAACqO,KAAK,CAACrO,EAAQ,GAC/C,QAAOP,EAAQmP,OAAO,CACtBtH,EAAOyb,IAAI,CAACiP,uBAAuB,CAAChyB,EAAQP,EAAS,WACnDyqB,GAAYA,EAAS,IAAI5iB,EAAOwrB,KAAK,CAACrB,EAAkBhyB,EAAS,IACnE,EACF,EACF,GASI6H,CAFAA,EAASuT,EAAOvT,MAAM,EAAKuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,IAEtC4+D,eAAe,GAW1B5+D,EAAO4+D,eAAe,CAAG5+D,EAAOyb,IAAI,CAACG,WAAW,CAAC5b,EAAOwrB,KAAK,CAAiD,CAO5G5xB,KAAM,kBAQN8jC,WAAY,SAASp2B,CAAO,CAAEnP,CAAO,EACnCA,EAAUA,GAAW,CAAC,EACtB,IAAI,CAACuE,QAAQ,CAAG4K,GAAW,EAAE,CAC7B,IAAK,IAAIhD,EAAI,IAAI,CAAC5H,QAAQ,CAACnE,MAAM,CAAE+L,KACjC,IAAI,CAAC5H,QAAQ,CAAC4H,EAAE,CAAC4gD,KAAK,CAAG,IAAI,CAG3B/sD,EAAQs/C,OAAO,EACjB,KAAI,CAACA,OAAO,CAAGt/C,EAAQs/C,OAAO,EAE5Bt/C,EAAQu/C,OAAO,EACjB,KAAI,CAACA,OAAO,CAAGv/C,EAAQu/C,OAAO,EAEhC,IAAI,CAACq6B,WAAW,GAChB,IAAI,CAACC,oBAAoB,GACzBhyE,EAAOmW,MAAM,CAACC,SAAS,CAACsnB,UAAU,CAACvb,IAAI,CAAC,IAAI,CAAEhqB,GAC9C,IAAI,CAACiP,SAAS,EAChB,EASAksE,QAAS,WACP,IAAIhsE,EAAU,IAAI,CAAC5K,QAAQ,CAACoB,MAAM,EAClC,KAAI,CAACpB,QAAQ,CAAG,EAAE,CAClB,IAAIvE,EAAU6H,EAAOmW,MAAM,CAACC,SAAS,CAACqyC,QAAQ,CAACtmC,IAAI,CAAC,IAAI,EACpDoxD,EAAW,IAAIvzE,EAAOwrB,KAAK,CAAC,EAAE,EAQlC,GAPA,OAAOrzB,EAAQyB,IAAI,CACnB25E,EAASzuE,GAAG,CAAC3M,GACbmP,EAAQ2f,OAAO,CAAC,SAASvuB,CAAM,EAC7BA,EAAOhE,MAAM,CAAC8S,MAAM,CAAC9O,GACrBA,EAAOwsD,KAAK,CAAGquB,CACjB,GACAA,EAAS72E,QAAQ,CAAG4K,EAChB,CAAC,IAAI,CAAC5S,MAAM,CACd,OAAO6+E,EAET,IAAI7+E,EAAS,IAAI,CAACA,MAAM,CAIxB,OAHAA,EAAO+Q,GAAG,CAAC8tE,GACX7+E,EAAOqwD,aAAa,CAAGwuB,EACvBA,EAASnsE,SAAS,GACXmsE,CACT,EAOAvc,WAAY,WAEV,OADA,IAAI,CAAC4b,OAAO,GACL,EACT,EAMAzpE,SAAU,WACR,MAAO,8BAAgC,IAAI,CAACga,UAAU,GAAK,IAC7D,EAUAsjC,YAAa,WACX,MAAO,EACT,EAMAie,WAAY,WACV,MAAO,EACT,EAQAxN,gBAAiB,SAASr5C,CAAG,CAAEy/B,CAAa,CAAEk2B,CAAgB,EAC5D31D,EAAIggC,IAAI,GACRhgC,EAAIqxC,WAAW,CAAG,IAAI,CAAC4M,QAAQ,CAAG,IAAI,CAAC2F,uBAAuB,CAAG,EACjE,IAAI,CAACpkC,SAAS,CAAC,kBAAmBxf,EAAKy/B,GAEK,SAAjCk2B,CADXA,EAAmBA,GAAoB,CAAE,GACb5R,WAAW,EACrC4R,CAAAA,EAAiB5R,WAAW,CAAG,IAEjC4R,EAAiB3M,kBAAkB,CAAG,GACtC,IAAK,IAAIviE,EAAI,EAAG4d,EAAM,IAAI,CAACxlB,QAAQ,CAACnE,MAAM,CAAE+L,EAAI4d,EAAK5d,IACnD,IAAI,CAAC5H,QAAQ,CAAC4H,EAAE,CAAC4yD,eAAe,CAACr5C,EAAK21D,GAExC31D,EAAIsgC,OAAO,EACb,CACF,GASAn+C,EAAO4+D,eAAe,CAACp0C,UAAU,CAAG,SAAS9xB,CAAM,CAAEkqB,CAAQ,EAC3D5iB,EAAOyb,IAAI,CAACwO,cAAc,CAACvxB,EAAO4O,OAAO,CAAE,SAAS6iB,CAAgB,EAClE,OAAOzxB,EAAO4O,OAAO,CACrBsb,GAAYA,EAAS,IAAI5iB,EAAO4+D,eAAe,CAACz0C,EAAkBzxB,EAAQ,IAC5E,EACF,GAGD,SAAS6a,CAAM,EAEd,aAEA,IAAI8G,EAASra,GAAOyb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAMtC,GAJK9G,EAAOvT,MAAM,EAChBuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,GAGhBuT,EAAOvT,MAAM,CAACC,KAAK,CAAE,CACvBD,GAAO6jC,IAAI,CAAC,oCACZ,MACF,CASA7jC,GAAOC,KAAK,CAAGD,GAAOyb,IAAI,CAACG,WAAW,CAAC5b,GAAOmW,MAAM,CAAuC,CAOzFvc,KAAM,QAQN8c,YAAa,EASb+8D,iBAAkB,GAQlBC,YAAa,EAQbC,YAAa,EAObC,gBAAiB,EAOjBC,gBAAiB,EAQjBC,oBAAqB,GAQrB5R,gBAAiBliE,GAAOmW,MAAM,CAACC,SAAS,CAAC8rD,eAAe,CAACpkE,MAAM,CAAC,QAAS,SASzEqkE,gBAAiBniE,GAAOmW,MAAM,CAACC,SAAS,CAAC+rD,eAAe,CAACrkE,MAAM,CAAC,QAAS,SAQzEi2E,SAAU,GAQVnM,MAAO,EAQPC,MAAO,EASPmM,eAAgB,GAahBt2C,WAAY,SAAStlC,CAAO,CAAED,CAAO,EACnCA,GAAYA,CAAAA,EAAU,CAAE,GACxB,IAAI,CAAC8M,OAAO,CAAG,EAAE,CACjB,IAAI,CAAC8uE,QAAQ,CAAG,UAAY/zE,GAAOmW,MAAM,CAACwzD,KAAK,GAC/C,IAAI,CAACtsC,SAAS,CAAC,aAAcllC,GAC7B,IAAI,CAAC87E,YAAY,CAAC77E,EAASD,EAC7B,EAMAutD,WAAY,WACV,OAAO,IAAI,CAACwuB,QAAQ,EAAI,CAAC,CAC3B,EAWAC,WAAY,SAAS/7E,CAAO,CAAED,CAAO,EAgBnC,OAfA,IAAI,CAACi8E,aAAa,CAAC,IAAI,CAACL,QAAQ,EAChC,IAAI,CAACK,aAAa,CAAC,IAAI,CAACL,QAAQ,CAAG,aACnC,IAAI,CAACG,QAAQ,CAAG97E,EAChB,IAAI,CAACi8E,gBAAgB,CAAGj8E,EACxB,IAAI,CAACk8E,WAAW,CAACn8E,GACW,IAAxB,IAAI,CAAC8M,OAAO,CAAC1M,MAAM,EACrB,IAAI,CAACgN,YAAY,GAMf,IAAI,CAACgvE,YAAY,EACnB,IAAI,CAACC,kBAAkB,GAElB,IAAI,EAMbJ,cAAe,SAASpvE,CAAG,EACzB,IAAIyvE,EAAUz0E,GAAO00E,aAAa,CAC9BD,GAAWA,EAAQE,iBAAiB,EACtCF,EAAQE,iBAAiB,CAAC3vE,EAE9B,EAKAsS,QAAS,WACP,IAAI,CAAC+lB,SAAS,CAAC,WACf,IAAI,CAAC+2C,aAAa,CAAC,IAAI,CAACL,QAAQ,EAChC,IAAI,CAACK,aAAa,CAAC,IAAI,CAACL,QAAQ,CAAG,aACnC,IAAI,CAACnhB,aAAa,CAAGh3D,KAAAA,EACrB,CAAC,mBAAoB,WAAY,cAAe,eAAe,CAACqrB,OAAO,CAAC,CAAC,SAAS7uB,CAAO,EACvF4H,GAAOyb,IAAI,CAACqnB,gBAAgB,CAAC,IAAI,CAAC1qC,EAAQ,EAC1C,IAAI,CAACA,EAAQ,CAAGwD,KAAAA,CAClB,GAAGoM,IAAI,CAAC,IAAI,EACd,EAKA4sE,eAAgB,WACd,OAAO,IAAI,CAACP,gBAAgB,EAAK,KAAI,CAACA,gBAAgB,CAACl0E,WAAW,EAAI,KACxE,EAMA00E,gBAAiB,WACf,IAAIz8E,EAAU,IAAI,CAACstD,UAAU,GAC7B,MAAO,CACLloD,MAAOpF,EAAQ08E,YAAY,EAAI18E,EAAQoF,KAAK,CAC5CH,OAAQjF,EAAQ28E,aAAa,EAAI38E,EAAQiF,MAAM,CAEnD,EAMA23E,QAAS,SAASn3D,CAAG,EACnB,GAAI,IAAK,CAAC2S,MAAM,EAAI,QAAI,CAAC9Z,WAAW,EAGpC,IAAIk3D,EAAI,IAAI,CAACpwE,KAAK,CAAG,EAAGs0B,EAAI,IAAI,CAACz0B,MAAM,CAAG,EAC1CwgB,EAAIogC,SAAS,GACbpgC,EAAI0pC,MAAM,CAAC,CAACqmB,EAAG,CAAC97C,GAChBjU,EAAI2pC,MAAM,CAAComB,EAAG,CAAC97C,GACfjU,EAAI2pC,MAAM,CAAComB,EAAG97C,GACdjU,EAAI2pC,MAAM,CAAC,CAAComB,EAAG97C,GACfjU,EAAI2pC,MAAM,CAAC,CAAComB,EAAG,CAAC97C,GAChBjU,EAAI4pC,SAAS,GACf,EAOAgB,SAAU,SAASF,CAAmB,EACpC,IAAItjD,EAAU,EAAE,CAEhB,IAAI,CAACA,OAAO,CAACgiB,OAAO,CAAC,SAASguD,CAAS,EACjCA,GACFhwE,EAAQpR,IAAI,CAACohF,EAAUxsB,QAAQ,GAEnC,GACA,IAAI/vD,EAAS2hB,EACX,IAAI,CAACgjB,SAAS,CACZ,WACA,CAAC,QAAS,QAAQ,CAACv/B,MAAM,CAACyqD,IACzB,CACD7oD,IAAK,IAAI,CAACw1E,MAAM,GAChB/0E,YAAa,IAAI,CAACy0E,cAAc,GAChC3vE,QAASA,CACX,GAIF,OAHI,IAAI,CAACsvE,YAAY,EACnB77E,CAAAA,EAAO67E,YAAY,CAAG,IAAI,CAACA,YAAY,CAAC9rB,QAAQ,IAE3C/vD,CACT,EAMAy8E,QAAS,WACP,OAAO,IAAI,CAACvN,KAAK,EAAI,IAAI,CAACC,KAAK,EAAI,IAAI,CAACrqE,KAAK,CAAG,IAAI,CAAC02E,QAAQ,CAAC12E,KAAK,EAAI,IAAI,CAACH,MAAM,CAAG,IAAI,CAAC62E,QAAQ,CAAC72E,MAAM,EAU3G63E,OAAQ,SAASE,CAAQ,EACvB,IAAIh9E,EAAUg9E,EAAW,IAAI,CAAClB,QAAQ,CAAG,IAAI,CAACG,gBAAgB,QAC9D,EACE,EAAYvrE,SAAS,CACZ1Q,EAAQ0Q,SAAS,GAGtB,IAAI,CAAC2qE,gBAAgB,CAChBr7E,EAAQi9E,YAAY,CAAC,OAGrBj9E,EAAQsH,GAAG,CAIb,IAAI,CAACA,GAAG,EAAI,EAEvB,EAYA41E,OAAQ,SAAS51E,CAAG,CAAEkjB,CAAQ,CAAEzqB,CAAO,EAMrC,OALA6H,GAAOyb,IAAI,CAACpD,SAAS,CAAC3Y,EAAK,SAASD,CAAG,CAAE6jD,CAAO,EAC9C,IAAI,CAAC6wB,UAAU,CAAC10E,EAAKtH,GACrB,IAAI,CAACo9E,eAAe,GACpB3yD,GAAYA,EAAS,IAAI,CAAE0gC,EAC7B,EAAG,IAAI,CAAEnrD,GAAWA,EAAQgI,WAAW,EAChC,IAAI,EAObgJ,SAAU,WACR,MAAO,2BAA6B,IAAI,CAAC+rE,MAAM,GAAK,MACtD,EAEAV,mBAAoB,WAClB,IAAIrsE,EAAS,IAAI,CAACosE,YAAY,CAC1BiB,EAAe,IAAI,CAAC1B,mBAAmB,CACvCjR,EAAc,IAAI,CAACC,qBAAqB,GACxCt8D,EAASq8D,EAAYr8D,MAAM,CAC3BC,EAASo8D,EAAYp8D,MAAM,CAC3BgvE,EAAkB,IAAI,CAACC,WAAW,EAAI,IAAI,CAACrB,gBAAgB,CAI/D,GAHI,IAAI,CAACnvB,KAAK,EACZ,IAAI,CAACpgD,GAAG,CAAC,QAAS,IAEhB,CAACqD,GAAW3B,EAASgvE,GAAgB/uE,EAAS+uE,EAAe,CAC/D,IAAI,CAACtB,QAAQ,CAAGuB,EAChB,IAAI,CAAC7B,eAAe,CAAG,EACvB,IAAI,CAACC,eAAe,CAAG,EACvB,IAAI,CAACH,WAAW,CAAGltE,EACnB,IAAI,CAACmtE,WAAW,CAAGltE,EACnB,MACF,CACKzG,GAAO00E,aAAa,EACvB10E,CAAAA,GAAO00E,aAAa,CAAG10E,GAAO6gB,iBAAiB,IAEjD,IAAImL,EAAWhsB,GAAOyb,IAAI,CAACoQ,mBAAmB,GAC1CkoD,EAAW,IAAI,CAAC2B,WAAW,CAAI,IAAI,CAAC3B,QAAQ,CAAG,YAAe,IAAI,CAACA,QAAQ,CAC3E4B,EAAcF,EAAgBj4E,KAAK,CAAEo4E,EAAeH,EAAgBp4E,MAAM,CAC9E2uB,EAASxuB,KAAK,CAAGm4E,EACjB3pD,EAAS3uB,MAAM,CAAGu4E,EAClB,IAAI,CAAC1B,QAAQ,CAAGloD,EAChB,IAAI,CAAC0nD,WAAW,CAAGvrE,EAAO3B,MAAM,CAAGA,EACnC,IAAI,CAACmtE,WAAW,CAAGxrE,EAAO1B,MAAM,CAAGA,EACnCzG,GAAO00E,aAAa,CAACnvE,YAAY,CAC/B,CAAC4C,EAAO,CAAEstE,EAAiBE,EAAaC,EAAc,IAAI,CAAC1B,QAAQ,CAAEH,GACvE,IAAI,CAACH,eAAe,CAAG5nD,EAASxuB,KAAK,CAAG,IAAI,CAAC62E,gBAAgB,CAAC72E,KAAK,CACnE,IAAI,CAACq2E,eAAe,CAAG7nD,EAAS3uB,MAAM,CAAG,IAAI,CAACg3E,gBAAgB,CAACh3E,MAAM,EAWvEkI,aAAc,SAASN,CAAO,EAS5B,GANAA,EAAUA,CADVA,EAAUA,GAAW,IAAI,CAACA,OAAO,EAAI,EAAE,EACrBkD,MAAM,CAAC,SAASA,CAAM,EAAI,OAAOA,GAAU,CAACA,EAAO0tE,cAAc,EAAI,GACvF,IAAI,CAAC/wE,GAAG,CAAC,QAAS,IAGlB,IAAI,CAACsvE,aAAa,CAAC,IAAI,CAACL,QAAQ,CAAG,aAE/B9uE,IAAAA,EAAQ1M,MAAM,CAKhB,OAJA,IAAI,CAAC27E,QAAQ,CAAG,IAAI,CAACG,gBAAgB,CACrC,IAAI,CAACqB,WAAW,CAAG,KACnB,IAAI,CAAC9B,eAAe,CAAG,EACvB,IAAI,CAACC,eAAe,CAAG,EAChB,IAAI,CAGb,IAAIiC,EAAa,IAAI,CAACzB,gBAAgB,CAClCsB,EAAcG,EAAWhB,YAAY,EAAIgB,EAAWt4E,KAAK,CACzDo4E,EAAeE,EAAWf,aAAa,EAAIe,EAAWz4E,MAAM,CAEhE,GAAI,IAAI,CAAC62E,QAAQ,GAAK,IAAI,CAACG,gBAAgB,CAAE,CAE3C,IAAIroD,EAAWhsB,GAAOyb,IAAI,CAACoQ,mBAAmB,EAC9CG,CAAAA,EAASxuB,KAAK,CAAGm4E,EACjB3pD,EAAS3uB,MAAM,CAAGu4E,EAClB,IAAI,CAAC1B,QAAQ,CAAGloD,EAChB,IAAI,CAAC0pD,WAAW,CAAG1pD,CACrB,MAIE,IAAI,CAACkoD,QAAQ,CAAG,IAAI,CAACwB,WAAW,CAChC,IAAI,CAACA,WAAW,CAAC53D,UAAU,CAAC,MAAM+nC,SAAS,CAAC,EAAG,EAAG8vB,EAAaC,GAE/D,IAAI,CAAClC,WAAW,CAAG,EACnB,IAAI,CAACC,WAAW,CAAG,EAYrB,OAVK3zE,GAAO00E,aAAa,EACvB10E,CAAAA,GAAO00E,aAAa,CAAG10E,GAAO6gB,iBAAiB,IAEjD7gB,GAAO00E,aAAa,CAACnvE,YAAY,CAC/BN,EAAS,IAAI,CAACovE,gBAAgB,CAAEsB,EAAaC,EAAc,IAAI,CAAC1B,QAAQ,CAAE,IAAI,CAACH,QAAQ,EACrF,KAAI,CAACM,gBAAgB,CAAC72E,KAAK,GAAK,IAAI,CAAC02E,QAAQ,CAAC12E,KAAK,EACrD,IAAI,CAAC62E,gBAAgB,CAACh3E,MAAM,GAAK,IAAI,CAAC62E,QAAQ,CAAC72E,MAAM,IACrD,IAAI,CAACu2E,eAAe,CAAG,IAAI,CAACM,QAAQ,CAAC12E,KAAK,CAAG,IAAI,CAAC62E,gBAAgB,CAAC72E,KAAK,CACxE,IAAI,CAACq2E,eAAe,CAAG,IAAI,CAACK,QAAQ,CAAC72E,MAAM,CAAG,IAAI,CAACg3E,gBAAgB,CAACh3E,MAAM,EAErE,IAAI,EAOb+uD,QAAS,SAASvuC,CAAG,EACnB7d,GAAOyb,IAAI,CAACulB,iBAAiB,CAACnjB,EAAK,IAAI,CAACm2D,cAAc,EAChC,KAAlB,IAAI,CAAClY,QAAQ,EAAa,IAAI,CAACyY,YAAY,EAAI,IAAI,CAACwB,YAAY,IAClE,IAAI,CAACvB,kBAAkB,GAEzB,IAAI,CAACQ,OAAO,CAACn3D,GACb,IAAI,CAACspD,mBAAmB,CAACtpD,EAC3B,EAOAqnD,kBAAmB,SAASrnD,CAAG,EAC7B7d,GAAOyb,IAAI,CAACulB,iBAAiB,CAACnjB,EAAK,IAAI,CAACm2D,cAAc,EACtDh0E,GAAOmW,MAAM,CAACC,SAAS,CAAC8uD,iBAAiB,CAAC/iD,IAAI,CAAC,IAAI,CAAEtE,EACvD,EAaA4oC,YAAa,WACX,OAAO,IAAI,CAACgf,gBAAgB,EAC9B,EAEA4B,YAAa,SAASxpD,CAAG,EACvB,IAAIm4D,EAAgB,IAAI,CAAC9B,QAAQ,CACjC,GAAK8B,GAGL,IAAIxvE,EAAS,IAAI,CAACotE,eAAe,CAAEntE,EAAS,IAAI,CAACotE,eAAe,CAC5DjG,EAAI,IAAI,CAACpwE,KAAK,CAAEs0B,EAAI,IAAI,CAACz0B,MAAM,CAAEN,EAAMH,KAAKG,GAAG,CAAEC,EAAMJ,KAAKI,GAAG,CAE/D4qE,EAAQ5qE,EAAI,IAAI,CAAC4qE,KAAK,CAAE,GAAIC,EAAQ7qE,EAAI,IAAI,CAAC6qE,KAAK,CAAE,GACpDoO,EAAUD,EAAclB,YAAY,EAAIkB,EAAcx4E,KAAK,CAC3D04E,EAAWF,EAAcjB,aAAa,EAAIiB,EAAc34E,MAAM,CAC9D84E,EAAKvO,EAAQphE,EACb4vE,EAAKvO,EAAQphE,EAEb4vE,EAAKt5E,EAAI6wE,EAAIpnE,EAAQyvE,EAAUE,GAC/BG,EAAKv5E,EAAI+0B,EAAIrrB,EAAQyvE,EAAWE,GAChClxD,EAAI,CAAC0oD,EAAI,EAAGzoD,EAAI,CAAC2M,EAAI,EACrBykD,EAAWx5E,EAAI6wE,EAAGqI,EAAUzvE,EAASohE,GACrC4O,EAAWz5E,EAAI+0B,EAAGokD,EAAWzvE,EAASohE,EAE1CmO,CAAAA,GAAiBn4D,EAAII,SAAS,CAAC+3D,EAAeG,EAAIC,EAAIC,EAAIC,EAAIpxD,EAAGC,EAAGoxD,EAAUC,GAChF,EAMAT,aAAc,WACZ,IAAIxvE,EAAQ,IAAI,CAACu8D,qBAAqB,GACtC,OAAQv8D,EAAMC,MAAM,GAAK,IAAI,CAACktE,WAAW,EAAIntE,EAAME,MAAM,GAAK,IAAI,CAACktE,WAAW,EAMhF8C,kBAAmB,WACjB,IAAI,CAAC3xE,GAAG,CAAC,IAAI,CAAC+vE,eAAe,GAC/B,EASAZ,aAAc,SAAS77E,CAAO,CAAED,CAAO,EACrC,IAAI,CAACg8E,UAAU,CAACn0E,GAAOyb,IAAI,CAAC6lB,OAAO,CAAClpC,GAAUD,GAC9C6H,GAAOyb,IAAI,CAAC+lB,QAAQ,CAAC,IAAI,CAACkkB,UAAU,GAAI1lD,GAAOC,KAAK,CAACy2E,UAAU,CACjE,EAMApC,YAAa,SAASn8E,CAAO,EAC3BA,GAAYA,CAAAA,EAAU,CAAE,GACxB,IAAI,CAACqrD,UAAU,CAACrrD,GAChB,IAAI,CAACo9E,eAAe,CAACp9E,EACvB,EAOAw+E,aAAc,SAAS1xE,CAAO,CAAE2d,CAAQ,EAClC3d,GAAWA,EAAQ1M,MAAM,CAC3ByH,GAAOyb,IAAI,CAACwO,cAAc,CAAChlB,EAAS,SAASklB,CAAgB,EAC3DvH,GAAYA,EAASuH,EACvB,EAAG,wBAGHvH,GAAYA,GAEhB,EAQA2yD,gBAAiB,SAASp9E,CAAO,EAC/BA,GAAYA,CAAAA,EAAU,CAAE,GACxB,IAAI4nC,EAAK,IAAI,CAAC2lB,UAAU,EACxB,KAAI,CAACloD,KAAK,CAAGrF,EAAQqF,KAAK,EAAIuiC,EAAG+0C,YAAY,EAAI/0C,EAAGviC,KAAK,EAAI,EAC7D,IAAI,CAACH,MAAM,CAAGlF,EAAQkF,MAAM,EAAI0iC,EAAGg1C,aAAa,EAAIh1C,EAAG1iC,MAAM,EAAI,CACnE,EAQAwwB,kCAAmC,WACjC,IAGIx1B,EAHAu+E,EAAM52E,GAAOyb,IAAI,CAACoS,iCAAiC,CAAC,IAAI,CAACgpD,mBAAmB,EAAI,IAChFC,EAAS,IAAI,CAAC5C,QAAQ,CAAC12E,KAAK,CAAEu5E,EAAU,IAAI,CAAC7C,QAAQ,CAAC72E,MAAM,CAC5DmJ,EAAS,EAAGC,EAAS,EAAGqhE,EAAa,EAAGC,EAAY,EAAGH,EAAQ,EAAGC,EAAQ,EAClEmP,EAAS,IAAI,CAACx5E,KAAK,CAAEy5E,EAAU,IAAI,CAAC55E,MAAM,CAAE65E,EAAmB,CAAE15E,MAAOw5E,EAAQ35E,OAAQ45E,CAAQ,EA2C5G,OA1CIL,GAAQA,CAAAA,SAAAA,EAAI3oD,MAAM,EAAe2oD,SAAAA,EAAIxoD,MAAM,GACrB,SAApBwoD,EAAI5oD,WAAW,GAEjB31B,EAAS,CAAC2+E,EAASF,EADnBtwE,CAAAA,EAASC,EAASzG,GAAOyb,IAAI,CAACoT,cAAc,CAAC,IAAI,CAACqlD,QAAQ,CAAEgD,EAAAA,CAChC1wE,EAAU,EACnB,QAAfowE,EAAI3oD,MAAM,EACZ65C,CAAAA,EAAa,CAACzvE,CAAAA,EAEG,QAAfu+E,EAAI3oD,MAAM,EACZ65C,CAAAA,EAAazvE,CAAAA,EAEfA,EAAS,CAAC4+E,EAAUF,EAAUtwE,CAAAA,EAAU,EACrB,QAAfmwE,EAAIxoD,MAAM,EACZ25C,CAAAA,EAAY,CAAC1vE,CAAAA,EAEI,QAAfu+E,EAAIxoD,MAAM,EACZ25C,CAAAA,EAAY1vE,CAAAA,GAGQ,UAApBu+E,EAAI5oD,WAAW,GAEjB31B,EAASy+E,EAASE,EADlBxwE,CAAAA,EAASC,EAASzG,GAAOyb,IAAI,CAACqT,gBAAgB,CAAC,IAAI,CAAColD,QAAQ,CAAEgD,EAAAA,EAE3C,QAAfN,EAAI3oD,MAAM,EACZ25C,CAAAA,EAAQvvE,EAAS,GAEA,QAAfu+E,EAAI3oD,MAAM,EACZ25C,CAAAA,EAAQvvE,CAAAA,EAEVA,EAAS0+E,EAAUE,EAAUxwE,EACV,QAAfmwE,EAAIxoD,MAAM,EACZy5C,CAAAA,EAAQxvE,EAAS,GAEA,QAAfu+E,EAAIxoD,MAAM,EACZy5C,CAAAA,EAAQxvE,CAAAA,EAEVy+E,EAASE,EAASxwE,EAClBuwE,EAAUE,EAAUxwE,KAItBD,EAASwwE,EAASF,EAClBrwE,EAASwwE,EAAUF,GAEd,CACLv5E,MAAOs5E,EACPz5E,OAAQ05E,EACRvwE,OAAQA,EACRC,OAAQA,EACRqhE,WAAYA,EACZC,UAAWA,EACXH,MAAOA,EACPC,MAAOA,CACT,CACF,CACF,GAQA7nE,GAAOC,KAAK,CAACy2E,UAAU,CAAG,aAM1B12E,GAAOC,KAAK,CAACmW,SAAS,CAAC+gE,SAAS,CAAGn3E,GAAOC,KAAK,CAACmW,SAAS,CAAC8+D,MAAM,CAQhEl1E,GAAOC,KAAK,CAACuqB,UAAU,CAAG,SAAS4sD,CAAO,CAAEx0D,CAAQ,EAClD,IAAIlqB,EAASsH,GAAOyb,IAAI,CAAC/iB,MAAM,CAACqO,KAAK,CAACqwE,GACtCp3E,GAAOyb,IAAI,CAACpD,SAAS,CAAC3f,EAAOgH,GAAG,CAAE,SAASD,CAAG,CAAE6jD,CAAO,EACrD,GAAIA,EAAS,CACX1gC,GAAYA,EAAS,KAAM,IAC3B,MACF,CACA5iB,GAAOC,KAAK,CAACmW,SAAS,CAACugE,YAAY,CAACx0D,IAAI,CAACzpB,EAAQA,EAAOuM,OAAO,CAAE,SAASA,CAAO,EAC/EvM,EAAOuM,OAAO,CAAGA,GAAW,EAAE,CAC9BjF,GAAOC,KAAK,CAACmW,SAAS,CAACugE,YAAY,CAACx0D,IAAI,CAACzpB,EAAQ,CAACA,EAAO67E,YAAY,CAAC,CAAE,SAAS8C,CAAa,EAC5F3+E,EAAO67E,YAAY,CAAG8C,CAAa,CAAC,EAAE,CACtCr3E,GAAOyb,IAAI,CAACiP,uBAAuB,CAAChyB,EAAQA,EAAQ,WAElDkqB,EADY,IAAI5iB,GAAOC,KAAK,CAACR,EAAK/G,GAClB,GAClB,EACF,EACF,EACF,EAAG,KAAMA,EAAOyH,WAAW,CAC7B,EASAH,GAAOC,KAAK,CAACC,OAAO,CAAG,SAASH,CAAG,CAAE6iB,CAAQ,CAAE00D,CAAU,EACvDt3E,GAAOyb,IAAI,CAACpD,SAAS,CAACtY,EAAK,SAASN,CAAG,CAAE6jD,CAAO,EAC9C1gC,GAAYA,EAAS,IAAI5iB,GAAOC,KAAK,CAACR,EAAK63E,GAAah0B,EAC1D,EAAG,KAAMg0B,GAAcA,EAAWn3E,WAAW,CAC/C,CAIF,EAAoCoc,GACnC,WAEC,aAqDA,SAAS2E,mBAAmB/oB,CAAO,EAC7BA,GAAWA,EAAQgpB,QAAQ,EAC7B,KAAI,CAACA,QAAQ,CAAGhpB,EAAQgpB,QAAQ,EAElC,IAAI,CAACo2D,cAAc,CAAC,IAAI,CAACp2D,QAAQ,CAAE,IAAI,CAACA,QAAQ,EAChD,IAAI,CAACq2D,cAAc,EACrB,CAnCAx3E,GAAO8gB,gBAAgB,CAAG,SAASK,CAAQ,EACzC,GAAInhB,GAAOqf,YAAY,CACrB,MAAO,GAET8B,EAAWA,GAAYnhB,GAAOkhB,kBAAkB,CAAC9K,SAAS,CAAC+K,QAAQ,CACnE,IAAIzsB,EAAS8nB,SAASoN,aAAa,CAAC,UAChCnM,EAAK/oB,EAAOopB,UAAU,CAAC,UAAYppB,EAAOopB,UAAU,CAAC,sBACrD25D,EAAc,GAElB,GAAIh6D,EAAI,CACNzd,GAAOihB,cAAc,CAAGxD,EAAGi6D,YAAY,CAACj6D,EAAGk6D,gBAAgB,EAC3DF,EAAcz3E,GAAOihB,cAAc,EAAIE,EAEvC,IAAK,IADDy2D,EAAa,CAAC,QAAS,UAAW,OAAO,CACpCtzE,EAAI,EAAGA,EAAI,EAAGA,IACrB,GAAIuzE,SA9Bap6D,CAAE,CAAEq6D,CAAS,EAElC,IAAIC,EAAiBt6D,EAAGu6D,YAAY,CAACv6D,EAAGw6D,eAAe,SAGvD,EAFGC,YAAY,CAACH,EAFK,aAAeD,EAAY,0BAGhDr6D,EAAG06D,aAAa,CAACJ,KACZt6D,EAAG26D,kBAAkB,CAACL,EAAgBt6D,EAAG46D,cAAc,CAI9D,EAqBwB56D,EAAIm6D,CAAU,CAACtzE,EAAE,EAAE,CACnCtE,GAAOs4E,cAAc,CAAGV,CAAU,CAACtzE,EAAE,CACrC,KACF,CAEJ,CAEA,OADA,IAAI,CAACmzE,WAAW,CAAGA,EACZA,CACT,EAEAz3E,GAAOkhB,kBAAkB,CAAGA,mBAa5BA,mBAAmB9K,SAAS,CAAqD,CAE/E+K,SAAU,KASV/D,UAAW,CAEX,EAKAm6D,eAAgB,SAAS/5E,CAAK,CAAEH,CAAM,EACpC,IAAI,CAACia,OAAO,GACZ,IAAI,CAACihE,iBAAiB,CAAC/6E,EAAOH,GAE9B,IAAI,CAACm7E,SAAS,CAAG,IAAIC,aAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,EAC1D,IAAI,CAACC,6BAA6B,CAACl7E,EAAOH,EAC5C,EAMAq7E,8BAA+B,SAASl7E,CAAK,CAAEH,CAAM,EACnD,IA+BIs7E,EAAWC,EA/BiDC,EAA5DC,EAAiB,KAA8B,IAAvBnlF,OAAOolF,WAAW,CAC9C,GAAI,CACF,IAAI95D,UAAU,EAAG,GACjB45D,EAAkB,EACpB,CACA,MAAO/wE,EAAG,CACR+wE,EAAkB,EACpB,CAEA,IAAIG,EAAoB,oBAAOC,YAE3BC,EAAqB,oBAAOt6D,kBAEhC,GAAMk6D,GAAkBD,GAAmBG,GAAqBE,GAIhE,IAAIt7D,EAAe5d,GAAOyb,IAAI,CAACoQ,mBAAmB,GAE9CnN,EAAc,IAAIu6D,YAAYz7E,EAAQH,EAAS,GACnD,GAAI2C,GAAO4gB,mBAAmB,CAAE,CAC9B,IAAI,CAAClC,WAAW,CAAGA,EACnB,IAAI,CAACy6D,UAAU,CAAGj7D,uBAClB,MACF,CACA,IAAIk7D,EAAc,CAChB16D,YAAaA,EACbN,iBAAkB5gB,EAClB8gB,kBAAmBjhB,EACnBugB,aAAcA,CAChB,CAEAA,CAAAA,EAAapgB,KAAK,CAAGA,EACrBogB,EAAavgB,MAAM,CAAGA,EAEtBs7E,EAAYhlF,OAAOolF,WAAW,CAACM,GAAG,GAClC77D,oBAAoB2E,IAAI,CAACi3D,EAAa,IAAI,CAAC37D,EAAE,CAAE27D,GAC/CR,EAAgBjlF,OAAOolF,WAAW,CAACM,GAAG,GAAKV,EAE3CA,EAAYhlF,OAAOolF,WAAW,CAACM,GAAG,GAClCn7D,uBAAuBiE,IAAI,CAACi3D,EAAa,IAAI,CAAC37D,EAAE,CAAE27D,GAG9CR,EAFejlF,OAAOolF,WAAW,CAACM,GAAG,GAAKV,GAG5C,IAAI,CAACj6D,WAAW,CAAGA,EACnB,IAAI,CAACy6D,UAAU,CAAGj7D,wBAGlB,IAAI,CAACi7D,UAAU,CAAG37D,oBAEtB,EAMA+6D,kBAAmB,SAAS/6E,CAAK,CAAEH,CAAM,EACvC,IAAI3I,EAASsL,GAAOyb,IAAI,CAACoQ,mBAAmB,EAC5Cn3B,CAAAA,EAAO8I,KAAK,CAAGA,EACf9I,EAAO2I,MAAM,CAAGA,EAChB,IAAIi8E,EAAY,CACVjzD,MAAO,GACPkzD,mBAAoB,GACpBC,MAAO,GACPC,QAAS,GACTC,UAAW,EACb,EACAj8D,EAAK/oB,EAAOopB,UAAU,CAAC,QAASw7D,GAC/B77D,GACHA,CAAAA,EAAK/oB,EAAOopB,UAAU,CAAC,qBAAsBw7D,EAAAA,EAE1C77D,IAGLA,EAAGk8D,UAAU,CAAC,EAAG,EAAG,EAAG,GAEvB,IAAI,CAACjlF,MAAM,CAAGA,EACd,IAAI,CAAC+oB,EAAE,CAAGA,EACZ,EAcAlY,aAAc,SAASN,CAAO,CAAE4e,CAAM,CAAErmB,CAAK,CAAEH,CAAM,CAAEugB,CAAY,CAAEm2D,CAAQ,EAC3E,IAyJAn2D,EACApgB,EAA4BH,EAC5B8gB,EACAE,EA3JIu7D,EADAn8D,EAAK,IAAI,CAACA,EAAE,CAEZs2D,GACF6F,CAAAA,EAAgB,IAAI,CAACC,gBAAgB,CAAC9F,EAAUlwD,EAAAA,EAElD,IAAInG,EAAgB,CAClBgiD,cAAe77C,EAAOrmB,KAAK,EAAIqmB,EAAO67C,aAAa,CACnDC,eAAgB97C,EAAOxmB,MAAM,EAAIwmB,EAAO87C,cAAc,CACtDgW,YAAan4E,EACbo4E,aAAcv4E,EACd+gB,iBAAkB5gB,EAClB8gB,kBAAmBjhB,EACnBjJ,QAASqpB,EACTq8D,cAAe,IAAI,CAACppE,aAAa,CAAC+M,EAAIjgB,EAAOH,EAAQ,CAACu8E,GAAiB/1D,GACvEk2D,cAAe,IAAI,CAACrpE,aAAa,CAAC+M,EAAIjgB,EAAOH,GAC7C28E,gBAAiBJ,GACf,IAAI,CAAClpE,aAAa,CAAC+M,EAAIjgB,EAAOH,EAAQ,CAACu8E,GAAiB/1D,GAC1Do2D,OAAQh1E,EAAQ1M,MAAM,CACtB2hF,MAAO,GACP1B,UAAW,IAAI,CAACA,SAAS,CACzB2B,aAAc,IAAI,CAACA,YAAY,CAC/BC,KAAM,EACN1F,cAAe,IAAI,CACnB92D,aAAcA,CAChB,EACIy8D,EAAU58D,EAAG68D,iBAAiB,GAUlC,OATA78D,EAAG88D,eAAe,CAAC98D,EAAG+8D,WAAW,CAAEH,GACnCp1E,EAAQgiB,OAAO,CAAC,SAAS9e,CAAM,EAAIA,GAAUA,EAAOsyE,OAAO,CAAC/8D,EAAgB,GA+H5ElgB,EAAQogB,CADRA,EAAeF,EAAcE,YAAY,EACpBpgB,KAAK,CAAEH,EAASugB,EAAavgB,MAAM,CACxD8gB,EAAST,EAAcU,gBAAgB,CACvCC,EAAUX,EAAcY,iBAAiB,CAEzC9gB,CAAAA,IAAU2gB,GAAU9gB,IAAWghB,CAAAA,IACjCT,EAAapgB,KAAK,CAAG2gB,EACrBP,EAAavgB,MAAM,CAAGghB,GAnIpB,IAAI,CAAC86D,UAAU,CAAC17D,EAAIC,GACpBD,EAAGi9D,WAAW,CAACj9D,EAAGk9D,UAAU,CAAE,MAC9Bl9D,EAAGm9D,aAAa,CAACl9D,EAAco8D,aAAa,EAC5Cr8D,EAAGm9D,aAAa,CAACl9D,EAAcq8D,aAAa,EAC5Ct8D,EAAGo9D,iBAAiB,CAACR,GACrBz8D,EAAaE,UAAU,CAAC,MAAMkmD,YAAY,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GACnDtmD,CACT,EAKApG,QAAS,WACH,IAAI,CAAC5iB,MAAM,GACb,IAAI,CAACA,MAAM,CAAG,KACd,IAAI,CAAC+oB,EAAE,CAAG,MAEZ,IAAI,CAACq9D,gBAAgB,EACvB,EAKAA,iBAAkB,WAChB,IAAI,CAACX,YAAY,CAAG,CAAC,EACrB,IAAI,CAACY,YAAY,CAAG,CAAC,CACvB,EAaArqE,cAAe,SAAS+M,CAAE,CAAEjgB,CAAK,CAAEH,CAAM,CAAE29E,CAAkB,EAC3D,IAAIjqE,EAAU0M,EAAG/M,aAAa,GAY9B,OAXA+M,EAAGi9D,WAAW,CAACj9D,EAAGk9D,UAAU,CAAE5pE,GAC9B0M,EAAGw9D,aAAa,CAACx9D,EAAGk9D,UAAU,CAAEl9D,EAAGy9D,kBAAkB,CAAEz9D,EAAG09D,OAAO,EACjE19D,EAAGw9D,aAAa,CAACx9D,EAAGk9D,UAAU,CAAEl9D,EAAG29D,kBAAkB,CAAE39D,EAAG09D,OAAO,EACjE19D,EAAGw9D,aAAa,CAACx9D,EAAGk9D,UAAU,CAAEl9D,EAAG49D,cAAc,CAAE59D,EAAG69D,aAAa,EACnE79D,EAAGw9D,aAAa,CAACx9D,EAAGk9D,UAAU,CAAEl9D,EAAG89D,cAAc,CAAE99D,EAAG69D,aAAa,EAC/DN,EACFv9D,EAAG+9D,UAAU,CAAC/9D,EAAGk9D,UAAU,CAAE,EAAGl9D,EAAGqB,IAAI,CAAErB,EAAGqB,IAAI,CAAErB,EAAGsB,aAAa,CAAEi8D,GAGpEv9D,EAAG+9D,UAAU,CAAC/9D,EAAGk9D,UAAU,CAAE,EAAGl9D,EAAGqB,IAAI,CAAEthB,EAAOH,EAAQ,EAAGogB,EAAGqB,IAAI,CAAErB,EAAGsB,aAAa,CAAE,MAEjFhO,CACT,EAWA8oE,iBAAkB,SAAS4B,CAAQ,CAAET,CAAkB,EACrD,GAAI,IAAI,CAACD,YAAY,CAACU,EAAS,CAC7B,OAAO,IAAI,CAACV,YAAY,CAACU,EAAS,CAGlC,IAAI1qE,EAAU,IAAI,CAACL,aAAa,CAC9B,IAAI,CAAC+M,EAAE,CAAEu9D,EAAmBx9E,KAAK,CAAEw9E,EAAmB39E,MAAM,CAAE29E,GAEhE,OADA,IAAI,CAACD,YAAY,CAACU,EAAS,CAAG1qE,EACvBA,CAEX,EAQA4jE,kBAAmB,SAASZ,CAAQ,EAC9B,IAAI,CAACgH,YAAY,CAAChH,EAAS,GAC7B,IAAI,CAACt2D,EAAE,CAACm9D,aAAa,CAAC,IAAI,CAACG,YAAY,CAAChH,EAAS,EACjD,OAAO,IAAI,CAACgH,YAAY,CAAChH,EAAS,CAEtC,EAEAoF,WAAY37D,oBASZg6D,eAAgB,WACd,GAAI,IAAI,CAACkE,OAAO,CACd,OAAO,IAAI,CAACA,OAAO,CAErB,IAAIj+D,EAAK,IAAI,CAACA,EAAE,CAAEi+D,EAAU,CAAEC,SAAU,GAAIC,OAAQ,EAAG,EACvD,GAAI,CAACn+D,EACH,OAAOi+D,EAET,IAAIG,EAAMp+D,EAAGq+D,YAAY,CAAC,6BAC1B,GAAID,EAAK,CACP,IAAIF,EAAWl+D,EAAGi6D,YAAY,CAACmE,EAAIE,uBAAuB,EACtDH,EAASn+D,EAAGi6D,YAAY,CAACmE,EAAIG,qBAAqB,EAClDL,GACFD,CAAAA,EAAQC,QAAQ,CAAGA,EAASptD,WAAW,IAErCqtD,GACFF,CAAAA,EAAQE,MAAM,CAAGA,EAAOrtD,WAAW,GAEvC,CAEA,OADA,IAAI,CAACmtD,OAAO,CAAGA,EACRA,CACT,CACF,CACF,IA0DC,WAEC,aAEA,IAAI33C,KAAO,WAAY,EAOvB,SAAS3iB,wBAAyB,CALlCphB,GAAOohB,qBAAqB,CAAGA,sBAO/BA,sBAAsBhL,SAAS,CAAwD,CACrFu+D,kBAAmB5wC,KACnBzsB,QAASysB,KACT+2C,iBAAkB/2C,KASlB3mB,UAAW,CAEX,EAYA7X,aAAc,SAASN,CAAO,CAAEg3E,CAAa,CAAEtG,CAAW,CAAEC,CAAY,CAAEh4D,CAAY,EACpF,IAAIC,EAAMD,EAAaE,UAAU,CAAC,MAClCD,EAAII,SAAS,CAACg+D,EAAe,EAAG,EAAGtG,EAAaC,GAChD,IAAInoD,EAAY5P,EAAI6P,YAAY,CAAC,EAAG,EAAGioD,EAAaC,GAChDsG,EAAoBr+D,EAAI6P,YAAY,CAAC,EAAG,EAAGioD,EAAaC,GACxDl4D,EAAgB,CAClBi4D,YAAaA,EACbC,aAAcA,EACdnoD,UAAWA,EACX0uD,WAAYF,EACZC,kBAAmBA,EACnBlwD,SAAUpO,EACVC,IAAKA,EACL62D,cAAe,IAAI,EAQrB,OANAzvE,EAAQgiB,OAAO,CAAC,SAAS9e,CAAM,EAAIA,EAAOsyE,OAAO,CAAC/8D,EAAgB,GAC9DA,CAAAA,EAAc+P,SAAS,CAACjwB,KAAK,GAAKm4E,GAAej4D,EAAc+P,SAAS,CAACpwB,MAAM,GAAKu4E,CAAAA,IACtFh4D,EAAapgB,KAAK,CAAGkgB,EAAc+P,SAAS,CAACjwB,KAAK,CAClDogB,EAAavgB,MAAM,CAAGqgB,EAAc+P,SAAS,CAACpwB,MAAM,EAEtDwgB,EAAIqB,YAAY,CAACxB,EAAc+P,SAAS,CAAE,EAAG,GACtC/P,CACT,CAEF,CACF,IAOA1d,GAAOC,KAAK,CAAGD,GAAOC,KAAK,EAAI,CAAE,EACjCD,GAAOC,KAAK,CAACgF,OAAO,CAAGjF,GAAOC,KAAK,CAACgF,OAAO,EAAI,CAAE,EAOjDjF,GAAOC,KAAK,CAACgF,OAAO,CAACm3E,UAAU,CAAGp8E,GAAOyb,IAAI,CAACG,WAAW,CAAyD,CAOhHhiB,KAAM,aAONyiF,aAAc,qJAOdC,eAAgB,iJAWhB5+C,WAAY,SAASvlC,CAAO,EACtBA,GACF,IAAI,CAACqrD,UAAU,CAACrrD,EAEpB,EAMAqrD,WAAY,SAASrrD,CAAO,EAC1B,IAAK,IAAIiqB,KAAQjqB,EACf,IAAI,CAACiqB,EAAK,CAAGjqB,CAAO,CAACiqB,EAAK,EAW9Bm6D,cAAe,SAAS9+D,CAAE,CAAE6+D,CAAc,CAAED,CAAY,EACtDC,EAAiBA,GAAkB,IAAI,CAACA,cAAc,CACtDD,EAAeA,GAAgB,IAAI,CAACA,YAAY,CAClB,UAA1Br8E,GAAOs4E,cAAc,EACvBgE,CAAAA,EAAiBA,EAAe5yE,OAAO,CACrC,yBACA,aAAe1J,GAAOs4E,cAAc,CAAG,WAG3C,IAAIkE,EAAe/+D,EAAGu6D,YAAY,CAACv6D,EAAGg/D,aAAa,EAGnD,GAFAh/D,EAAGy6D,YAAY,CAACsE,EAAcH,GAC9B5+D,EAAG06D,aAAa,CAACqE,GACb,CAAC/+D,EAAG26D,kBAAkB,CAACoE,EAAc/+D,EAAG46D,cAAc,EACxD,MAAM,MAEJ,mCAAqC,IAAI,CAACz+E,IAAI,CAAG,KACjD6jB,EAAGi/D,gBAAgB,CAACF,IAIxB,IAAIzE,EAAiBt6D,EAAGu6D,YAAY,CAACv6D,EAAGw6D,eAAe,EAGvD,GAFAx6D,EAAGy6D,YAAY,CAACH,EAAgBuE,GAChC7+D,EAAG06D,aAAa,CAACJ,GACb,CAACt6D,EAAG26D,kBAAkB,CAACL,EAAgBt6D,EAAG46D,cAAc,EAC1D,MAAM,MAEJ,qCAAuC,IAAI,CAACz+E,IAAI,CAAG,KACnD6jB,EAAGi/D,gBAAgB,CAAC3E,IAIxB,IAAI4E,EAAUl/D,EAAG8+D,aAAa,GAI9B,GAHA9+D,EAAGm/D,YAAY,CAACD,EAASH,GACzB/+D,EAAGm/D,YAAY,CAACD,EAAS5E,GACzBt6D,EAAGo/D,WAAW,CAACF,GACX,CAACl/D,EAAGq/D,mBAAmB,CAACH,EAASl/D,EAAGs/D,WAAW,EACjD,MAAM,MAEJ,wCACAt/D,EAAGu/D,iBAAiB,CAACL,IAIzB,IAAIM,EAAqB,IAAI,CAACC,qBAAqB,CAACz/D,EAAIk/D,GACpDQ,EAAmB,IAAI,CAACC,mBAAmB,CAAC3/D,EAAIk/D,IAAY,CAAE,EAGlE,OAFAQ,EAAiBE,MAAM,CAAG5/D,EAAG6/D,kBAAkB,CAACX,EAAS,UACzDQ,EAAiBI,MAAM,CAAG9/D,EAAG6/D,kBAAkB,CAACX,EAAS,UAClD,CACLA,QAASA,EACTM,mBAAoBA,EACpBE,iBAAkBA,CACpB,CACF,EASAD,sBAAuB,SAASz/D,CAAE,CAAEk/D,CAAO,EACzC,MAAO,CACLnE,UAAW/6D,EAAG+/D,iBAAiB,CAACb,EAAS,YAC3C,CACF,EAWAS,oBAAqB,WAEnB,MAAO,CAAE,CACX,EAQAK,kBAAmB,SAAShgE,CAAE,CAAEw/D,CAAkB,CAAES,CAAa,EAC/D,IAAIC,EAAoBV,EAAmBzE,SAAS,CAChDoF,EAASngE,EAAGogE,YAAY,GAC5BpgE,EAAGqgE,UAAU,CAACrgE,EAAGsgE,YAAY,CAAEH,GAC/BngE,EAAGugE,uBAAuB,CAACL,GAC3BlgE,EAAGwgE,mBAAmB,CAACN,EAAmB,EAAGlgE,EAAGygE,KAAK,CAAE,GAAO,EAAG,GACjEzgE,EAAG0gE,UAAU,CAAC1gE,EAAGsgE,YAAY,CAAEL,EAAejgE,EAAG2gE,WAAW,CAC9D,EAEAC,kBAAmB,SAASlmF,CAAO,EACjC,IAA0BqF,EAAOH,EAA7BogB,EAAKtlB,EAAQ/D,OAAO,CACpB+D,EAAQ8hF,MAAM,CAAG,GACnBz8E,EAAQrF,EAAQimB,gBAAgB,CAChC/gB,EAASlF,EAAQmmB,iBAAiB,CAC9BnmB,CAAAA,EAAQw9E,WAAW,GAAKn4E,GAASrF,EAAQy9E,YAAY,GAAKv4E,CAAAA,IAC5DogB,EAAGm9D,aAAa,CAACziF,EAAQ4hF,aAAa,EACtC5hF,EAAQ4hF,aAAa,CAAG5hF,EAAQu8E,aAAa,CAAChkE,aAAa,CAAC+M,EAAIjgB,EAAOH,IAEzEogB,EAAG6gE,oBAAoB,CAAC7gE,EAAG+8D,WAAW,CAAE/8D,EAAG8gE,iBAAiB,CAAE9gE,EAAGk9D,UAAU,CACzExiF,EAAQ4hF,aAAa,CAAE,KAIzBt8D,EAAG88D,eAAe,CAAC98D,EAAG+8D,WAAW,CAAE,MACnC/8D,EAAGqoB,MAAM,GAEb,EAEA04C,cAAe,SAASrmF,CAAO,EAC7BA,EAAQ8hF,MAAM,GACd9hF,EAAQiiF,IAAI,GACZ,IAAIxsD,EAAOz1B,EAAQ4hF,aAAa,CAChC5hF,EAAQ4hF,aAAa,CAAG5hF,EAAQ2hF,aAAa,CAC7C3hF,EAAQ2hF,aAAa,CAAGlsD,CAC1B,EASAioD,eAAgB,WACd,IAAI17D,EAAO,IAAI,CAACskE,aAAa,CACzBC,EAAS1+E,GAAOC,KAAK,CAACgF,OAAO,CAAC,IAAI,CAACrL,IAAI,CAAC,CAACwc,SAAS,CACtD,IAAI+D,EAcF,MAAO,GAbP,IAAIjd,MAAMC,OAAO,CAACuhF,CAAM,CAACvkE,EAAK,EAS5B,OAAOukE,CAAM,CAACvkE,EAAK,GAAK,IAAI,CAACA,EAAK,CARlC,IAAK,IAAI7V,EAAIo6E,CAAM,CAACvkE,EAAK,CAAC5hB,MAAM,CAAE+L,KAChC,GAAI,IAAI,CAAC6V,EAAK,CAAC7V,EAAE,GAAKo6E,CAAM,CAACvkE,EAAK,CAAC7V,EAAE,CACnC,MAAO,GAGX,MAAO,EASb,EAeAm2E,QAAS,SAAStiF,CAAO,EACnBA,EAAQ+hF,KAAK,EACf,IAAI,CAACmE,iBAAiB,CAAClmF,GACvB,IAAI,CAACwmF,YAAY,CAACxmF,GAClB,IAAI,CAACqmF,aAAa,CAACrmF,IAGnB,IAAI,CAACymF,SAAS,CAACzmF,EAEnB,EAQA0mF,eAAgB,SAAS1mF,CAAO,EAI9B,OAHKA,EAAQgiF,YAAY,CAACr+C,cAAc,CAAC,IAAI,CAACliC,IAAI,GAChDzB,CAAAA,EAAQgiF,YAAY,CAAC,IAAI,CAACvgF,IAAI,CAAC,CAAG,IAAI,CAAC2iF,aAAa,CAACpkF,EAAQ/D,OAAO,GAE/D+D,EAAQgiF,YAAY,CAAC,IAAI,CAACvgF,IAAI,CAAC,EAexC+kF,aAAc,SAASxmF,CAAO,EAC5B,IAAIslB,EAAKtlB,EAAQ/D,OAAO,CACpB0qF,EAAS,IAAI,CAACD,cAAc,CAAC1mF,EAC7BA,CAAiB,IAAjBA,EAAQiiF,IAAI,EAAUjiF,EAAQ6hF,eAAe,CAC/Cv8D,EAAGi9D,WAAW,CAACj9D,EAAGk9D,UAAU,CAAExiF,EAAQ6hF,eAAe,EAGrDv8D,EAAGi9D,WAAW,CAACj9D,EAAGk9D,UAAU,CAAExiF,EAAQ2hF,aAAa,EAErDr8D,EAAGshE,UAAU,CAACD,EAAOnC,OAAO,EAC5B,IAAI,CAACc,iBAAiB,CAAChgE,EAAIqhE,EAAO7B,kBAAkB,CAAE9kF,EAAQqgF,SAAS,EAEvE/6D,EAAGuhE,SAAS,CAACF,EAAO3B,gBAAgB,CAACE,MAAM,CAAE,EAAIllF,EAAQw9E,WAAW,EACpEl4D,EAAGuhE,SAAS,CAACF,EAAO3B,gBAAgB,CAACI,MAAM,CAAE,EAAIplF,EAAQy9E,YAAY,EAErE,IAAI,CAACqJ,eAAe,CAACxhE,EAAIqhE,EAAO3B,gBAAgB,EAChD1/D,EAAGyhE,QAAQ,CAAC,EAAG,EAAG/mF,EAAQimB,gBAAgB,CAAEjmB,EAAQmmB,iBAAiB,EACrEb,EAAG0hE,UAAU,CAAC1hE,EAAG2hE,cAAc,CAAE,EAAG,EACtC,EAEAC,sBAAuB,SAAS5hE,CAAE,CAAE1M,CAAO,CAAEuuE,CAAW,EACtD7hE,EAAG8hE,aAAa,CAACD,GACjB7hE,EAAGi9D,WAAW,CAACj9D,EAAGk9D,UAAU,CAAE5pE,GAE9B0M,EAAG8hE,aAAa,CAAC9hE,EAAG+hE,QAAQ,CAC9B,EAEAC,wBAAyB,SAAShiE,CAAE,CAAE6hE,CAAW,EAC/C7hE,EAAG8hE,aAAa,CAACD,GACjB7hE,EAAGi9D,WAAW,CAACj9D,EAAGk9D,UAAU,CAAE,MAC9Bl9D,EAAG8hE,aAAa,CAAC9hE,EAAG+hE,QAAQ,CAC9B,EAEAE,iBAAkB,WAChB,OAAO,IAAI,CAAC,IAAI,CAACjB,aAAa,CAAC,EAGjCkB,iBAAkB,SAAS7mF,CAAK,EAC9B,IAAI,CAAC,IAAI,CAAC2lF,aAAa,CAAC,CAAG3lF,CAC7B,EAUAmmF,gBAAiB,WAEjB,EAMAW,gBAAiB,SAASznF,CAAO,EAC/B,GAAI,CAACA,EAAQ0nF,SAAS,CAAE,CACtB,IAAIA,EAAYrjE,SAASoN,aAAa,CAAC,SACvCi2D,CAAAA,EAAUriF,KAAK,CAAGrF,EAAQw9E,WAAW,CACrCkK,EAAUxiF,MAAM,CAAGlF,EAAQy9E,YAAY,CACvCz9E,EAAQ0nF,SAAS,CAAGA,CACtB,CACF,EAMAp3B,SAAU,WACR,IAAI/vD,EAAS,CAAEkB,KAAM,IAAI,CAACA,IAAI,EAAIkmF,EAAQ,IAAI,CAACrB,aAAa,CAI5D,OAHIqB,GACFpnF,CAAAA,CAAM,CAAConF,EAAM,CAAG,IAAI,CAACA,EAAM,EAEtBpnF,CACT,EAMAwe,OAAQ,WAEN,OAAO,IAAI,CAACuxC,QAAQ,EACtB,CACF,GAEAzoD,GAAOC,KAAK,CAACgF,OAAO,CAACm3E,UAAU,CAAC5xD,UAAU,CAAG,SAAS9xB,CAAM,CAAEkqB,CAAQ,EACpE,IAAIza,EAAS,IAAInI,GAAOC,KAAK,CAACgF,OAAO,CAACvM,EAAOkB,IAAI,CAAC,CAAClB,GAEnD,OADAkqB,GAAYA,EAASza,GACdA,CACT,EAMMlD,EAAUjF,CADVA,EAAUuT,EAAOvT,MAAM,EAAKuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,IAC7BC,KAAK,CAACgF,OAAO,CAC9B2W,EAAc5b,EAAOyb,IAAI,CAACG,WAAW,CAuBzC3W,EAAQ86E,WAAW,CAAGnkE,EAAY3W,EAAQm3E,UAAU,CAA2D,CAO7GxiF,KAAM,cAEN0iF,eAAgB,0QAoBhBpvD,OAAQ,CACN,EAAG,EAAG,EAAG,EAAG,EACZ,EAAG,EAAG,EAAG,EAAG,EACZ,EAAG,EAAG,EAAG,EAAG,EACZ,EAAG,EAAG,EAAG,EAAG,EACb,CAEDuxD,cAAe,SAQfuB,WAAY,GAMZtiD,WAAY,SAASvlC,CAAO,EAC1B,IAAI,CAACklC,SAAS,CAAC,aAAcllC,GAE7B,IAAI,CAAC+0B,MAAM,CAAG,IAAI,CAACA,MAAM,CAAChpB,KAAK,CAAC,EAClC,EAQA06E,UAAW,SAASzmF,CAAO,EACzB,IAIIiwB,EAAG8iB,EAAGvhC,EAAGtK,EAAGiF,EAHZiF,EAAOkkB,EADaA,SAAS,CACZlkB,IAAI,CACrB0pE,EAAO1pE,EAAKhR,MAAM,CAClBs5B,EAAI,IAAI,CAAC3E,MAAM,CACA8yD,EAAa,IAAI,CAACA,UAAU,CAE/C,IAAK17E,EAAI,EAAGA,EAAI2uE,EAAM3uE,GAAK,EACzB8jB,EAAI7e,CAAI,CAACjF,EAAE,CACX4mC,EAAI3hC,CAAI,CAACjF,EAAI,EAAE,CACfqF,EAAIJ,CAAI,CAACjF,EAAI,EAAE,CACX07E,GACFz2E,CAAI,CAACjF,EAAE,CAAG8jB,EAAIyJ,CAAC,CAAC,EAAE,CAAGqZ,EAAIrZ,CAAC,CAAC,EAAE,CAAGloB,EAAIkoB,CAAC,CAAC,EAAE,CAAGA,IAAAA,CAAC,CAAC,EAAE,CAC/CtoB,CAAI,CAACjF,EAAI,EAAE,CAAG8jB,EAAIyJ,CAAC,CAAC,EAAE,CAAGqZ,EAAIrZ,CAAC,CAAC,EAAE,CAAGloB,EAAIkoB,CAAC,CAAC,EAAE,CAAGA,IAAAA,CAAC,CAAC,EAAE,CACnDtoB,CAAI,CAACjF,EAAI,EAAE,CAAG8jB,EAAIyJ,CAAC,CAAC,GAAG,CAAGqZ,EAAIrZ,CAAC,CAAC,GAAG,CAAGloB,EAAIkoB,CAAC,CAAC,GAAG,CAAGA,IAAAA,CAAC,CAAC,GAAG,GAGvDxyB,EAAIkK,CAAI,CAACjF,EAAI,EAAE,CACfiF,CAAI,CAACjF,EAAE,CAAG8jB,EAAIyJ,CAAC,CAAC,EAAE,CAAGqZ,EAAIrZ,CAAC,CAAC,EAAE,CAAGloB,EAAIkoB,CAAC,CAAC,EAAE,CAAGxyB,EAAIwyB,CAAC,CAAC,EAAE,CAAGA,IAAAA,CAAC,CAAC,EAAE,CAC1DtoB,CAAI,CAACjF,EAAI,EAAE,CAAG8jB,EAAIyJ,CAAC,CAAC,EAAE,CAAGqZ,EAAIrZ,CAAC,CAAC,EAAE,CAAGloB,EAAIkoB,CAAC,CAAC,EAAE,CAAGxyB,EAAIwyB,CAAC,CAAC,EAAE,CAAGA,IAAAA,CAAC,CAAC,EAAE,CAC9DtoB,CAAI,CAACjF,EAAI,EAAE,CAAG8jB,EAAIyJ,CAAC,CAAC,GAAG,CAAGqZ,EAAIrZ,CAAC,CAAC,GAAG,CAAGloB,EAAIkoB,CAAC,CAAC,GAAG,CAAGxyB,EAAIwyB,CAAC,CAAC,GAAG,CAAGA,IAAAA,CAAC,CAAC,GAAG,CACnEtoB,CAAI,CAACjF,EAAI,EAAE,CAAG8jB,EAAIyJ,CAAC,CAAC,GAAG,CAAGqZ,EAAIrZ,CAAC,CAAC,GAAG,CAAGloB,EAAIkoB,CAAC,CAAC,GAAG,CAAGxyB,EAAIwyB,CAAC,CAAC,GAAG,CAAGA,IAAAA,CAAC,CAAC,GAAG,CAGzE,EAQAurD,oBAAqB,SAAS3/D,CAAE,CAAEk/D,CAAO,EACvC,MAAO,CACLsD,aAAcxiE,EAAG6/D,kBAAkB,CAACX,EAAS,gBAC7CuD,WAAYziE,EAAG6/D,kBAAkB,CAACX,EAAS,aAC7C,CACF,EAQAsC,gBAAiB,SAASxhE,CAAE,CAAE0/D,CAAgB,EAC5C,IAAItrD,EAAI,IAAI,CAAC3E,MAAM,CACfA,EAAS,CACP2E,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CACtBA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CACtBA,CAAC,CAAC,GAAG,CAAEA,CAAC,CAAC,GAAG,CAAEA,CAAC,CAAC,GAAG,CAAEA,CAAC,CAAC,GAAG,CAC1BA,CAAC,CAAC,GAAG,CAAEA,CAAC,CAAC,GAAG,CAAEA,CAAC,CAAC,GAAG,CAAEA,CAAC,CAAC,GAAG,CAC3B,CACDsuD,EAAY,CAACtuD,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,EAAE,CAAEA,CAAC,CAAC,GAAG,CAAEA,CAAC,CAAC,GAAG,CAAC,CAC1CpU,EAAG2iE,gBAAgB,CAACjD,EAAiB8C,YAAY,CAAE,GAAO/yD,GAC1DzP,EAAG4iE,UAAU,CAAClD,EAAiB+C,UAAU,CAAEC,EAC7C,CACF,GASAngF,EAAOC,KAAK,CAACgF,OAAO,CAAC86E,WAAW,CAACv1D,UAAU,CAAGxqB,EAAOC,KAAK,CAACgF,OAAO,CAACm3E,UAAU,CAAC5xD,UAAU,CAOpFvlB,EAAUjF,CADVA,EAAUuT,EAAOvT,MAAM,EAAKuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,IAC7BC,KAAK,CAACgF,OAAO,CAC9B2W,EAAc5b,EAAOyb,IAAI,CAACG,WAAW,CAgBzC3W,EAAQK,UAAU,CAAGsW,EAAY3W,EAAQm3E,UAAU,CAA0D,CAO3GxiF,KAAM,aAKN0iF,eAAgB,6NAiBhBhmF,WAAY,EAOZmoF,cAAe,aAQfG,UAAW,SAASzmF,CAAO,EACzB,GAAI,QAAI,CAAC7B,UAAU,EAGnB,IAC2BgO,EAAvBiF,EAAOkkB,EADaA,SAAS,CACZlkB,IAAI,CAAK2Y,EAAM3Y,EAAKhR,MAAM,CAC3CjC,EAAasG,KAAKC,KAAK,CAAC,QAAI,CAACvG,UAAU,EAC3C,IAAKgO,EAAI,EAAGA,EAAI4d,EAAK5d,GAAK,EACxBiF,CAAI,CAACjF,EAAE,CAAGiF,CAAI,CAACjF,EAAE,CAAGhO,EACpBiT,CAAI,CAACjF,EAAI,EAAE,CAAGiF,CAAI,CAACjF,EAAI,EAAE,CAAGhO,EAC5BiT,CAAI,CAACjF,EAAI,EAAE,CAAGiF,CAAI,CAACjF,EAAI,EAAE,CAAGhO,EAEhC,EAQA8mF,oBAAqB,SAAS3/D,CAAE,CAAEk/D,CAAO,EACvC,MAAO,CACL2D,YAAa7iE,EAAG6/D,kBAAkB,CAACX,EAAS,cAC9C,CACF,EAQAsC,gBAAiB,SAASxhE,CAAE,CAAE0/D,CAAgB,EAC5C1/D,EAAGuhE,SAAS,CAAC7B,EAAiBmD,WAAW,CAAE,IAAI,CAAChqF,UAAU,CAC5D,CACF,GASA0J,EAAOC,KAAK,CAACgF,OAAO,CAACK,UAAU,CAACklB,UAAU,CAAGxqB,EAAOC,KAAK,CAACgF,OAAO,CAACm3E,UAAU,CAAC5xD,UAAU,CAQnFnQ,EAASra,CADTA,EAAUuT,EAAOvT,MAAM,EAAKuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,IAC9Byb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAClCpV,EAAUjF,EAAOC,KAAK,CAACgF,OAAO,CAC9B2W,EAAc5b,EAAOyb,IAAI,CAACG,WAAW,CA+CzC3W,EAAQs7E,SAAS,CAAG3kE,EAAY3W,EAAQm3E,UAAU,CAAyD,CAOzGxiF,KAAM,YAKN4mF,OAAQ,GAKRtzD,OAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CAKnCovD,eAAgB,CACdmE,cAAe,qcAgBfC,cAAe,2hBAkBfC,cAAe,0cAgBfC,cAAe,4hBAkBfC,cAAe,0cAgBfC,cAAe,4hBAkBfC,cAAe,0cAgBfC,cAAe,2hBAkBjB,EAiBAnC,eAAgB,SAAS1mF,CAAO,EAC9B,IAAI2G,EAAOlC,KAAK8d,IAAI,CAAC,IAAI,CAACwS,MAAM,CAAC30B,MAAM,EACnCw7E,EAAW,IAAI,CAACn6E,IAAI,CAAG,IAAMkF,EAAO,IAAO,KAAI,CAAC0hF,MAAM,CAAG,EAAI,GAC7DtI,EAAe,IAAI,CAACoE,cAAc,CAACvI,EAAS,CAIhD,OAHK57E,EAAQgiF,YAAY,CAACr+C,cAAc,CAACi4C,IACvC57E,CAAAA,EAAQgiF,YAAY,CAACpG,EAAS,CAAG,IAAI,CAACwI,aAAa,CAACpkF,EAAQ/D,OAAO,CAAE8jF,EAAAA,EAEhE//E,EAAQgiF,YAAY,CAACpG,EAAS,EASvC6K,UAAW,SAASzmF,CAAO,EACzB,IAWIiwB,EAAG8iB,EAAGvhC,EAAGtK,EAAG4hF,EACZC,EAAKC,EAAKC,EAAQC,EAClBn8D,EAAGC,EAAG6S,EAAIC,EAbVxK,EAAYt1B,EAAQs1B,SAAS,CAC7BlkB,EAAOkkB,EAAUlkB,IAAI,CACrB+3E,EAAU,IAAI,CAACp0D,MAAM,CACrBq0D,EAAO3kF,KAAKC,KAAK,CAACD,KAAK8d,IAAI,CAAC4mE,EAAQ/oF,MAAM,GAC1CipF,EAAW5kF,KAAKif,KAAK,CAAC0lE,EAAO,GAC7BE,EAAKh0D,EAAUjwB,KAAK,CACpBkkF,EAAKj0D,EAAUpwB,MAAM,CACrBskF,EAASxpF,EAAQ0lB,GAAG,CAAC+jE,eAAe,CAACH,EAAIC,GACzCG,EAAMF,EAAOp4E,IAAI,CAEjBu4E,EAAW,IAAI,CAACtB,MAAM,CAAG,EAAI,EAKjC,IAAKr7D,EAAI,EAAGA,EAAIu8D,EAAIv8D,IAClB,IAAKD,EAAI,EAAGA,EAAIu8D,EAAIv8D,IAAK,CAMvB,IAAK+S,EAAK,EALVgpD,EAAS,CAAC97D,EAAIs8D,EAAKv8D,CAAAA,EAAK,EAGxBkD,EAAI,EAAG8iB,EAAI,EAAGvhC,EAAI,EAAGtK,EAAI,EAEZ44B,EAAKspD,EAAMtpD,IACtB,IAAKD,EAAK,EAAGA,EAAKupD,EAAMvpD,IACtBmpD,EAAMh8D,EAAI8S,EAAKupD,EACfN,EAAMh8D,EAAI8S,EAAKwpD,EAGXL,EAAM,GAAKA,GAAOO,GAAMR,EAAM,GAAKA,GAAOO,IAI9CL,EAAS,CAACD,EAAMM,EAAKP,CAAAA,EAAO,EAC5BG,EAAKC,CAAO,CAACrpD,EAAKspD,EAAOvpD,EAAG,CAE5B5P,GAAK7e,CAAI,CAAC63E,EAAO,CAAGC,EACpBn2C,GAAK3hC,CAAI,CAAC63E,EAAS,EAAE,CAAGC,EACxB13E,GAAKJ,CAAI,CAAC63E,EAAS,EAAE,CAAGC,EAEnBS,GACHziF,CAAAA,GAAKkK,CAAI,CAAC63E,EAAS,EAAE,CAAGC,CAAAA,EAI9BQ,CAAAA,CAAG,CAACZ,EAAO,CAAG74D,EACdy5D,CAAG,CAACZ,EAAS,EAAE,CAAG/1C,EAClB22C,CAAG,CAACZ,EAAS,EAAE,CAAGt3E,EACbm4E,EAIHD,CAAG,CAACZ,EAAS,EAAE,CAAG13E,CAAI,CAAC03E,EAAS,EAAE,CAHlCY,CAAG,CAACZ,EAAS,EAAE,CAAG5hF,CAKtB,CAEFlH,EAAQs1B,SAAS,CAAGk0D,CACtB,EAQAvE,oBAAqB,SAAS3/D,CAAE,CAAEk/D,CAAO,EACvC,MAAO,CACLoF,QAAStkE,EAAG6/D,kBAAkB,CAACX,EAAS,WACxCqF,QAASvkE,EAAG6/D,kBAAkB,CAACX,EAAS,WACxCsF,UAAWxkE,EAAG6/D,kBAAkB,CAACX,EAAS,aAC1CuF,MAAOzkE,EAAG6/D,kBAAkB,CAACX,EAAS,QACxC,CACF,EAQAsC,gBAAiB,SAASxhE,CAAE,CAAE0/D,CAAgB,EAC5C1/D,EAAG0kE,UAAU,CAAChF,EAAiB4E,OAAO,CAAE,IAAI,CAAC70D,MAAM,CACrD,EAMAu7B,SAAU,WACR,OAAOpuC,EAAO,IAAI,CAACgjB,SAAS,CAAC,YAAa,CACxCmjD,OAAQ,IAAI,CAACA,MAAM,CACnBtzD,OAAQ,IAAI,CAACA,MAAM,EAEvB,CACF,GASAltB,EAAOC,KAAK,CAACgF,OAAO,CAACs7E,SAAS,CAAC/1D,UAAU,CAAGxqB,EAAOC,KAAK,CAACgF,OAAO,CAACm3E,UAAU,CAAC5xD,UAAU,CAQlFvlB,EAAUjF,CADVA,EAAUuT,EAAOvT,MAAM,EAAKuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,IAC7BC,KAAK,CAACgF,OAAO,CAC9B2W,EAAc5b,EAAOyb,IAAI,CAACG,WAAW,CAazC3W,EAAQ0B,SAAS,CAAGiV,EAAY3W,EAAQm3E,UAAU,CAAyD,CAOzGxiF,KAAM,YAEN0iF,eAAgB,CACdxwC,QAAS,+PAQTs2C,UAAW,+SASXC,WAAY,qRASd,EAQAC,KAAM,UAEN7D,cAAe,OAQfG,UAAW,SAASzmF,CAAO,EACzB,IAC2BmM,EACJxL,EADnByQ,EAAOkkB,EADaA,SAAS,CACZlkB,IAAI,CACrB2Y,EAAM3Y,EAAKhR,MAAM,CACjB+pF,EAAO,IAAI,CAACA,IAAI,CACpB,IAAKh+E,EAAI,EAAGA,EAAI4d,EAAK5d,GAAK,EACpBg+E,YAAAA,EACFxpF,EAAQ,CAACyQ,CAAI,CAACjF,EAAE,CAAGiF,CAAI,CAACjF,EAAI,EAAE,CAAGiF,CAAI,CAACjF,EAAI,EAAE,EAAI,EAEzCg+E,cAAAA,EACPxpF,EAAQ,CAAC8D,KAAKG,GAAG,CAACwM,CAAI,CAACjF,EAAE,CAAEiF,CAAI,CAACjF,EAAI,EAAE,CAAEiF,CAAI,CAACjF,EAAI,EAAE,EACjD1H,KAAKI,GAAG,CAACuM,CAAI,CAACjF,EAAE,CAAEiF,CAAI,CAACjF,EAAI,EAAE,CAAEiF,CAAI,CAACjF,EAAI,EAAE,GAAK,EAEjC,eAATg+E,GACPxpF,CAAAA,EAAQ,IAAOyQ,CAAI,CAACjF,EAAE,CAAG,IAAOiF,CAAI,CAACjF,EAAI,EAAE,CAAG,IAAOiF,CAAI,CAACjF,EAAI,EAAE,EAElEiF,CAAI,CAACjF,EAAE,CAAGxL,EACVyQ,CAAI,CAACjF,EAAI,EAAE,CAAGxL,EACdyQ,CAAI,CAACjF,EAAI,EAAE,CAAGxL,CAElB,EAQA+lF,eAAgB,SAAS1mF,CAAO,EAC9B,IAAI47E,EAAW,IAAI,CAACn6E,IAAI,CAAG,IAAM,IAAI,CAAC0oF,IAAI,CAC1C,GAAI,CAACnqF,EAAQgiF,YAAY,CAACr+C,cAAc,CAACi4C,GAAW,CAClD,IAAImE,EAAe,IAAI,CAACoE,cAAc,CAAC,IAAI,CAACgG,IAAI,CAAC,CACjDnqF,EAAQgiF,YAAY,CAACpG,EAAS,CAAG,IAAI,CAACwI,aAAa,CAACpkF,EAAQ/D,OAAO,CAAE8jF,EACvE,CACA,OAAO//E,EAAQgiF,YAAY,CAACpG,EAAS,EASvCqJ,oBAAqB,SAAS3/D,CAAE,CAAEk/D,CAAO,EACvC,MAAO,CACL4F,MAAO9kE,EAAG6/D,kBAAkB,CAACX,EAAS,QACxC,CACF,EAQAsC,gBAAiB,SAASxhE,CAAE,CAAE0/D,CAAgB,EAG5C1/D,EAAG+kE,SAAS,CAACrF,EAAiBoF,KAAK,CADxB,EAEb,EAOA1M,eAAgB,WACd,MAAO,EACT,CACF,GASA71E,EAAOC,KAAK,CAACgF,OAAO,CAAC0B,SAAS,CAAC6jB,UAAU,CAAGxqB,EAAOC,KAAK,CAACgF,OAAO,CAACm3E,UAAU,CAAC5xD,UAAU,CAQlFvlB,GAAUjF,CADVA,EAAUuT,EAAOvT,MAAM,EAAKuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,IAC7BC,KAAK,CAACgF,OAAO,CAC9B2W,GAAc5b,EAAOyb,IAAI,CAACG,WAAW,CAazC3W,GAAQw9E,MAAM,CAAG7mE,GAAY3W,GAAQm3E,UAAU,CAAsD,CAOnGxiF,KAAM,SAEN0iF,eAAgB,qSAkBhBoG,OAAQ,GAERjE,cAAe,SAQfG,UAAW,SAASzmF,CAAO,EACzB,IAC2BmM,EAAvBiF,EAAOkkB,EADaA,SAAS,CACZlkB,IAAI,CACrB2Y,EAAM3Y,EAAKhR,MAAM,CACrB,IAAK+L,EAAI,EAAGA,EAAI4d,EAAK5d,GAAK,EACxBiF,CAAI,CAACjF,EAAE,CAAG,IAAMiF,CAAI,CAACjF,EAAE,CACvBiF,CAAI,CAACjF,EAAI,EAAE,CAAG,IAAMiF,CAAI,CAACjF,EAAI,EAAE,CAC/BiF,CAAI,CAACjF,EAAI,EAAE,CAAG,IAAMiF,CAAI,CAACjF,EAAI,EAAE,EAUnCuxE,eAAgB,WACd,MAAO,CAAC,IAAI,CAAC6M,MAAM,EASrBtF,oBAAqB,SAAS3/D,CAAE,CAAEk/D,CAAO,EACvC,MAAO,CACLgG,QAASllE,EAAG6/D,kBAAkB,CAACX,EAAS,UAC1C,CACF,EAQAsC,gBAAiB,SAASxhE,CAAE,CAAE0/D,CAAgB,EAC5C1/D,EAAG+kE,SAAS,CAACrF,EAAiBwF,OAAO,CAAE,IAAI,CAACD,MAAM,CACpD,CACF,GASA1iF,EAAOC,KAAK,CAACgF,OAAO,CAACw9E,MAAM,CAACj4D,UAAU,CAAGxqB,EAAOC,KAAK,CAACgF,OAAO,CAACm3E,UAAU,CAAC5xD,UAAU,CAS/EnQ,GAASra,CADTA,GAAUuT,EAAOvT,MAAM,EAAKuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,IAC9Byb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAClCpV,GAAUjF,GAAOC,KAAK,CAACgF,OAAO,CAC9B2W,GAAc5b,GAAOyb,IAAI,CAACG,WAAW,CAiBzC3W,GAAQ29E,KAAK,CAAGhnE,GAAY3W,GAAQm3E,UAAU,CAAqD,CAOjGxiF,KAAM,QAKN0iF,eAAgB,ucAoBhBmC,cAAe,QAOfoE,MAAO,EAQPjE,UAAW,SAASzmF,CAAO,EACzB,GAAI,QAAI,CAAC0qF,KAAK,EAGd,IAC2Bv+E,EACHw+E,EADpBv5E,EAAOkkB,EADaA,SAAS,CACZlkB,IAAI,CAAK2Y,EAAM3Y,EAAKhR,MAAM,CAC3CsqF,EAAQ,IAAI,CAACA,KAAK,CAEtB,IAAKv+E,EAAI,EAAG4d,EAAM3Y,EAAKhR,MAAM,CAAE+L,EAAI4d,EAAK5d,GAAK,EAE3Cw+E,EAAO,CAAC,GAAMlmF,KAAK6nB,MAAM,IAAMo+D,EAE/Bt5E,CAAI,CAACjF,EAAE,EAAIw+E,EACXv5E,CAAI,CAACjF,EAAI,EAAE,EAAIw+E,EACfv5E,CAAI,CAACjF,EAAI,EAAE,EAAIw+E,EAEnB,EAQA1F,oBAAqB,SAAS3/D,CAAE,CAAEk/D,CAAO,EACvC,MAAO,CACLoG,OAAQtlE,EAAG6/D,kBAAkB,CAACX,EAAS,UACvCqG,MAAOvlE,EAAG6/D,kBAAkB,CAACX,EAAS,QACxC,CACF,EAQAsC,gBAAiB,SAASxhE,CAAE,CAAE0/D,CAAgB,EAC5C1/D,EAAGuhE,SAAS,CAAC7B,EAAiB4F,MAAM,CAAE,IAAI,CAACF,KAAK,CAAG,KACnDplE,EAAGuhE,SAAS,CAAC7B,EAAiB6F,KAAK,CAAEpmF,KAAK6nB,MAAM,GAClD,EAMAgkC,SAAU,WACR,OAAOpuC,GAAO,IAAI,CAACgjB,SAAS,CAAC,YAAa,CACxCwlD,MAAO,IAAI,CAACA,KAAK,EAErB,CACF,GASA7iF,GAAOC,KAAK,CAACgF,OAAO,CAAC29E,KAAK,CAACp4D,UAAU,CAAGxqB,GAAOC,KAAK,CAACgF,OAAO,CAACm3E,UAAU,CAAC5xD,UAAU,CAQ9EvlB,GAAUjF,CADVA,GAAUuT,EAAOvT,MAAM,EAAKuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,IAC7BC,KAAK,CAACgF,OAAO,CAC9B2W,GAAc5b,GAAOyb,IAAI,CAACG,WAAW,CAgBzC3W,GAAQg+E,QAAQ,CAAGrnE,GAAY3W,GAAQm3E,UAAU,CAAwD,CAOvGxiF,KAAM,WAENspF,UAAW,EAEXzE,cAAe,YAKfnC,eAAgB,6fAwBhBsC,UAAW,SAASzmF,CAAO,EACzB,IAII8T,EAAO3H,EAAGmxB,EAAGrN,EAAG8iB,EAAGvhC,EAAGtK,EACtB8jF,EAAIC,EAAIC,EAAOC,EALf71D,EAAYt1B,EAAQs1B,SAAS,CAC7BlkB,EAAOkkB,EAAUlkB,IAAI,CACrB0pE,EAAOxlD,EAAUpwB,MAAM,CACvB61E,EAAOzlD,EAAUjwB,KAAK,CAI1B,IAAK8G,EAAI,EAAGA,EAAI2uE,EAAM3uE,GAAK,IAAI,CAAC4+E,SAAS,CACvC,IAAKztD,EAAI,EAAGA,EAAIy9C,EAAMz9C,GAAK,IAAI,CAACytD,SAAS,CAWvC,IAPA96D,EAAI7e,CAAI,CAFR0C,EAAQ3H,EAAAA,EAAU4uE,EAAQz9C,EAAAA,EAEX,CACfyV,EAAI3hC,CAAI,CAAC0C,EAAQ,EAAE,CACnBtC,EAAIJ,CAAI,CAAC0C,EAAQ,EAAE,CACnB5M,EAAIkK,CAAI,CAAC0C,EAAQ,EAAE,CAEnBo3E,EAAQzmF,KAAKG,GAAG,CAACuH,EAAI,IAAI,CAAC4+E,SAAS,CAAEjQ,GACrCqQ,EAAQ1mF,KAAKG,GAAG,CAAC04B,EAAI,IAAI,CAACytD,SAAS,CAAEhQ,GAChCiQ,EAAK7+E,EAAG6+E,EAAKE,EAAOF,IACvB,IAAKC,EAAK3tD,EAAG2tD,EAAKE,EAAOF,IAEvB75E,CAAI,CADJ0C,EAAQk3E,EAAAA,EAAWjQ,EAAQkQ,EAAAA,EAChB,CAAGh7D,EACd7e,CAAI,CAAC0C,EAAQ,EAAE,CAAGi/B,EAClB3hC,CAAI,CAAC0C,EAAQ,EAAE,CAAGtC,EAClBJ,CAAI,CAAC0C,EAAQ,EAAE,CAAG5M,CAK5B,EAKAw2E,eAAgB,WACd,OAAO,QAAI,CAACqN,SAAS,EASvB9F,oBAAqB,SAAS3/D,CAAE,CAAEk/D,CAAO,EACvC,MAAO,CACL4G,WAAY9lE,EAAG6/D,kBAAkB,CAACX,EAAS,cAC3CU,OAAQ5/D,EAAG6/D,kBAAkB,CAACX,EAAS,UACvCY,OAAQ9/D,EAAG6/D,kBAAkB,CAACX,EAAS,SACzC,CACF,EAQAsC,gBAAiB,SAASxhE,CAAE,CAAE0/D,CAAgB,EAC5C1/D,EAAGuhE,SAAS,CAAC7B,EAAiBoG,UAAU,CAAE,IAAI,CAACL,SAAS,CAC1D,CACF,GASAljF,GAAOC,KAAK,CAACgF,OAAO,CAACg+E,QAAQ,CAACz4D,UAAU,CAAGxqB,GAAOC,KAAK,CAACgF,OAAO,CAACm3E,UAAU,CAAC5xD,UAAU,CAQjFnQ,GAASra,CADTA,GAAUuT,EAAOvT,MAAM,EAAKuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,IAC9Byb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAClCpV,GAAUjF,GAAOC,KAAK,CAACgF,OAAO,CAC9B2W,GAAc5b,GAAOyb,IAAI,CAACG,WAAW,CAiBzC3W,GAAQu+E,WAAW,CAAG5nE,GAAY3W,GAAQm3E,UAAU,CAA2D,CAO7GxiF,KAAM,cAONsQ,MAAO,UAKPoyE,eAAgB,uTAgBhB5hD,SAAU,IAMV+oD,SAAU,GAcV7E,UAAW,SAASzmF,CAAO,EACzB,IAC2BmM,EAEvB8jB,EAAG8iB,EAAGvhC,EAFNJ,EAAOkkB,EADaA,SAAS,CACZlkB,IAAI,CACrBmxB,EAAW,QAAI,CAACA,QAAQ,CAExB7W,EAAS,IAAI7jB,GAAOmnC,KAAK,CAAC,IAAI,CAACj9B,KAAK,EAAEk9B,SAAS,GAC/Cs8C,EAAO,CACL7/D,CAAM,CAAC,EAAE,CAAG6W,EACZ7W,CAAM,CAAC,EAAE,CAAG6W,EACZ7W,CAAM,CAAC,EAAE,CAAG6W,EACb,CACDipD,EAAQ,CACN9/D,CAAM,CAAC,EAAE,CAAG6W,EACZ7W,CAAM,CAAC,EAAE,CAAG6W,EACZ7W,CAAM,CAAC,EAAE,CAAG6W,EACb,CAGL,IAAKp2B,EAAI,EAAGA,EAAIiF,EAAKhR,MAAM,CAAE+L,GAAK,EAChC8jB,EAAI7e,CAAI,CAACjF,EAAE,CACX4mC,EAAI3hC,CAAI,CAACjF,EAAI,EAAE,CACfqF,EAAIJ,CAAI,CAACjF,EAAI,EAAE,CAEX8jB,EAAIs7D,CAAI,CAAC,EAAE,EACXx4C,EAAIw4C,CAAI,CAAC,EAAE,EACX/5E,EAAI+5E,CAAI,CAAC,EAAE,EACXt7D,EAAIu7D,CAAK,CAAC,EAAE,EACZz4C,EAAIy4C,CAAK,CAAC,EAAE,EACZh6E,EAAIg6E,CAAK,CAAC,EAAE,EACdp6E,CAAAA,CAAI,CAACjF,EAAI,EAAE,CAAG,EAGpB,EAQA84E,oBAAqB,SAAS3/D,CAAE,CAAEk/D,CAAO,EACvC,MAAO,CACLiH,KAAMnmE,EAAG6/D,kBAAkB,CAACX,EAAS,QACrCkH,MAAOpmE,EAAG6/D,kBAAkB,CAACX,EAAS,QACxC,CACF,EAQAsC,gBAAiB,SAASxhE,CAAE,CAAE0/D,CAAgB,EAC5C,IAAIt5D,EAAS,IAAI7jB,GAAOmnC,KAAK,CAAC,IAAI,CAACj9B,KAAK,EAAEk9B,SAAS,GAC/C1M,EAAW1nB,WAAW,IAAI,CAAC0nB,QAAQ,EACnCgpD,EAAO,CACL,EAAI7/D,CAAM,CAAC,EAAE,CAAG,IAAM6W,EACtB,EAAI7W,CAAM,CAAC,EAAE,CAAG,IAAM6W,EACtB,EAAI7W,CAAM,CAAC,EAAE,CAAG,IAAM6W,EACtB,EACD,CACDipD,EAAQ,CACN9/D,CAAM,CAAC,EAAE,CAAG,IAAM6W,EAClB7W,CAAM,CAAC,EAAE,CAAG,IAAM6W,EAClB7W,CAAM,CAAC,EAAE,CAAG,IAAM6W,EAClB,EACD,CACLjd,EAAG4iE,UAAU,CAAClD,EAAiByG,IAAI,CAAEF,GACrCjmE,EAAG4iE,UAAU,CAAClD,EAAiB0G,KAAK,CAAEF,EACxC,EAMAl7B,SAAU,WACR,OAAOpuC,GAAO,IAAI,CAACgjB,SAAS,CAAC,YAAa,CACxCnzB,MAAO,IAAI,CAACA,KAAK,CACjBwwB,SAAU,IAAI,CAACA,QAAQ,EAE3B,CACF,GASA16B,GAAOC,KAAK,CAACgF,OAAO,CAACu+E,WAAW,CAACh5D,UAAU,CAAGxqB,GAAOC,KAAK,CAACgF,OAAO,CAACm3E,UAAU,CAAC5xD,UAAU,CAGzF,SAASjX,CAAM,EAEd,aAEA,IAAIvT,EAAUuT,EAAOvT,MAAM,EAAKuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,GAC9CiF,EAAUjF,EAAOC,KAAK,CAACgF,OAAO,CAC9B2W,EAAc5b,EAAOyb,IAAI,CAACG,WAAW,CAErCkoE,EAAW,CACbC,QAAS,CACP,MAAQ,OAAQ,QAAS,EAAE,KAC3B,OAAS,OAAQ,OAAQ,EAAE,OAC3B,OAAQ,QAAS,OAAQ,EAAE,QAC3B,EAAE,EAAE,EAAE,EAAE,EACT,CACDC,QAAS,CACP,OAAQ,OAAQ,QAAS,EAAE,OAC3B,OAAQ,OAAQ,OAAQ,EAAE,OAC1B,MAAQ,QAAS,OAAQ,EAAE,OAC3B,EAAE,EAAE,EAAE,EAAE,EACT,CACDC,WAAY,CACV,QAAQ,QAAS,QAAS,EAAE,OAC5B,QAAS,QAAQ,QAAS,EAAE,OAC5B,QAAS,QAAS,QAAQ,EAAE,OAC5B,EAAE,EAAE,EAAE,EAAE,EACT,CACDC,YAAa,CACX,QAAQ,QAAS,QAAS,EAAE,OAC5B,QAAS,QAAQ,QAAS,EAAE,QAC5B,OAAS,QAAS,QAAQ,EAAE,OAC5B,EAAE,EAAE,EAAE,EAAE,EACT,CACDC,SAAU,CACR,MAAM,MAAO,MAAO,EAAE,EACtB,MAAO,MAAM,MAAO,EAAE,EACtB,MAAO,MAAO,MAAM,EAAE,EACtB,EAAE,EAAE,EAAE,EAAE,EACT,CACDC,MAAO,CACL,KAAO,KAAO,KAAO,EAAG,EACxB,KAAO,KAAO,KAAO,EAAG,EACxB,KAAO,KAAO,KAAO,EAAG,EACxB,EAAG,EAAG,EAAG,EAAG,EACb,CACDC,WAAY,CACV,IAAK,IAAK,IAAK,EAAG,GAClB,IAAK,IAAK,IAAK,EAAG,GAClB,IAAK,IAAK,IAAK,EAAG,GAClB,EAAG,EAAG,EAAG,EAAG,EACb,EAGH,IAAK,IAAIr/E,KAAO8+E,EACd7+E,CAAO,CAACD,EAAI,CAAG4W,EAAY3W,EAAQ86E,WAAW,CAAqD,CAOjGnmF,KAAMoL,EASNkoB,OAAQ42D,CAAQ,CAAC9+E,EAAI,CAKrBy5E,cAAe,GAIfuB,WAAY,EAEd,GACAhgF,EAAOC,KAAK,CAACgF,OAAO,CAACD,EAAI,CAACwlB,UAAU,CAAGxqB,EAAOC,KAAK,CAACgF,OAAO,CAACm3E,UAAU,CAAC5xD,UAAU,EAEjDjO,GAK9BtX,GAAUjF,CADVA,GAASuT,EAAOvT,MAAM,EACLC,KAAK,CAACgF,OAAO,CAC9B2W,GAAc5b,GAAOyb,IAAI,CAACG,WAAW,CAuBzC3W,GAAQq/E,UAAU,CAAG1oE,GAAY3W,GAAQm3E,UAAU,CAAqD,CACtGxiF,KAAM,aAQNsQ,MAAO,UAQPo4E,KAAM,WAONj8D,MAAO,EAKPi2D,eAAgB,CACdx2D,SAAU,oCACVy+D,OAAQ,4EACR9+E,IAAK,oCACL++E,KAAM,2DACNj9D,SAAU,oCACVk9D,QAAS,0DACTC,OAAQ,0DACRC,UAAW,4EACX17B,QAAS,mbAeT27B,KAAM,0EAER,EASAC,YAAa,SAASvC,CAAI,EACxB,MAAO,iNAQD,IAAI,CAAChG,cAAc,CAACgG,EAAK,CARxB,MAWT,EAQAzD,eAAgB,SAAS1mF,CAAO,EAC9B,IAA4C+/E,EAAxCnE,EAAW,IAAI,CAACn6E,IAAI,CAAG,IAAM,IAAI,CAAC0oF,IAAI,CAK1C,OAJKnqF,EAAQgiF,YAAY,CAACr+C,cAAc,CAACi4C,KACvCmE,EAAe,IAAI,CAAC2M,WAAW,CAAC,IAAI,CAACvC,IAAI,EACzCnqF,EAAQgiF,YAAY,CAACpG,EAAS,CAAG,IAAI,CAACwI,aAAa,CAACpkF,EAAQ/D,OAAO,CAAE8jF,IAEhE//E,EAAQgiF,YAAY,CAACpG,EAAS,EASvC6K,UAAW,SAASzmF,CAAO,EACzB,IAEIyoD,EAAIkkC,EAAItyD,EACRpK,EAAG8iB,EAAGvhC,EACNka,EAHAta,EAAOkkB,EADaA,SAAS,CACZlkB,IAAI,CAAE0pE,EAAO1pE,EAAKhR,MAAM,CAGjCwsF,EAAS,EAAI,IAAI,CAAC1+D,KAAK,CAGnCu6B,EAAK/8B,CADLA,EAAS,IAAI7jB,GAAOmnC,KAAK,CAAC,IAAI,CAACj9B,KAAK,EAAEk9B,SAAS,GACpC,CAAC,EAAE,CAAG,IAAI,CAAC/gB,KAAK,CAC3By+D,EAAKjhE,CAAM,CAAC,EAAE,CAAG,IAAI,CAACwC,KAAK,CAC3BmM,EAAK3O,CAAM,CAAC,EAAE,CAAG,IAAI,CAACwC,KAAK,CAE3B,IAAK,IAAI/hB,EAAI,EAAGA,EAAI2uE,EAAM3uE,GAAK,EAM7B,OAJA8jB,EAAI7e,CAAI,CAACjF,EAAE,CACX4mC,EAAI3hC,CAAI,CAACjF,EAAI,EAAE,CACfqF,EAAIJ,CAAI,CAACjF,EAAI,EAAE,CAEP,IAAI,CAACg+E,IAAI,EACf,IAAK,WACH/4E,CAAI,CAACjF,EAAE,CAAG8jB,EAAIw4B,EAAK,IACnBr3C,CAAI,CAACjF,EAAI,EAAE,CAAG4mC,EAAI45C,EAAK,IACvBv7E,CAAI,CAACjF,EAAI,EAAE,CAAGqF,EAAI6oB,EAAK,IACvB,KACF,KAAK,SACHjpB,CAAI,CAACjF,EAAE,CAAG,IAAM,CAAC,IAAM8jB,CAAAA,EAAM,KAAMw4B,CAAAA,EAAM,IACzCr3C,CAAI,CAACjF,EAAI,EAAE,CAAG,IAAM,CAAC,IAAM4mC,CAAAA,EAAM,KAAM45C,CAAAA,EAAM,IAC7Cv7E,CAAI,CAACjF,EAAI,EAAE,CAAG,IAAM,CAAC,IAAMqF,CAAAA,EAAM,KAAM6oB,CAAAA,EAAM,IAC7C,KACF,KAAK,MACHjpB,CAAI,CAACjF,EAAE,CAAG8jB,EAAIw4B,EACdr3C,CAAI,CAACjF,EAAI,EAAE,CAAG4mC,EAAI45C,EAClBv7E,CAAI,CAACjF,EAAI,EAAE,CAAGqF,EAAI6oB,EAClB,KACF,KAAK,OACL,IAAK,aACHjpB,CAAI,CAACjF,EAAE,CAAG1H,KAAKkf,GAAG,CAACsM,EAAIw4B,GACvBr3C,CAAI,CAACjF,EAAI,EAAE,CAAG1H,KAAKkf,GAAG,CAACovB,EAAI45C,GAC3Bv7E,CAAI,CAACjF,EAAI,EAAE,CAAG1H,KAAKkf,GAAG,CAACnS,EAAI6oB,GAC3B,KACF,KAAK,WACHjpB,CAAI,CAACjF,EAAE,CAAG8jB,EAAIw4B,EACdr3C,CAAI,CAACjF,EAAI,EAAE,CAAG4mC,EAAI45C,EAClBv7E,CAAI,CAACjF,EAAI,EAAE,CAAGqF,EAAI6oB,EAClB,KACF,KAAK,SACHjpB,CAAI,CAACjF,EAAE,CAAG1H,KAAKG,GAAG,CAACqrB,EAAGw4B,GACtBr3C,CAAI,CAACjF,EAAI,EAAE,CAAG1H,KAAKG,GAAG,CAACmuC,EAAG45C,GAC1Bv7E,CAAI,CAACjF,EAAI,EAAE,CAAG1H,KAAKG,GAAG,CAAC4M,EAAG6oB,GAC1B,KACF,KAAK,UACHjpB,CAAI,CAACjF,EAAE,CAAG1H,KAAKI,GAAG,CAACorB,EAAGw4B,GACtBr3C,CAAI,CAACjF,EAAI,EAAE,CAAG1H,KAAKI,GAAG,CAACkuC,EAAG45C,GAC1Bv7E,CAAI,CAACjF,EAAI,EAAE,CAAG1H,KAAKI,GAAG,CAAC2M,EAAG6oB,GAC1B,KACF,KAAK,UACHjpB,CAAI,CAACjF,EAAE,CAAGs8C,EAAK,IAAO,EAAIx4B,EAAIw4B,EAAK,IAAQ,IAAM,EAAK,KAAMx4B,CAAAA,EAAM,KAAMw4B,CAAAA,EAAM,IAC9Er3C,CAAI,CAACjF,EAAI,EAAE,CAAGwgF,EAAK,IAAO,EAAI55C,EAAI45C,EAAK,IAAQ,IAAM,EAAK,KAAM55C,CAAAA,EAAM,KAAM45C,CAAAA,EAAM,IAClFv7E,CAAI,CAACjF,EAAI,EAAE,CAAGkuB,EAAK,IAAO,EAAI7oB,EAAI6oB,EAAK,IAAQ,IAAM,EAAK,KAAM7oB,CAAAA,EAAM,KAAM6oB,CAAAA,EAAM,IAClF,KACF,KAAK,YACHjpB,CAAI,CAACjF,EAAE,CAAGs8C,EAAKx4B,EAAK,EAAKw4B,EAAKx4B,EAAK,IACnC7e,CAAI,CAACjF,EAAI,EAAE,CAAGwgF,EAAK55C,EAAK,EAAK45C,EAAK55C,EAAK,IACvC3hC,CAAI,CAACjF,EAAI,EAAE,CAAGkuB,EAAK7oB,EAAK,EAAK6oB,EAAK7oB,EAAK,IACvC,KACF,KAAK,OACHJ,CAAI,CAACjF,EAAE,CAAGs8C,EAAKx4B,EAAI28D,EACnBx7E,CAAI,CAACjF,EAAI,EAAE,CAAGwgF,EAAK55C,EAAI65C,EACvBx7E,CAAI,CAACjF,EAAI,EAAE,CAAGkuB,EAAK7oB,EAAIo7E,CAC3B,CAEJ,EAQA3H,oBAAqB,SAAS3/D,CAAE,CAAEk/D,CAAO,EACvC,MAAO,CACLqI,OAAQvnE,EAAG6/D,kBAAkB,CAACX,EAAS,SACzC,CACF,EAQAsC,gBAAiB,SAASxhE,CAAE,CAAE0/D,CAAgB,EAC5C,IAAIt5D,EAAS,IAAI7jB,GAAOmnC,KAAK,CAAC,IAAI,CAACj9B,KAAK,EAAEk9B,SAAS,EACnDvjB,CAAAA,CAAM,CAAC,EAAE,CAAG,IAAI,CAACwC,KAAK,CAAGxC,CAAM,CAAC,EAAE,CAAG,IACrCA,CAAM,CAAC,EAAE,CAAG,IAAI,CAACwC,KAAK,CAAGxC,CAAM,CAAC,EAAE,CAAG,IACrCA,CAAM,CAAC,EAAE,CAAG,IAAI,CAACwC,KAAK,CAAGxC,CAAM,CAAC,EAAE,CAAG,IACrCA,CAAM,CAAC,EAAE,CAAG,IAAI,CAACwC,KAAK,CACtB5I,EAAG4iE,UAAU,CAAClD,EAAiB6H,MAAM,CAAEnhE,EACzC,EAMA4kC,SAAU,WACR,MAAO,CACL7uD,KAAM,IAAI,CAACA,IAAI,CACfsQ,MAAO,IAAI,CAACA,KAAK,CACjBo4E,KAAM,IAAI,CAACA,IAAI,CACfj8D,MAAO,IAAI,CAACA,KAAK,CAErB,CACF,GASArmB,GAAOC,KAAK,CAACgF,OAAO,CAACq/E,UAAU,CAAC95D,UAAU,CAAGxqB,GAAOC,KAAK,CAACgF,OAAO,CAACm3E,UAAU,CAAC5xD,UAAU,CAOnFvlB,GAAUjF,CADVA,GAASuT,EAAOvT,MAAM,EACLC,KAAK,CAACgF,OAAO,CAC9B2W,GAAc5b,GAAOyb,IAAI,CAACG,WAAW,CAuBzC3W,GAAQggF,UAAU,CAAGrpE,GAAY3W,GAAQm3E,UAAU,CAA0D,CAC3GxiF,KAAM,aAMNwM,MAAO,KAOPk8E,KAAM,WAMNj8D,MAAO,EAEPg2D,aAAc,2QAadC,eAAgB,CACdx2D,SAAU,2TAYVo/D,KAAM,mTAYR,EAQArG,eAAgB,SAAS1mF,CAAO,EAC9B,IAAI47E,EAAW,IAAI,CAACn6E,IAAI,CAAG,IAAM,IAAI,CAAC0oF,IAAI,CACtCpK,EAAe,IAAI,CAACoE,cAAc,CAAC,IAAI,CAACgG,IAAI,CAAC,CAIjD,OAHKnqF,EAAQgiF,YAAY,CAACr+C,cAAc,CAACi4C,IACvC57E,CAAAA,EAAQgiF,YAAY,CAACpG,EAAS,CAAG,IAAI,CAACwI,aAAa,CAACpkF,EAAQ/D,OAAO,CAAE8jF,EAAAA,EAEhE//E,EAAQgiF,YAAY,CAACpG,EAAS,EAGvC4K,aAAc,SAASxmF,CAAO,EAE5B,IAAIslB,EAAKtlB,EAAQ/D,OAAO,CACpB2c,EAAU,IAAI,CAACL,aAAa,CAACvY,EAAQu8E,aAAa,CAAE,IAAI,CAACtuE,KAAK,EAClE,IAAI,CAACi5E,qBAAqB,CAAC5hE,EAAI1M,EAAS0M,EAAG0nE,QAAQ,EACnD,IAAI,CAAC9nD,SAAS,CAAC,eAAgBllC,GAC/B,IAAI,CAACsnF,uBAAuB,CAAChiE,EAAIA,EAAG0nE,QAAQ,CAC9C,EAEAz0E,cAAe,SAAS+jE,CAAO,CAAEruE,CAAK,EACpC,OAAOquE,EAAQoF,gBAAgB,CAACzzE,EAAM2tE,QAAQ,CAAE3tE,EAAM8tE,QAAQ,CAChE,EAQAkR,gBAAiB,WACf,IAAIh/E,EAAQ,IAAI,CAACA,KAAK,CAClB5I,EAAQ4I,EAAM8tE,QAAQ,CAAC12E,KAAK,CAC5BH,EAAS+I,EAAM8tE,QAAQ,CAAC72E,MAAM,CAClC,MAAO,CACL,EAAI+I,EAAMI,MAAM,CAAE,EAAG,EACrB,EAAG,EAAIJ,EAAMK,MAAM,CAAE,EACrB,CAACL,EAAMa,IAAI,CAAGzJ,EAAO,CAAC4I,EAAMY,GAAG,CAAG3J,EAAQ,EAC3C,EASHuhF,UAAW,SAASzmF,CAAO,EACzB,IAKIyoD,EAAIkkC,EAAItyD,EAAID,EACZnK,EAAG8iB,EAAGvhC,EAAGtK,EACTgmF,EAASjxF,EAA6BkxF,EAPtC73D,EAAYt1B,EAAQs1B,SAAS,CAC7BrQ,EAAYjlB,EAAQu8E,aAAa,CAACt3D,SAAS,CAC3C7T,EAAOkkB,EAAUlkB,IAAI,CAAE0pE,EAAO1pE,EAAKhR,MAAM,CACzCiF,EAAQiwB,EAAUjwB,KAAK,CACvBH,EAASowB,EAAUpwB,MAAM,CAGP+I,EAAQ,IAAI,CAACA,KAAK,CAEnCgX,EAAUmoE,UAAU,EACvBnoE,CAAAA,EAAUmoE,UAAU,CAAGvlF,GAAOyb,IAAI,CAACoQ,mBAAmB,IAGxDz3B,EAAUixF,CADVA,EAAUjoE,EAAUmoE,UAAU,EACZznE,UAAU,CAAC,MACzBunE,EAAQ7nF,KAAK,GAAKA,GAAS6nF,EAAQhoF,MAAM,GAAKA,GAChDgoF,EAAQ7nF,KAAK,CAAGA,EAChB6nF,EAAQhoF,MAAM,CAAGA,GAGjBjJ,EAAQyxD,SAAS,CAAC,EAAG,EAAGroD,EAAOH,GAEjCjJ,EAAQ4vE,YAAY,CAAC59D,EAAMI,MAAM,CAAE,EAAG,EAAGJ,EAAMK,MAAM,CAAEL,EAAMa,IAAI,CAAEb,EAAMY,GAAG,EAC5E5S,EAAQ6pB,SAAS,CAAC7X,EAAM8tE,QAAQ,CAAE,EAAG,EAAG12E,EAAOH,GAC/CioF,EAAYlxF,EAAQs5B,YAAY,CAAC,EAAG,EAAGlwB,EAAOH,GAAQkM,IAAI,CAC1D,IAAK,IAAIjF,EAAI,EAAGA,EAAI2uE,EAAM3uE,GAAK,EAY7B,OAVA8jB,EAAI7e,CAAI,CAACjF,EAAE,CACX4mC,EAAI3hC,CAAI,CAACjF,EAAI,EAAE,CACfqF,EAAIJ,CAAI,CAACjF,EAAI,EAAE,CACfjF,EAAIkK,CAAI,CAACjF,EAAI,EAAE,CAEfs8C,EAAK0kC,CAAS,CAAChhF,EAAE,CACjBwgF,EAAKQ,CAAS,CAAChhF,EAAI,EAAE,CACrBkuB,EAAK8yD,CAAS,CAAChhF,EAAI,EAAE,CACrBiuB,EAAK+yD,CAAS,CAAChhF,EAAI,EAAE,CAEb,IAAI,CAACg+E,IAAI,EACf,IAAK,WACH/4E,CAAI,CAACjF,EAAE,CAAG8jB,EAAIw4B,EAAK,IACnBr3C,CAAI,CAACjF,EAAI,EAAE,CAAG4mC,EAAI45C,EAAK,IACvBv7E,CAAI,CAACjF,EAAI,EAAE,CAAGqF,EAAI6oB,EAAK,IACvBjpB,CAAI,CAACjF,EAAI,EAAE,CAAGjF,EAAIkzB,EAAK,IACvB,KACF,KAAK,OACHhpB,CAAI,CAACjF,EAAI,EAAE,CAAGiuB,CAElB,CAEJ,EAQA6qD,oBAAqB,SAAS3/D,CAAE,CAAEk/D,CAAO,EACvC,MAAO,CACL6I,iBAAkB/nE,EAAG6/D,kBAAkB,CAACX,EAAS,oBACjD8I,OAAQhoE,EAAG6/D,kBAAkB,CAACX,EAAS,SACzC,CACF,EAQAsC,gBAAiB,SAASxhE,CAAE,CAAE0/D,CAAgB,EAC5C,IAAIjwD,EAAS,IAAI,CAACk4D,eAAe,GACjC3nE,EAAG+kE,SAAS,CAACrF,EAAiBsI,MAAM,CAAE,GACtChoE,EAAGioE,gBAAgB,CAACvI,EAAiBqI,gBAAgB,CAAE,GAAOt4D,EAChE,EAMAu7B,SAAU,WACR,MAAO,CACL7uD,KAAM,IAAI,CAACA,IAAI,CACfwM,MAAO,IAAI,CAACA,KAAK,EAAI,IAAI,CAACA,KAAK,CAACqiD,QAAQ,GACxC65B,KAAM,IAAI,CAACA,IAAI,CACfj8D,MAAO,IAAI,CAACA,KAAK,CAErB,CACF,GASArmB,GAAOC,KAAK,CAACgF,OAAO,CAACggF,UAAU,CAACz6D,UAAU,CAAG,SAAS9xB,CAAM,CAAEkqB,CAAQ,EACpE5iB,GAAOC,KAAK,CAACuqB,UAAU,CAAC9xB,EAAO0N,KAAK,CAAE,SAASA,CAAK,EAClD,IAAIjO,EAAU6H,GAAOyb,IAAI,CAAC/iB,MAAM,CAACqO,KAAK,CAACrO,EACvCP,CAAAA,EAAQiO,KAAK,CAAGA,EAChBwc,EAAS,IAAI5iB,GAAOC,KAAK,CAACgF,OAAO,CAACggF,UAAU,CAAC9sF,GAC/C,EACF,EAOI6H,GAAUuT,EAAOvT,MAAM,EAAKuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,GAAI4a,GAAMhe,KAAKge,GAAG,CAAEiB,GAAQjf,KAAKif,KAAK,CACpFnB,GAAO9d,KAAK8d,IAAI,CAAEoB,GAAMlf,KAAKkf,GAAG,CAAEjf,GAAQD,KAAKC,KAAK,CAAEkf,GAAMnf,KAAKmf,GAAG,CACpEC,GAAOpf,KAAKof,IAAI,CAChB/W,GAAUjF,GAAOC,KAAK,CAACgF,OAAO,CAC9B2W,GAAc5b,GAAOyb,IAAI,CAACG,WAAW,CAazC3W,GAAQ0gF,MAAM,CAAG/pE,GAAY3W,GAAQm3E,UAAU,CAAsD,CAOnGxiF,KAAM,SASNgsF,WAAY,UAOZp/E,OAAQ,EAORC,OAAQ,EAORo/E,aAAc,EASdzI,oBAAqB,SAAS3/D,CAAE,CAAEk/D,CAAO,EACvC,MAAO,CACLmJ,OAAQroE,EAAG6/D,kBAAkB,CAACX,EAAS,UACvCoJ,MAAOtoE,EAAG6/D,kBAAkB,CAACX,EAAS,QACxC,CACF,EAQAsC,gBAAiB,SAASxhE,CAAE,CAAE0/D,CAAgB,EAC5C1/D,EAAGuoE,UAAU,CAAC7I,EAAiB2I,MAAM,CAAE,IAAI,CAACG,UAAU,CAAG,CAAC,EAAI,IAAI,CAACzoF,KAAK,CAAE,EAAE,CAAG,CAAC,EAAG,EAAI,IAAI,CAACH,MAAM,CAAC,EACnGogB,EAAG0kE,UAAU,CAAChF,EAAiB4I,KAAK,CAAE,IAAI,CAACG,IAAI,CACjD,EAQArH,eAAgB,SAAS1mF,CAAO,EAC9B,IAAIguF,EAAe,IAAI,CAACC,eAAe,GAAIrS,EAAW,IAAI,CAACn6E,IAAI,CAAG,IAAMusF,EACxE,GAAI,CAAChuF,EAAQgiF,YAAY,CAACr+C,cAAc,CAACi4C,GAAW,CAClD,IAAIgE,EAAiB,IAAI,CAACsO,cAAc,CAACF,EACzChuF,CAAAA,EAAQgiF,YAAY,CAACpG,EAAS,CAAG,IAAI,CAACwI,aAAa,CAACpkF,EAAQ/D,OAAO,CAAE2jF,EACvE,CACA,OAAO5/E,EAAQgiF,YAAY,CAACpG,EAAS,EAGvCqS,gBAAiB,WACf,IAAI7/E,EAAQ,IAAI,CAAC+/E,SAAS,CAC1B,OAAO1pF,KAAKof,IAAI,CAAC,IAAI,CAAC6pE,YAAY,CAAGt/E,EACvC,EAEAggF,QAAS,WAGP,IAAK,IAFDC,EAAe,IAAI,CAACC,aAAa,CAAC,IAAI,CAACZ,YAAY,EAAGt/E,EAAQ,IAAI,CAAC+/E,SAAS,CAC5EH,EAAe,IAAI,CAACC,eAAe,GAAIF,EAAO,MAAUC,GACnD7hF,EAAI,EAAGA,GAAK6hF,EAAc7hF,IACjC4hF,CAAI,CAAC5hF,EAAI,EAAE,CAAGkiF,EAAaliF,EAAIiC,GAEjC,OAAO2/E,CACT,EAMAG,eAAgB,SAASF,CAAY,EAInC,IAAK,IAHDO,EAAU,MAAUP,GACpBpO,EAAiB,IAAI,CAAC4O,iBAAiB,CAElCriF,EAAI,EAAGA,GAAK6hF,EAAc7hF,IACjCoiF,CAAO,CAACpiF,EAAI,EAAE,CAAGA,EAAI,cAevB,OATAyzE,GAHkB,uBAAyBoO,4FAK3CO,EAAQz/D,OAAO,CAAC,SAAS5uB,CAAM,CAAEiM,CAAC,EAGhCyzE,GAFkB,8CAAgD1/E,EAAS,aAAeiM,EAAI,OAC5E,+CAAgDjM,EAAS,cAAeiM,8BAC9CA,EAAI,MAClD,GAEAyzE,qCAEF,EAEA4O,kBAAmB,uGAiBnBlM,QAAS,SAAStiF,CAAO,EACnBA,EAAQ+hF,KAAK,EACf/hF,EAAQ8hF,MAAM,GACd,IAAI,CAACz8E,KAAK,CAAGrF,EAAQw9E,WAAW,CAChC,IAAI,CAACsQ,UAAU,CAAG,GAClB,IAAI,CAACW,EAAE,CAAGhqF,KAAKC,KAAK,CAAC,IAAI,CAACW,KAAK,CAAG,IAAI,CAACgJ,MAAM,EAC7C,IAAI,CAACqgF,EAAE,CAAG1uF,EAAQy9E,YAAY,CAC9B,IAAI,CAAC0Q,SAAS,CAAG,IAAI,CAACM,EAAE,CAAG,IAAI,CAACppF,KAAK,CACrC,IAAI,CAAC0oF,IAAI,CAAG,IAAI,CAACK,OAAO,GACxBpuF,EAAQimB,gBAAgB,CAAG,IAAI,CAACwoE,EAAE,CAClC,IAAI,CAACvI,iBAAiB,CAAClmF,GACvB,IAAI,CAACwmF,YAAY,CAACxmF,GAClB,IAAI,CAACqmF,aAAa,CAACrmF,GACnBA,EAAQw9E,WAAW,CAAGx9E,EAAQimB,gBAAgB,CAE9C,IAAI,CAAC/gB,MAAM,CAAGlF,EAAQy9E,YAAY,CAClC,IAAI,CAACqQ,UAAU,CAAG,GAClB,IAAI,CAACY,EAAE,CAAGjqF,KAAKC,KAAK,CAAC,IAAI,CAACQ,MAAM,CAAG,IAAI,CAACoJ,MAAM,EAC9C,IAAI,CAAC6/E,SAAS,CAAG,IAAI,CAACO,EAAE,CAAG,IAAI,CAACxpF,MAAM,CACtC,IAAI,CAAC6oF,IAAI,CAAG,IAAI,CAACK,OAAO,GACxBpuF,EAAQmmB,iBAAiB,CAAG,IAAI,CAACuoE,EAAE,CACnC,IAAI,CAACxI,iBAAiB,CAAClmF,GACvB,IAAI,CAACwmF,YAAY,CAACxmF,GAClB,IAAI,CAACqmF,aAAa,CAACrmF,GACnBA,EAAQy9E,YAAY,CAAGz9E,EAAQmmB,iBAAiB,EAGhD,IAAI,CAACsgE,SAAS,CAACzmF,EAEnB,EAEA09E,eAAgB,WACd,OAAO,QAAI,CAACrvE,MAAM,EAAU,QAAI,CAACC,MAAM,EAGzCggF,cAAe,SAASK,CAAK,EAC3B,OAAO,SAAS5hE,CAAC,EACf,GAAIA,GAAK4hE,GAAS5hE,GAAK,CAAC4hE,EACtB,OAAO,EAET,GAAI5hE,EAAI,cAAkBA,EAAI,iBAC5B,OAAO,EAGT,IAAI6hE,EAAK7hE,CADTA,GAAKtoB,KAAKsnB,EAAE,EACC4iE,EACb,OAAO/qE,GAAKmJ,GAAKA,EAAKnJ,GAAIgrE,GAAMA,CAClC,CACF,EASAnI,UAAW,SAASzmF,CAAO,EACzB,IAAIs1B,EAAYt1B,EAAQs1B,SAAS,CAC7BjnB,EAAS,IAAI,CAACA,MAAM,CACpBC,EAAS,IAAI,CAACA,MAAM,CAExB,IAAI,CAACugF,SAAS,CAAG,EAAIxgF,EACrB,IAAI,CAACygF,SAAS,CAAG,EAAIxgF,EAErB,IAEIygF,EAFAC,EAAK15D,EAAUjwB,KAAK,CAAE4pF,EAAK35D,EAAUpwB,MAAM,CAC3CupF,EAAK/pF,GAAMsqF,EAAK3gF,GAASqgF,EAAKhqF,GAAMuqF,EAAK3gF,EAGzC,CAAoB,cAApB,IAAI,CAACm/E,UAAU,CACjBsB,EAAU,IAAI,CAACG,UAAU,CAAClvF,EAASgvF,EAAIC,EAAIR,EAAIC,GAExC,gBAAI,CAACjB,UAAU,CACtBsB,EAAU,IAAI,CAACI,iBAAiB,CAACnvF,EAASgvF,EAAIC,EAAIR,EAAIC,GAE/C,iBAAI,CAACjB,UAAU,CACtBsB,EAAU,IAAI,CAACK,iBAAiB,CAACpvF,EAASgvF,EAAIC,EAAIR,EAAIC,GAE3B,YAApB,IAAI,CAACjB,UAAU,EACtBsB,CAAAA,EAAU,IAAI,CAACM,aAAa,CAACrvF,EAASgvF,EAAIC,EAAIR,EAAIC,EAAAA,EAEpD1uF,EAAQs1B,SAAS,CAAGy5D,CACtB,EAWAG,WAAY,SAASlvF,CAAO,CAAEgvF,CAAE,CAAEC,CAAE,CAAER,CAAE,CAAEC,CAAE,EAC1C,IAGIY,EAAW5pE,EAHX4P,EAAYt1B,EAAQs1B,SAAS,CACjBi6D,EAAQ,GAAOC,EAAQ,GAAOC,EAAQT,GAAAA,EAClDU,EAAQT,GAAAA,EAAWhqE,EAAYpd,GAAO00E,aAAa,CAACt3D,SAAS,CAC7C+4D,EAAK,EAAGC,EAAK,EAAG0R,EAAKX,EAAIY,EAAK,EAgBlD,IAfK3qE,EAAUiqE,UAAU,EACvBjqE,CAAAA,EAAUiqE,UAAU,CAAG7qE,SAASoN,aAAa,CAAC,WAG5C69D,CAAAA,CADJA,EAAYrqE,EAAUiqE,UAAU,EAClB7pF,KAAK,CAAG2pF,IAAAA,GAAYM,EAAUpqF,MAAM,CAAG+pF,CAAAA,IACnDK,EAAUjqF,KAAK,CAAG2pF,IAAAA,EAClBM,EAAUpqF,MAAM,CAAG+pF,GAGrBvpE,CADAA,EAAM4pE,EAAU3pE,UAAU,CAAC,OACvB+nC,SAAS,CAAC,EAAG,EAAGshC,IAAAA,EAAUC,GAC9BvpE,EAAIqB,YAAY,CAACuO,EAAW,EAAG,GAE/Bm5D,EAAK/qE,GAAM+qE,GACXC,EAAKhrE,GAAMgrE,GAEJ,CAACa,GAAS,CAACC,GAChBR,EAAKS,EACLR,EAAKS,EACDjB,EAAK/qE,GAAM+rE,GAAAA,GACbA,EAAQ/rE,GAAM+rE,GAAAA,IAGdA,EAAQhB,EACRc,EAAQ,IAENb,EAAKhrE,GAAMgsE,GAAAA,GACbA,EAAQhsE,GAAMgsE,GAAAA,IAGdA,EAAQhB,EACRc,EAAQ,IAEV9pE,EAAII,SAAS,CAACwpE,EAAWtR,EAAIC,EAAI+Q,EAAIC,EAAIU,EAAIC,EAAIH,EAAOC,GACxD1R,EAAK2R,EACL1R,EAAK2R,EACLA,GAAMF,EAER,OAAOhqE,EAAI6P,YAAY,CAACyoD,EAAIC,EAAIwQ,EAAIC,EACtC,EAWAW,cAAe,SAASrvF,CAAO,CAAEgvF,CAAE,CAAEC,CAAE,CAAER,CAAE,CAAEC,CAAE,EAqD7C,IAAImB,EAAU7vF,EAAQs1B,SAAS,CAAClkB,IAAI,CAChC0+E,EAAU9vF,EAAQ0lB,GAAG,CAAC+jE,eAAe,CAACgF,EAAIC,GAC1CqB,EAAWD,EAAQ1+E,IAAI,CACvB4+E,EAAU,IAAI,CAAC1B,aAAa,CAAC,IAAI,CAACZ,YAAY,EAC9CuC,EAAS,IAAI,CAACpB,SAAS,CAAEqB,EAAS,IAAI,CAACpB,SAAS,CAChDqB,EAAY,EAAI,IAAI,CAACtB,SAAS,CAAEuB,EAAY,EAAI,IAAI,CAACtB,SAAS,CAC9DuB,EAAUxsE,GAAKosE,EAAS,IAAI,CAACvC,YAAY,CAAG,GAC5C4C,EAAUzsE,GAAKqsE,EAAS,IAAI,CAACxC,YAAY,CAAG,GAC5C6C,EAAY,CAAE,EAAGl5D,EAAS,CAAE,EAAGm5D,EAAU,CAAE,EAE/C,OAAOC,SA7DEA,QAAQC,CAAC,EAChB,IAAIzjE,EAAG9gB,EAAGwkF,EAAQvkE,EAAKllB,EAAG20C,EAAKjE,EAC3B9C,EAAM5mB,EAAO0iE,EAAIC,EAGrB,IAAK5jE,EAAI,EAFToK,EAAOtK,CAAC,CAAG,CAAC2jE,EAAI,IAAOT,EACvBO,EAAQzjE,CAAC,CAAGrJ,GAAM2T,EAAOtK,CAAC,EACdE,EAAIyhE,EAAIzhE,IAAK,CAIvB,IAHAoK,EAAOrK,CAAC,CAAG,CAACC,EAAI,IAAOijE,EACvBM,EAAQxjE,CAAC,CAAGtJ,GAAM2T,EAAOrK,CAAC,EAC1B9lB,EAAI,EAAG20C,EAAM,EAAGjE,EAAQ,EAAG9C,EAAO,EAAG5mB,EAAQ,EACxC/hB,EAAIqkF,EAAQzjE,CAAC,CAAGsjE,EAASlkF,GAAKqkF,EAAQzjE,CAAC,CAAGsjE,EAASlkF,IACtD,GAAIA,CAAAA,CAAAA,EAAI,KAAKA,CAAAA,GAAK6iF,CAAAA,GAIbuB,CAAS,CADdK,EAAKltE,GAAM,IAAOC,GAAIxX,EAAIkrB,EAAOtK,CAAC,GAChB,EAChBwjE,CAAAA,CAAS,CAACK,EAAG,CAAG,CAAE,GAEpB,IAAK,IAAItzD,EAAIkzD,EAAQxjE,CAAC,CAAGsjE,EAAShzD,GAAKkzD,EAAQxjE,CAAC,CAAGsjE,EAAShzD,IACtDA,EAAI,GAAKA,GAAK2xD,IAGlB4B,EAAKntE,GAAM,IAAOC,GAAI2Z,EAAIjG,EAAOrK,CAAC,GAC7BujE,CAAS,CAACK,EAAG,CAACC,EAAG,EACpBN,CAAAA,CAAS,CAACK,EAAG,CAACC,EAAG,CAAGb,EAAQztE,GAAKE,GAAImuE,EAAKT,EAAW,GAAK1tE,GAAIouE,EAAKT,EAAW,IAAM,MAEtFO,CAAAA,EAASJ,CAAS,CAACK,EAAG,CAACC,EAAG,EACb,IACXzkE,EAAM,CAACkR,EAAI0xD,EAAK7iF,CAAAA,EAAK,EACrBjF,GAAKypF,EACL90C,GAAO80C,EAASd,CAAO,CAACzjE,EAAI,CAC5BwrB,GAAS+4C,EAASd,CAAO,CAACzjE,EAAM,EAAE,CAClC0oB,GAAQ67C,EAASd,CAAO,CAACzjE,EAAM,EAAE,CACjC8B,GAASyiE,EAASd,CAAO,CAACzjE,EAAM,EAAE,GAKxC2jE,CAAQ,CADR3jE,EAAM,CAACa,EAAIwhE,EAAKiC,CAAAA,EAAK,EACR,CAAG70C,EAAM30C,EACtB6oF,CAAQ,CAAC3jE,EAAM,EAAE,CAAGwrB,EAAQ1wC,EAC5B6oF,CAAQ,CAAC3jE,EAAM,EAAE,CAAG0oB,EAAO5tC,EAC3B6oF,CAAQ,CAAC3jE,EAAM,EAAE,CAAG8B,EAAQhnB,CAC9B,OAEA,EAAMwpF,EAAIjC,EACDgC,QAAQC,GAGRZ,CAEX,EAYe,EACjB,EAWAV,kBAAmB,SAASpvF,CAAO,CAAEgvF,CAAE,CAAEC,CAAE,CAAER,CAAE,CAAEC,CAAE,EACjD,IAAIxnF,EAAY6lB,EAAGC,EAAG7gB,EAAGmxB,EAAGwzD,EAAOC,EAAOC,EACtCj/E,EAAmBk/E,EAAZ/wF,EAAS,EAAY+vF,EAAS,IAAI,CAACpB,SAAS,CACnDqB,EAAS,IAAI,CAACpB,SAAS,CACvBoC,EAAK,EAAKlC,CAAAA,EAAK,GACfmC,EAAS7pF,EADwBguB,SAAS,CAC7BlkB,IAAI,CAAEggF,EAAYpxF,EAAQ0lB,GAAG,CAAC+jE,eAAe,CAACgF,EAAIC,GAC/D2C,EAAaD,EAAUhgF,IAAI,CAC/B,IAAKjF,EAAI,EAAGA,EAAIuiF,EAAIviF,IAClB,IAAKmxB,EAAI,EAAGA,EAAImxD,EAAInxD,IAOlB,IAAK0zD,EAAO,EANZjkE,EAAIrJ,GAAMusE,EAAS3yD,GACnBtQ,EAAItJ,GAAMwsE,EAAS/jF,GACnB2kF,EAAQb,EAAS3yD,EAAIvQ,EACrBgkE,EAAQb,EAAS/jF,EAAI6gB,EACrBikE,EAAU,EAAKjkE,CAAAA,EAAIgiE,EAAKjiE,CAAAA,EAETikE,EAAO,EAAGA,IACvB9pF,EAAIiqF,CAAM,CAACF,EAAUD,EAAK,CAI1Bj/E,EAAQ7K,EAAK,GAAI4pF,CAAAA,EAAU,GAAIC,CAAAA,EAASv/E,CAH9B,CAACy/E,EAAU,EAAID,EAAK,CAGcF,EAAS,GAAIC,CAAAA,EACjD93D,CAHE,CAACg4D,EAAUC,EAAKF,EAAK,CAGnBD,EAAS,GAAID,CAAAA,EAAShlD,CAFxB,CAACmlD,EAAUC,EAAK,EAAIF,EAAK,CAEGF,EAAQC,EAC9CM,CAAU,CAACnxF,IAAS,CAAG6R,EAI7B,OAAOq/E,CACT,EAWAjC,kBAAmB,SAASnvF,CAAO,CAAEgvF,CAAE,CAAEC,CAAE,CAAER,CAAE,CAAEC,CAAE,EAMjD,IAAK,IALD4C,EAAS,IAAI,CAACzC,SAAS,CAAE0C,EAAS,IAAI,CAACzC,SAAS,CAChD0C,EAAa3tE,GAAKytE,EAAS,GAC3BG,EAAa5tE,GAAK0tE,EAAS,GACFngF,EAAO9J,EAAlBguB,SAAS,CAAalkB,IAAI,CACxCsgF,EAAO1xF,EAAQ0lB,GAAG,CAAC+jE,eAAe,CAACgF,EAAIC,GAAKiD,EAAQD,EAAKtgF,IAAI,CACxDksB,EAAI,EAAGA,EAAIoxD,EAAIpxD,IACtB,IAAK,IAAInxB,EAAI,EAAGA,EAAIsiF,EAAItiF,IAAK,CAG3B,IAAK,IAFDsuB,EAAK,CAACtuB,EAAImxB,EAAImxD,CAAAA,EAAM,EAAGkC,EAAS,EAAGxH,EAAU,EAAGyI,EAAe,EAC/DC,EAAM,EAAGC,EAAM,EAAGC,EAAM,EAAGC,EAAM,EAAGlqC,EAAU,CAACxqB,EAAI,IAAOi0D,EACrDU,EAAKvuE,GAAM4Z,EAAIi0D,GAASU,EAAK,CAAC30D,EAAI,GAAKi0D,EAAQU,IAGtD,IAAK,IAFD5hD,EAAK1sB,GAAImkC,EAAWmqC,CAAAA,EAAK,KAAQR,EACjC5pC,EAAU,CAAC17C,EAAI,IAAOmlF,EAAQY,EAAK7hD,EAAKA,EACnCu+C,EAAKlrE,GAAMvX,EAAImlF,GAAS1C,EAAK,CAACziF,EAAI,GAAKmlF,EAAQ1C,IAAM,CAC5D,IAAIx+C,EAAKzsB,GAAIkkC,EAAW+mC,CAAAA,EAAK,KAAQ4C,EACjC/b,EAAIlzD,GAAK2vE,EAAK9hD,EAAKA,GAEnBqlC,EAAI,GAAKA,EAAI,KAKbkb,CAAAA,CADJA,EAAS,EAAIlb,EAAIA,EAAIA,EAAI,EAAIA,EAAIA,EAAI,GACxB,KAGXuc,GAAOrB,EAASv/E,CAAI,CAACg/B,CAFrBA,EAAK,EAAKw+C,CAAAA,EAAKqD,EAAKjD,CAAAA,CAAC,EAEK,EAAE,CAC5B4C,GAAgBjB,EAEZv/E,CAAI,CAACg/B,EAAK,EAAE,CAAG,KACjBugD,CAAAA,EAASA,EAASv/E,CAAI,CAACg/B,EAAK,EAAE,CAAG,KAEnCyhD,GAAOlB,EAASv/E,CAAI,CAACg/B,EAAG,CACxB0hD,GAAOnB,EAASv/E,CAAI,CAACg/B,EAAK,EAAE,CAC5B2hD,GAAOpB,EAASv/E,CAAI,CAACg/B,EAAK,EAAE,CAC5B+4C,GAAWwH,EAGf,CAEFgB,CAAK,CAACl3D,EAAG,CAAGo3D,EAAM1I,EAClBwI,CAAK,CAACl3D,EAAK,EAAE,CAAGq3D,EAAM3I,EACtBwI,CAAK,CAACl3D,EAAK,EAAE,CAAGs3D,EAAM5I,EACtBwI,CAAK,CAACl3D,EAAK,EAAE,CAAGu3D,EAAMJ,CACxB,CAEF,OAAOF,CACT,EAMAphC,SAAU,WACR,MAAO,CACL7uD,KAAM,IAAI,CAACA,IAAI,CACf4M,OAAQ,IAAI,CAACA,MAAM,CACnBC,OAAQ,IAAI,CAACA,MAAM,CACnBm/E,WAAY,IAAI,CAACA,UAAU,CAC3BC,aAAc,IAAI,CAACA,YAAY,CAEnC,CACF,GASA7lF,GAAOC,KAAK,CAACgF,OAAO,CAAC0gF,MAAM,CAACn7D,UAAU,CAAGxqB,GAAOC,KAAK,CAACgF,OAAO,CAACm3E,UAAU,CAAC5xD,UAAU,CAQ/EvlB,GAAUjF,CADVA,GAAUuT,EAAOvT,MAAM,EAAKuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,IAC7BC,KAAK,CAACgF,OAAO,CAC9B2W,GAAc5b,GAAOyb,IAAI,CAACG,WAAW,CAgBzC3W,GAAQqlF,QAAQ,CAAG1uE,GAAY3W,GAAQm3E,UAAU,CAAwD,CAOvGxiF,KAAM,WAEN0iF,eAAgB,8TAgBhBiO,SAAU,EAEV9L,cAAe,WAefG,UAAW,SAASzmF,CAAO,EACzB,GAAI,QAAI,CAACoyF,QAAQ,EAGjB,IAAmCjmF,EAAG4d,EAClC3Y,EAAOkkB,EADaA,SAAS,CACZlkB,IAAI,CAAE2Y,EAAM3Y,EAAKhR,MAAM,CACxCgyF,EAAW3tF,KAAKif,KAAK,CAAC,QAAI,CAAC0uE,QAAQ,EACnCC,EAAY,IAAOD,CAAAA,EAAW,KAAQ,KAAO,KAAMA,CAAAA,CAAO,EAE9D,IAAKjmF,EAAI,EAAGA,EAAI4d,EAAK5d,GAAK,EACxBiF,CAAI,CAACjF,EAAE,CAAGkmF,EAAajhF,CAAAA,CAAI,CAACjF,EAAE,CAAG,KAAO,IACxCiF,CAAI,CAACjF,EAAI,EAAE,CAAGkmF,EAAajhF,CAAAA,CAAI,CAACjF,EAAI,EAAE,CAAG,KAAO,IAChDiF,CAAI,CAACjF,EAAI,EAAE,CAAGkmF,EAAajhF,CAAAA,CAAI,CAACjF,EAAI,EAAE,CAAG,KAAO,IAEpD,EAQA84E,oBAAqB,SAAS3/D,CAAE,CAAEk/D,CAAO,EACvC,MAAO,CACL8N,UAAWhtE,EAAG6/D,kBAAkB,CAACX,EAAS,YAC5C,CACF,EAQAsC,gBAAiB,SAASxhE,CAAE,CAAE0/D,CAAgB,EAC5C1/D,EAAGuhE,SAAS,CAAC7B,EAAiBsN,SAAS,CAAE,IAAI,CAACF,QAAQ,CACxD,CACF,GASAvqF,GAAOC,KAAK,CAACgF,OAAO,CAACqlF,QAAQ,CAAC9/D,UAAU,CAAGxqB,GAAOC,KAAK,CAACgF,OAAO,CAACm3E,UAAU,CAAC5xD,UAAU,CAQjFvlB,GAAUjF,CADVA,GAAUuT,EAAOvT,MAAM,EAAKuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,IAC7BC,KAAK,CAACgF,OAAO,CAC9B2W,GAAc5b,GAAOyb,IAAI,CAACG,WAAW,CAgBzC3W,GAAQI,UAAU,CAAGuW,GAAY3W,GAAQm3E,UAAU,CAA0D,CAO3GxiF,KAAM,aAEN0iF,eAAgB,weAsBhBlmF,WAAY,EAEZqoF,cAAe,aAefG,UAAW,SAASzmF,CAAO,EACzB,GAAI,QAAI,CAAC/B,UAAU,EAGnB,IAE+BkO,EAAGtH,EAD9BuM,EAAOkkB,EADaA,SAAS,CACZlkB,IAAI,CAAE2Y,EAAM3Y,EAAKhR,MAAM,CACxCmyF,EAAS,CAAC,IAAI,CAACt0F,UAAU,CAE7B,IAAKkO,EAAI,EAAGA,EAAI4d,EAAK5d,GAAK,EACxBtH,EAAMJ,KAAKI,GAAG,CAACuM,CAAI,CAACjF,EAAE,CAAEiF,CAAI,CAACjF,EAAI,EAAE,CAAEiF,CAAI,CAACjF,EAAI,EAAE,EAChDiF,CAAI,CAACjF,EAAE,EAAItH,IAAQuM,CAAI,CAACjF,EAAE,CAAG,CAACtH,EAAMuM,CAAI,CAACjF,EAAE,EAAIomF,EAAS,EACxDnhF,CAAI,CAACjF,EAAI,EAAE,EAAItH,IAAQuM,CAAI,CAACjF,EAAI,EAAE,CAAG,CAACtH,EAAMuM,CAAI,CAACjF,EAAI,EAAE,EAAIomF,EAAS,EACpEnhF,CAAI,CAACjF,EAAI,EAAE,EAAItH,IAAQuM,CAAI,CAACjF,EAAI,EAAE,CAAG,CAACtH,EAAMuM,CAAI,CAACjF,EAAI,EAAE,EAAIomF,EAAS,EAExE,EAQAtN,oBAAqB,SAAS3/D,CAAE,CAAEk/D,CAAO,EACvC,MAAO,CACLgO,YAAaltE,EAAG6/D,kBAAkB,CAACX,EAAS,cAC9C,CACF,EAQAsC,gBAAiB,SAASxhE,CAAE,CAAE0/D,CAAgB,EAC5C1/D,EAAGuhE,SAAS,CAAC7B,EAAiBwN,WAAW,CAAE,CAAC,IAAI,CAACv0F,UAAU,CAC7D,CACF,GASA4J,GAAOC,KAAK,CAACgF,OAAO,CAACI,UAAU,CAACmlB,UAAU,CAAGxqB,GAAOC,KAAK,CAACgF,OAAO,CAACm3E,UAAU,CAAC5xD,UAAU,CAQnFvlB,GAAUjF,CADVA,GAAUuT,EAAOvT,MAAM,EAAKuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,IAC7BC,KAAK,CAACgF,OAAO,CAC9B2W,GAAc5b,GAAOyb,IAAI,CAACG,WAAW,CAiBzC3W,GAAQ2lF,IAAI,CAAGhvE,GAAY3W,GAAQm3E,UAAU,CAAoD,CAE/FxiF,KAAM,OAsBN0iF,eAAgB,mnBA+BhBpxB,KAAM,EAENuzB,cAAe,OAEfhE,QAAS,SAAStiF,CAAO,EACnBA,EAAQ+hF,KAAK,EAEf,IAAI,CAAC2Q,WAAW,CAAG1yF,EAAQw9E,WAAW,CAAGx9E,EAAQy9E,YAAY,CAC7Dz9E,EAAQ8hF,MAAM,GACd,IAAI,CAACoE,iBAAiB,CAAClmF,GACvB,IAAI,CAAC8tF,UAAU,CAAG,GAClB,IAAI,CAACtH,YAAY,CAACxmF,GAClB,IAAI,CAACqmF,aAAa,CAACrmF,GACnB,IAAI,CAACkmF,iBAAiB,CAAClmF,GACvB,IAAI,CAAC8tF,UAAU,CAAG,GAClB,IAAI,CAACtH,YAAY,CAACxmF,GAClB,IAAI,CAACqmF,aAAa,CAACrmF,IAGnB,IAAI,CAACymF,SAAS,CAACzmF,EAEnB,EAEAymF,UAAW,SAASzmF,CAAO,EAGzBA,EAAQs1B,SAAS,CAAG,IAAI,CAACq9D,UAAU,CAAC3yF,EACtC,EAEA2yF,WAAY,SAAS3yF,CAAO,EAC1B,IAAiDktF,EAAS0F,EAAtD3tE,EAAYjlB,EAAQu8E,aAAa,CAACt3D,SAAS,CAC3C5f,EAAQrF,EAAQs1B,SAAS,CAACjwB,KAAK,CAC/BH,EAASlF,EAAQs1B,SAAS,CAACpwB,MAAM,CAEhC+f,EAAU4tE,UAAU,GACvB5tE,EAAU4tE,UAAU,CAAGhrF,GAAOyb,IAAI,CAACoQ,mBAAmB,GACtDzO,EAAU6tE,UAAU,CAAGjrF,GAAOyb,IAAI,CAACoQ,mBAAmB,IAExDw5D,EAAUjoE,EAAU4tE,UAAU,CAC9BD,EAAU3tE,EAAU6tE,UAAU,CAC1B5F,CAAAA,EAAQ7nF,KAAK,GAAKA,GAAS6nF,EAAQhoF,MAAM,GAAKA,CAAAA,IAChD0tF,EAAQvtF,KAAK,CAAG6nF,EAAQ7nF,KAAK,CAAGA,EAChCutF,EAAQ1tF,MAAM,CAAGgoF,EAAQhoF,MAAM,CAAGA,GAEpC,IAGIonB,EAAQymE,EAASz1D,EAAGnxB,EAHpB6mF,EAAO9F,EAAQvnE,UAAU,CAAC,MAC1BstE,EAAOL,EAAQjtE,UAAU,CAAC,MAG1BotC,EAAO,QAAI,CAACA,IAAI,CAMpB,IAHAigC,EAAKjsE,YAAY,CAAC/mB,EAAQs1B,SAAS,CAAE,EAAG,GACxC29D,EAAKvlC,SAAS,CAAC,EAAG,EAAGroD,EAAOH,GAEvBiH,EAAI,IAAWA,GARL,GAQoBA,IACjCmgB,EAAS,CAAC7nB,KAAK6nB,MAAM,GAAK,IAAO,EAEjCgR,EAAIy1B,EADJggC,CAAAA,EAAU5mF,EAVG,EAUC+mF,EACO7tF,EAAQinB,EAC7B2mE,EAAKl8B,WAAW,CAAG,EAAItyD,KAAKkf,GAAG,CAACovE,GAChCE,EAAKntE,SAAS,CAAConE,EAAS5vD,EAAGhR,GAC3B0mE,EAAKltE,SAAS,CAAC8sE,EAAS,EAAG,GAC3BK,EAAKl8B,WAAW,CAAG,EACnBk8B,EAAKvlC,SAAS,CAAC,EAAG,EAAGklC,EAAQvtF,KAAK,CAAEutF,EAAQ1tF,MAAM,EAEpD,IAAKiH,EAAI,IAAWA,GAlBL,GAkBoBA,IACjCmgB,EAAS,CAAC7nB,KAAK6nB,MAAM,GAAK,IAAO,EAEjCgR,EAAIy1B,EADJggC,CAAAA,EAAU5mF,EApBG,EAoBC+mF,EACOhuF,EAASonB,EAC9B2mE,EAAKl8B,WAAW,CAAG,EAAItyD,KAAKkf,GAAG,CAACovE,GAChCE,EAAKntE,SAAS,CAAConE,EAAS5gE,EAAQgR,GAChC01D,EAAKltE,SAAS,CAAC8sE,EAAS,EAAG,GAC3BK,EAAKl8B,WAAW,CAAG,EACnBk8B,EAAKvlC,SAAS,CAAC,EAAG,EAAGklC,EAAQvtF,KAAK,CAAEutF,EAAQ1tF,MAAM,EAEpDlF,EAAQ0lB,GAAG,CAACI,SAAS,CAAConE,EAAS,EAAG,GAClC,IAAIiG,EAAenzF,EAAQ0lB,GAAG,CAAC6P,YAAY,CAAC,EAAG,EAAG23D,EAAQ7nF,KAAK,CAAE6nF,EAAQhoF,MAAM,EAG/E,OAFA8tF,EAAKj8B,WAAW,CAAG,EACnBi8B,EAAKtlC,SAAS,CAAC,EAAG,EAAGw/B,EAAQ7nF,KAAK,CAAE6nF,EAAQhoF,MAAM,EAC3CiuF,CACT,EAQAlO,oBAAqB,SAAS3/D,CAAE,CAAEk/D,CAAO,EACvC,MAAO,CACL4O,MAAO9tE,EAAG6/D,kBAAkB,CAACX,EAAS,SACxC,CACF,EAQAsC,gBAAiB,SAASxhE,CAAE,CAAE0/D,CAAgB,EAC5C,IAAIoO,EAAQ,IAAI,CAACC,gBAAgB,GACjC/tE,EAAGuoE,UAAU,CAAC7I,EAAiBoO,KAAK,CAAEA,EACxC,EAMAC,iBAAkB,WAChB,IAAmCtgC,EAA/BugC,EAAY,EAAGF,EAAQ,CAAC,EAAG,EAAE,CAoBjC,OAnBI,IAAI,CAACtF,UAAU,CACb,IAAI,CAAC4E,WAAW,CAAG,GAErBY,CAAAA,EAAY,EAAI,IAAI,CAACZ,WAAW,EAI9B,IAAI,CAACA,WAAW,CAAG,GAErBY,CAAAA,EAAY,IAAI,CAACZ,WAAW,EAGhC3/B,EAAOugC,EAAY,IAAI,CAACvgC,IAAI,CAAG,IAC3B,IAAI,CAAC+6B,UAAU,CACjBsF,CAAK,CAAC,EAAE,CAAGrgC,EAGXqgC,CAAK,CAAC,EAAE,CAAGrgC,EAENqgC,CACT,CACF,GAKAtmF,GAAQ2lF,IAAI,CAACpgE,UAAU,CAAGxqB,GAAOC,KAAK,CAACgF,OAAO,CAACm3E,UAAU,CAAC5xD,UAAU,CAQhEvlB,GAAUjF,CADVA,GAAUuT,EAAOvT,MAAM,EAAKuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,IAC7BC,KAAK,CAACgF,OAAO,CAC9B2W,GAAc5b,GAAOyb,IAAI,CAACG,WAAW,CAgBzC3W,GAAQymF,KAAK,CAAG9vE,GAAY3W,GAAQm3E,UAAU,CAAqD,CAOjGxiF,KAAM,QAEN0iF,eAAgB,kXAmBhBqP,MAAO,CAAC,EAAG,EAAG,EAAE,CAOhBlN,cAAe,QAMf/gD,WAAY,SAASvlC,CAAO,EAC1B,IAAI,CAACwzF,KAAK,CAAG,CAAC,EAAG,EAAG,EAAE,CACtB1mF,GAAQm3E,UAAU,CAAChmE,SAAS,CAACsnB,UAAU,CAACvb,IAAI,CAAC,IAAI,CAAEhqB,EACrD,EAQAymF,UAAW,SAASzmF,CAAO,EACzB,IAGyBmM,EAHUiF,EAAOkkB,EAAlBA,SAAS,CAAmBlkB,IAAI,CACpDoiF,EAAQ,IAAI,CAACA,KAAK,CAAEzpE,EAAM3Y,EAAKhR,MAAM,CACrCqzF,EAAO,EAAID,CAAK,CAAC,EAAE,CAAEE,EAAO,EAAIF,CAAK,CAAC,EAAE,CACxCG,EAAO,EAAIH,CAAK,CAAC,EAAE,CAavB,IAAKrnF,IAXI,CAACynF,KAAK,GAEb,IAAI,CAACA,KAAK,CAAG,IAAIttE,WAAW,KAE5B,IAAI,CAACutE,KAAK,CAAG,IAAIvtE,WAAW,KAE5B,IAAI,CAACwtE,KAAK,CAAG,IAAIxtE,WAAW,MAKzBna,EAAI,EAAG4d,EAAM,IAAK5d,EAAI4d,EAAK5d,IAC9B,IAAI,CAACynF,KAAK,CAACznF,EAAE,CAAG1H,IAAAA,KAAKge,GAAG,CAACtW,EAAI,IAAKsnF,GAClC,IAAI,CAACI,KAAK,CAAC1nF,EAAE,CAAG1H,IAAAA,KAAKge,GAAG,CAACtW,EAAI,IAAKunF,GAClC,IAAI,CAACI,KAAK,CAAC3nF,EAAE,CAAG1H,IAAAA,KAAKge,GAAG,CAACtW,EAAI,IAAKwnF,GAEpC,IAAKxnF,EAAI,EAAG4d,EAAM3Y,EAAKhR,MAAM,CAAE+L,EAAI4d,EAAK5d,GAAK,EAC3CiF,CAAI,CAACjF,EAAE,CAAG,IAAI,CAACynF,KAAK,CAACxiF,CAAI,CAACjF,EAAE,CAAC,CAC7BiF,CAAI,CAACjF,EAAI,EAAE,CAAG,IAAI,CAAC0nF,KAAK,CAACziF,CAAI,CAACjF,EAAI,EAAE,CAAC,CACrCiF,CAAI,CAACjF,EAAI,EAAE,CAAG,IAAI,CAAC2nF,KAAK,CAAC1iF,CAAI,CAACjF,EAAI,EAAE,CAAC,EAUzC84E,oBAAqB,SAAS3/D,CAAE,CAAEk/D,CAAO,EACvC,MAAO,CACLuP,OAAQzuE,EAAG6/D,kBAAkB,CAACX,EAAS,SACzC,CACF,EAQAsC,gBAAiB,SAASxhE,CAAE,CAAE0/D,CAAgB,EAC5C1/D,EAAG0uE,UAAU,CAAChP,EAAiB+O,MAAM,CAAE,IAAI,CAACP,KAAK,CACnD,CACF,GASA3rF,GAAOC,KAAK,CAACgF,OAAO,CAACymF,KAAK,CAAClhE,UAAU,CAAGxqB,GAAOC,KAAK,CAACgF,OAAO,CAACm3E,UAAU,CAAC5xD,UAAU,CAQ9EvlB,GAAUjF,CADVA,GAAUuT,EAAOvT,MAAM,EAAKuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,IAC7BC,KAAK,CAACgF,OAAO,CAC9B2W,GAAc5b,GAAOyb,IAAI,CAACG,WAAW,CAKzC3W,GAAQmnF,QAAQ,CAAGxwE,GAAY3W,GAAQm3E,UAAU,CAAwD,CAEvGxiF,KAAM,WAKNyyF,WAAY,EAAE,CAMd3uD,WAAY,SAASvlC,CAAO,EAC1B,IAAI,CAACklC,SAAS,CAAC,aAAcllC,GAE7B,IAAI,CAACk0F,UAAU,CAAG,IAAI,CAACA,UAAU,CAACnoF,KAAK,CAAC,EAC1C,EAQAu2E,QAAS,SAAStiF,CAAO,EACvBA,EAAQ8hF,MAAM,EAAI,IAAI,CAACoS,UAAU,CAAC9zF,MAAM,CAAG,EAC3C,IAAI,CAAC8zF,UAAU,CAACplE,OAAO,CAAC,SAAS9e,CAAM,EACrCA,EAAOsyE,OAAO,CAACtiF,EACjB,EACF,EAOAswD,SAAU,WACR,OAAOzoD,GAAOyb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAAC,IAAI,CAACgjB,SAAS,CAAC,YAAa,CAC3DgvD,WAAY,IAAI,CAACA,UAAU,CAAChkF,GAAG,CAAC,SAASF,CAAM,EAAI,OAAOA,EAAOsgD,QAAQ,EAAI,EAC/E,EACF,EAEAotB,eAAgB,WACd,MAAO,CAAC,IAAI,CAACwW,UAAU,CAACppE,IAAI,CAAC,SAAS9a,CAAM,EAAI,MAAO,CAACA,EAAO0tE,cAAc,EAAI,EACnF,CACF,GAKA71E,GAAOC,KAAK,CAACgF,OAAO,CAACmnF,QAAQ,CAAC5hE,UAAU,CAAG,SAAS9xB,CAAM,CAAEkqB,CAAQ,EAClE,IACIypE,EAAapnF,CADHvM,EAAO2zF,UAAU,EAAI,EAAE,EACZhkF,GAAG,CAAC,SAASF,CAAM,EACtC,OAAO,IAAInI,GAAOC,KAAK,CAACgF,OAAO,CAACkD,EAAOvO,IAAI,CAAC,CAACuO,EAC/C,GACAo7C,EAAW,IAAIvjD,GAAOC,KAAK,CAACgF,OAAO,CAACmnF,QAAQ,CAAC,CAAEC,WAAYA,CAAW,GAE1E,OADAzpE,GAAYA,EAAS2gC,GACdA,CACT,EAOIt+C,GAAUjF,CADVA,GAAUuT,EAAOvT,MAAM,EAAKuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,IAC7BC,KAAK,CAACgF,OAAO,CAC9B2W,GAAc5b,GAAOyb,IAAI,CAACG,WAAW,CAgBzC3W,GAAQE,WAAW,CAAGyW,GAAY3W,GAAQ86E,WAAW,CAA2D,CAO9GnmF,KAAM,cAQNwL,SAAU,EAOVq5E,cAAe,WAEf2G,gBAAiB,WACf,IAAIkH,EAAM,IAAI,CAAClnF,QAAQ,CAAGxI,KAAKsnB,EAAE,CAAEC,EAAMnkB,GAAOyb,IAAI,CAAC0I,GAAG,CAACmoE,GAAMvwE,EAAM/b,GAAOyb,IAAI,CAACM,GAAG,CAACuwE,GACjFC,EAAS,EAAI,EAAGC,EAAe5vF,KAAK8d,IAAI,CAA/B,EAAI,GAAsCqB,EAAK0wE,EAAc,EAAItoE,CAC9E,KAAI,CAAC+I,MAAM,CAAG,CACZ,EAAG,EAAG,EAAG,EAAG,EACZ,EAAG,EAAG,EAAG,EAAG,EACZ,EAAG,EAAG,EAAG,EAAG,EACZ,EAAG,EAAG,EAAG,EAAG,EACb,CACD,IAAI,CAACA,MAAM,CAAC,EAAE,CAAG/I,EAAMsoE,EAAc,EACrC,IAAI,CAACv/D,MAAM,CAAC,EAAE,CAAGq/D,EAASE,EAAcD,EACxC,IAAI,CAACt/D,MAAM,CAAC,EAAE,CAAGq/D,EAASE,EAAcD,EACxC,IAAI,CAACt/D,MAAM,CAAC,EAAE,CAAGq/D,EAASE,EAAcD,EACxC,IAAI,CAACt/D,MAAM,CAAC,EAAE,CAAG/I,EAAMooE,EAASE,EAChC,IAAI,CAACv/D,MAAM,CAAC,EAAE,CAAGq/D,EAASE,EAAcD,EACxC,IAAI,CAACt/D,MAAM,CAAC,GAAG,CAAGq/D,EAASE,EAAcD,EACzC,IAAI,CAACt/D,MAAM,CAAC,GAAG,CAAGq/D,EAASE,EAAcD,EACzC,IAAI,CAACt/D,MAAM,CAAC,GAAG,CAAG/I,EAAMooE,EAASE,CACnC,EAQA5W,eAAgB,SAAS19E,CAAO,EAE9B,OADA,IAAI,CAACitF,eAAe,GACbngF,GAAQm3E,UAAU,CAAChmE,SAAS,CAACy/D,cAAc,CAAC1zD,IAAI,CAAC,IAAI,CAAEhqB,EAChE,EAeAsiF,QAAS,SAAStiF,CAAO,EACvB,IAAI,CAACitF,eAAe,GACpBngF,GAAQm3E,UAAU,CAAChmE,SAAS,CAACqkE,OAAO,CAACt4D,IAAI,CAAC,IAAI,CAAEhqB,EAClD,CAEF,GASA6H,GAAOC,KAAK,CAACgF,OAAO,CAACE,WAAW,CAACqlB,UAAU,CAAGxqB,GAAOC,KAAK,CAACgF,OAAO,CAACm3E,UAAU,CAAC5xD,UAAU,CAGzF,SAASjX,CAAM,EAEd,aAEA,IAAIvT,EAASuT,EAAOvT,MAAM,EAAKuT,CAAAA,EAAOvT,MAAM,CAAG,CAAE,GAC7C+G,EAAQ/G,EAAOyb,IAAI,CAAC/iB,MAAM,CAACqO,KAAK,CAEpC,GAAI/G,EAAO2oB,IAAI,CAAE,CACf3oB,EAAO6jC,IAAI,CAAC,kCACZ,MACF,CAEA,IAAI6oD,EACF,6LAEsDpjE,KAAK,CAAC,IAU9DtpB,CAAAA,EAAO2oB,IAAI,CAAG3oB,EAAOyb,IAAI,CAACG,WAAW,CAAC5b,EAAOmW,MAAM,CAAsC,CAOvFw2E,yBAA0B,CACxB,WACA,aACA,aACA,YACA,aACA,OACA,cACA,YACA,SACA,OACA,kBACA,WACA,YACD,CAKDC,WAAY,QAOZC,iBAAkB,WAOlBC,eAAgB,UAOhBC,SAAU,OAOVnzF,KAAsB,OAOtB8B,SAAsB,GAOtB+0B,WAAsB,SAOtBnC,WAAsB,kBAOtBuC,UAAiB,GAOjBD,SAAgB,GAOhBE,YAAmB,GAQnBk8D,UAAsB,OAOtBt8D,UAAsB,SAOtBu8D,WAAsB,KAOtBC,YAAa,CACXpuF,KAAW,GACXquF,SAAU,IACZ,EAOAC,UAAW,CACTtuF,KAAW,GACXquF,SAAW,GACb,EAOAE,oBAAsB,GAQtBnrB,gBAAiBliE,EAAOmW,MAAM,CAACC,SAAS,CAAC8rD,eAAe,CAACpkE,MAAM,CAAC4uF,GAMhEvqB,gBAAiBniE,EAAOmW,MAAM,CAACC,SAAS,CAAC+rD,eAAe,CAACrkE,MAAM,CAAC4uF,GAQhEl8D,OAAsB,KAQtB+5B,OAAsB,KAwBtBj/B,KAAoB,KAQpBgiE,gBAA+B,EAQ/BC,SAAwB,OAUxBC,UAAyB,WAKzBC,kBAAmB,KAKnB/G,QAAS,CACP71D,UAAW,GACXC,YAAa,MACbF,SAAU,IACZ,EAOA88D,cAA2B,KAQ3BC,YAAyB,EAQzB71F,OAAQ,KAUR81F,kBAAmB,KAOnBj9D,OAAQ,EAaRk9D,UAAW,MAOXC,iBAAkB,CAChB,SACA,cACA,OACA,aACA,WACA,aACA,YACA,YACA,WACA,cACA,SACA,sBACD,CAKDC,aAAc,EAAE,CAShBC,gBAAiB,IAOjBC,eAAgB,EAQhBvwD,WAAY,SAAS1M,CAAI,CAAE74B,CAAO,EAChC,IAAI,CAACL,MAAM,CAAGK,GAAWA,EAAQL,MAAM,EAAI,CAAE,EAC7C,IAAI,CAACk5B,IAAI,CAAGA,EACZ,IAAI,CAACk9D,eAAe,CAAG,GACvB,IAAI,CAAC7wD,SAAS,CAAC,aAAcllC,GACzB,IAAI,CAACmzB,IAAI,EACX,IAAI,CAAC6iE,WAAW,GAElB,IAAI,CAACD,eAAe,CAAG,GACvB,IAAI,CAACE,cAAc,GACnB,IAAI,CAAChnF,SAAS,GACd,IAAI,CAACu+C,UAAU,CAAC,CAAE0f,YAAa,0BAA2B,EAC5D,EAOA8oB,YAAa,WACX,IAAI7iE,EAAO,IAAI,CAACA,IAAI,CAChBA,GACFA,CAAAA,EAAK+iE,YAAY,CAAGruF,EAAOyb,IAAI,CAAC0X,mBAAmB,CAAC7H,EAAKA,IAAI,EAEjE,EAWAgjE,oBAAqB,WAMnB,OAJKtuF,EAAO4tF,iBAAiB,EAC3B5tF,CAAAA,EAAO4tF,iBAAiB,CAAG,IAAI,CAACl5F,MAAM,EAAI,IAAI,CAACA,MAAM,CAACm+D,YAAY,EAChE7yD,EAAOyb,IAAI,CAACoQ,mBAAmB,GAAG/N,UAAU,CAAC,OAE1C9d,EAAO4tF,iBAAiB,EAOjCW,WAAY,WACV,IAAIC,EAAW,IAAI,CAACC,mBAAmB,CAAC,IAAI,CAACz9D,IAAI,EAKjD,OAJA,IAAI,CAACC,SAAS,CAAGu9D,EAAS1iB,KAAK,CAC/B,IAAI,CAAC4iB,UAAU,CAAGF,EAASG,aAAa,CACxC,IAAI,CAACC,mBAAmB,CAAGJ,EAASK,eAAe,CACnD,IAAI,CAACC,KAAK,CAAGN,EAASO,YAAY,CAC3BP,CACT,EAOAJ,eAAgB,WACV,IAAI,CAACF,eAAe,GAGxB,IAAI,CAACK,UAAU,GACf,IAAI,CAACS,WAAW,GACZ,IAAI,CAAC1jE,IAAI,EACX,IAAI,CAAC9tB,KAAK,CAAG,IAAI,CAAC8tB,IAAI,CAAC9tB,KAAK,CAC5B,IAAI,CAACH,MAAM,CAAG,IAAI,CAACiuB,IAAI,CAACjuB,MAAM,GAG9B,IAAI,CAACG,KAAK,CAAG,IAAI,CAACyxF,aAAa,IAAM,IAAI,CAACC,WAAW,EAAI,IAAI,CAACjB,cAAc,CAC5E,IAAI,CAAC5wF,MAAM,CAAG,IAAI,CAAC8xF,cAAc,IAEO,KAAtC,IAAI,CAACnC,SAAS,CAACtrE,OAAO,CAAC,YAEzB,IAAI,CAAC0tE,aAAa,GAEpB,IAAI,CAACryB,SAAS,CAAC,CAAEsI,YAAa,0BAA2B,GAC3D,EAKA+pB,cAAe,WAEb,IAAK,IADDC,EAAWC,EAAkBC,EAAgBC,EAAkBC,EAAMC,EAAWC,EAC3ErrF,EAAI,EAAG4d,EAAM,IAAI,CAACwsE,UAAU,CAACn2F,MAAM,CAAE+L,EAAI4d,EAAK5d,IACrD,IAAI,iBAAI,CAAC0oF,SAAS,EAAmB1oF,CAAAA,IAAM4d,EAAM,GAAK,IAAI,CAAC0tE,eAAe,CAACtrF,EAAAA,CAAC,IAG5EkrF,EAAmB,EACnBC,EAAO,IAAI,CAACf,UAAU,CAACpqF,EAAE,CAErBgrF,CADJA,EAAmB,IAAI,CAACO,YAAY,CAACvrF,EAAAA,EACd,IAAI,CAAC9G,KAAK,EAAKmyF,CAAAA,EAAS,IAAI,CAAC1+D,SAAS,CAAC3sB,EAAE,CAAClL,KAAK,CAAC,IAAI,CAACyzF,gBAAgB,IAAI,CAC9F0C,EAAiBI,EAAOp3F,MAAM,CAC9B82F,EAAY,CAAC,IAAI,CAAC7xF,KAAK,CAAG8xF,CAAAA,EAAoBC,EAC9C,IAAK,IAAI95D,EAAI,EAAGC,EAAO+5D,EAAKl3F,MAAM,CAAEk9B,GAAKC,EAAMD,IAC7Ci6D,EAAY,IAAI,CAAC3B,YAAY,CAACzpF,EAAE,CAACmxB,EAAE,CAC/B,IAAI,CAACq3D,cAAc,CAAC/tD,IAAI,CAAC0wD,CAAI,CAACh6D,EAAE,GAClCi6D,EAAUlyF,KAAK,EAAI6xF,EACnBK,EAAUI,WAAW,EAAIT,EACzBK,EAAUzoF,IAAI,EAAIuoF,EAClBA,GAAoBH,GAGpBK,EAAUzoF,IAAI,EAAIuoF,CAGxB,CAEJ,EAOAI,gBAAiB,SAASG,CAAS,EACjC,OAAOA,IAAc,IAAI,CAACrB,UAAU,CAACn2F,MAAM,CAAG,CAChD,EAQAy3F,qBAAsB,WACpB,OAAO,CACT,EAMA7mF,SAAU,WACR,MAAO,kBAAoB,IAAI,CAACga,UAAU,GACxC,iBAAmB,IAAI,CAAC6N,IAAI,CAAG,qBAAuB,IAAI,CAAC1C,UAAU,CAAG,MAC5E,EAaAs0C,0BAA2B,WACzB,IAAIH,EAAO,IAAI,CAACplC,SAAS,CAAC,6BACtB3hC,EAAW,IAAI,CAACA,QAAQ,CAG5B,OAFA+mE,EAAKjlE,KAAK,EAAI9B,EAAW+mE,EAAKzb,KAAK,CACnCyb,EAAKplE,MAAM,EAAI3B,EAAW+mE,EAAKxb,KAAK,CAC7Bwb,CACT,EAMArW,QAAS,SAASvuC,CAAG,EACnB,IAAIyN,EAAO,IAAI,CAACA,IAAI,CACpBA,GAAQ,CAACA,EAAKu5C,YAAY,IAAMv5C,EAAK8gC,OAAO,CAACvuC,GAC7C,IAAI,CAACoyE,cAAc,CAACpyE,GACpB,IAAI,CAACqyE,0BAA0B,CAACryE,GAChC,IAAI,CAACsyE,qBAAqB,CAACtyE,EAAK,aAChC,IAAI,CAACuyE,WAAW,CAACvyE,GACjB,IAAI,CAACsyE,qBAAqB,CAACtyE,EAAK,YAChC,IAAI,CAACsyE,qBAAqB,CAACtyE,EAAK,cAClC,EAMAuyE,YAAa,SAASvyE,CAAG,EACnB,eAAI,CAACokD,UAAU,EACjB,IAAI,CAACouB,iBAAiB,CAACxyE,GACvB,IAAI,CAACyyE,eAAe,CAACzyE,KAGrB,IAAI,CAACyyE,eAAe,CAACzyE,GACrB,IAAI,CAACwyE,iBAAiB,CAACxyE,GAE3B,EAYAoyE,eAAgB,SAASpyE,CAAG,CAAE0yE,CAAS,CAAEC,CAAY,EAEnD,GADA3yE,EAAI4yE,YAAY,CAAG,eACf,IAAI,CAACnlE,IAAI,CACX,OAAQ,IAAI,CAACkiE,SAAS,EACpB,IAAK,SACH3vE,EAAI4yE,YAAY,CAAG,SACnB,KACF,KAAK,WACH5yE,EAAI4yE,YAAY,CAAG,MACnB,KACF,KAAK,YACH5yE,EAAI4yE,YAAY,CAAG,QAEvB,CAEF5yE,EAAI6yE,IAAI,CAAG,IAAI,CAACC,mBAAmB,CAACJ,EAAWC,EACjD,EAQAvB,cAAe,WAGb,IAAK,IAFD2B,EAAW,IAAI,CAACf,YAAY,CAAC,GAExBvrF,EAAI,EAAG4d,EAAM,IAAI,CAACwsE,UAAU,CAACn2F,MAAM,CAAE+L,EAAI4d,EAAK5d,IAAK,CAC1D,IAAIgrF,EAAmB,IAAI,CAACO,YAAY,CAACvrF,GACrCgrF,EAAmBsB,GACrBA,CAAAA,EAAWtB,CAAAA,CAEf,CACA,OAAOsB,CACT,EAWAC,gBAAiB,SAASn1D,CAAM,CAAE7d,CAAG,CAAE4xE,CAAI,CAAExoF,CAAI,CAAED,CAAG,CAAE+oF,CAAS,EAC/D,IAAI,CAACe,YAAY,CAACp1D,EAAQ7d,EAAK4xE,EAAMxoF,EAAMD,EAAK+oF,EAClD,EAOAG,2BAA4B,SAASryE,CAAG,EACtC,GAAI,IAAK,CAACwvE,mBAAmB,EAAK,IAAI,CAAC0D,QAAQ,CAAC,wBAWhD,IAAK,IARDC,EACAC,EACAxB,EAAMyB,EAGsBC,EAASC,EACrCC,EALgBxrB,EAAehoD,EAAIigC,SAAS,CAE5CwzC,EAAa,IAAI,CAACC,cAAc,GAChCC,EAAgB,IAAI,CAACC,aAAa,GAClCC,EAAW,EAAGC,EAAW,EAA0BrmE,EAAO,IAAI,CAACA,IAAI,CAG9DhnB,EAAI,EAAG4d,EAAM,IAAI,CAACwsE,UAAU,CAACn2F,MAAM,CAAE+L,EAAI4d,EAAK5d,IAAK,CAE1D,GADA0sF,EAAe,IAAI,CAACjtB,eAAe,CAACz/D,GAChC,CAAC,IAAI,CAAC+oF,mBAAmB,EAAI,CAAC,IAAI,CAAC0D,QAAQ,CAAC,sBAAuBzsF,GAAI,CACzEktF,GAAiBR,EACjB,QACF,CACAvB,EAAO,IAAI,CAACf,UAAU,CAACpqF,EAAE,CACzB2sF,EAAiB,IAAI,CAACW,kBAAkB,CAACttF,GACzCqtF,EAAW,EACXD,EAAW,EACXR,EAAY,IAAI,CAACW,oBAAoB,CAACvtF,EAAG,EAAG,uBAC5C,IAAK,IAAImxB,EAAI,EAAGC,EAAO+5D,EAAKl3F,MAAM,CAAEk9B,EAAIC,EAAMD,IAC5C07D,EAAU,IAAI,CAACpD,YAAY,CAACzpF,EAAE,CAACmxB,EAAE,CACjC27D,EAAe,IAAI,CAACS,oBAAoB,CAACvtF,EAAGmxB,EAAG,uBAC3CnK,GACFzN,EAAIggC,IAAI,GACRhgC,EAAIE,SAAS,CAACozE,EAAQW,UAAU,CAAEX,EAAQh/B,SAAS,EACnDt0C,EAAIuP,MAAM,CAAC+jE,EAAQ/sE,KAAK,EACxBvG,EAAIigC,SAAS,CAAGszC,EAChBA,GAAgBvzE,EAAIsxC,QAAQ,CAC1B,CAACgiC,EAAQ3zF,KAAK,CAAG,EACjB,CAACwzF,EAAe,IAAI,CAAC/D,UAAU,CAAI,GAAI,IAAI,CAACQ,iBAAiB,EAC7D0D,EAAQ3zF,KAAK,CACbwzF,EAAe,IAAI,CAAC/D,UAAU,EAEhCpvE,EAAIsgC,OAAO,IAEJizC,IAAiBF,GACxBG,EAAYC,EAAaL,EAAiBS,EACnB,QAAnB,IAAI,CAAC7D,SAAS,EAChBwD,CAAAA,EAAY,IAAI,CAAC7zF,KAAK,CAAG6zF,EAAYM,CAAAA,EAEvC9zE,EAAIigC,SAAS,CAAGozC,EAChBA,GAAarzE,EAAIsxC,QAAQ,CACvBkiC,EACAG,EACAG,EACAX,EAAe,IAAI,CAAC/D,UAAU,EAEhCyE,EAAWP,EAAQlqF,IAAI,CACvB0qF,EAAWR,EAAQ3zF,KAAK,CACxB0zF,EAAYE,GAGZO,GAAYR,EAAQrB,WAAW,CAG/BsB,GAAgB,CAAC9lE,IACnB+lE,EAAYC,EAAaL,EAAiBS,EACnB,QAAnB,IAAI,CAAC7D,SAAS,EAChBwD,CAAAA,EAAY,IAAI,CAAC7zF,KAAK,CAAG6zF,EAAYM,CAAAA,EAEvC9zE,EAAIigC,SAAS,CAAGszC,EAChBvzE,EAAIsxC,QAAQ,CACVkiC,EACAG,EACAG,EACAX,EAAe,IAAI,CAAC/D,UAAU,GAGlCuE,GAAiBR,CACnB,CACAnzE,EAAIigC,SAAS,CAAG+nB,EAGhB,IAAI,CAACM,aAAa,CAACtoD,GACrB,EAUAk0E,aAAc,SAAS1rB,CAAI,EACzB,IAAI/3C,EAAa+3C,EAAK/3C,UAAU,CAACC,WAAW,EACvCvuB,CAAAA,EAAOkgB,eAAe,CAACoO,EAAW,EACrCtuB,CAAAA,EAAOkgB,eAAe,CAACoO,EAAW,CAAG,CAAE,GAEzC,IAAI4/C,EAAQluE,EAAOkgB,eAAe,CAACoO,EAAW,CAC1C0jE,EAAY3rB,EAAK31C,SAAS,CAACnC,WAAW,GAAK,IAAM,CAAC83C,EAAK51C,UAAU,CAAG,IAAIlC,WAAW,GAIvF,OAHK2/C,CAAK,CAAC8jB,EAAU,EACnB9jB,CAAAA,CAAK,CAAC8jB,EAAU,CAAG,CAAE,GAEhB9jB,CAAK,CAAC8jB,EAAU,EAazBC,aAAc,SAASC,CAAK,CAAE3B,CAAS,CAAE4B,CAAY,CAAEC,CAAa,EAElE,IAEkE50F,EAAO60F,EAAaC,EACtBxC,EAH5DyC,EAAY,IAAI,CAACR,YAAY,CAACxB,GAAYiC,EAAkB,IAAI,CAAC7B,mBAAmB,CAACJ,GACrFkC,EAA0B,IAAI,CAAC9B,mBAAmB,CAACyB,GAAgBM,EAASP,EAAeD,EAC3FS,EAAiBH,IAAoBC,EACrCG,EAAiBrC,EAAU70F,QAAQ,CAAG,IAAI,CAACsyF,eAAe,CAY9D,GAVImE,GAAgBI,KAA4B32F,IAA5B22F,CAAS,CAACJ,EAAa,EACzCG,CAAAA,EAAgBC,CAAS,CAACJ,EAAa,EAEhBv2F,KAAAA,IAArB22F,CAAS,CAACL,EAAM,EAClBpC,CAAAA,EAActyF,EAAQ+0F,CAAS,CAACL,EAAM,EAEpCS,GAAkBJ,KAAsB32F,IAAtB22F,CAAS,CAACG,EAAO,EAErC5C,CAAAA,EAAcuC,CADdA,EAAcE,CAAS,CAACG,EAAO,EACHJ,CAAAA,EAE1B90F,KAAU5B,IAAV4B,GAAuB80F,KAAkB12F,IAAlB02F,GAA+BD,KAAgBz2F,IAAhBy2F,EAA2B,CACnF,IAAIx0E,EAAM,IAAI,CAACywE,mBAAmB,GAElC,IAAI,CAAC2B,cAAc,CAACpyE,EAAK0yE,EAAW,GACtC,CAeA,OAdc30F,KAAAA,IAAV4B,IACFsyF,EAActyF,EAAQqgB,EAAIg1E,WAAW,CAACX,GAAO10F,KAAK,CAClD+0F,CAAS,CAACL,EAAM,CAAG10F,GAEC5B,KAAAA,IAAlB02F,GAA+BK,GAAkBR,IACnDG,EAAgBz0E,EAAIg1E,WAAW,CAACV,GAAc30F,KAAK,CACnD+0F,CAAS,CAACJ,EAAa,CAAGG,GAExBK,GAAkBN,KAAgBz2F,IAAhBy2F,IAEpBA,EAAcx0E,EAAIg1E,WAAW,CAACH,GAAQl1F,KAAK,CAC3C+0F,CAAS,CAACG,EAAO,CAAGL,EACpBvC,EAAcuC,EAAcC,GAEvB,CAAE90F,MAAOA,EAAQo1F,EAAgB9C,YAAaA,EAAc8C,CAAe,CACpF,EAQAE,gBAAiB,SAASrD,CAAI,CAAEyC,CAAK,EACnC,OAAO,IAAI,CAACL,oBAAoB,CAACpC,EAAMyC,EAAO,WAChD,EAOAa,YAAa,SAAShD,CAAS,EAC7B,IAAIiD,EAAW,IAAI,CAACC,YAAY,CAAClD,GAOjC,OANyB,IAArB,IAAI,CAACpC,WAAW,EAClBqF,CAAAA,EAASx1F,KAAK,EAAI,IAAI,CAAC01F,sBAAsB,IAE3CF,EAASx1F,KAAK,CAAG,GACnBw1F,CAAAA,EAASx1F,KAAK,CAAG,GAEZw1F,CACT,EAQAC,aAAc,SAASlD,CAAS,EAC9B,IAAezrF,EAAG6uF,EAA6CC,EAC3DC,EACoBC,EAAeC,EAFnC/1F,EAAQ,EAAgBiyF,EAAO,IAAI,CAACf,UAAU,CAACqB,EAAU,CAC1ByD,EAAa,MAAU/D,EAAKl3F,MAAM,EACjEk7F,EAAiB,EAAmCnoE,EAAO,IAAI,CAACA,IAAI,CACpE4yC,EAAU,cAAI,CAACqvB,QAAQ,CAG3B,IAAKjpF,EAAI,EADT,IAAI,CAACypF,YAAY,CAACgC,EAAU,CAAGyD,EACnBlvF,EAAImrF,EAAKl3F,MAAM,CAAE+L,IAC3B6uF,EAAW1D,CAAI,CAACnrF,EAAE,CAClB+uF,EAAe,IAAI,CAACK,eAAe,CAACP,EAAUpD,EAAWzrF,EAAG8uF,GAC5DI,CAAU,CAAClvF,EAAE,CAAG+uF,EAChB71F,GAAS61F,EAAavD,WAAW,CACjCsD,EAAeD,EAUjB,GANAK,CAAU,CAAClvF,EAAE,CAAG,CACd2C,KAAMosF,EAAeA,EAAapsF,IAAI,CAAGosF,EAAa71F,KAAK,CAAG,EAC9DA,MAAO,EACPsyF,YAAa,EACbzyF,OAAQ,IAAI,CAAC3B,QAAQ,EAEnB4vB,EAAM,CAKR,OAJAioE,EAAkBjoE,EAAK+iE,YAAY,CAAC/iE,EAAK+iE,YAAY,CAAC91F,MAAM,CAAG,EAAE,CAACA,MAAM,CACxE+6F,EAAgBtzF,EAAOyb,IAAI,CAACgf,cAAc,CAACnP,EAAKA,IAAI,CAAE,EAAGA,EAAK+iE,YAAY,EAC1EiF,EAAcpuE,CAAC,EAAIoG,EAAK8P,UAAU,CAAClW,CAAC,CACpCouE,EAAcnuE,CAAC,EAAImG,EAAK8P,UAAU,CAACjW,CAAC,CAC5B,IAAI,CAAC6nE,SAAS,EACpB,IAAK,OACHyG,EAAiBv1B,EAAWq1B,EAAkB/1F,EAAS,EACvD,KACF,KAAK,SACHi2F,EAAiB,CAACF,EAAkB/1F,CAAAA,EAAS,EAC7C,KACF,KAAK,QACHi2F,EAAiBv1B,EAAU,EAAKq1B,EAAkB/1F,CAGtD,CAEA,IADAi2F,GAAkB,IAAI,CAACnG,eAAe,CAAIpvB,CAAAA,EAAU,GAAK,GACpD55D,EAAI45D,EAAUuxB,EAAKl3F,MAAM,CAAG,EAAI,EACnC2lE,EAAU55D,GAAK,EAAIA,EAAImrF,EAAKl3F,MAAM,CAClC2lE,EAAU55D,IAAMA,IAChB+uF,EAAeG,CAAU,CAAClvF,EAAE,CACxBmvF,EAAiBF,EACnBE,GAAkBF,EAEXE,EAAiB,GACxBA,CAAAA,GAAkBF,CAAAA,EAIpB,IAAI,CAACI,kBAAkB,CAACF,EAAgBJ,EAAcC,GACtDG,GAAkBJ,EAAavD,WAAW,CAG9C,MAAO,CAAEtyF,MAAOA,EAAOo2F,YAtDS,CAsDgB,CAClD,EAUAD,mBAAoB,SAASF,CAAc,CAAEJ,CAAY,CAAEC,CAAa,EACtE,IAAIO,EAAiBJ,EAAiBJ,EAAavD,WAAW,CAAG,EAC7DxkE,EAAO,IAAI,CAACA,IAAI,CAGhBiI,EAAOvzB,EAAOyb,IAAI,CAACgf,cAAc,CAACnP,EAAKA,IAAI,CAAEuoE,EAAgBvoE,EAAK+iE,YAAY,CAClFgF,CAAAA,EAAavB,UAAU,CAAGv+D,EAAKrO,CAAC,CAAGouE,EAAcpuE,CAAC,CAClDmuE,EAAalhC,SAAS,CAAG5+B,EAAKpO,CAAC,CAAGmuE,EAAcnuE,CAAC,CACjDkuE,EAAajvE,KAAK,CAAGmP,EAAKnP,KAAK,CAAI,eAAI,CAACmpE,QAAQ,CAAgB3wF,KAAKsnB,EAAE,CAAG,EAC5E,EAWAwvE,gBAAiB,SAASP,CAAQ,CAAEpD,CAAS,CAAE7+D,CAAS,CAAEkiE,CAAY,CAAEU,CAAQ,EAC9E,IAIwBnG,EAJpBlyF,EAAQ,IAAI,CAACs4F,2BAA2B,CAAChE,EAAW7+D,GACpDb,EAAY+iE,EAAe,IAAI,CAACW,2BAA2B,CAAChE,EAAW7+D,EAAY,GAAK,CAAE,EAC1FqC,EAAO,IAAI,CAAC0+D,YAAY,CAACkB,EAAU13F,EAAO23F,EAAc/iE,GACxDy/D,EAAcv8D,EAAKu8D,WAAW,CAC9BtyF,EAAQ+1B,EAAK/1B,KAAK,CAEG,IAArB,IAAI,CAACmwF,WAAW,GAElBnwF,GADAmwF,EAAc,IAAI,CAACuF,sBAAsB,GAEzCpD,GAAenC,GAGjB,IAAI1rD,EAAM,CACRzkC,MAAOA,EACPyJ,KAAM,EACN5J,OAAQ5B,EAAMC,QAAQ,CACtBo0F,YAAaA,EACbn/D,OAAQl1B,EAAMk1B,MAAM,EAEtB,GAAIO,EAAY,GAAK,CAAC4iE,EAAU,CAC9B,IAAIE,EAAc,IAAI,CAACjG,YAAY,CAACgC,EAAU,CAAC7+D,EAAY,EAAE,CAC7D+Q,EAAIh7B,IAAI,CAAG+sF,EAAY/sF,IAAI,CAAG+sF,EAAYx2F,KAAK,CAAG+1B,EAAKu8D,WAAW,CAAGv8D,EAAK/1B,KAAK,CAEjF,OAAOykC,CACT,EAOA8hC,gBAAiB,SAASgsB,CAAS,EACjC,GAAI,IAAI,CAACkE,aAAa,CAAClE,EAAU,CAC/B,OAAO,IAAI,CAACkE,aAAa,CAAClE,EAAU,CAOtC,IAAK,IAJDN,EAAO,IAAI,CAACf,UAAU,CAACqB,EAAU,CAGjCmE,EAAY,IAAI,CAACpB,eAAe,CAAC/C,EAAW,GACvCzrF,EAAI,EAAG4d,EAAMutE,EAAKl3F,MAAM,CAAE+L,EAAI4d,EAAK5d,IAC1C4vF,EAAYt3F,KAAKI,GAAG,CAAC,IAAI,CAAC81F,eAAe,CAAC/C,EAAWzrF,GAAI4vF,GAG3D,OAAO,IAAI,CAACD,aAAa,CAAClE,EAAU,CAAGmE,EAAY,IAAI,CAACjH,UAAU,CAAG,IAAI,CAACS,aAAa,EAMzFyB,eAAgB,WAEd,IAAK,IADDlC,EAAY5vF,EAAS,EAChBiH,EAAI,EAAG4d,EAAM,IAAI,CAACwsE,UAAU,CAACn2F,MAAM,CAAE+L,EAAI4d,EAAK5d,IACrD2oF,EAAa,IAAI,CAAClpB,eAAe,CAACz/D,GAClCjH,GAAWiH,IAAM4d,EAAM,EAAI+qE,EAAa,IAAI,CAACA,UAAU,CAAGA,EAE5D,OAAO5vF,CACT,EAMAk0F,eAAgB,WACd,MAAO,YAAI,CAAC1D,SAAS,CAAa,CAAC,IAAI,CAACrwF,KAAK,CAAG,EAAI,IAAI,CAACA,KAAK,CAAG,CACnE,EAMAi0F,cAAe,WACb,MAAO,CAAC,IAAI,CAACp0F,MAAM,CAAG,CACxB,EAOA82F,kBAAmB,SAASt2E,CAAG,CAAE6d,CAAM,EACrC7d,EAAIggC,IAAI,GAER,IAAK,IADDu2C,EAAc,EAAGntF,EAAO,IAAI,CAACsqF,cAAc,GAAIvqF,EAAM,IAAI,CAACyqF,aAAa,GAClEntF,EAAI,EAAG4d,EAAM,IAAI,CAACwsE,UAAU,CAACn2F,MAAM,CAAE+L,EAAI4d,EAAK5d,IAAK,CAC1D,IAAI0sF,EAAe,IAAI,CAACjtB,eAAe,CAACz/D,GACpC4vF,EAAYlD,EAAe,IAAI,CAAC/D,UAAU,CAC1CqE,EAAa,IAAI,CAACM,kBAAkB,CAACttF,GACzC,IAAI,CAACusF,eAAe,CAClBn1D,EACA7d,EACA,IAAI,CAAC6wE,UAAU,CAACpqF,EAAE,CAClB2C,EAAOqqF,EACPtqF,EAAMotF,EAAcF,EACpB5vF,GAEF8vF,GAAepD,CACjB,CACAnzE,EAAIsgC,OAAO,EACb,EAMAmyC,gBAAiB,SAASzyE,CAAG,EACvB,KAAK,CAACtV,IAAI,EAAK,IAAI,CAACwoF,QAAQ,CAAC,UAIjC,IAAI,CAACoD,iBAAiB,CAACt2E,EAAK,WAC9B,EAMAwyE,kBAAmB,SAASxyE,CAAG,EACxB,EAAC,IAAI,CAAC2S,MAAM,EAAI,QAAI,CAAC9Z,WAAW,GAAW,IAAI,CAAC29E,aAAa,KAI9D,IAAI,CAAC9pC,MAAM,EAAI,CAAC,IAAI,CAACA,MAAM,CAACyC,YAAY,EAC1C,IAAI,CAACmZ,aAAa,CAACtoD,GAGrBA,EAAIggC,IAAI,GACR,IAAI,CAACuW,YAAY,CAACv2C,EAAK,IAAI,CAAC4sC,eAAe,EAC3C5sC,EAAIogC,SAAS,GACb,IAAI,CAACk2C,iBAAiB,CAACt2E,EAAK,cAC5BA,EAAI4pC,SAAS,GACb5pC,EAAIsgC,OAAO,GACb,EAWA2yC,aAAc,SAASp1D,CAAM,CAAE7d,CAAG,CAAE4xE,CAAI,CAAExoF,CAAI,CAAED,CAAG,CAAE+oF,CAAS,EAE5D,IAEIuE,EACAC,EAEApD,EAEAqD,EAIAC,EAXAxH,EAAa,IAAI,CAAClpB,eAAe,CAACgsB,GAClC2E,EAAY,SAAI,CAAC1H,SAAS,CAACtrE,OAAO,CAAC,WAGnCizE,EAAgB,GAEhBhD,EAAW,EAEXrmE,EAAO,IAAI,CAACA,IAAI,CAChBspE,EAAW,CAACF,GAAa,QAAI,CAAC/G,WAAW,EAAU,IAAI,CAAC0G,aAAa,CAACtE,IAAc,CAACzkE,EACrFupE,EAAQ,YAAI,CAAChH,SAAS,CAAYxpE,EAAO,YAAI,CAACwpE,SAAS,CAAa,EAAI,GAC3DiH,EAAmBj3E,EAAInpB,MAAM,CAAC2gF,YAAY,CAAC,OAQ5D,GAPAx3D,EAAIggC,IAAI,GACJi3C,IAAqB,IAAI,CAACjH,SAAS,GACrChwE,EAAInpB,MAAM,CAACsrC,YAAY,CAAC,MAAO60D,EAAQ,MAAQ,OAC/Ch3E,EAAIgwE,SAAS,CAAGgH,EAAQ,MAAQ,MAChCh3E,EAAImvE,SAAS,CAAG6H,EAAQ,OAAS,SAEnC7tF,GAAOimF,EAAa,IAAI,CAACQ,iBAAiB,CAAG,IAAI,CAACR,UAAU,CACxD2H,EAAU,CAGZ,IAAI,CAACG,WAAW,CAACr5D,EAAQ7d,EAAKkyE,EAAW,EAAGN,EAAKxgE,IAAI,CAAC,IAAKhoB,EAAMD,EAAKimF,GACtEpvE,EAAIsgC,OAAO,GACX,MACF,CACA,IAAK,IAAI75C,EAAI,EAAG4d,EAAMutE,EAAKl3F,MAAM,CAAG,EAAG+L,GAAK4d,EAAK5d,IAC/CkwF,EAAelwF,IAAM4d,GAAO,IAAI,CAACyrE,WAAW,EAAIriE,EAChDqpE,GAAiBlF,CAAI,CAACnrF,EAAE,CACxB6sF,EAAU,IAAI,CAACpD,YAAY,CAACgC,EAAU,CAACzrF,EAAE,CACrCqtF,IAAAA,GACF1qF,GAAQod,EAAQ8sE,CAAAA,EAAQrB,WAAW,CAAGqB,EAAQ3zF,KAAK,EACnDm0F,GAAYR,EAAQ3zF,KAAK,EAGzBm0F,GAAYR,EAAQrB,WAAW,CAE7B4E,GAAa,CAACF,GACZ,IAAI,CAAC1H,cAAc,CAAC/tD,IAAI,CAAC0wD,CAAI,CAACnrF,EAAE,GAClCkwF,CAAAA,EAAe,IAGdA,IAEHF,EAAcA,GAAe,IAAI,CAACP,2BAA2B,CAAChE,EAAWzrF,GACzEiwF,EAAY,IAAI,CAACR,2BAA2B,CAAChE,EAAWzrF,EAAI,GAC5DkwF,EAAex0F,EAAOyb,IAAI,CAAC2U,eAAe,CAACkkE,EAAaC,EAAW,KAEjEC,IACElpE,GACFzN,EAAIggC,IAAI,GACRhgC,EAAIE,SAAS,CAACozE,EAAQW,UAAU,CAAEX,EAAQh/B,SAAS,EACnDt0C,EAAIuP,MAAM,CAAC+jE,EAAQ/sE,KAAK,EACxB,IAAI,CAAC2wE,WAAW,CAACr5D,EAAQ7d,EAAKkyE,EAAWzrF,EAAGqwF,EAAe,CAAChD,EAAW,EAAG,EAAG1E,GAC7EpvE,EAAIsgC,OAAO,KAGXs2C,EAAcxtF,EACd,IAAI,CAAC8tF,WAAW,CAACr5D,EAAQ7d,EAAKkyE,EAAWzrF,EAAGqwF,EAAeF,EAAaztF,EAAKimF,IAE/E0H,EAAgB,GAChBL,EAAcC,EACdttF,GAAQod,EAAOstE,EACfA,EAAW,GAGf9zE,EAAIsgC,OAAO,EACb,EAaA62C,mCAAoC,SAASxxE,CAAM,EACjD,IAAiD8jD,EAA7CC,EAAUvnE,EAAOyb,IAAI,CAACoQ,mBAAmB,GAEzCruB,EAAQ,IAAI,CAACA,KAAK,CAAG,IAAI,CAACkZ,WAAW,CAAErZ,EAAS,IAAI,CAACA,MAAM,CAAG,IAAI,CAACqZ,WAAW,CAUlF,OATA6wD,EAAQ/pE,KAAK,CAAGA,EAChB+pE,EAAQlqE,MAAM,CAAGA,EAEjBiqE,CADAA,EAAOC,EAAQzpD,UAAU,CAAC,OACrBmgC,SAAS,GAAIqpB,EAAK/f,MAAM,CAAC,EAAG,GAAI+f,EAAK9f,MAAM,CAAChqD,EAAO,GAAI8pE,EAAK9f,MAAM,CAAChqD,EAAOH,GAC/EiqE,EAAK9f,MAAM,CAAC,EAAGnqD,GAASiqE,EAAK7f,SAAS,GACtC6f,EAAKvpD,SAAS,CAACvgB,EAAQ,EAAGH,EAAS,GACnCiqE,EAAKxpB,SAAS,CAAGt6B,EAAOkkC,MAAM,CAAC4f,GAC/B,IAAI,CAACb,8BAA8B,CAACa,EAAM9jD,GAC1C8jD,EAAK/+D,IAAI,GACF++D,EAAK3X,aAAa,CAAC4X,EAAS,YACrC,EAEA0tB,aAAc,SAASp3E,CAAG,CAAE4F,CAAQ,CAAED,CAAM,EAC1C,IAAIu1B,EAASC,SACb,EAAW0O,MAAM,CACf,eAAIlkC,EAAO+iD,aAAa,EAAqB/iD,EAAOmkC,iBAAiB,EAAInkC,EAAOokC,gBAAgB,EAK9F7O,EAAU,CAAC,IAAI,CAACv7C,KAAK,CAAG,EACxBw7C,EAAU,CAAC,IAAI,CAAC37C,MAAM,CAAG,EACzBwgB,EAAIE,SAAS,CAACg7B,EAASC,GACvBn7B,CAAG,CAAC4F,EAAS,CAAG,IAAI,CAACuxE,kCAAkC,CAACxxE,GACjD,CAAEu1B,QAASA,EAASC,QAASA,CAAQ,IAI5Cn7B,CAAG,CAAC4F,EAAS,CAAGD,EAAOkkC,MAAM,CAAC7pC,EAAK,IAAI,EAChC,IAAI,CAAC4oD,8BAA8B,CAAC5oD,EAAK2F,KAKlD3F,CAAG,CAAC4F,EAAS,CAAGD,EAEX,CAAEu1B,QAAS,EAAGC,QAAS,CAAE,EAClC,EAEAotB,iBAAkB,SAASvoD,CAAG,CAAEwoD,CAAI,EAMlC,OALAxoD,EAAImgC,SAAS,CAAGqoB,EAAK3vD,WAAW,CAChCmH,EAAI8sC,OAAO,CAAG,IAAI,CAACH,aAAa,CAChC3sC,EAAIyoD,cAAc,CAAG,IAAI,CAAC9E,gBAAgB,CAC1C3jD,EAAIgtC,QAAQ,CAAG,IAAI,CAACxjC,cAAc,CAClCxJ,EAAI+sC,UAAU,CAAG,IAAI,CAACtjC,gBAAgB,CAC/B,IAAI,CAAC2tE,YAAY,CAACp3E,EAAK,cAAewoD,EAAK71C,MAAM,CAC1D,EAEAk2C,eAAgB,SAAS7oD,CAAG,CAAEwoD,CAAI,EAChC,OAAO,IAAI,CAAC4uB,YAAY,CAACp3E,EAAK,YAAawoD,EAAK99D,IAAI,CACtD,EAaAwsF,YAAa,SAASr5D,CAAM,CAAE7d,CAAG,CAAEkyE,CAAS,CAAE7+D,CAAS,CAAEghE,CAAK,CAAEjrF,CAAI,CAAED,CAAG,EACvE,IAIIkuF,EAAaC,EAJb9uB,EAAO,IAAI,CAAC+uB,oBAAoB,CAACrF,EAAW7+D,GAC5CmkE,EAAW,IAAI,CAACtB,2BAA2B,CAAChE,EAAW7+D,GACvDokE,EAAa55D,aAAAA,GAAyB25D,EAAS9sF,IAAI,CACnD8mE,EAAe3zC,eAAAA,GAA2B25D,EAAS7kE,MAAM,EAAI6kE,EAAS3+E,WAAW,CAGjF,IAAkB4+E,CAAAA,IAGtBz3E,EAAIggC,IAAI,GAERy3C,GAAeJ,CAAAA,EAAc,IAAI,CAACxuB,cAAc,CAAC7oD,EAAKw3E,EAAAA,EACtDhmB,GAAiB8lB,CAAAA,EAAgB,IAAI,CAAC/uB,gBAAgB,CAACvoD,EAAKw3E,EAAAA,EAE5Dx3E,EAAI6yE,IAAI,CAAG,IAAI,CAACC,mBAAmB,CAAC0E,GAGhChvB,GAAQA,EAAKgnB,mBAAmB,EAClC,IAAI,CAAClnB,aAAa,CAACtoD,GAEjBwoD,GAAQA,EAAK11C,MAAM,EACrB3pB,CAAAA,GAAOq/D,EAAK11C,MAAM,EAEpB2kE,GAAcz3E,EAAI03E,QAAQ,CAACrD,EAAOjrF,EAAOiuF,EAAYn8C,OAAO,CAAE/xC,EAAMkuF,EAAYl8C,OAAO,EACvFq2B,GAAgBxxD,EAAI23E,UAAU,CAACtD,EAAOjrF,EAAOkuF,EAAcp8C,OAAO,CAAE/xC,EAAMmuF,EAAcn8C,OAAO,EAC/Fn7B,EAAIsgC,OAAO,GACb,EASAs3C,eAAgB,SAASpkE,CAAK,CAAEC,CAAG,EACjC,OAAO,IAAI,CAACokE,UAAU,CAACrkE,EAAOC,EAAK,IAAI,CAAC47D,WAAW,CACrD,EASAyI,aAAc,SAAStkE,CAAK,CAAEC,CAAG,EAC/B,OAAO,IAAI,CAACokE,UAAU,CAACrkE,EAAOC,EAAK,IAAI,CAAC87D,SAAS,CACnD,EAWAsI,WAAY,SAASrkE,CAAK,CAAEC,CAAG,CAAEskE,CAAM,EACrC,IAAIC,EAAM,IAAI,CAACC,mBAAmB,CAACzkE,EAAO,IACtC31B,EAAW,IAAI,CAACm2F,oBAAoB,CAACgE,EAAI9F,SAAS,CAAE8F,EAAI3kE,SAAS,CAAE,YACnEsX,EAAK,IAAI,CAACqpD,oBAAoB,CAACgE,EAAI9F,SAAS,CAAE8F,EAAI3kE,SAAS,CAAE,UAC7Dz1B,EAAQ,CAAEC,SAAUA,EAAWk6F,EAAO92F,IAAI,CAAE6xB,OAAQ6X,EAAK9sC,EAAWk6F,EAAOzI,QAAQ,EAEvF,OADA,IAAI,CAAC4I,kBAAkB,CAACt6F,EAAO41B,EAAOC,GAC/B,IAAI,EAQbsgE,mBAAoB,SAAS7B,CAAS,EACpC,IAEIH,EAFA5xC,EAAY,IAAI,CAAC6xC,YAAY,CAACE,GAC9BiG,EAAW,IAAI,CAACx4F,KAAK,CAAGwgD,EAAWgvC,EAAY,IAAI,CAACA,SAAS,CAAEa,EAAY,IAAI,CAACA,SAAS,CACxEyD,EAAa,EAAG1B,EAAkB,IAAI,CAACA,eAAe,CAACG,SAC5E,YAAI/C,GACEA,CAAAA,mBAAAA,GAAmC4C,CAAAA,GACnC5C,CAAAA,kBAAAA,GAAkC4C,CAAAA,GAClC5C,CAAAA,iBAAAA,GAAiC4C,CAAAA,GAIrB,WAAd5C,GACFsE,CAAAA,EAAa0E,EAAW,GAER,UAAdhJ,GACFsE,CAAAA,EAAa0E,CAAAA,EAEG,mBAAdhJ,GACFsE,CAAAA,EAAa0E,EAAW,GAER,kBAAdhJ,GACFsE,CAAAA,EAAa0E,CAAAA,EAEG,QAAdnI,GACFyD,CAAAA,GAAc0E,CAAAA,EAET1E,GAjBE,CAkBX,EAKAtC,YAAa,WACX,IAAI,CAACiH,YAAY,CAAG,EAAE,CACtB,IAAI,CAAChC,aAAa,CAAG,EAAE,CACvB,IAAI,CAAClG,YAAY,CAAG,EAAE,EAMxBmI,2BAA4B,WAC1B,IAAIC,EAAc,IAAI,CAACC,gBAAgB,CAMvC,OALAD,GAAgBA,CAAAA,EAAc,IAAI,CAAC55B,eAAe,CAAC,6BAC/C45B,IACF,IAAI,CAACn0B,KAAK,CAAG,GACb,IAAI,CAACo0B,gBAAgB,CAAG,IAEnBD,CACT,EASAtG,aAAc,SAASE,CAAS,EAC9B,GAAI,KAAiCn0F,IAAjC,IAAI,CAACq6F,YAAY,CAAClG,EAAU,CAC9B,OAAO,IAAI,CAACkG,YAAY,CAAClG,EAAU,CAIrC,IAAIvyF,EAAQw1F,IADO,CAACD,WAAW,CAAChD,GACXvyF,KAAK,CAE1B,OADA,IAAI,CAACy4F,YAAY,CAAClG,EAAU,CAAGvyF,EACxBA,CACT,EAEA01F,uBAAwB,kBACtB,IAAI,IAAI,CAACvF,WAAW,CACX,IAAI,CAACjyF,QAAQ,CAAG,IAAI,CAACiyF,WAAW,CAAG,IAErC,CACT,EASAkE,qBAAsB,SAAS9B,CAAS,CAAE7+D,CAAS,CAAEzN,CAAQ,EAC3D,IAAI8sE,EAAY,IAAI,CAAC6E,oBAAoB,CAACrF,EAAW7+D,UACrD,GAAiB,KAA+B,IAAxBq/D,CAAS,CAAC9sE,EAAS,CAClC8sE,CAAS,CAAC9sE,EAAS,CAErB,IAAI,CAACA,EAAS,EAOvB0sE,sBAAuB,SAAStyE,CAAG,CAAEjkB,CAAI,EACvC,GAAI,IAAK,CAACA,EAAK,EAAK,IAAI,CAACm3F,QAAQ,CAACn3F,IAalC,IAAK,IAVDo3F,EAAclyF,EAAMu3F,EACpBpF,EAAgBzoD,EAAI8tD,EACpB7G,EAAM8G,EAE4BvvF,EAClC0qF,EAAUC,EAAUR,EAASqF,EAC7BtC,EAAWuC,EAAaC,EAHxBpF,EAAa,IAAI,CAACC,cAAc,GAChCoF,EAAY,IAAI,CAAClF,aAAa,GAEInmE,EAAO,IAAI,CAACA,IAAI,CAClDqiE,EAAc,IAAI,CAACuF,sBAAsB,GACzCl6C,EAAU,IAAI,CAAC0tC,OAAO,CAAC9sF,EAAK,CAEvB0K,EAAI,EAAG4d,EAAM,IAAI,CAACwsE,UAAU,CAACn2F,MAAM,CAAE+L,EAAI4d,EAAK5d,IAAK,CAE1D,GADA0sF,EAAe,IAAI,CAACjtB,eAAe,CAACz/D,GAChC,CAAC,IAAI,CAAC1K,EAAK,EAAI,CAAC,IAAI,CAACm3F,QAAQ,CAACn3F,EAAM0K,GAAI,CAC1CqyF,GAAa3F,EACb,QACF,CACAvB,EAAO,IAAI,CAACf,UAAU,CAACpqF,EAAE,CACzB4vF,EAAYlD,EAAe,IAAI,CAAC/D,UAAU,CAC1CgE,EAAiB,IAAI,CAACW,kBAAkB,CAACttF,GACzCotF,EAAW,EACXC,EAAW,EACX4E,EAAiB,IAAI,CAAC1E,oBAAoB,CAACvtF,EAAG,EAAG1K,GACjD88F,EAAW,IAAI,CAAC7E,oBAAoB,CAACvtF,EAAG,EAAG,QAC3C0C,EAAM2vF,EAAYzC,EAAa,GAAI,IAAI,CAACzG,iBAAiB,EACzD3uF,EAAO,IAAI,CAACg0F,eAAe,CAACxuF,EAAG,GAC/BkkC,EAAK,IAAI,CAACqpD,oBAAoB,CAACvtF,EAAG,EAAG,UACrC,IAAK,IAAImxB,EAAI,EAAGC,EAAO+5D,EAAKl3F,MAAM,CAAEk9B,EAAIC,EAAMD,IAM5C,GALA07D,EAAU,IAAI,CAACpD,YAAY,CAACzpF,EAAE,CAACmxB,EAAE,CACjC+gE,EAAoB,IAAI,CAAC3E,oBAAoB,CAACvtF,EAAGmxB,EAAG77B,GACpD68F,EAAc,IAAI,CAAC5E,oBAAoB,CAACvtF,EAAGmxB,EAAG,QAC9C4gE,EAAQ,IAAI,CAACvD,eAAe,CAACxuF,EAAGmxB,GAChC6gE,EAAM,IAAI,CAACzE,oBAAoB,CAACvtF,EAAGmxB,EAAG,UAClCnK,GAAQkrE,GAAqBC,EAC/B54E,EAAIggC,IAAI,GACRhgC,EAAIigC,SAAS,CAAG44C,EAChB74E,EAAIE,SAAS,CAACozE,EAAQW,UAAU,CAAEX,EAAQh/B,SAAS,EACnDt0C,EAAIuP,MAAM,CAAC+jE,EAAQ/sE,KAAK,EACxBvG,EAAIsxC,QAAQ,CACV,CAACgiC,EAAQrB,WAAW,CAAG,EACvB92C,EAAUq9C,EAAQC,EAClBnF,EAAQrB,WAAW,CACnB,IAAI,CAACp0F,QAAQ,CAAG,IAElBmiB,EAAIsgC,OAAO,QAER,GACH,CAACq4C,IAAsBD,GAAkBE,IAAgBC,GAAYL,IAAUv3F,GAAQw3F,IAAQ9tD,CAAAA,GAC5FmpD,EAAW,EACd,CACA,IAAIN,EAAYC,EAAaL,EAAiBS,CACvB,SAAnB,IAAI,CAAC7D,SAAS,EAChBwD,CAAAA,EAAY,IAAI,CAAC7zF,KAAK,CAAG6zF,EAAYM,CAAAA,EAEnC4E,GAAkBG,IACpB74E,EAAIigC,SAAS,CAAG44C,EAChB74E,EAAIsxC,QAAQ,CACVkiC,EACArqF,EAAMgyC,EAAUl6C,EAAO0pC,EACvBmpD,EACA,IAAI,CAACj2F,QAAQ,CAAG,KAGpBg2F,EAAWP,EAAQlqF,IAAI,CACvB0qF,EAAWR,EAAQ3zF,KAAK,CACxB+4F,EAAiBC,EACjBE,EAAWD,EACX33F,EAAOu3F,EACP7tD,EAAK8tD,CACP,MAEE3E,GAAYR,EAAQrB,WAAW,CAGnC,IAAIuB,EAAYC,EAAaL,EAAiBS,CACvB,SAAnB,IAAI,CAAC7D,SAAS,EAChBwD,CAAAA,EAAY,IAAI,CAAC7zF,KAAK,CAAG6zF,EAAYM,CAAAA,EAEvC9zE,EAAIigC,SAAS,CAAG24C,EAChBD,GAAqBC,GAAe54E,EAAIsxC,QAAQ,CAC9CkiC,EACArqF,EAAMgyC,EAAUl6C,EAAO0pC,EACvBmpD,EAAWhE,EACX,IAAI,CAACjyF,QAAQ,CAAG,IAElBi7F,GAAa3F,CACf,CAGA,IAAI,CAAC7qB,aAAa,CAACtoD,GACrB,EAOA8yE,oBAAqB,SAASiG,CAAW,CAAEpG,CAAY,EACrD,IAAI/0F,EAAQm7F,GAAe,IAAI,CAAEC,EAAS,IAAI,CAACvoE,UAAU,CACrDwoE,EAAgB92F,EAAO2oB,IAAI,CAACouE,YAAY,CAACr1E,OAAO,CAACm1E,EAAOtoE,WAAW,IAAM,GACzED,EAAauoE,KAAWj7F,IAAXi7F,GACjBA,EAAOn1E,OAAO,CAAC,KAAQ,IAAMm1E,EAAOn1E,OAAO,CAAC,KAAO,IACnDm1E,EAAOn1E,OAAO,CAAC,KAAO,IAAMo1E,EACxBr7F,EAAM6yB,UAAU,CAAG,IAAM7yB,EAAM6yB,UAAU,CAAG,IAChD,MAAO,CAGJtuB,EAAOqf,YAAY,CAAG5jB,EAAMg1B,UAAU,CAAGh1B,EAAMi1B,SAAS,CACxD1wB,EAAOqf,YAAY,CAAG5jB,EAAMi1B,SAAS,CAAGj1B,EAAMg1B,UAAU,CACzD+/D,EAAe,IAAI,CAACxC,eAAe,CAAG,KAAOvyF,EAAMC,QAAQ,CAAG,KAC9D4yB,EACD,CAACW,IAAI,CAAC,IACT,EAMA8xB,OAAQ,SAASljC,CAAG,EAEb,IAAI,CAAC4gC,OAAO,EAGb,MAAI,CAAC/pD,MAAM,GAAI,IAAI,CAACA,MAAM,CAACwtD,aAAa,EAAK,IAAI,CAACgD,KAAK,EAAK,IAAI,CAAC4f,UAAU,MAG3E,IAAI,CAACoxB,0BAA0B,IACjC,IAAI,CAAC9H,cAAc,GAErB,IAAI,CAAC/wD,SAAS,CAAC,SAAUxf,GAC3B,EAOA4wE,oBAAqB,SAASz9D,CAAI,EAKhC,IAAK,IAJD86C,EAAQ96C,EAAK1H,KAAK,CAAC,IAAI,CAACsjE,UAAU,EAClC4B,EAAW,MAAU1iB,EAAMvzE,MAAM,EACjCy+F,EAAU,CAAC,KAAK,CAChBC,EAAU,EAAE,CACP3yF,EAAI,EAAGA,EAAIwnE,EAAMvzE,MAAM,CAAE+L,IAChCkqF,CAAQ,CAAClqF,EAAE,CAAGtE,EAAOyb,IAAI,CAACuN,MAAM,CAACkT,aAAa,CAAC4vC,CAAK,CAACxnE,EAAE,EACvD2yF,EAAUA,EAAQn5F,MAAM,CAAC0wF,CAAQ,CAAClqF,EAAE,CAAE0yF,GAGxC,OADAC,EAAQ9oE,GAAG,GACJ,CAAE0gE,gBAAiBL,EAAU1iB,MAAOA,EAAOijB,aAAckI,EAAStI,cAAeH,CAAS,CACnG,EAOA/lC,SAAU,SAASF,CAAmB,EACpC,IAAI2uC,EAAgBxK,EAAgB5uF,MAAM,CAACyqD,GACvCrlC,EAAM,IAAI,CAACma,SAAS,CAAC,WAAY65D,GAKrC,OAJAh0E,EAAIprB,MAAM,CAAGkI,EAAOyb,IAAI,CAACsV,aAAa,CAAC,IAAI,CAACj5B,MAAM,CAAE,IAAI,CAACk5B,IAAI,EACzD9N,EAAIoI,IAAI,EACVpI,CAAAA,EAAIoI,IAAI,CAAG,IAAI,CAACA,IAAI,CAACm9B,QAAQ,IAExBvlC,CACT,EASApe,IAAK,SAASE,CAAG,CAAElM,CAAK,EACtB,IAAI,CAACukC,SAAS,CAAC,MAAOr4B,EAAKlM,GAC3B,IAAIq+F,EAAY,GACZC,EAAe,GACnB,GAAI,iBAAOpyF,EACT,IAAK,IAAIhE,KAAQgE,EACF,SAAThE,GACF,IAAI,CAACmtF,WAAW,GAElBgJ,EAAYA,GAAa,SAAI,CAACxK,wBAAwB,CAACjrE,OAAO,CAAC1gB,GAC/Do2F,EAAeA,GAAgBp2F,SAAAA,OAIjCm2F,EAAY,SAAI,CAACxK,wBAAwB,CAACjrE,OAAO,CAAC1c,GAClDoyF,EAAepyF,SAAAA,EASjB,OAPIoyF,GACF,IAAI,CAACjJ,WAAW,GAEdgJ,IACF,IAAI,CAAC/I,cAAc,GACnB,IAAI,CAAChnF,SAAS,IAET,IAAI,EAOb+b,WAAY,WACV,OAAO,CACT,CACF,GAWAnjB,EAAO2oB,IAAI,CAAC6B,UAAU,CAAG,SAAS9xB,CAAM,CAAEkqB,CAAQ,EAChD,IAAIy0E,EAAatwF,EAAMrO,GAAS4yB,EAAO5yB,EAAO4yB,IAAI,CAElD,OADA,OAAO+rE,EAAW/rE,IAAI,CACftrB,EAAOmW,MAAM,CAAC8xD,WAAW,CAAC,OAAQovB,EAAY,SAASC,CAAY,EACxEA,EAAax/F,MAAM,CAAGkI,EAAOyb,IAAI,CAAC8V,eAAe,CAAC74B,EAAOZ,MAAM,CAAEY,EAAOs4B,IAAI,EACxE1F,EACFtrB,EAAOmW,MAAM,CAAC8xD,WAAW,CAAC,OAAQ38C,EAAM,SAASisE,CAAY,EAC3DD,EAAaxyF,GAAG,CAAC,OAAQyyF,GACzB30E,EAAS00E,EACX,EAAG,QAGH10E,EAAS00E,EAEb,EAAG,OACL,EAEAt3F,EAAO2oB,IAAI,CAACouE,YAAY,CAAG,CAAC,aAAc,QAAS,UAAW,UAAW,YAAY,CAErF/2F,EAAOyb,IAAI,CAACguD,eAAe,EAAIzpE,EAAOyb,IAAI,CAACguD,eAAe,CAACzpE,EAAO2oB,IAAI,CAExE,EAAoCpM,GAElCvc,GAAOyb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAACra,GAAO2oB,IAAI,CAACvS,SAAS,CAAsC,CAMnFi+E,cAAe,SAAStE,CAAS,EAC/B,GAAI,CAAC,IAAI,CAACj4F,MAAM,EAGZ,KAAqB,IAAdi4F,GAA6B,CAAC,IAAI,CAACj4F,MAAM,CAACi4F,EAAU,CAF7D,MAAO,GAKT,IAAI7sE,EAAM,KAAqB,IAAd6sE,EAA4B,IAAI,CAACj4F,MAAM,CAAG,CAAE23F,KAAM,IAAI,CAAC33F,MAAM,CAACi4F,EAAU,EACzF,IAAK,IAAI32D,KAAMlW,EACb,IAAK,IAAImW,KAAMnW,CAAG,CAACkW,EAAG,CAEpB,IAAK,IAAIo+D,KAAMt0E,CAAG,CAACkW,EAAG,CAACC,EAAG,CACxB,MAAO,GAIb,MAAO,EACT,EASA03D,SAAU,SAASttE,CAAQ,CAAEssE,CAAS,EACpC,GAAI,CAAC,IAAI,CAACj4F,MAAM,EAAI,CAAC2rB,GAAYA,KAAAA,GAG7B,KAAqB,IAAdssE,GAA6B,CAAC,IAAI,CAACj4F,MAAM,CAACi4F,EAAU,CAF7D,MAAO,GAKT,IAAI7sE,EAAM,KAAqB,IAAd6sE,EAA4B,IAAI,CAACj4F,MAAM,CAAG,CAAE,EAAG,IAAI,CAACA,MAAM,CAACi4F,EAAU,EAEtF,IAAK,IAAI32D,KAAMlW,EAEb,IAAK,IAAImW,KAAMnW,CAAG,CAACkW,EAAG,CACpB,GAAI,KAAiC,IAA1BlW,CAAG,CAACkW,EAAG,CAACC,EAAG,CAAC5V,EAAS,CAC9B,MAAO,GAIb,MAAO,EACT,EAYAg0E,WAAY,SAASh0E,CAAQ,EAC3B,GAAI,CAAC,IAAI,CAAC3rB,MAAM,EAAI,CAAC2rB,GAAYA,KAAAA,EAC/B,MAAO,GAET,IAAwCi0E,EAAaC,EACQf,EADzD1zE,EAAM,IAAI,CAACprB,MAAM,CAAE8/F,EAAc,EACjCC,EAAgC,GAAMC,EAAgB,EAE1D,IAAK,IAAI1+D,KAAMlW,EAAK,CAGlB,IAAK,IAAImW,KAFTq+D,EAAc,EAECx0E,CAAG,CAACkW,EAAG,CAAE,CACtB,IAAIw9D,EAAc1zE,CAAG,CAACkW,EAAG,CAACC,EAAG,CACzB0+D,EAA0BnB,EAAY96D,cAAc,CAACrY,EAEzDm0E,CAAAA,IAEIG,GACGJ,EAGIf,CAAW,CAACnzE,EAAS,GAAKk0E,GACjCE,CAAAA,EAAgC,IAHhCF,EAAqBf,CAAW,CAACnzE,EAAS,CAMxCmzE,CAAW,CAACnzE,EAAS,GAAK,IAAI,CAACA,EAAS,EAC1C,OAAOmzE,CAAW,CAACnzE,EAAS,EAI9Bo0E,EAAgC,GAG9B1hF,IAAAA,OAAOw4D,IAAI,CAACioB,GAAar+F,MAAM,CACjCm/F,IAGA,OAAOx0E,CAAG,CAACkW,EAAG,CAACC,EAAG,CAIF,IAAhBq+D,GACF,OAAOx0E,CAAG,CAACkW,EAAG,CAKlB,IAAK,IAAI90B,EAAI,EAAGA,EAAI,IAAI,CAACoqF,UAAU,CAACn2F,MAAM,CAAE+L,IAC1CwzF,GAAiB,IAAI,CAACpJ,UAAU,CAACpqF,EAAE,CAAC/L,MAAM,CAExCs/F,GAAiCD,IAAgBE,IACnD,IAAI,CAACr0E,EAAS,CAAGk0E,EACjB,IAAI,CAACK,WAAW,CAACv0E,GAErB,EASAu0E,YAAa,SAASv0E,CAAQ,EAC5B,GAAI,IAAK,CAAC3rB,MAAM,EAAK2rB,GAAYA,KAAAA,GAGjC,IAAuBgsE,EAAMwI,EAASC,EAAlCh1E,EAAM,IAAI,CAACprB,MAAM,CACrB,IAAKmgG,KAAW/0E,EAAK,CAEnB,IAAKg1E,KADLzI,EAAOvsE,CAAG,CAAC+0E,EAAQ,CAEjB,OAAOxI,CAAI,CAACyI,EAAQ,CAACz0E,EAAS,CACY,IAAtCtN,OAAOw4D,IAAI,CAAC8gB,CAAI,CAACyI,EAAQ,EAAE3/F,MAAM,EACnC,OAAOk3F,CAAI,CAACyI,EAAQ,CAGS,IAA7B/hF,OAAOw4D,IAAI,CAAC8gB,GAAMl3F,MAAM,EAC1B,OAAO2qB,CAAG,CAAC+0E,EAAQ,EAGzB,EAKAE,cAAe,SAASlsF,CAAK,CAAEnU,CAAM,EACnC,IAAI+9F,EAAM,IAAI,CAACC,mBAAmB,CAAC7pF,GAE9B,IAAI,CAACmsF,aAAa,CAACvC,EAAI9F,SAAS,GACnC,IAAI,CAACsI,aAAa,CAACxC,EAAI9F,SAAS,EAG7B,IAAI,CAACqF,oBAAoB,CAACS,EAAI9F,SAAS,CAAE8F,EAAI3kE,SAAS,GACzD,IAAI,CAAConE,oBAAoB,CAACzC,EAAI9F,SAAS,CAAE8F,EAAI3kE,SAAS,CAAE,CAAC,GAG3DlxB,GAAOyb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAAC,IAAI,CAAC+6E,oBAAoB,CAACS,EAAI9F,SAAS,CAAE8F,EAAI3kE,SAAS,EAAGp5B,EACrF,EAOAg+F,oBAAqB,SAASyC,CAAc,CAAEC,CAAY,EAC1B,SAAnBD,GACTA,CAAAA,EAAiB,IAAI,CAACA,cAAc,EAItC,IAAK,IAFDzsB,EAAQ0sB,EAAe,IAAI,CAAC5J,mBAAmB,CAAG,IAAI,CAACF,UAAU,CACjExsE,EAAM4pD,EAAMvzE,MAAM,CACb+L,EAAI,EAAGA,EAAI4d,EAAK5d,IAAK,CAC5B,GAAIi0F,GAAkBzsB,CAAK,CAACxnE,EAAE,CAAC/L,MAAM,CACnC,MAAO,CACLw3F,UAAWzrF,EACX4sB,UAAWqnE,CACb,EAEFA,GAAkBzsB,CAAK,CAACxnE,EAAE,CAAC/L,MAAM,CAAG,IAAI,CAACy3F,oBAAoB,CAAC1rF,EAChE,CACA,MAAO,CACLyrF,UAAWzrF,EAAI,EACf4sB,UAAW46C,CAAK,CAACxnE,EAAI,EAAE,CAAC/L,MAAM,CAAGggG,EAAiBzsB,CAAK,CAACxnE,EAAI,EAAE,CAAC/L,MAAM,CAAGggG,CAC1E,CACF,EAUAE,mBAAoB,SAASC,CAAU,CAAEC,CAAQ,CAAEC,CAAQ,EAC/B,SAAfF,GACTA,CAAAA,EAAa,IAAI,CAACH,cAAc,EAAI,GAEd,SAAbI,GACTA,CAAAA,EAAW,IAAI,CAACE,YAAY,EAAIH,CAAAA,EAGlC,IAAK,IADD5gG,EAAS,EAAE,CACNwM,EAAIo0F,EAAYp0F,EAAIq0F,EAAUr0F,IACrCxM,EAAOjE,IAAI,CAAC,IAAI,CAACilG,kBAAkB,CAACx0F,EAAGs0F,IAEzC,OAAO9gG,CACT,EASAghG,mBAAoB,SAASjvE,CAAQ,CAAE+uE,CAAQ,EAC7C,IAAI/C,EAAM,IAAI,CAACC,mBAAmB,CAACjsE,GAGnC,MAAOpuB,CAFKm9F,EAAW,IAAI,CAAC7E,2BAA2B,CAAC8B,EAAI9F,SAAS,CAAE8F,EAAI3kE,SAAS,EAC9E,IAAI,CAACkkE,oBAAoB,CAACS,EAAI9F,SAAS,CAAE8F,EAAI3kE,SAAS,IAC5C,CAAC,CACnB,EAUA6kE,mBAAoB,SAASj+F,CAAM,CAAE4gG,CAAU,CAAEC,CAAQ,EAC7B,SAAfD,GACTA,CAAAA,EAAa,IAAI,CAACH,cAAc,EAAI,GAEd,SAAbI,GACTA,CAAAA,EAAW,IAAI,CAACE,YAAY,EAAIH,CAAAA,EAElC,IAAK,IAAIp0F,EAAIo0F,EAAYp0F,EAAIq0F,EAAUr0F,IACrC,IAAI,CAAC6zF,aAAa,CAAC7zF,EAAGxM,GAIxB,OADA,IAAI,CAACs+F,gBAAgB,CAAG,GACjB,IAAI,EASbhB,qBAAsB,SAASrF,CAAS,CAAE7+D,CAAS,EACjD,IAAI6nE,EAAY,IAAI,CAACjhG,MAAM,EAAI,IAAI,CAACA,MAAM,CAACi4F,EAAU,QACrD,EAGOgJ,CAAS,CAAC7nE,EAAU,CAFlB,IAGX,EASA6iE,4BAA6B,SAAShE,CAAS,CAAE7+D,CAAS,EAGxD,IAAK,IADkB9O,EADnB3mB,EAAQ,IAAI,CAAC25F,oBAAoB,CAACrF,EAAW7+D,IAAc,CAAE,EAC7D0lE,EAAc,CAAE,EACXtyF,EAAI,EAAGA,EAAI,IAAI,CAACwpF,gBAAgB,CAACv1F,MAAM,CAAE+L,IAEhDsyF,CAAW,CADXx0E,EAAO,IAAI,CAAC0rE,gBAAgB,CAACxpF,EAAE,CACd,CAAG,KAAuB,IAAhB7I,CAAK,CAAC2mB,EAAK,CAAmB,IAAI,CAACA,EAAK,CAAG3mB,CAAK,CAAC2mB,EAAK,CAEnF,OAAOw0E,CACT,EAQA0B,qBAAsB,SAASvI,CAAS,CAAE7+D,CAAS,CAAEz1B,CAAK,EACxD,IAAI,CAAC3D,MAAM,CAACi4F,EAAU,CAAC7+D,EAAU,CAAGz1B,CACtC,EAQAu9F,wBAAyB,SAASjJ,CAAS,CAAE7+D,CAAS,EACpD,OAAO,IAAI,CAACp5B,MAAM,CAACi4F,EAAU,CAAC7+D,EAAU,EAQ1CknE,cAAe,SAASrI,CAAS,EAC/B,MAAO,CAAC,CAAC,IAAI,CAACj4F,MAAM,CAACi4F,EAAU,EAQjCsI,cAAe,SAAStI,CAAS,EAC/B,IAAI,CAACj4F,MAAM,CAACi4F,EAAU,CAAG,CAAC,CAC5B,EAMAkJ,iBAAkB,SAASlJ,CAAS,EAClC,OAAO,IAAI,CAACj4F,MAAM,CAACi4F,EAAU,CAEjC,GAED,WAEC,IAAI3yC,EAAgBp9C,GAAOo9C,aAAa,CACpC87C,EAAwB97C,EAAcrC,2BAA2B,CACjEo+C,EAAoB/7C,EAAczC,uBAAuB,CACzDiB,EAAiBwB,EAAcxB,cAAc,CAC7CG,EAAqBqB,EAAcrB,kBAAkB,CACrDE,EAAqBmB,EAAcnB,kBAAkB,CACrDe,EAAwBI,EAAcJ,qBAAqB,CAC3Do8C,EAAiBp5F,GAAOmW,MAAM,CAACC,SAAS,CAACkF,QAAQ,CAwErD,GAtEA89E,EAAeC,EAAE,CAAG,IAAIr5F,GAAOw+C,OAAO,CAAC,CACrCt5B,EAAG,IACHC,EAAG,EACHg6B,mBAAoB+5C,EACpB/gD,cAAe8D,EACfmD,cAAepC,CACjB,GAEAo8C,EAAeE,EAAE,CAAG,IAAIt5F,GAAOw+C,OAAO,CAAC,CACrCt5B,EAAG,GACHC,EAAG,EACHg6B,mBAAoB+5C,EACpB/gD,cAAe8D,EACfmD,cAAepC,CACjB,GAEAo8C,EAAeG,EAAE,CAAG,IAAIv5F,GAAOw+C,OAAO,CAAC,CACrCt5B,EAAG,EACHC,EAAG,GACHg6B,mBAAoB+5C,EACpB/gD,cAAe4D,EACfqD,cAAepC,CACjB,GAEAo8C,EAAe5+D,EAAE,CAAG,IAAIx6B,GAAOw+C,OAAO,CAAC,CACrCt5B,EAAG,EACHC,EAAG,IACHg6B,mBAAoB+5C,EACpB/gD,cAAe4D,EACfqD,cAAepC,CACjB,GAEAo8C,EAAez4C,EAAE,CAAG,IAAI3gD,GAAOw+C,OAAO,CAAC,CACrCt5B,EAAG,IACHC,EAAG,IACHg6B,mBAAoBg6C,EACpBhhD,cAAeyD,CACjB,GAEAw9C,EAAex4C,EAAE,CAAG,IAAI5gD,GAAOw+C,OAAO,CAAC,CACrCt5B,EAAG,GACHC,EAAG,IACHg6B,mBAAoBg6C,EACpBhhD,cAAeyD,CACjB,GAEAw9C,EAAev4C,EAAE,CAAG,IAAI7gD,GAAOw+C,OAAO,CAAC,CACrCt5B,EAAG,IACHC,EAAG,GACHg6B,mBAAoBg6C,EACpBhhD,cAAeyD,CACjB,GAEAw9C,EAAet4C,EAAE,CAAG,IAAI9gD,GAAOw+C,OAAO,CAAC,CACrCt5B,EAAG,GACHC,EAAG,GACHg6B,mBAAoBg6C,EACpBhhD,cAAeyD,CACjB,GAEAw9C,EAAeI,GAAG,CAAG,IAAIx5F,GAAOw+C,OAAO,CAAC,CACtCt5B,EAAG,EACHC,EAAG,IACHgzB,cAAeiF,EAAcnC,oBAAoB,CACjDkE,mBAAoB/B,EAAcF,oBAAoB,CACtDlE,QAAS,IACT6F,eAAgB,GAChBH,WAAY,QACd,GAEI1+C,GAAOy5F,OAAO,CAAE,CAMlB,IAAIC,EAAkB15F,GAAOy5F,OAAO,CAACrjF,SAAS,CAACkF,QAAQ,CAAG,CAAE,CAE5Do+E,CAAAA,EAAgBF,GAAG,CAAGJ,EAAeI,GAAG,CACxCE,EAAgB94C,EAAE,CAAGw4C,EAAex4C,EAAE,CACtC84C,EAAgB54C,EAAE,CAAGs4C,EAAet4C,EAAE,CACtC44C,EAAgB/4C,EAAE,CAAGy4C,EAAez4C,EAAE,CACtC+4C,EAAgB74C,EAAE,CAAGu4C,EAAev4C,EAAE,CACtC64C,EAAgBl/D,EAAE,CAAG4+D,EAAe5+D,EAAE,CACtCk/D,EAAgBH,EAAE,CAAGH,EAAeG,EAAE,CAEtCG,EAAgBJ,EAAE,CAAG,IAAIt5F,GAAOw+C,OAAO,CAAC,CACtCt5B,EAAG,GACHC,EAAG,EACHgzB,cAAeiF,EAAcjB,WAAW,CACxCgD,mBAAoB+5C,EACpBx6C,WAAY,UACd,GAEAg7C,EAAgBL,EAAE,CAAG,IAAIr5F,GAAOw+C,OAAO,CAAC,CACtCt5B,EAAG,IACHC,EAAG,EACHgzB,cAAeiF,EAAcjB,WAAW,CACxCgD,mBAAoB+5C,EACpBx6C,WAAY,UACd,EACF,CACF,IAOE1+C,GAAOmW,MAAM,CAACyU,aAAa,CAAC/2B,IAAI,CAAC,UAE7BooB,GAAiBjc,GAAOmW,MAAM,CAACC,SAAS,CAAC4vD,aAAa,CACtD9pD,GAAoBlc,GAAOmW,MAAM,CAACC,SAAS,CAACqvD,gBAAgB,CAC5DtpD,GAAYnc,GAAOmW,MAAM,CAACC,SAAS,CAACqyC,QAAQ,CAC3BzoD,GAAOmW,MAAM,CAACC,SAAS,CAACujF,aAAa,CACtB35F,GAAOmW,MAAM,CAACC,SAAS,CAACwjF,4BAA4B,CAC5D55F,GAAOmW,MAAM,CAACC,SAAS,CAACyjF,oBAAoB,CAExE75F,GAAOmW,MAAM,CAACC,SAAS,CAAC+rD,eAAe,CAACtuE,IAAI,CAAC,UAC7CmM,GAAOmW,MAAM,CAACC,SAAS,CAAC8rD,eAAe,CAACruE,IAAI,CAAC,UAK7CmM,GAAOyb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAACra,GAAOmW,MAAM,CAACC,SAAS,CAAE,CAWjD0jF,SAAU,GAMVC,OAAQn+F,KAAAA,EAMR6pE,iBAAkB,WAChB,OAAOvpD,GAAkBiG,IAAI,CAAC,IAAI,GAAK,CAAC,CAAC,IAAI,CAAC43E,MAAM,EAUtD/zB,cAAe,SAAUnoD,CAAG,CAAEsS,CAAQ,EAEpC,GADAlU,GAAekG,IAAI,CAAC,IAAI,CAAEtE,EAAKsS,GAC3B,IAAI,CAAC4pE,MAAM,CAAE,CAEf,IAAIj7F,EAAO,IAAI,CAAConE,4BAA4B,EAC5C,KAAI,CAAC6zB,MAAM,CAAClxB,MAAM,CAAC,WAAa,IAAI,CAACkxB,MAAM,CAACj1F,GAAG,CAAC,CAC9CtH,MAAOsB,EAAKomB,CAAC,CACb7nB,OAAQyB,EAAKqmB,CAAC,GAEhBlJ,GAAekG,IAAI,CAAC,IAAI,CAAEtE,EAAK,IAAI,CAACk8E,MAAM,CAC5C,CACF,EAOAtxC,SAAU,SAAUF,CAAmB,EACrC,IAAI7vD,EAASyjB,GAAUgG,IAAI,CAAC,IAAI,CAAE,CAAC,WAAW,CAACrkB,MAAM,CAACyqD,IAItD,OAHI,IAAI,CAACwxC,MAAM,EAAI,CAAC,IAAI,CAACA,MAAM,CAACnxC,iBAAiB,EAC/ClwD,CAAAA,EAAOqhG,MAAM,CAAG,IAAI,CAACA,MAAM,CAACtxC,QAAQ,CAACF,EAAAA,EAEhC7vD,CACT,CAGF,GAEI0jB,GAAwBpc,GAAOwrB,KAAK,CAACpV,SAAS,CAACi8D,oBAAoB,CACvEryE,GAAOyb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAACra,GAAOwrB,KAAK,CAACpV,SAAS,CAAE,CAKhD4jF,wBAAyB,SAAU1uE,CAAI,EACrC,IAAI,CAAC5uB,QAAQ,CAACuqB,OAAO,CAAC,SAAUvuB,CAAM,EACpCsH,GAAOi6F,WAAW,CAAC7jF,SAAS,CAAC8jF,sBAAsB,CAAC/3E,IAAI,CACtDniB,GAAOi6F,WAAW,CAAC7jF,SAAS,CAC5B1d,EACA4yB,EAEJ,EACF,EAMA6uE,qBAAsB,WACpB,IAAI38D,EAAQ,IAAI,CAAEu8D,EAAS,IAAI,CAACA,MAAM,CACtC,GAAIA,EAAQ,CACV,OAAO,IAAI,CAACA,MAAM,CAClB,IAAInyE,EAAY4V,EAAMtN,mBAAmB,GACzC6pE,EAAOhzF,KAAK,CAAC,SAAUgzF,CAAM,EAC3B,IAAI5pE,EAAWqN,EAAMrN,QAAQ,CAC7B4pE,EAAOl3E,UAAU,CAAC,QACfoE,OAAO,CAAC,SAAUqE,CAAI,EAErB,IAAI8uE,EAAoBp6F,GAAOyb,IAAI,CAACyQ,yBAAyB,CAC3DtE,EACA0D,EAAK4E,mBAAmB,IAE1BlwB,GAAOyb,IAAI,CAAC6T,sBAAsB,CAAChE,EAAM8uE,GACrCjqE,EACFA,EAASppB,KAAK,CAAC,SAAUszF,CAAS,EAChC,IAAIC,EAAat6F,GAAOi6F,WAAW,CAAC7jF,SAAS,CAACmkF,mBAAmB,CAACp4E,IAAI,CACpEniB,GAAOi6F,WAAW,CAAC7jF,SAAS,CAC5BkV,EACA+uE,EACAzyE,GAEF4V,EAAMw8D,uBAAuB,CAACM,EAChC,EAAG,CAAC,qBAAsB,WAAW,EAGrC98D,EAAMw8D,uBAAuB,CAAC1uE,EAElC,EACJ,EACF,CACF,EAMA+mD,qBAAsB,WAEpB,MADA,CAAkB,IAAlB,IAAI,CAACynB,QAAQ,EAAa,IAAI,CAACK,oBAAoB,GAC5C/9E,GAAsB+F,IAAI,CAAC,IAAI,CACxC,CACF,GASAniB,GAAOw6F,MAAM,CAAGx6F,GAAOyb,IAAI,CAACG,WAAW,CAAC5b,GAAOwrB,KAAK,CAAE,CAKpD5xB,KAAM,SAKN69C,QAAS,SAKTC,QAAS,SAET0tB,WAAY,SAAUvnD,CAAG,EACvBA,EAAIggC,IAAI,GACRhgC,EAAIigC,SAAS,CAAG,QAChBjgC,EAAIsxC,QAAQ,CAAC,CAAC,IAAI,CAAC3xD,KAAK,CAAG,EAAG,CAAC,IAAI,CAACH,MAAM,CAAG,EAAG,IAAI,CAACG,KAAK,CAAE,IAAI,CAACH,MAAM,EACvEwgB,EAAIsgC,OAAO,GACX,IAAI,CAAC9gB,SAAS,CAAC,aAAcxf,EAC/B,EASAs1D,WAAY,WAEZ,CAGF,GASAnzE,GAAOw6F,MAAM,CAAChwE,UAAU,CAAG,SAAU9xB,CAAM,CAAEkqB,CAAQ,EACnD,IAAItb,EAAU5O,EAAO4O,OAAO,CAC5BtH,GAAOyb,IAAI,CAACwO,cAAc,CAAC3iB,EAAS,SAAU6iB,CAAgB,EAC5D,IAAIhyB,EAAU6H,GAAOyb,IAAI,CAAC/iB,MAAM,CAACqO,KAAK,CAACrO,EAAQ,GAC/C,QAAOP,EAAQmP,OAAO,CACtBtH,GAAOyb,IAAI,CAACiP,uBAAuB,CAAChyB,EAAQP,EAAS,WACnDyqB,GAAYA,EAAS,IAAI5iB,GAAOw6F,MAAM,CAACrwE,EAAkBhyB,EAAS,IACpE,EACF,EACF,EAEIkkB,GAAkBrc,GAAO8U,MAAM,CAACsB,SAAS,CAAC0wC,cAAc,CAK5D9mD,GAAOyb,IAAI,CAAC/iB,MAAM,CAAC2hB,MAAM,CAACra,GAAO8U,MAAM,CAACsB,SAAS,CAAE,CAKjDqkF,UAAW,WACT,OACE,IAAI,CAAC5jG,aAAa,EAClB,IAAI,CAACoT,gBAAgB,EACrB,eAAI,CAACA,gBAAgB,CAACrQ,IAAI,EAC1B,IAAI,CAACqQ,gBAAgB,CAACywF,UAAU,EASpC5zC,eAAgB,SAAUjpC,CAAG,EAC3BxB,GAAgB8F,IAAI,CAAC,IAAI,CAAEtE,GACvB,IAAI,CAAC48E,SAAS,IAAM,CAAC,IAAI,CAACxwF,gBAAgB,CAACklB,QAAQ,EACrD,IAAI,CAACllB,gBAAgB,CAACmiD,OAAO,EAEjC,CACF,GAqBApsD,GAAOi6F,WAAW,CAAGj6F,GAAOyb,IAAI,CAACG,WAAW,CAC1C5b,GAAOwrD,WAAW,CACyB,CACzC5xD,KAAM,SAKNu1B,SAAU,GAKVurE,WAAY,GAQZC,YAAa,SAAUjiG,CAAM,EAC3B,MAAOA,CAAoB,IAApBA,EAAOohG,QAAQ,EAgBxBc,4BAA6B,SAAUC,CAAU,CAAEh9E,CAAG,CAAEi9E,CAAkB,EACxED,EAAW1zF,aAAa,CAAC,SAAU+b,CAAG,EAChCA,EAAI/b,aAAa,EAAI+b,SAAAA,EAAI42E,QAAQ,CAEnC,IAAI,CAACc,2BAA2B,CAAC13E,EAAKrF,EAAKi9E,GAEpC,CAAC,IAAI,CAAC3rE,QAAQ,EAAIjM,EAAI42E,QAAQ,EAAI52E,EAAIu7B,OAAO,EAEpDv7B,EAAIu7B,OAAO,CAAG,GACdo8C,EAAW74B,KAAK,CAAG,GACnB84B,EAAmBp7C,UAAU,CAAC7rD,IAAI,CAACqvB,GACnC43E,EAAmBD,UAAU,CAAChnG,IAAI,CAACgnG,IAE5B,IAAI,CAAC1rE,QAAQ,EAAIjM,EAAIu7B,OAAO,GAE/Bv7B,EAAI42E,QAAQ,EAAI52E,EAAI62E,MAAM,EAC5B72E,EAAI62E,MAAM,CAAC5qE,QAAQ,CAAG,GACtBjM,EAAI8+C,KAAK,CAAG,GACZ64B,EAAW74B,KAAK,CAAG,GACnB84B,EAAmBf,MAAM,CAAClmG,IAAI,CAACqvB,KAI/BA,EAAIu7B,OAAO,CAAG,GACdo8C,EAAW74B,KAAK,CAAG,GACnB84B,EAAmBp7C,UAAU,CAAC7rD,IAAI,CAACqvB,IACnC43E,EAAmBD,UAAU,CAAChnG,IAAI,CAACgnG,GAGzC,EAAG,IAAI,CACT,EAQAE,eAAgB,WACT,IAAI,CAACC,cAAc,EACtB,KAAI,CAACA,cAAc,CAAGh7F,GAAOyb,IAAI,CAACoQ,mBAAmB,IAEvD,IAAIn3B,EAAS,IAAI,CAACsmG,cAAc,CAChCtmG,EAAO8I,KAAK,CAAG,IAAI,CAAC9I,MAAM,CAAC8I,KAAK,CAChC9I,EAAO2I,MAAM,CAAG,IAAI,CAAC3I,MAAM,CAAC2I,MAAM,CAClC,IAAIkyD,EAAa76D,EAAOopB,UAAU,CAAC,MACnC,GAAI,IAAI,CAACppB,MAAM,CAACiuD,gBAAgB,GAAI,CAClC,IAAIgT,EAAgB,IAAI,CAACjhE,MAAM,CAACkuD,gBAAgB,GAChD,IAAI,CAACluD,MAAM,CAACouD,mBAAmB,CAAC6S,EAAejhE,EAAQ66D,EACzD,CACA,IAAIjO,EAAkB,IAAI,CAAC5sD,MAAM,CAAC4sD,eAAe,CAC7C25C,EAAa35C,GAAmB,IAAI,CAACq5C,WAAW,CAACr5C,GACjDE,EAAe,IAAI,CAAC9sD,MAAM,CAAC8sD,YAAY,CACvC05C,EAAkB15C,GAAgB,IAAI,CAACm5C,WAAW,CAACn5C,GACvD,GAAI,CAAC,IAAI,CAACryB,QAAQ,EAAKmyB,CAAAA,GAAoB,CAAC25C,GAAiB,IAAI,CAACvmG,MAAM,CAACM,eAAe,EAClFimG,GAAc,KAAI,CAACvmG,MAAM,CAAC4sD,eAAe,CAAG1lD,KAAAA,CAAAA,EAChD,IAAI,CAAClH,MAAM,CAAC4xD,iBAAiB,CAACiJ,GAC1B0rC,GAAc,KAAI,CAACvmG,MAAM,CAAC4sD,eAAe,CAAGA,CAAAA,OAE7C,GAAI,IAAI,CAACnyB,QAAQ,EAAKmyB,GAAmB25C,EAAa,CACzD,IAAI/wF,EAAQ,IAAI,CAACxV,MAAM,CAACM,eAAe,CACvC,IAAI,CAACN,MAAM,CAACM,eAAe,CAAG4G,KAAAA,EAC9B,IAAI,CAAClH,MAAM,CAAC4xD,iBAAiB,CAACiJ,GAC9B,IAAI,CAAC76D,MAAM,CAACM,eAAe,CAAGkV,CAChC,CACAqlD,EAAW1R,IAAI,GACf0R,EAAW3nC,SAAS,CAAC9F,KAAK,CAACytC,EAAY,IAAI,CAAC76D,MAAM,CAACmtD,iBAAiB,EACpE,IAAIi5C,EAAqB,CAAEp7C,WAAY,EAAE,CAAEq6C,OAAQ,EAAE,CAAEc,WAAY,EAAE,EAUrE,GATA,IAAI,CAACD,2BAA2B,CAAC,IAAI,CAAClmG,MAAM,CAAE66D,EAAYurC,GAC1D,IAAI,CAACpmG,MAAM,CAAC6xD,cAAc,CAACgJ,EAAY,IAAI,CAAC76D,MAAM,CAACgI,QAAQ,EAC3Do+F,EAAmBp7C,UAAU,CAACz4B,OAAO,CAAC,SAAU/D,CAAG,EAAIA,EAAIu7B,OAAO,CAAG,EAAM,GAC3Eq8C,EAAmBf,MAAM,CAAC9yE,OAAO,CAAC,SAAU/D,CAAG,EAC7CA,EAAI62E,MAAM,CAAC5qE,QAAQ,CAAG,GACtBjM,EAAI8+C,KAAK,CAAG,EACd,GACA84B,EAAmBD,UAAU,CAAC5zE,OAAO,CAAC,SAAU/D,CAAG,EAAIA,EAAI8+C,KAAK,CAAG,EAAM,GACzEzS,EAAWpR,OAAO,GACd,CAAC,IAAI,CAAChvB,QAAQ,EAAKqyB,CAAAA,GAAiB,CAAC05C,GAAsB,IAAI,CAACxmG,MAAM,CAAC6sD,YAAY,EACjF25C,GAAmB,KAAI,CAACxmG,MAAM,CAAC8sD,YAAY,CAAG5lD,KAAAA,CAAAA,EAClDygB,GAAgB8F,IAAI,CAAC,IAAI,CAACztB,MAAM,CAAE66D,GAC9B2rC,GAAmB,KAAI,CAACxmG,MAAM,CAAC8sD,YAAY,CAAGA,CAAAA,OAE/C,GAAI,IAAI,CAACryB,QAAQ,EAAKqyB,GAAgB05C,EAAkB,CAC3D,IAAIhxF,EAAQ,IAAI,CAACxV,MAAM,CAAC6sD,YAAY,CACpC,IAAI,CAAC7sD,MAAM,CAAC6sD,YAAY,CAAG3lD,KAAAA,EAC3BygB,GAAgB8F,IAAI,CAAC,IAAI,CAACztB,MAAM,CAAE66D,GAClC,IAAI,CAAC76D,MAAM,CAAC6sD,YAAY,CAAGr3C,CAC7B,CACF,EAOAu6C,gBAAiB,SAAU5mC,CAAG,EAC5B,IAAI,CAACwf,SAAS,CAAC,kBAAmBxf,GAClCA,EAAIkgC,WAAW,CAAG,OACpB,EAgBA+M,kBAAmB,SAAUjtC,CAAG,EAC9B,IAAI,CAACwf,SAAS,CAAC,oBAAqBxf,GACpC,IAAI,CAAC4mC,eAAe,CAAC5mC,GACrBA,EAAIkpC,wBAAwB,CAAGlpC,IAAQ,IAAI,CAACnpB,MAAM,CAACopB,UAAU,GAAK,kBAAoB,aACxF,EAMAutC,gBAAiB,WACf,MAAO,EACT,EAQAW,YAAa,SAAU/T,CAAO,CAAE9/C,CAAO,EAChC,IAAI,CAACzD,MAAM,CAACu3D,YAAY,CAAC9zD,EAAQ2P,CAAC,IAGvC,IAAI,CAACokD,kBAAkB,CAACjU,GAGxB,IAAI,CAACkU,mBAAmB,CAAClU,GAGzB,IAAI,CAAC8iD,cAAc,GACnB,IAAI,CAACL,UAAU,CAAG,GAClB,IAAI,CAAChmG,MAAM,CAACstB,IAAI,CAAC,iBACjB,IAAI,CAACoqC,OAAO,GACd,EAQAA,QAAS,WAEF,IAAI,CAACj9B,QAAQ,GAEhBtR,EAAM,IAAI,CAACnpB,MAAM,CAACopB,UAAU,GAC5B,IAAI,CAACuf,SAAS,CAAC,UAAWxf,IAG5BA,EAAM,IAAI,CAACnpB,MAAM,CAACwuD,UAAU,CAC5B,IAAI,CAACxuD,MAAM,CAACkxD,YAAY,CAAC/nC,GACzB,IAAI,CAACwf,SAAS,CAAC,UAAWxf,GAC1BA,EAAIggC,IAAI,GACR,IAXIhgC,EAWoC+I,EAAI,EAApC,IAAI,CAAClyB,MAAM,CAACkuD,gBAAgB,GACpC/kC,EAAItX,KAAK,CAACqgB,EAAGA,GACb/I,EAAIkpC,wBAAwB,CAAG,YAC/BlpC,EAAII,SAAS,CAAC,IAAI,CAAC+8E,cAAc,CAAE,EAAG,GACtCn9E,EAAIsgC,OAAO,EACb,EAUA2O,WAAY,SAAUl4B,CAAQ,EAC5B,IAAItJ,EAAO,IAAI,CAAC+R,SAAS,CAAC,aAAczI,GAGxC,OAFAtJ,EAAKy7B,wBAAwB,CAAG,IAAI,CAAC53B,QAAQ,CAAG,cAAgB,kBAChE7D,EAAKkF,MAAM,CAAG,IAAI,CAACrB,QAAQ,CAAG,QAAU,QACjC7D,CACT,EAWAivE,oBAAqB,SAAUjvE,CAAI,CAAE6E,CAAQ,CAAEgrE,CAAgC,EAC7E,IAAIC,EAAmBp7F,GAAOyb,IAAI,CAAC0M,eAAe,CAACmD,EAAK4E,mBAAmB,IACvEmrE,EAAoBlrE,EAASD,mBAAmB,GAChDtI,EAAYuI,EAASkyC,kBAAkB,CACrC+4B,EACAp7F,GAAOyb,IAAI,CAACyQ,yBAAyB,CACnCkvE,EACAD,GAiBR,OAbAhrE,EAASkyC,kBAAkB,CAAG,GAC9BriE,GAAOyb,IAAI,CAAC6T,sBAAsB,CAChCa,EACAnwB,GAAOyb,IAAI,CAACyQ,yBAAyB,CACnCtE,EACAyzE,IAOJ/vE,EAAK6E,QAAQ,CAAG7E,EAAK6E,QAAQ,CAAGnwB,GAAOyb,IAAI,CAACsU,cAAc,CAACI,EAAU7E,EAAK6E,QAAQ,EAAIA,EAC/E7E,CACT,EAUAgwE,sBAAuB,SAAUhwE,CAAI,CAAE5yB,CAAM,CAAEkqB,CAAQ,EACrD,IAAI24E,EAAe7iG,EAAOw3B,mBAAmB,GACzCC,EAAWz3B,EAAOy3B,QAAQ,CAC1BqN,EAAQ,IAAI,CAChBlS,EAAKvkB,KAAK,CAAC,SAAUy0F,CAAK,EACxBrrE,EAASppB,KAAK,CAAC,SAAUszF,CAAS,EAChCz3E,EAAS4a,EAAM+8D,mBAAmB,CAACiB,EAAOnB,EAAWkB,GACvD,EAAG,CAAC,qBAAsB,WAAW,CACvC,EACF,EASArB,uBAAwB,SAAUh3E,CAAG,CAAEoI,CAAI,EACzC,IAAIkS,EAAQ,IAAI,CAEhB,GAAIta,EAAI/b,aAAa,EAAI+b,SAAAA,EAAI42E,QAAQ,CAAa,CAChD,IAAI3oC,EAAUjuC,EAAIxmB,QAAQ,CAACyL,MAAM,CAAC,SAAUsqE,CAAI,EAC9C,OAAOA,EAAKqnB,QAAQ,EAElB3oC,CAAAA,EAAQ54D,MAAM,CAAG,GAAK2qB,EAAIiN,QAAQ,CACpC,IAAI,CAACmrE,qBAAqB,CAAChwE,EAAMpI,EAAK,SAAUs4E,CAAK,EACnDrqC,EAAQlqC,OAAO,CAAC,SAAUwrD,CAAI,EAC5Bj1C,EAAM08D,sBAAsB,CAACznB,EAAM+oB,EACrC,EACF,GAEOrqC,EAAQ54D,MAAM,CAAG,GACxB44D,EAAQlqC,OAAO,CAAC,SAAUwrD,CAAI,EAC5Bj1C,EAAM08D,sBAAsB,CAACznB,EAAMnnD,EACrC,GAEF,MACF,CAEA,IAAIyuE,EAAS72E,EAAI62E,MAAM,CAClBA,IACHA,EAAS,IAAI/5F,GAAOw6F,MAAM,CAC1Bt3E,EAAI62E,MAAM,CAAGA,GAGfzuE,EAAKvkB,KAAK,CAAC,SAAUukB,CAAI,EAEvB,IAAImwE,EAAmBz7F,GAAOyb,IAAI,CAACyQ,yBAAyB,CAC1DlsB,GAAOyb,IAAI,CAAC0M,eAAe,CACzBjF,EAAIgN,mBAAmB,IAEzB5E,EAAK4E,mBAAmB,IAE1BlwB,GAAOyb,IAAI,CAAC6T,sBAAsB,CAAChE,EAAMmwE,GACzC1B,EAAOx7B,aAAa,CAACjzC,GACrBpI,EAAIpe,GAAG,CAAC,QAAS,IACjBoe,EAAIlB,IAAI,CAAC,cAAe,CACtBsJ,KAAMA,CACR,GACIpI,EAAIgiC,KAAK,EAAIhoD,MAAMC,OAAO,CAACqgC,EAAMk+D,YAAY,GAC/Cl+D,EAAMk+D,YAAY,CAAC7nG,IAAI,CAACqvB,EAE5B,EACF,EASAy4E,oBAAqB,SAAUrwE,CAAI,EACjC,IAAI52B,EAAS,IAAI,CAACA,MAAM,CACpBknG,EAAY,CAAC,EAWjB,MAVA,CACE,kBACA,eACD,CAAC30E,OAAO,CAAC,SAAU7E,CAAI,EACtB,IAAIy5E,EAAWnnG,CAAM,CAAC0tB,EAAK,CACvBy5E,GAAYA,EAAS/B,QAAQ,GAC/B,IAAI,CAACI,sBAAsB,CAAC2B,EAAUvwE,GACtCswE,CAAS,CAACx5E,EAAK,CAAGy5E,EAEtB,EAAG,IAAI,EACAD,CACT,EAOApvC,oBAAqB,WACnB,IAAI3uC,EAAM,IAAI,CAACnpB,MAAM,CAACwuD,UAAU,CAAExuD,EAAS,IAAI,CAACA,MAAM,CACtDmpB,EAAI4pC,SAAS,GACT,IAAI,CAACgE,QAAQ,EACf,KAAI,CAACG,OAAO,CAAG,IAAI,CAACsB,cAAc,CAAC,IAAI,CAACtB,OAAO,CAAE,IAAI,CAACH,QAAQ,GAIhE/2D,EAAOkxD,YAAY,CAAClxD,EAAOwuD,UAAU,EACrC,IAAI,CAACw3C,UAAU,CAAG,GAElB,IAAI9lE,EAAW,IAAI,CAACg3B,OAAO,EAAI,IAAI,CAACA,OAAO,CAACrzD,MAAM,CAAG,EACnD,IAAI,CAACq0D,sBAAsB,CAAC,IAAI,CAAChB,OAAO,EACxC,KACF,GAAI,CAACh3B,GAAY,IAAI,CAACi4B,eAAe,CAACj4B,GAAW,CAC/ClgC,EAAOstB,IAAI,CAAC,eAKZttB,EAAO+S,gBAAgB,GACvB,MACF,CAEA,IAAI6jB,EAAO,IAAI,CAACwhC,UAAU,CAACl4B,GAE3BtJ,EAAKlkB,SAAS,GAEd1S,EAAOstB,IAAI,CAAC,sBAAuB,CAAEsJ,KAAMA,CAAK,GAGhD,IAAIswE,EAAY,IAAI,CAACD,mBAAmB,CAACrwE,GACrCkS,EAAQ,IAAI,CAChB,IAAI,CAACk+D,YAAY,CAAG,EAAE,CACtB,IAAIvqC,EAAU,EAAE,CAChBz8D,EAAOyS,aAAa,CAAC,SAAU+b,CAAG,EAC5BA,EAAI42E,QAAQ,EAAI52E,EAAIymC,oBAAoB,CAACr+B,EAAM,GAAM,MACvDkS,EAAM08D,sBAAsB,CAACh3E,EAAKoI,GAClC6lC,EAAQt9D,IAAI,CAACqvB,GAEjB,GAEAxuB,EAAOstB,IAAI,CAAC,cAAe,CACzBsJ,KAAMA,EACN6lC,QAASA,EACTgL,WAAY,IAAI,CAACu/B,YAAY,CAC7BE,UAAWA,CACb,GACA,OAAO,IAAI,CAACF,YAAY,CAExBhnG,EAAO+S,gBAAgB,GACvB,IAAI,CAAC6jD,YAAY,GAGjB52D,EAAOstB,IAAI,CAAC,eAAgB,CAAEsJ,KAAMA,CAAK,EAC3C,CACF","sources":["webpack://_N_E/","webpack://_N_E/./src/useCanvas.ts","webpack://_N_E/./src/useTools.ts","webpack://_N_E/./src/CanvasTools.tsx","webpack://_N_E/./src/AppFooter.tsx","webpack://_N_E/./src/useWarrior.ts","webpack://_N_E/./src/fabricUtils.ts","webpack://_N_E/./src/imageProcessing.worker.ts","webpack://_N_E/./src/useImageWorker.ts","webpack://_N_E/./src/useSettings.ts","webpack://_N_E/./src/imageUtils.ts","webpack://_N_E/./src/ToolsProvider.tsx","webpack://_N_E/./src/CanvasBackdrop.tsx","webpack://_N_E/./src/CanvasProvider.tsx","webpack://_N_E/./src/CanvasInteractions.tsx","webpack://_N_E/./src/CanvasToggle.tsx","webpack://_N_E/./src/WarriorSelector.tsx","webpack://_N_E/./src/WarriorProvider.tsx","webpack://_N_E/./src/useEnvironment.ts","webpack://_N_E/./src/useSkin.ts","webpack://_N_E/./src/Material.tsx","webpack://_N_E/./src/Materials.tsx","webpack://_N_E/./src/WarriorViewer.tsx","webpack://_N_E/./src/EnvironmentSelector.tsx","webpack://_N_E/./src/EnvironmentExposure.tsx","webpack://_N_E/./src/AnimationSelector.tsx","webpack://_N_E/./src/EnvironmentProvider.tsx","webpack://_N_E/./src/SkinProvider.tsx","webpack://_N_E/./src/MaterialSelector.tsx","webpack://_N_E/./src/Canvas.tsx","webpack://_N_E/./src/useImageLoader.ts","webpack://_N_E/./src/ColorCanvas.tsx","webpack://_N_E/./src/MetallicCanvas.tsx","webpack://_N_E/./src/MaterialCanvases.tsx","webpack://_N_E/./src/ImageLoaderProvider.tsx","webpack://_N_E/./src/pages/index.tsx","webpack://_N_E/./src/useModelViewer.ts","webpack://_N_E/./vendor/fabric/fabric.js","webpack://_N_E/ignored|C:\\Users\\exoge\\Projects\\t2-model-skinner\\vendor\\fabric|jsdom","webpack://_N_E/ignored|C:\\Users\\exoge\\Projects\\t2-model-skinner\\vendor\\fabric|jsdom/lib/jsdom/living/generated/utils","webpack://_N_E/ignored|C:\\Users\\exoge\\Projects\\t2-model-skinner\\vendor\\fabric|jsdom/lib/jsdom/utils","webpack://_N_E/"],"sourcesContent":["\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/\",\n function () {\n return require(\"private-next-pages/index.tsx\");\n }\n ]);\n if(module.hot) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/\"])\n });\n }\n ","import React, { useContext } from \"react\";\r\nimport { fabric } from \"fabric\";\r\n\r\nexport interface CanvasInfo {\r\n canvas: fabric.Canvas;\r\n notifyChange: () => void;\r\n isDrawingMode: boolean;\r\n setDrawingMode: (isDrawingMode: boolean) => void;\r\n undo: () => void;\r\n redo: () => void;\r\n canUndo: boolean;\r\n canRedo: boolean;\r\n}\r\n\r\ninterface CanvasContextValue {\r\n canvases: Record;\r\n registerCanvas: (canvasId: string, canvasInfo: CanvasInfo) => void;\r\n unregisterCanvas: (canvasId: string) => void;\r\n}\r\n\r\nconst CanvasContext = React.createContext(null);\r\nCanvasContext.displayName = \"CanvasContext\";\r\n\r\nexport { CanvasContext };\r\n\r\nfunction useCanvas(canvasId: string | null): CanvasInfo;\r\nfunction useCanvas(): CanvasContextValue;\r\n\r\nfunction useCanvas(canvasId?: string | null) {\r\n const context = useContext(CanvasContext);\r\n if (!context) {\r\n throw new Error(\"No CanvasContext.Provider\");\r\n }\r\n if (typeof canvasId === \"undefined\") {\r\n return context;\r\n } else if (canvasId == null) {\r\n return {};\r\n } else {\r\n return context.canvases[canvasId] ?? {};\r\n }\r\n}\r\n\r\nexport default useCanvas;\r\n","import React, { useContext } from \"react\";\r\nimport { fabric } from \"fabric\";\r\n\r\ninterface ToolsContextValue {\r\n activeCanvas: string | null;\r\n activeCanvasType: string;\r\n setActiveCanvasType: (canvasType: string) => void;\r\n selectedObjects: Array;\r\n brushSize: number;\r\n setBrushSize: (brushSize: number) => void;\r\n brushColor: number;\r\n setBrushColor: (brushColor: number) => void;\r\n hueRotate: number | null;\r\n setHueRotate: (hueRotate: number) => void;\r\n saturation: number | null;\r\n setSaturation: (saturation: number) => void;\r\n brightness: number | null;\r\n setBrightness: (brightness: number) => void;\r\n layerMode: string;\r\n setLayerMode: (layerMode: string) => void;\r\n deleteSelection: () => void;\r\n undo: () => void;\r\n redo: () => void;\r\n canUndo: boolean;\r\n canRedo: boolean;\r\n addImages: (imageUrls: string[]) => void;\r\n duplicate: () => void;\r\n sendBackward: () => void;\r\n bringForward: () => void;\r\n lockSelection: () => void;\r\n unlockSelection: () => void;\r\n exportSkin: ({\r\n name,\r\n format,\r\n }: {\r\n name: string;\r\n format: string;\r\n }) => Promise;\r\n lockedObjects: Set;\r\n backgroundColor: string;\r\n setBackgroundColor: (backgroundColor: string) => void;\r\n selectedMaterialIndex: number;\r\n setSelectedMaterialIndex: (materialIndex: number) => void;\r\n selectedFrameIndex: number;\r\n setSelectedFrameIndex: (\r\n frameIndex: number | ((frameIndex: number) => number)\r\n ) => void;\r\n textureSize: [number, number];\r\n hasMetallic: boolean;\r\n hasAnimation: boolean;\r\n frameCount: number;\r\n}\r\n\r\nconst ToolsContext = React.createContext(null);\r\nToolsContext.displayName = \"ToolsContext\";\r\n\r\nexport { ToolsContext };\r\n\r\nexport default function useTools() {\r\n const context = useContext(ToolsContext);\r\n if (!context) {\r\n throw new Error(\"No ToolsContext.Provider\");\r\n }\r\n return context;\r\n}\r\n","import { InputHTMLAttributes, useEffect, useRef, useState } from \"react\";\r\nimport useCanvas from \"./useCanvas\";\r\nimport useTools from \"./useTools\";\r\nimport { usePopper } from \"react-popper\";\r\nimport Slider from \"rc-slider\";\r\nimport { RiFileCopyFill } from \"react-icons/ri\";\r\nimport { FaTrashAlt, FaLock, FaUnlock } from \"react-icons/fa\";\r\nimport { GoArrowUp, GoArrowDown } from \"react-icons/go\";\r\nimport { GiArrowCursor } from \"react-icons/gi\";\r\nimport { IoMdBrush } from \"react-icons/io\";\r\nimport { ImPlus, ImUndo2, ImRedo2, ImContrast } from \"react-icons/im\";\r\n\r\nexport default function CanvasTools() {\r\n const nameInputRef = useRef(null);\r\n const fileInputRef = useRef(null);\r\n const fileTypeRef = useRef(null);\r\n const {\r\n activeCanvas,\r\n backgroundColor,\r\n setBackgroundColor,\r\n selectedObjects,\r\n lockedObjects,\r\n lockSelection,\r\n unlockSelection,\r\n bringForward,\r\n sendBackward,\r\n duplicate,\r\n deleteSelection,\r\n undo,\r\n redo,\r\n canUndo,\r\n canRedo,\r\n brushColor,\r\n setBrushColor,\r\n brushSize,\r\n setBrushSize,\r\n hueRotate,\r\n setHueRotate,\r\n saturation,\r\n setSaturation,\r\n brightness,\r\n setBrightness,\r\n layerMode,\r\n setLayerMode,\r\n activeCanvasType,\r\n addImages,\r\n exportSkin,\r\n } = useTools();\r\n const { canvas, isDrawingMode, setDrawingMode } = useCanvas(activeCanvas);\r\n const [isMac, setIsMac] = useState(false);\r\n const commandKeyPrefix = isMac ? \"⌘\" : \"Ctrl \";\r\n const shiftKeySymbol = \"⇧\";\r\n\r\n // Brush popup\r\n const [referenceElement, setReferenceElement] = useState(\r\n null\r\n );\r\n const [popperElement, setPopperElement] = useState(null);\r\n const [arrowElement, setArrowElement] = useState(null);\r\n const [isBrushToolsOpen, setBrushToolsOpen] = useState(false);\r\n const [isFilterToolsOpen, setFilterToolsOpen] = useState(false);\r\n const { styles, attributes } = usePopper(referenceElement, popperElement, {\r\n modifiers: [\r\n { name: \"arrow\", options: { element: arrowElement } },\r\n {\r\n name: \"offset\",\r\n options: {\r\n offset: [0, 10],\r\n },\r\n },\r\n ],\r\n });\r\n\r\n const isSelectionLocked = selectedObjects.length\r\n ? selectedObjects.every((object) => lockedObjects.has(object))\r\n : false;\r\n\r\n const handleBackgroundColorChange: InputHTMLAttributes[\"onChange\"] =\r\n (event) => {\r\n setBackgroundColor(event.target.value);\r\n };\r\n\r\n useEffect(() => {\r\n if (navigator.platform && navigator.platform.startsWith(\"Mac\")) {\r\n setIsMac(true);\r\n } else if (navigator.userAgent.match(/\\(Macintosh;/)) {\r\n setIsMac(true);\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (popperElement) {\r\n popperElement.focus();\r\n }\r\n }, [popperElement]);\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n {activeCanvasType === \"color\" ? (\r\n <>\r\n
{\r\n const imageUrl = await new Promise
(\r\n (resolve, reject) => {\r\n const inputFile = event.target.files?.[0];\r\n if (inputFile) {\r\n const reader = new FileReader();\r\n reader.addEventListener(\"load\", (event) => {\r\n resolve(event.target?.result as string);\r\n });\r\n reader.readAsDataURL(inputFile);\r\n } else {\r\n reject(new Error(\"No input file provided.\"));\r\n }\r\n }\r\n );\r\n addImages([imageUrl]);\r\n }}\r\n type=\"file\"\r\n accept=\".png, image/png\"\r\n hidden\r\n />\r\n \r\n\r\n \r\n\r\n {isFilterToolsOpen ? (\r\n {\r\n const newFocusElement = event.relatedTarget;\r\n const isFocusLeaving =\r\n !newFocusElement ||\r\n !event.currentTarget.contains(newFocusElement);\r\n if (isFocusLeaving) {\r\n setFilterToolsOpen(false);\r\n }\r\n }}\r\n {...attributes.popper}\r\n >\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {\r\n if (Array.isArray(value)) {\r\n value = value[0];\r\n }\r\n setHueRotate(value / 180);\r\n }}\r\n trackStyle={{\r\n height: 8,\r\n background: \"#03fccf\",\r\n }}\r\n handleStyle={{\r\n width: 20,\r\n height: 20,\r\n marginTop: -6,\r\n borderColor: \"#03fccf\",\r\n background: \"rgb(5, 69, 76)\",\r\n // background: `rgb(${brushColor}, ${brushColor}, ${brushColor})`,\r\n opacity: 1,\r\n }}\r\n railStyle={{\r\n height: 8,\r\n border: \"1px solid #555\",\r\n background: \"rgba(255, 255, 255, 0.3)\",\r\n }}\r\n />\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n {\r\n if (Array.isArray(value)) {\r\n value = value[0];\r\n }\r\n setSaturation(value / 100);\r\n }}\r\n trackStyle={{\r\n height: 8,\r\n background: \"#03fccf\",\r\n }}\r\n handleStyle={{\r\n width: 20,\r\n height: 20,\r\n marginTop: -6,\r\n borderColor: \"#03fccf\",\r\n background: \"rgb(5, 69, 76)\",\r\n // background: `rgb(${brushColor}, ${brushColor}, ${brushColor})`,\r\n opacity: 1,\r\n }}\r\n railStyle={{\r\n height: 8,\r\n border: \"1px solid #555\",\r\n background: \"rgba(255, 255, 255, 0.3)\",\r\n }}\r\n />\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n {\r\n if (Array.isArray(value)) {\r\n value = value[0];\r\n }\r\n setBrightness(value / 100);\r\n }}\r\n trackStyle={{\r\n height: 8,\r\n background: \"#03fccf\",\r\n }}\r\n handleStyle={{\r\n width: 20,\r\n height: 20,\r\n marginTop: -6,\r\n borderColor: \"#03fccf\",\r\n background: \"rgb(5, 69, 76)\",\r\n // background: `rgb(${brushColor}, ${brushColor}, ${brushColor})`,\r\n opacity: 1,\r\n }}\r\n railStyle={{\r\n height: 8,\r\n border: \"1px solid #555\",\r\n background: \"rgba(255, 255, 255, 0.3)\",\r\n }}\r\n />\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n ) : null}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n >\r\n ) : null}\r\n\r\n {activeCanvasType === \"metallic\" ? (\r\n <>\r\n \r\n \r\n\r\n {isBrushToolsOpen ? (\r\n {\r\n const newFocusElement = event.relatedTarget;\r\n const isFocusLeaving =\r\n !newFocusElement ||\r\n !event.currentTarget.contains(newFocusElement);\r\n if (isFocusLeaving) {\r\n setBrushToolsOpen(false);\r\n }\r\n }}\r\n {...attributes.popper}\r\n >\r\n
\r\n
\r\n
\r\n
\r\n {\r\n if (Array.isArray(value)) {\r\n value = value[0];\r\n }\r\n setBrushColor(value);\r\n }}\r\n handleStyle={{\r\n width: 20,\r\n height: 20,\r\n marginTop: -6,\r\n borderColor: \"rgb(20, 105, 241)\",\r\n background: `rgb(${brushColor}, ${brushColor}, ${brushColor})`,\r\n opacity: 1,\r\n }}\r\n railStyle={{\r\n height: 8,\r\n border: \"1px solid #555\",\r\n background:\r\n \"linear-gradient(to right, black 0%, white 100%)\",\r\n }}\r\n />\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n {\r\n if (Array.isArray(value)) {\r\n value = value[0];\r\n }\r\n setBrushSize(value);\r\n }}\r\n handleStyle={{\r\n width: 20,\r\n height: 20,\r\n marginTop: -6,\r\n borderColor: \"#03fccf\",\r\n background: \"rgb(5, 69, 76)\",\r\n // background: `rgb(${brushColor}, ${brushColor}, ${brushColor})`,\r\n opacity: 1,\r\n }}\r\n railStyle={{\r\n height: 8,\r\n border: \"1px solid #555\",\r\n background: \"rgba(255, 255, 255, 0.3)\",\r\n }}\r\n />\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n ) : null}\r\n >\r\n ) : null}\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n","import { FaGithub } from \"react-icons/fa\";\r\n\r\nexport default function AppFooter() {\r\n return (\r\n \r\n );\r\n}\r\n","import React, { useContext } from \"react\";\r\n\r\ntype WarriorContextValue = {\r\n actualModel: string;\r\n selectedModel: string;\r\n setSelectedModel: (selectedModel: string) => void;\r\n selectedModelType: string;\r\n selectedAnimation: string | null;\r\n selectedModelUrl: string;\r\n setSelectedAnimation: (selectedAnimation: string | null) => void;\r\n animationPaused: boolean;\r\n setAnimationPaused: (\r\n animationPaused: boolean | ((animationPaused: boolean) => boolean)\r\n ) => void;\r\n skinImageUrls: Record;\r\n defaultSkinImageUrls: Record;\r\n setSkinImageUrls: (\r\n value:\r\n | Record\r\n | ((\r\n prevSkinImageUrls: Record\r\n ) => Record)\r\n ) => void;\r\n selectedSkinType: string | null;\r\n setSelectedSkinType: (selectedSkinType: string | null) => void;\r\n selectedSkin: string | null;\r\n setSelectedSkin: (selectedSkin: string | null) => void;\r\n setSelectedModelType: (selectedModelType: string) => void;\r\n};\r\n\r\nconst WarriorContext = React.createContext(null);\r\nWarriorContext.displayName = \"WarriorContext\";\r\n\r\nexport { WarriorContext };\r\n\r\nexport default function useWarrior() {\r\n const context = useContext(WarriorContext);\r\n if (!context) {\r\n throw new Error(\"No WarriorContext.Provider\");\r\n }\r\n return context;\r\n}\r\n","import { fabric } from \"fabric\";\r\n\r\nexport function createFabricImage(url: string) {\r\n return new Promise((resolve) =>\r\n fabric.Image.fromURL(url, resolve, {\r\n crossOrigin: \"anonymous\",\r\n })\r\n );\r\n}\r\n","export default function Worker_fn() {\n return new Worker(__webpack_public_path__ + \"static/chunks/imageProcessing.worker-e73713bf981eb595.worker.js\");\n}\n","import { useEffect, useMemo, useRef } from \"react\";\r\nimport * as Comlink from \"comlink\";\r\nimport Worker from \"worker-loader!./imageProcessing.worker\";\r\nimport type { ImageFunctions } from \"./imageProcessing.worker\";\r\n\r\nexport default function useImageWorker() {\r\n const workerRef = useRef(null);\r\n const functionsRef = useRef\r\n > | null>(null);\r\n\r\n const value = useMemo(() => {\r\n const getFunctions = () => {\r\n return functionsRef.current;\r\n };\r\n return {\r\n async combineColorAndAlphaImageUrls(...args) {\r\n const functions = await getFunctions();\r\n return functions?.combineColorAndAlphaImageUrls(...args);\r\n },\r\n async removeAlphaFromArrayBuffer(...args) {\r\n const functions = await getFunctions();\r\n return functions?.removeAlphaFromArrayBuffer(...args);\r\n },\r\n async convertArrayBufferAlphaToGrayscale(...args) {\r\n const functions = await getFunctions();\r\n return functions?.convertArrayBufferAlphaToGrayscale(...args);\r\n },\r\n async convertGrayscaleImageUrlToMetallicRoughness(...args) {\r\n const functions = await getFunctions();\r\n return functions?.convertGrayscaleImageUrlToMetallicRoughness(...args);\r\n },\r\n } as ImageFunctions;\r\n }, []);\r\n\r\n useEffect(() => {\r\n const worker = new Worker();\r\n const functions = Comlink.wrap(worker);\r\n\r\n workerRef.current = worker;\r\n functionsRef.current = functions;\r\n\r\n return () => {\r\n functions[Comlink.releaseProxy]();\r\n worker.terminate();\r\n };\r\n }, []);\r\n\r\n return value;\r\n}\r\n","export default function useSettings() {\r\n return {\r\n canvasPadding: 64,\r\n basePath: process.env.NODE_ENV === \"production\" ? \"/t2-model-skinner\" : \"\",\r\n };\r\n}\r\n","import { PNG } from \"pngjs/browser\";\r\nimport getStream from \"get-stream\";\r\n\r\nexport function arrayBufferToBase64(arrayBuffer: ArrayBuffer) {\r\n let base64 = \"\";\r\n const encodings =\r\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\r\n\r\n const bytes = new Uint8Array(arrayBuffer);\r\n const byteLength = bytes.byteLength;\r\n const byteRemainder = byteLength % 3;\r\n const mainLength = byteLength - byteRemainder;\r\n\r\n let a, b, c, d;\r\n let chunk;\r\n\r\n // Main loop deals with bytes in chunks of 3\r\n for (let i = 0; i < mainLength; i = i + 3) {\r\n // Combine the three bytes into a single integer\r\n chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\r\n\r\n // Use bitmasks to extract 6-bit segments from the triplet\r\n a = (chunk & 16515072) >> 18; // 16515072 = (2^6 - 1) << 18\r\n b = (chunk & 258048) >> 12; // 258048 = (2^6 - 1) << 12\r\n c = (chunk & 4032) >> 6; // 4032 = (2^6 - 1) << 6\r\n d = chunk & 63; // 63 = 2^6 - 1\r\n\r\n // Convert the raw binary segments to the appropriate ASCII encoding\r\n base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d];\r\n }\r\n\r\n // Deal with the remaining bytes and padding\r\n if (byteRemainder == 1) {\r\n chunk = bytes[mainLength];\r\n\r\n a = (chunk & 252) >> 2; // 252 = (2^6 - 1) << 2\r\n\r\n // Set the 4 least significant bits to zero\r\n b = (chunk & 3) << 4; // 3 = 2^2 - 1\r\n\r\n base64 += encodings[a] + encodings[b] + \"==\";\r\n } else if (byteRemainder == 2) {\r\n chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1];\r\n\r\n a = (chunk & 64512) >> 10; // 64512 = (2^6 - 1) << 10\r\n b = (chunk & 1008) >> 4; // 1008 = (2^6 - 1) << 4\r\n\r\n // Set the 2 least significant bits to zero\r\n c = (chunk & 15) << 2; // 15 = 2^4 - 1\r\n\r\n base64 += encodings[a] + encodings[b] + encodings[c] + \"=\";\r\n }\r\n\r\n return base64;\r\n}\r\n\r\nexport async function rgbaToArrayBuffer(\r\n rgba: Uint8Array,\r\n {\r\n width,\r\n height,\r\n }: {\r\n width: number;\r\n height: number;\r\n }\r\n) {\r\n const png = new PNG({\r\n width,\r\n height,\r\n inputHasAlpha: true,\r\n });\r\n png.data = rgba;\r\n png.pack();\r\n const arrayBuffer = await getStream.buffer(png);\r\n return arrayBuffer;\r\n}\r\n\r\nexport function arrayBufferToImageUrl(arrayBuffer: ArrayBuffer) {\r\n const base64 = arrayBufferToBase64(arrayBuffer);\r\n return `data:image/png;base64,${base64}`;\r\n}\r\n\r\nexport async function imageUrlToArrayBuffer(url: string) {\r\n const response = await fetch(url);\r\n if (response.ok) {\r\n const arrayBuffer = await response.arrayBuffer();\r\n return arrayBuffer;\r\n } else {\r\n throw new Error(`Failed to load image URL: ${url}`);\r\n }\r\n}\r\n\r\nexport async function arrayBufferToRgba(arrayBuffer: ArrayBuffer) {\r\n const png = await new Promise((resolve, reject) =>\r\n new PNG().parse(arrayBuffer, (err, data) => {\r\n if (err) {\r\n reject(err);\r\n } else {\r\n resolve(data);\r\n }\r\n })\r\n );\r\n return { rgba: png.data, width: png.width, height: png.height };\r\n}\r\n\r\nexport async function setGrayscaleFromAlpha(rgba: Uint8Array) {\r\n const length = rgba.length;\r\n for (let i = 0; i < length; i += 4) {\r\n const alpha = rgba[i + 3];\r\n rgba[i] = alpha;\r\n rgba[i + 1] = alpha;\r\n rgba[i + 2] = alpha;\r\n rgba[i + 3] = 255;\r\n }\r\n}\r\n\r\nexport async function setAlphaFromGrayscale(\r\n rgba: Uint8Array,\r\n grayscaleRgba: Uint8Array\r\n) {\r\n const length = rgba.length;\r\n // Modify image to map white pixels on the metallic canvas\r\n // to the alpha channel.\r\n for (let i = 0; i < length; i += 4) {\r\n rgba[i + 3] = Math.max(1, grayscaleRgba[i]);\r\n }\r\n}\r\n\r\nexport async function setAlphaToMax(rgba: Uint8Array) {\r\n const length = rgba.length;\r\n for (let i = 0; i < length; i += 4) {\r\n rgba[i + 3] = 255;\r\n }\r\n}\r\n\r\nexport function setMetallicFromGrayscale(rgba: Uint8Array) {\r\n const length = rgba.length;\r\n for (let i = 0; i < length; i += 4) {\r\n const grayscale = rgba[i];\r\n // Red meanings nothing, set to 0.\r\n rgba[i] = 0;\r\n // Green maps to roughness. We want more metallic to be less rough.\r\n rgba[i + 1] = grayscale > 0 ? 255 - Math.min(grayscale * 2 + 64, 255) : 255;\r\n // Blue and alpha values should already be correct.\r\n rgba[i + 2] = grayscale ? Math.min(grayscale * 1 + 64, 255) : 0;\r\n }\r\n}\r\n\r\nexport async function imageUrlToRgba(imageUrl: string) {\r\n const arrayBuffer = await imageUrlToArrayBuffer(imageUrl);\r\n const { rgba, width, height } = await arrayBufferToRgba(arrayBuffer);\r\n return { rgba, width, height };\r\n}\r\n\r\ntype ImageSize = {\r\n width: number;\r\n height: number;\r\n};\r\n\r\nexport async function rgbaToImageUrl(\r\n rgba: Uint8Array,\r\n { width, height }: ImageSize\r\n) {\r\n const arrayBuffer = await rgbaToArrayBuffer(rgba, {\r\n width,\r\n height,\r\n });\r\n const imageUrl = arrayBufferToImageUrl(arrayBuffer);\r\n return imageUrl;\r\n}\r\n\r\nexport async function combineColorAndAlphaImageUrls({\r\n colorImageUrl,\r\n metallicImageUrl,\r\n}: {\r\n colorImageUrl: string;\r\n metallicImageUrl: string;\r\n}) {\r\n const [{ rgba, width, height }, { rgba: metallicRgba }] = await Promise.all([\r\n imageUrlToRgba(colorImageUrl),\r\n imageUrlToRgba(metallicImageUrl),\r\n ]);\r\n setAlphaFromGrayscale(rgba, metallicRgba);\r\n const outputImageUrl = await rgbaToImageUrl(rgba, { width, height });\r\n return outputImageUrl;\r\n}\r\n\r\nexport async function removeAlphaFromArrayBuffer(arrayBuffer: ArrayBuffer) {\r\n const { rgba, width, height } = await arrayBufferToRgba(arrayBuffer);\r\n setAlphaToMax(rgba);\r\n const outputImageUrl = await rgbaToImageUrl(rgba, { width, height });\r\n return outputImageUrl;\r\n}\r\n\r\nexport async function convertArrayBufferAlphaToGrayscale(\r\n arrayBuffer: ArrayBuffer\r\n) {\r\n const { rgba, width, height } = await arrayBufferToRgba(arrayBuffer);\r\n setGrayscaleFromAlpha(rgba);\r\n const outputImageUrl = await rgbaToImageUrl(rgba, { width, height });\r\n return outputImageUrl;\r\n}\r\n\r\nexport async function convertGrayscaleImageUrlToMetallicRoughness(\r\n imageUrl: string\r\n) {\r\n const { rgba, width, height } = await imageUrlToRgba(imageUrl);\r\n setMetallicFromGrayscale(rgba);\r\n const outputImageUrl = await rgbaToImageUrl(rgba, { width, height });\r\n return outputImageUrl;\r\n}\r\n","import { ReactNode, useCallback, useEffect, useMemo, useState } from \"react\";\r\nimport getConfig from \"next/config\";\r\nimport { fabric } from \"fabric\";\r\nimport { ToolsContext } from \"./useTools\";\r\nimport useCanvas from \"./useCanvas\";\r\nimport useWarrior from \"./useWarrior\";\r\nimport { createFabricImage } from \"./fabricUtils\";\r\nimport useImageWorker from \"./useImageWorker\";\r\nimport { MaterialDefinition } from \"./Material\";\r\nimport useSettings from \"./useSettings\";\r\nimport { imageUrlToArrayBuffer } from \"./imageUtils\";\r\n\r\nconst { publicRuntimeConfig } = getConfig();\r\n\r\nconst { materials } = publicRuntimeConfig;\r\n\r\nfunction lockObject(object: fabric.Object) {\r\n object.lockMovementX = true;\r\n object.lockMovementY = true;\r\n object.lockScalingX = true;\r\n object.lockScalingY = true;\r\n object.lockRotation = true;\r\n}\r\n\r\nfunction unlockObject(object: fabric.Object) {\r\n object.lockMovementX = false;\r\n object.lockMovementY = false;\r\n object.lockScalingX = false;\r\n object.lockScalingY = false;\r\n object.lockRotation = false;\r\n}\r\n\r\nfunction isActiveSelection(\r\n object: fabric.Object\r\n): object is fabric.ActiveSelection {\r\n return object.type === \"activeSelection\";\r\n}\r\n\r\ntype ObjectFilters = {\r\n HueRotation?: number;\r\n Saturation?: number;\r\n Brightness?: number;\r\n};\r\n\r\nexport default function ToolsProvider({ children }: { children: ReactNode }) {\r\n const { actualModel, selectedModelType } = useWarrior();\r\n const [selectedMaterialIndex, setSelectedMaterialIndex] = useState(0);\r\n const [selectedFrameIndex, setSelectedFrameIndex] = useState(0);\r\n const materialDefs = materials[actualModel];\r\n const materialDef = materialDefs[selectedMaterialIndex] ?? null;\r\n\r\n const frameCount = materialDef.frameCount ?? 1;\r\n const hasAnimation = frameCount > 1;\r\n\r\n const textureSize = useMemo(\r\n () => materialDef.size ?? [512, 512],\r\n [materialDef]\r\n );\r\n\r\n const hasMetallic = !(\r\n materialDef.metallicFactor === 0 && materialDef.roughnessFactor === 1\r\n );\r\n\r\n const [activeCanvasType, setActiveCanvasType] = useState(\"color\");\r\n\r\n if (!hasMetallic && activeCanvasType === \"metallic\") {\r\n setActiveCanvasType(\"color\");\r\n }\r\n\r\n if (selectedFrameIndex >= frameCount) {\r\n setSelectedFrameIndex(0);\r\n }\r\n\r\n useEffect(() => {\r\n setSelectedFrameIndex(0);\r\n }, [materialDef]);\r\n\r\n const [backgroundColor, setBackgroundColor] = useState(\"magenta\");\r\n const [lockedObjects, setLockedObjects] = useState(\r\n () => new Set()\r\n );\r\n const [brushColor, setBrushColor] = useState(200);\r\n const [brushSize, setBrushSize] = useState(10);\r\n const [filterMap, setFilterMap] = useState(\r\n () => new Map()\r\n );\r\n const [selectedObjects, setSelectedObjects] = useState(\r\n () => []\r\n );\r\n\r\n const activeCanvas = materialDef\r\n ? `${materialDef.name}:${activeCanvasType}:${selectedFrameIndex}`\r\n : null;\r\n const metallicCanvasId = materialDef\r\n ? `${materialDef.name}:metallic:${selectedFrameIndex}`\r\n : null;\r\n const { canvases } = useCanvas();\r\n const { canvas, notifyChange, undo, redo, canUndo, canRedo } =\r\n useCanvas(activeCanvas);\r\n const { canvas: metallicCanvas } = useCanvas(metallicCanvasId);\r\n const [isDrawingMode, setDrawingMode] = useState(false);\r\n const { combineColorAndAlphaImageUrls } = useImageWorker();\r\n const { canvasPadding } = useSettings();\r\n const [filterChanges, setFilterChanges] = useState<\r\n Array<[fabric.Object, ObjectFilters]>\r\n >(() => []);\r\n const [layerMode, setLayerMode] = useState(\"BaseLayer\");\r\n\r\n if (selectedObjects.length) {\r\n if (layerMode !== \"SelectedLayer\") {\r\n setLayerMode(\"SelectedLayer\");\r\n }\r\n } else {\r\n if (layerMode === \"SelectedLayer\") {\r\n setLayerMode(\"BaseLayer\");\r\n }\r\n }\r\n\r\n const getFilter = (name: keyof ObjectFilters) => {\r\n let applyObjects = selectedObjects;\r\n if (layerMode === \"AllLayers\") {\r\n applyObjects = canvas?._objects ?? [];\r\n } else if (layerMode === \"BaseLayer\") {\r\n applyObjects = canvas?._objects.slice(0, 1) ?? [];\r\n }\r\n if (applyObjects.length) {\r\n const getValue = (i: number) =>\r\n (filterMap.get(applyObjects[i]) ?? {})[name] ?? 0;\r\n const firstValue = getValue(0);\r\n if (\r\n applyObjects\r\n .slice(1)\r\n .every((applyObject, i) => getValue(i + 1) === firstValue)\r\n ) {\r\n return firstValue;\r\n }\r\n return null;\r\n } else {\r\n return 0;\r\n }\r\n };\r\n\r\n const hueRotate = getFilter(\"HueRotation\");\r\n const saturation = getFilter(\"Saturation\");\r\n const brightness = getFilter(\"Brightness\");\r\n\r\n const setFilter = useCallback(\r\n (name: keyof ObjectFilters, value: number) => {\r\n const filterChanges: Array<[fabric.Object, ObjectFilters]> = [];\r\n const newFilterMap = new Map(filterMap);\r\n let applyObjects = selectedObjects;\r\n if (layerMode === \"AllLayers\") {\r\n applyObjects = canvas?._objects ?? [];\r\n } else if (layerMode === \"BaseLayer\") {\r\n applyObjects = canvas?._objects.slice(0, 1) ?? [];\r\n }\r\n for (const applyObject of applyObjects) {\r\n const existingFilters = filterMap.get(applyObject) ?? {};\r\n const newFilters = { ...existingFilters, [name]: value };\r\n newFilterMap.set(applyObject, newFilters);\r\n filterChanges.push([applyObject, newFilters]);\r\n }\r\n setFilterMap(newFilterMap);\r\n setFilterChanges(filterChanges);\r\n },\r\n [canvas, layerMode, filterMap, selectedObjects]\r\n );\r\n\r\n const setHueRotate = useCallback(\r\n (value: number) => setFilter(\"HueRotation\", value),\r\n [setFilter]\r\n );\r\n\r\n const setSaturation = useCallback(\r\n (value: number) => setFilter(\"Saturation\", value),\r\n [setFilter]\r\n );\r\n\r\n const setBrightness = useCallback(\r\n (value: number) => setFilter(\"Brightness\", value),\r\n [setFilter]\r\n );\r\n\r\n useEffect(() => {\r\n if (!filterChanges.length) {\r\n return;\r\n }\r\n for (const [selectedObject, newFilters] of filterChanges) {\r\n if (selectedObject instanceof fabric.Image) {\r\n selectedObject.filters = [];\r\n for (const key in newFilters) {\r\n const filterValue = newFilters[key as keyof ObjectFilters] ?? 0;\r\n if (filterValue !== 0) {\r\n switch (key) {\r\n case \"HueRotation\":\r\n selectedObject.filters.push(\r\n // @ts-expect-error @types/fabric does not include HueRotation.\r\n new fabric.Image.filters.HueRotation({\r\n rotation: filterValue,\r\n })\r\n );\r\n break;\r\n case \"Saturation\":\r\n selectedObject.filters.push(\r\n new fabric.Image.filters.Saturation({\r\n saturation: filterValue,\r\n })\r\n );\r\n break;\r\n case \"Brightness\":\r\n selectedObject.filters.push(\r\n new fabric.Image.filters.Brightness({\r\n brightness: filterValue,\r\n })\r\n );\r\n break;\r\n }\r\n }\r\n }\r\n selectedObject.applyFilters();\r\n }\r\n }\r\n setFilterChanges([]);\r\n if (notifyChange) {\r\n notifyChange();\r\n }\r\n }, [filterChanges, notifyChange]);\r\n\r\n const lockSelection = useCallback(() => {\r\n if (selectedObjects.length) {\r\n setLockedObjects((lockedObjects) => {\r\n const newLockedObjects = new Set(lockedObjects);\r\n for (const selectedObject of selectedObjects) {\r\n newLockedObjects.add(selectedObject);\r\n lockObject(selectedObject);\r\n }\r\n return newLockedObjects;\r\n });\r\n }\r\n }, [selectedObjects]);\r\n\r\n const unlockSelection = useCallback(() => {\r\n if (selectedObjects.length) {\r\n setLockedObjects((lockedObjects) => {\r\n const newLockedObjects = new Set(lockedObjects);\r\n for (const selectedObject of selectedObjects) {\r\n newLockedObjects.delete(selectedObject);\r\n unlockObject(selectedObject);\r\n }\r\n return newLockedObjects;\r\n });\r\n }\r\n }, [selectedObjects]);\r\n\r\n const bringForward = useCallback(async () => {\r\n const object = canvas.getActiveObject();\r\n if (object) {\r\n canvas.bringForward(object, true);\r\n notifyChange();\r\n }\r\n }, [canvas, notifyChange]);\r\n\r\n const sendBackward = useCallback(async () => {\r\n const object = canvas.getActiveObject();\r\n if (object) {\r\n // Don't allow below base skin.\r\n if (canvas._objects[0] === object || canvas._objects[1] === object) {\r\n return;\r\n }\r\n canvas.sendBackwards(object, true);\r\n notifyChange();\r\n }\r\n }, [canvas, notifyChange]);\r\n\r\n const addImages = useCallback(\r\n async (imageUrls: string[]) => {\r\n let lastAddedImage;\r\n for (const imageUrl of imageUrls) {\r\n const image = await createFabricImage(imageUrl);\r\n if (!image.width || !image.height) {\r\n throw new Error(\"Zero-height image\");\r\n }\r\n const widthRatio = image.width / textureSize[0];\r\n const heightRatio = image.height / textureSize[1];\r\n if (widthRatio > 1 || heightRatio > 1) {\r\n let scale;\r\n if (widthRatio > heightRatio) {\r\n scale = 1 / widthRatio;\r\n } else {\r\n scale = 1 / heightRatio;\r\n }\r\n image.scaleX = scale;\r\n image.scaleY = scale;\r\n }\r\n if (activeCanvasType === \"metallic\") {\r\n if (!image.filters) {\r\n image.filters = [];\r\n }\r\n const grayscaleFilter = new fabric.Image.filters.Grayscale();\r\n image.filters.push(grayscaleFilter);\r\n image.applyFilters();\r\n }\r\n setDrawingMode(false);\r\n canvas.centerObject(image);\r\n canvas.add(image);\r\n lastAddedImage = image;\r\n }\r\n if (lastAddedImage) {\r\n canvas.setActiveObject(lastAddedImage);\r\n }\r\n },\r\n [canvas, activeCanvasType, textureSize]\r\n );\r\n\r\n const duplicate = useCallback(async () => {\r\n const object = canvas.getActiveObject();\r\n if (object) {\r\n const copy = await new Promise((resolve) =>\r\n object.clone(resolve)\r\n );\r\n copy.set({\r\n top: (copy.top ?? 0) + 20,\r\n left: (copy.left ?? 0) + 20,\r\n evented: true,\r\n });\r\n\r\n if (isActiveSelection(copy)) {\r\n copy.canvas = canvas;\r\n copy.forEachObject((object) => {\r\n canvas.add(object);\r\n });\r\n copy.setCoords();\r\n }\r\n\r\n canvas.discardActiveObject();\r\n canvas.add(copy);\r\n canvas.setActiveObject(copy);\r\n }\r\n }, [canvas]);\r\n\r\n const deleteSelection = useCallback(async () => {\r\n const objects = canvas.getActiveObjects();\r\n canvas.discardActiveObject();\r\n canvas.remove(...objects);\r\n canvas.requestRenderAll();\r\n // forceUpdateRef.current();\r\n }, [canvas]);\r\n\r\n const exportSkin = useCallback(\r\n async ({ format, name = \"\" }: { format: string; name: string }) => {\r\n const { savePngFile, saveZipFile, createZipFile } = await import(\r\n \"./exportUtils\"\r\n );\r\n\r\n name = name.trim() || \"MyCustomSkin\";\r\n\r\n const materialExports = await Promise.all(\r\n materialDefs\r\n .filter(\r\n (materialDef: MaterialDefinition) =>\r\n materialDef &&\r\n !materialDef.hidden &&\r\n materialDef.selectable !== false\r\n )\r\n .map((materialDef: MaterialDefinition) => {\r\n const frameCount = materialDef.frameCount ?? 1;\r\n const frames = new Array(frameCount).fill(null);\r\n return frames.map(async (_, frameIndex) => {\r\n const colorCanvas =\r\n canvases[`${materialDef.name}:color:${frameIndex}`]?.canvas;\r\n const metallicCanvas =\r\n canvases[`${materialDef.name}:metallic:${frameIndex}`]?.canvas;\r\n\r\n const textureSize = materialDef.size ?? [512, 512];\r\n let outputImageUrl;\r\n\r\n const colorImageUrl = colorCanvas.toDataURL({\r\n top: canvasPadding,\r\n left: canvasPadding,\r\n width: textureSize[0],\r\n height: textureSize[1],\r\n });\r\n\r\n if (metallicCanvas) {\r\n const metallicImageUrl = metallicCanvas.toDataURL({\r\n top: canvasPadding,\r\n left: canvasPadding,\r\n width: textureSize[0],\r\n height: textureSize[1],\r\n });\r\n outputImageUrl = await combineColorAndAlphaImageUrls({\r\n colorImageUrl,\r\n metallicImageUrl,\r\n });\r\n } else {\r\n outputImageUrl = colorImageUrl;\r\n }\r\n\r\n let filename;\r\n switch (selectedModelType) {\r\n case \"player\":\r\n filename = `${name}.${actualModel}.png`;\r\n break;\r\n case \"weapon\":\r\n case \"vehicle\":\r\n if (materialDef) {\r\n const frameZeroFile = materialDef.file ?? materialDef.name;\r\n if (frameCount > 1) {\r\n const match = frameZeroFile.match(/^(.+)(\\d\\d)$/);\r\n if (match) {\r\n const baseName = match[1];\r\n filename = `${baseName}${frameIndex\r\n .toString()\r\n .padStart(2, \"0\")}.png`;\r\n } else {\r\n throw new Error(\"Unexpected animation filename\");\r\n }\r\n } else {\r\n filename = `${frameZeroFile}.png`;\r\n }\r\n } else if (selectedModelType === \"weapon\") {\r\n filename = `weapon_${actualModel}.png`;\r\n } else {\r\n filename = `${actualModel}.png`;\r\n }\r\n }\r\n\r\n return { imageUrl: outputImageUrl, filename };\r\n });\r\n })\r\n .flat()\r\n );\r\n\r\n switch (format) {\r\n case \"png\": {\r\n const { imageUrl, filename } = materialExports[selectedMaterialIndex];\r\n savePngFile(imageUrl, filename);\r\n break;\r\n }\r\n case \"vl2\": {\r\n const files = await Promise.all(\r\n materialExports.map(async (materialExport) => ({\r\n data: await imageUrlToArrayBuffer(materialExport.imageUrl),\r\n name: materialExport.filename,\r\n }))\r\n );\r\n const zip = createZipFile(files);\r\n const camelCaseName = actualModel.replace(\r\n /(?:^([a-z])|_([a-z]))/g,\r\n (match, a, b) => (a || b).toUpperCase()\r\n );\r\n let zipFileName = \"\";\r\n switch (selectedModelType) {\r\n case \"player\":\r\n zipFileName = `zPlayerSkin-${name}.vl2`;\r\n break;\r\n case \"weapon\":\r\n zipFileName = `zWeapon${camelCaseName}-${name}.vl2`;\r\n break;\r\n case \"vehicle\":\r\n zipFileName = `z${camelCaseName}-${name}.vl2`;\r\n break;\r\n }\r\n await saveZipFile(zip, zipFileName);\r\n }\r\n }\r\n return;\r\n },\r\n [\r\n actualModel,\r\n canvasPadding,\r\n canvases,\r\n combineColorAndAlphaImageUrls,\r\n materialDefs,\r\n selectedMaterialIndex,\r\n selectedModelType,\r\n ]\r\n );\r\n\r\n const context = useMemo(\r\n () => ({\r\n activeCanvas,\r\n activeCanvasType,\r\n setActiveCanvasType,\r\n backgroundColor,\r\n setBackgroundColor,\r\n lockedObjects,\r\n setLockedObjects,\r\n brushColor,\r\n setBrushColor,\r\n brushSize,\r\n setBrushSize,\r\n hueRotate,\r\n setHueRotate,\r\n saturation,\r\n setSaturation,\r\n brightness,\r\n setBrightness,\r\n layerMode,\r\n setLayerMode,\r\n selectedObjects,\r\n lockSelection,\r\n unlockSelection,\r\n bringForward,\r\n sendBackward,\r\n addImages,\r\n duplicate,\r\n deleteSelection,\r\n undo,\r\n redo,\r\n canUndo,\r\n canRedo,\r\n exportSkin,\r\n isDrawingMode,\r\n setDrawingMode,\r\n selectedMaterialIndex,\r\n setSelectedMaterialIndex,\r\n textureSize,\r\n hasMetallic,\r\n selectedFrameIndex,\r\n setSelectedFrameIndex,\r\n hasAnimation,\r\n frameCount,\r\n }),\r\n [\r\n activeCanvas,\r\n activeCanvasType,\r\n backgroundColor,\r\n lockedObjects,\r\n brushColor,\r\n brushSize,\r\n hueRotate,\r\n saturation,\r\n brightness,\r\n layerMode,\r\n setHueRotate,\r\n setSaturation,\r\n setBrightness,\r\n selectedObjects,\r\n lockSelection,\r\n unlockSelection,\r\n bringForward,\r\n sendBackward,\r\n addImages,\r\n duplicate,\r\n deleteSelection,\r\n undo,\r\n redo,\r\n canUndo,\r\n canRedo,\r\n exportSkin,\r\n isDrawingMode,\r\n selectedMaterialIndex,\r\n textureSize,\r\n hasMetallic,\r\n selectedFrameIndex,\r\n hasAnimation,\r\n frameCount,\r\n ]\r\n );\r\n\r\n useEffect(() => {\r\n if (canvas) {\r\n const handleSelectionUpdated = () => {\r\n setSelectedObjects(canvas.getActiveObjects());\r\n };\r\n canvas.on(\"selection:cleared\", handleSelectionUpdated);\r\n canvas.on(\"selection:updated\", handleSelectionUpdated);\r\n canvas.on(\"selection:created\", handleSelectionUpdated);\r\n\r\n handleSelectionUpdated();\r\n\r\n return () => {\r\n canvas.off(\"selection:cleared\", handleSelectionUpdated);\r\n canvas.off(\"selection:updated\", handleSelectionUpdated);\r\n canvas.off(\"selection:created\", handleSelectionUpdated);\r\n };\r\n }\r\n }, [canvas]);\r\n\r\n useEffect(() => {\r\n if (metallicCanvas) {\r\n metallicCanvas.freeDrawingBrush.width = brushSize;\r\n }\r\n }, [metallicCanvas, brushSize]);\r\n\r\n useEffect(() => {\r\n if (metallicCanvas) {\r\n metallicCanvas.freeDrawingBrush.color = `rgb(${brushColor}, ${brushColor}, ${brushColor})`;\r\n }\r\n }, [metallicCanvas, brushColor]);\r\n\r\n return (\r\n {children}\r\n );\r\n}\r\n","import useTools from \"./useTools\";\r\nimport useSettings from \"./useSettings\";\r\n\r\nexport default function CanvasBackdrop() {\r\n const { backgroundColor, textureSize } = useTools();\r\n const { canvasPadding } = useSettings();\r\n\r\n return textureSize ? (\r\n \r\n ) : null;\r\n}\r\n","import { ReactNode, useCallback, useMemo, useState } from \"react\";\r\nimport { CanvasContext, CanvasInfo } from \"./useCanvas\";\r\n\r\nexport default function CanvasProvider({ children }: { children: ReactNode }) {\r\n const [canvases, setCanvases] = useState>({});\r\n\r\n const registerCanvas = useCallback(\r\n (canvasId: string, canvasInfo: CanvasInfo) => {\r\n setCanvases((canvases) => {\r\n return { ...canvases, [canvasId]: canvasInfo };\r\n });\r\n },\r\n []\r\n );\r\n\r\n const unregisterCanvas = useCallback((canvasId: string) => {\r\n setCanvases((canvases) => {\r\n const { [canvasId]: canvas, ...rest } = canvases;\r\n return rest;\r\n });\r\n }, []);\r\n\r\n const context = useMemo(() => {\r\n return {\r\n canvases,\r\n registerCanvas,\r\n unregisterCanvas,\r\n };\r\n }, [canvases, registerCanvas, unregisterCanvas]);\r\n\r\n return (\r\n {children}\r\n );\r\n}\r\n","import { ReactNode, useRef } from \"react\";\r\nimport useCanvas from \"./useCanvas\";\r\nimport useTools from \"./useTools\";\r\n\r\nexport default function CanvasInteractions({\r\n children,\r\n}: {\r\n children: ReactNode;\r\n}) {\r\n const ref = useRef(null);\r\n const {\r\n activeCanvas,\r\n bringForward,\r\n sendBackward,\r\n duplicate,\r\n deleteSelection,\r\n addImages,\r\n undo,\r\n redo,\r\n } = useTools();\r\n const { canvas, notifyChange, setDrawingMode } = useCanvas(activeCanvas);\r\n\r\n const nudge = async ({ top = 0, left = 0 } = {}) => {\r\n const objects = canvas.getActiveObjects();\r\n for (const object of objects) {\r\n object.top = (object.top ?? 0) + top;\r\n object.left = (object.left ?? 0) + left;\r\n }\r\n notifyChange();\r\n };\r\n\r\n return (\r\n {\r\n event.preventDefault();\r\n if (ref.current) {\r\n ref.current.focus();\r\n }\r\n const { items } = event.dataTransfer;\r\n const images = Array.from(items).filter(\r\n (item) => item.kind === \"file\" && item.type.match(/^image\\//)\r\n );\r\n const imageUrls = await Promise.all(\r\n images\r\n .map(async (droppedImageFile) => {\r\n const file = droppedImageFile.getAsFile();\r\n if (!file) {\r\n throw new Error(\"Not a file.\");\r\n }\r\n const reader = new FileReader();\r\n const imageUrl = await new Promise((resolve, reject) => {\r\n reader.onload = async (event) => {\r\n if (event.target && typeof event.target.result === \"string\") {\r\n resolve(event.target.result);\r\n } else {\r\n reject(new Error(\"Failed to load image data.\"));\r\n }\r\n };\r\n reader.readAsDataURL(file);\r\n });\r\n return imageUrl;\r\n })\r\n .filter(Boolean)\r\n );\r\n\r\n await addImages(imageUrls);\r\n }}\r\n onKeyDown={async (event) => {\r\n const target = event.target as HTMLElement;\r\n if (target.nodeName === \"INPUT\" || target.nodeName === \"TEXTAREA\") {\r\n return;\r\n }\r\n if (event.ctrlKey || event.metaKey) {\r\n switch (event.key) {\r\n case \"z\":\r\n if (event.altKey) {\r\n return;\r\n } else if (event.shiftKey) {\r\n event.preventDefault();\r\n redo();\r\n return;\r\n } else {\r\n event.preventDefault();\r\n undo();\r\n return;\r\n }\r\n case \"y\":\r\n if (event.altKey || event.shiftKey) {\r\n return;\r\n } else {\r\n event.preventDefault();\r\n redo();\r\n return;\r\n }\r\n }\r\n }\r\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\r\n return;\r\n }\r\n switch (event.key) {\r\n case \"Backspace\":\r\n case \"Delete\": {\r\n event.preventDefault();\r\n await deleteSelection();\r\n break;\r\n }\r\n case \"ArrowLeft\": {\r\n event.preventDefault();\r\n await nudge({ left: -1 });\r\n break;\r\n }\r\n case \"ArrowRight\": {\r\n event.preventDefault();\r\n await nudge({ left: 1 });\r\n break;\r\n }\r\n case \"ArrowUp\": {\r\n event.preventDefault();\r\n await nudge({ top: -1 });\r\n break;\r\n }\r\n case \"ArrowDown\": {\r\n event.preventDefault();\r\n await nudge({ top: 1 });\r\n break;\r\n }\r\n case \"d\": {\r\n event.preventDefault();\r\n await duplicate();\r\n break;\r\n }\r\n case \"f\": {\r\n event.preventDefault();\r\n await bringForward();\r\n break;\r\n }\r\n case \"b\": {\r\n event.preventDefault();\r\n await sendBackward();\r\n break;\r\n }\r\n case \"p\": {\r\n if (activeCanvas === \"metallic\") {\r\n event.preventDefault();\r\n setDrawingMode(true);\r\n }\r\n break;\r\n }\r\n case \"s\":\r\n if (activeCanvas === \"color\") {\r\n event.preventDefault();\r\n setDrawingMode(false);\r\n }\r\n break;\r\n }\r\n }}\r\n >\r\n {children}\r\n
\r\n );\r\n}\r\n","import { FaChevronLeft, FaChevronRight } from \"react-icons/fa\";\r\nimport useTools from \"./useTools\";\r\n\r\nexport default function CanvasToggle() {\r\n const {\r\n activeCanvasType,\r\n setActiveCanvasType,\r\n hasMetallic,\r\n hasAnimation,\r\n frameCount,\r\n selectedFrameIndex,\r\n setSelectedFrameIndex,\r\n } = useTools();\r\n\r\n return (\r\n <>\r\n \r\n \r\n {hasMetallic ? (\r\n \r\n ) : null}\r\n
\r\n {hasAnimation ? (\r\n \r\n \r\n \r\n {selectedFrameIndex + 1} / {frameCount}\r\n \r\n \r\n
\r\n ) : null}\r\n >\r\n );\r\n}\r\n","import getConfig from \"next/config\";\r\nimport useWarrior from \"./useWarrior\";\r\nimport { AiTwotoneFolderOpen } from \"react-icons/ai\";\r\nimport { useRef } from \"react\";\r\nimport useTools from \"./useTools\";\r\n\r\nconst { publicRuntimeConfig } = getConfig();\r\nconst { defaultSkins, customSkins, modelDefaults, materials } =\r\n publicRuntimeConfig;\r\n\r\nexport default function WarriorSelector() {\r\n const {\r\n selectedModel,\r\n setSelectedModel,\r\n selectedModelType,\r\n setSelectedModelType,\r\n selectedSkin,\r\n setSelectedSkin,\r\n setSelectedSkinType,\r\n actualModel,\r\n setSelectedAnimation,\r\n setSkinImageUrls,\r\n setAnimationPaused,\r\n } = useWarrior();\r\n const { selectedMaterialIndex, setSelectedMaterialIndex } = useTools();\r\n const materialDefs = materials[actualModel];\r\n const materialDef = materialDefs[selectedMaterialIndex];\r\n const fileInputRef = useRef(null);\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
{\r\n const imageUrl = await new Promise
((resolve, reject) => {\r\n const inputFile = event.target.files?.[0];\r\n if (inputFile) {\r\n const reader = new FileReader();\r\n reader.addEventListener(\"load\", (event) => {\r\n resolve(event.target?.result as string);\r\n });\r\n reader.readAsDataURL(inputFile);\r\n } else {\r\n reject(new Error(\"No input file provided.\"));\r\n }\r\n });\r\n setSelectedSkin(null);\r\n setSkinImageUrls({\r\n [materialDef.file ?? materialDef.name]: [imageUrl],\r\n });\r\n }}\r\n type=\"file\"\r\n accept=\".png, image/png\"\r\n hidden\r\n />\r\n \r\n
\r\n
\r\n );\r\n}\r\n","import { ReactNode, useEffect, useMemo, useState } from \"react\";\r\nimport getConfig from \"next/config\";\r\nimport useSettings from \"./useSettings\";\r\nimport { WarriorContext } from \"./useWarrior\";\r\nimport type { MaterialDefinition } from \"./Material\";\r\n\r\nconst { publicRuntimeConfig } = getConfig();\r\nconst { materials, modelDefaults } = publicRuntimeConfig;\r\nconst baseSkinPath = `https://exogen.github.io/t2-skins/skins`;\r\n\r\nfunction getFrameNames(frameZeroFile: string, frameCount: number) {\r\n if (frameCount < 2) {\r\n return [frameZeroFile];\r\n }\r\n const match = frameZeroFile.match(/^(.+)(\\d\\d)$/);\r\n if (match) {\r\n const baseName = match[1];\r\n const frames = new Array(frameCount).fill(null);\r\n return frames.map((_, i) => `${baseName}${i.toString().padStart(2, \"0\")}`);\r\n } else {\r\n throw new Error(\"Did not match expected frame format\");\r\n }\r\n}\r\n\r\nexport function getSkinImageUrls({\r\n basePath,\r\n actualModel,\r\n selectedModelType,\r\n selectedSkin,\r\n selectedSkinType,\r\n}: {\r\n basePath: string;\r\n actualModel: string;\r\n selectedModelType: string;\r\n selectedSkin: string | null;\r\n selectedSkinType: string | null;\r\n}): Record {\r\n const materialDefs = materials[actualModel];\r\n switch (selectedModelType) {\r\n case \"player\":\r\n switch (selectedSkinType) {\r\n case \"default\":\r\n return {\r\n base: [`${basePath}/textures/${selectedSkin}.${actualModel}.png`],\r\n };\r\n case \"custom\":\r\n return {\r\n base: [`${baseSkinPath}/${selectedSkin}.${actualModel}.png`],\r\n };\r\n }\r\n break;\r\n case \"weapon\":\r\n case \"vehicle\":\r\n return materialDefs.reduce(\r\n (\r\n skinImageUrls: Record,\r\n materialDef: MaterialDefinition\r\n ) => {\r\n if (materialDef) {\r\n const frameCount = materialDef.frameCount ?? 1;\r\n switch (selectedSkinType) {\r\n case \"default\":\r\n if (materialDef.hasDefault !== false) {\r\n skinImageUrls[materialDef.file ?? materialDef.name] =\r\n getFrameNames(\r\n materialDef.file ?? materialDef.name,\r\n frameCount\r\n ).map((name) => `${basePath}/textures/${name}.png`);\r\n }\r\n break;\r\n case \"custom\":\r\n skinImageUrls[materialDef.file ?? materialDef.name] =\r\n getFrameNames(\r\n materialDef.file ?? materialDef.name,\r\n frameCount\r\n ).map(\r\n (name) => `${baseSkinPath}/${selectedSkin}/${name}.png`\r\n );\r\n break;\r\n }\r\n }\r\n return skinImageUrls;\r\n },\r\n {}\r\n );\r\n }\r\n return {};\r\n}\r\n\r\nfunction getModelUrl(\r\n basePath: string,\r\n actualModel: string,\r\n selectedAnimation: string | null\r\n) {\r\n switch (actualModel) {\r\n default:\r\n return `${basePath}/${actualModel}${\r\n selectedAnimation ? \".anim\" : \"\"\r\n }.glb`;\r\n }\r\n}\r\n\r\n// const queryParamSeparator = \".\";\r\n\r\n// function parseQuerySelection(searchParams: URLSearchParams) {\r\n// const modelWithTypeFromUrl = searchParams.get(\"m\");\r\n// const skinWithTypeFromUrl = searchParams.get(\"s\");\r\n// let selectedModel;\r\n// let selectedModelType;\r\n// if (typeof modelWithTypeFromUrl === \"string\") {\r\n// [selectedModelType, selectedModel] =\r\n// modelWithTypeFromUrl.split(queryParamSeparator);\r\n// }\r\n// let selectedSkin;\r\n// let selectedSkinType;\r\n// if (typeof skinWithTypeFromUrl === \"string\") {\r\n// [selectedSkinType, selectedSkin] =\r\n// skinWithTypeFromUrl.split(queryParamSeparator);\r\n// }\r\n// return {\r\n// selectedModel: selectedModel || null,\r\n// selectedModelType: selectedModelType || null,\r\n// selectedSkin: selectedSkin || null,\r\n// selectedSkinType: selectedSkinType || null,\r\n// };\r\n// }\r\n\r\nexport default function WarriorProvider({ children }: { children: ReactNode }) {\r\n const [selectedModel, setSelectedModel] = useState(\"lmale\");\r\n const [selectedModelType, setSelectedModelType] = useState(\"player\");\r\n const [selectedSkin, setSelectedSkin] = useState(\r\n \"Blood Eagle\"\r\n );\r\n const [selectedSkinType, setSelectedSkinType] = useState(\r\n \"default\"\r\n );\r\n const [selectedAnimation, setSelectedAnimation] = useState(\r\n null\r\n );\r\n const [animationPaused, setAnimationPaused] = useState(false);\r\n const { basePath } = useSettings();\r\n const actualModel = selectedModel === \"hfemale\" ? \"hmale\" : selectedModel;\r\n const selectedModelUrl = getModelUrl(\r\n basePath,\r\n actualModel,\r\n selectedAnimation\r\n );\r\n\r\n const [skinImageUrls, setSkinImageUrls] = useState>(\r\n () =>\r\n getSkinImageUrls({\r\n basePath,\r\n actualModel,\r\n selectedModelType,\r\n selectedSkin,\r\n selectedSkinType,\r\n })\r\n );\r\n\r\n const defaultSkinImageUrls = useMemo(\r\n () =>\r\n getSkinImageUrls({\r\n basePath,\r\n actualModel,\r\n selectedModelType,\r\n selectedSkin: modelDefaults[actualModel],\r\n selectedSkinType: \"default\",\r\n }),\r\n [actualModel, basePath, selectedModelType]\r\n );\r\n\r\n const context = useMemo(() => {\r\n return {\r\n selectedModel,\r\n setSelectedModel,\r\n selectedModelType,\r\n setSelectedModelType,\r\n actualModel,\r\n selectedModelUrl,\r\n animationPaused,\r\n setAnimationPaused,\r\n selectedSkin,\r\n setSelectedSkin,\r\n selectedSkinType,\r\n setSelectedSkinType,\r\n selectedAnimation,\r\n setSelectedAnimation,\r\n skinImageUrls,\r\n setSkinImageUrls,\r\n defaultSkinImageUrls,\r\n };\r\n }, [\r\n selectedModel,\r\n setSelectedModel,\r\n selectedModelType,\r\n setSelectedModelType,\r\n actualModel,\r\n selectedModelUrl,\r\n animationPaused,\r\n setAnimationPaused,\r\n selectedSkin,\r\n setSelectedSkin,\r\n selectedSkinType,\r\n setSelectedSkinType,\r\n selectedAnimation,\r\n setSelectedAnimation,\r\n skinImageUrls,\r\n setSkinImageUrls,\r\n defaultSkinImageUrls,\r\n ]);\r\n\r\n useEffect(() => {\r\n if (selectedSkin) {\r\n setSkinImageUrls(\r\n getSkinImageUrls({\r\n basePath,\r\n actualModel,\r\n selectedModelType,\r\n selectedSkin,\r\n selectedSkinType,\r\n })\r\n );\r\n }\r\n }, [\r\n basePath,\r\n actualModel,\r\n selectedModelType,\r\n selectedSkin,\r\n selectedSkinType,\r\n ]);\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n","import React, { useContext } from \"react\";\r\n\r\ninterface EnvironmentContextValue {\r\n selectedEnvironment: string | null;\r\n setSelectedEnvironment: (selectedEnvironment: string | null) => void;\r\n showEnvironment: boolean;\r\n setShowEnvironment: (showEnvironment: boolean) => void;\r\n exposure: number;\r\n setExposure: (exposure: number) => void;\r\n environmentImageUrl: string | null;\r\n}\r\n\r\nconst EnvironmentContext = React.createContext(\r\n null\r\n);\r\nEnvironmentContext.displayName = \"EnvironmentContext\";\r\n\r\nexport { EnvironmentContext };\r\n\r\nexport default function useEnvironment() {\r\n const context = useContext(EnvironmentContext);\r\n if (!context) {\r\n throw new Error(\"No EnvironmentContext.Provider\");\r\n }\r\n return context;\r\n}\r\n","import React, { useContext } from \"react\";\r\n\r\nexport type SkinImages = {\r\n colorImageUrl?: string[];\r\n metallicImageUrl?: string[];\r\n};\r\n\r\nexport type MaterialSkins = Record;\r\n\r\ninterface SkinContextValue {\r\n materialSkins: MaterialSkins;\r\n getSkinImages: (materialFile: string) => SkinImages;\r\n setSkinImages: (materialFile: string, skinImages: SkinImages) => void;\r\n getColorImageUrl: (\r\n materialFile: string,\r\n frameIndex: number\r\n ) => string | undefined;\r\n setColorImageUrl: (\r\n materialFile: string,\r\n colorImageUrl: string,\r\n frameIndex: number\r\n ) => void;\r\n getMetallicImageUrl: (\r\n materialFile: string,\r\n frameIndex: number\r\n ) => string | undefined;\r\n setMetallicImageUrl: (\r\n materialFile: string,\r\n metallicImageUrl: string,\r\n frameIndex: number\r\n ) => void;\r\n}\r\n\r\nconst SkinContext = React.createContext(null);\r\nSkinContext.displayName = \"SkinContext\";\r\n\r\nexport { SkinContext };\r\n\r\nexport default function useSkin() {\r\n const context = useContext(SkinContext);\r\n if (!context) {\r\n throw new Error(\"No SkinContext.Provider\");\r\n }\r\n return context;\r\n}\r\n","import { useEffect } from \"react\";\r\nimport type { ModelViewerElement } from \"@google/model-viewer\";\r\nimport useSettings from \"./useSettings\";\r\nimport useSkin from \"./useSkin\";\r\nimport useModelViewer from \"./useModelViewer\";\r\n\r\n// const secondaryMaterialTextures: Record = {\r\n// disc: [\"textures/discshield2\"],\r\n// };\r\n\r\nexport type ModelMaterial = NonNullable<\r\n ModelViewerElement[\"model\"]\r\n>[\"materials\"][number];\r\n\r\nexport type MaterialDefinition = {\r\n index?: number;\r\n name: string;\r\n label?: string;\r\n file?: string;\r\n hasDefault?: boolean;\r\n size?: [number, number];\r\n hidden?: boolean;\r\n selectable?: boolean;\r\n alphaMode?: \"BLEND\" | \"MASK\" | \"OPAQUE\";\r\n alphaCutoff?: number;\r\n baseColorFactor?: [number, number, number, number];\r\n emissiveFactor?: [number, number, number];\r\n emissiveTexture?: boolean;\r\n metallicFactor?: number;\r\n roughnessFactor?: number;\r\n frameCount?: number;\r\n frameTimings?: number[];\r\n};\r\n\r\nfunction useTexture({\r\n material,\r\n materialDef,\r\n textureType,\r\n imageUrl,\r\n}: {\r\n material: ModelMaterial;\r\n materialDef?: MaterialDefinition;\r\n textureType: \"baseColorTexture\" | \"metallicRoughnessTexture\";\r\n imageUrl?: string[];\r\n}) {\r\n const { modelViewer } = useModelViewer();\r\n const { basePath } = useSettings();\r\n\r\n useEffect(() => {\r\n let stale = false;\r\n let animationFrame: ReturnType;\r\n\r\n const updateTexture = async () => {\r\n if (!materialDef || materialDef.hidden) {\r\n if (textureType === \"metallicRoughnessTexture\") {\r\n return;\r\n } else {\r\n material.setAlphaMode(\"BLEND\");\r\n material.pbrMetallicRoughness.setBaseColorFactor([0, 0, 0, 0]);\r\n }\r\n } else {\r\n const {\r\n alphaMode,\r\n alphaCutoff,\r\n baseColorFactor,\r\n emissiveFactor,\r\n emissiveTexture = false,\r\n metallicFactor = 1,\r\n roughnessFactor = 1,\r\n frameCount = 1,\r\n frameTimings,\r\n } = materialDef;\r\n let textureUrls =\r\n imageUrl ?? new Array(frameCount).fill(`${basePath}/white.png`);\r\n switch (textureType) {\r\n case \"baseColorTexture\":\r\n if (baseColorFactor) {\r\n material.pbrMetallicRoughness.setBaseColorFactor(baseColorFactor);\r\n }\r\n if (alphaMode) {\r\n material.setAlphaMode(alphaMode);\r\n }\r\n if (alphaCutoff) {\r\n material.setAlphaCutoff(alphaCutoff);\r\n }\r\n if (emissiveFactor) {\r\n material.setEmissiveFactor(emissiveFactor);\r\n }\r\n break;\r\n case \"metallicRoughnessTexture\":\r\n material.pbrMetallicRoughness.setMetallicFactor(metallicFactor);\r\n material.pbrMetallicRoughness.setRoughnessFactor(roughnessFactor);\r\n if (metallicFactor === 0 && roughnessFactor === 1) {\r\n textureUrls = new Array(frameCount).fill(`${basePath}/green.png`);\r\n }\r\n }\r\n const textures = await Promise.all(\r\n textureUrls.map((textureUrl) => modelViewer.createTexture(textureUrl))\r\n );\r\n if (!stale) {\r\n let frameIndex = 0;\r\n let frameProgress = 0;\r\n const frame: FrameRequestCallback = (timestamp) => {\r\n const frameTiming = frameTimings?.[frameIndex] ?? 1;\r\n const texture = textures[frameIndex];\r\n material.pbrMetallicRoughness[textureType].setTexture(texture);\r\n if (textureType === \"baseColorTexture\" && emissiveTexture) {\r\n material.emissiveTexture.setTexture(texture);\r\n }\r\n frameProgress += 1;\r\n if (frameCount > 1) {\r\n if (frameProgress >= frameTiming) {\r\n frameIndex = (frameIndex + 1) % frameCount;\r\n frameProgress = 0;\r\n }\r\n animationFrame = requestAnimationFrame(frame);\r\n }\r\n };\r\n animationFrame = requestAnimationFrame(frame);\r\n }\r\n }\r\n };\r\n\r\n updateTexture();\r\n\r\n return () => {\r\n stale = true;\r\n cancelAnimationFrame(animationFrame);\r\n };\r\n }, [basePath, modelViewer, material, materialDef, textureType, imageUrl]);\r\n}\r\n\r\ninterface MaterialProps {\r\n material: ModelMaterial;\r\n materialDef?: MaterialDefinition;\r\n}\r\n\r\nexport default function Material({ material, materialDef }: MaterialProps) {\r\n const { getSkinImages } = useSkin();\r\n const { colorImageUrl, metallicImageUrl } =\r\n getSkinImages(materialDef?.file ?? material.name) ?? {};\r\n\r\n useTexture({\r\n material,\r\n materialDef,\r\n textureType: \"baseColorTexture\",\r\n imageUrl: colorImageUrl,\r\n });\r\n useTexture({\r\n material,\r\n materialDef,\r\n textureType: \"metallicRoughnessTexture\",\r\n imageUrl: metallicImageUrl,\r\n });\r\n\r\n return null;\r\n}\r\n","import getConfig from \"next/config\";\r\nimport Material, { MaterialDefinition } from \"./Material\";\r\nimport useModelViewer from \"./useModelViewer\";\r\nimport useWarrior from \"./useWarrior\";\r\n\r\nconst { publicRuntimeConfig } = getConfig();\r\n\r\nconst { materials } = publicRuntimeConfig;\r\n\r\nexport default function Materials() {\r\n const { actualModel } = useWarrior();\r\n const { model } = useModelViewer();\r\n const materialDefs: MaterialDefinition[] = materials[actualModel];\r\n\r\n return (\r\n <>\r\n {model.materials.map((material, i) => {\r\n const materialDef =\r\n materialDefs.find((materialDef) => materialDef.index === i) ??\r\n materialDefs[i];\r\n return (\r\n \r\n );\r\n })}\r\n >\r\n );\r\n}\r\n","import dynamic from \"next/dynamic\";\r\nimport getConfig from \"next/config\";\r\nimport useEnvironment from \"./useEnvironment\";\r\nimport useWarrior from \"./useWarrior\";\r\nimport Materials from \"./Materials\";\r\n\r\nconst ModelViewer = dynamic(() => import(\"./ModelViewer\"), { ssr: false });\r\n\r\nconst { publicRuntimeConfig } = getConfig();\r\n\r\nconst { cameraOverrides } = publicRuntimeConfig;\r\n\r\nexport default function WarriorViewer() {\r\n const {\r\n selectedModel,\r\n selectedModelUrl,\r\n selectedModelType,\r\n selectedAnimation,\r\n animationPaused,\r\n } = useWarrior();\r\n const { environmentImageUrl, showEnvironment, exposure } = useEnvironment();\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n","import useEnvironment from \"./useEnvironment\";\r\n\r\nexport default function EnvironmentSelector() {\r\n const { selectedEnvironment, setSelectedEnvironment } = useEnvironment();\r\n\r\n return (\r\n <>\r\n \r\n \r\n >\r\n );\r\n}\r\n","import { ImBrightnessContrast } from \"react-icons/im\";\r\nimport useEnvironment from \"./useEnvironment\";\r\n\r\nexport default function EnvironmentExposure() {\r\n const { exposure, setExposure } = useEnvironment();\r\n\r\n return (\r\n <>\r\n \r\n {\r\n setExposure(parseFloat(event.target.value));\r\n }}\r\n />\r\n >\r\n );\r\n}\r\n","import { useMemo } from \"react\";\r\nimport getConfig from \"next/config\";\r\nimport { IoMdPlay, IoMdPause } from \"react-icons/io\";\r\nimport useWarrior from \"./useWarrior\";\r\n\r\nconst { publicRuntimeConfig } = getConfig();\r\nconst { animations, animationLabels, animationLabelOverrides } =\r\n publicRuntimeConfig;\r\n\r\nexport default function AnimationSelector() {\r\n const {\r\n actualModel,\r\n selectedModelType,\r\n selectedAnimation,\r\n setSelectedAnimation,\r\n animationPaused,\r\n setAnimationPaused,\r\n } = useWarrior();\r\n\r\n const animationList = useMemo(\r\n () => [\r\n ...(selectedModelType === \"player\" ? animations.global : []),\r\n ...(animations[actualModel] ?? []),\r\n ],\r\n [actualModel, selectedModelType]\r\n );\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n
\r\n >\r\n );\r\n}\r\n","import { ReactNode, useMemo, useState } from \"react\";\r\nimport { EnvironmentContext } from \"./useEnvironment\";\r\nimport useSettings from \"./useSettings\";\r\n\r\nexport default function EnvironmentProvider({\r\n children,\r\n}: {\r\n children: ReactNode;\r\n}) {\r\n const [selectedEnvironment, setSelectedEnvironment] = useState(\r\n null\r\n );\r\n const [showEnvironment, setShowEnvironment] = useState(false);\r\n const [exposure, setExposure] = useState(1);\r\n const { basePath } = useSettings();\r\n\r\n const context = useMemo(() => {\r\n const environmentImageUrl = selectedEnvironment\r\n ? `${basePath}/${selectedEnvironment}`\r\n : null;\r\n return {\r\n selectedEnvironment,\r\n setSelectedEnvironment,\r\n showEnvironment,\r\n setShowEnvironment,\r\n exposure,\r\n setExposure,\r\n environmentImageUrl,\r\n };\r\n }, [basePath, selectedEnvironment, showEnvironment, exposure]);\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n","import { ReactNode, useMemo, useState } from \"react\";\r\nimport { SkinContext, MaterialSkins, SkinImages } from \"./useSkin\";\r\n\r\nexport default function SkinProvider({ children }: { children: ReactNode }) {\r\n const [materialSkins, setMaterialSkins] = useState({});\r\n\r\n const setters = useMemo(\r\n () => ({\r\n setSkinImages(materialFile: string, skinImages: SkinImages) {\r\n setMaterialSkins((materialSkins) => {\r\n return {\r\n ...materialSkins,\r\n [materialFile]: skinImages,\r\n };\r\n });\r\n },\r\n setColorImageUrl(\r\n materialFile: string,\r\n colorImageUrl: string,\r\n frameIndex: number\r\n ) {\r\n setMaterialSkins((materialSkins) => {\r\n const newColorImageUrl = Array.from(\r\n materialSkins[materialFile]?.colorImageUrl ?? []\r\n );\r\n newColorImageUrl.splice(frameIndex, 1, colorImageUrl);\r\n return {\r\n ...materialSkins,\r\n [materialFile]: {\r\n ...materialSkins[materialFile],\r\n colorImageUrl: newColorImageUrl,\r\n },\r\n };\r\n });\r\n },\r\n setMetallicImageUrl(\r\n materialFile: string,\r\n metallicImageUrl: string,\r\n frameIndex: number\r\n ) {\r\n setMaterialSkins((materialSkins) => {\r\n const newMetallicImageUrl = Array.from(\r\n materialSkins[materialFile]?.metallicImageUrl ?? []\r\n );\r\n newMetallicImageUrl.splice(frameIndex, 1, metallicImageUrl);\r\n return {\r\n ...materialSkins,\r\n [materialFile]: {\r\n ...materialSkins[materialFile],\r\n metallicImageUrl: newMetallicImageUrl,\r\n },\r\n };\r\n });\r\n },\r\n }),\r\n []\r\n );\r\n\r\n const context = useMemo(() => {\r\n return {\r\n materialSkins,\r\n getSkinImages(materialFile: string) {\r\n return materialSkins[materialFile];\r\n },\r\n getColorImageUrl(materialFile: string, frameIndex: number) {\r\n return materialSkins[materialFile].colorImageUrl?.[frameIndex];\r\n },\r\n getMetallicImageUrl(materialFile: string, frameIndex: number) {\r\n return materialSkins[materialFile].metallicImageUrl?.[frameIndex];\r\n },\r\n ...setters,\r\n };\r\n }, [materialSkins, setters]);\r\n\r\n return (\r\n {children}\r\n );\r\n}\r\n","import getConfig from \"next/config\";\r\nimport useTools from \"./useTools\";\r\nimport useWarrior from \"./useWarrior\";\r\nimport { MaterialDefinition } from \"./Material\";\r\n\r\nconst { publicRuntimeConfig } = getConfig();\r\n\r\nconst { materials } = publicRuntimeConfig;\r\n\r\nexport default function MaterialSelector() {\r\n const { actualModel } = useWarrior();\r\n const { selectedMaterialIndex, setSelectedMaterialIndex } = useTools();\r\n const materialDefs: MaterialDefinition[] = materials[actualModel];\r\n\r\n return (\r\n \r\n );\r\n}\r\n","import { useCallback, useEffect, useRef, useState } from \"react\";\r\nimport useCanvas from \"./useCanvas\";\r\nimport useSettings from \"./useSettings\";\r\nimport useTools from \"./useTools\";\r\nimport { fabric } from \"fabric\";\r\nimport { createFabricImage } from \"./fabricUtils\";\r\n\r\ntype JSONSnapshot = ReturnType;\r\n\r\nfunction updateObjectControlOptions() {\r\n fabric.Object.prototype.set({\r\n transparentCorners: false,\r\n borderColor: \"#8afff1\",\r\n cornerSize: 9,\r\n cornerStyle: \"circle\",\r\n cornerColor: \"#8afff1\",\r\n cornerStrokeColor: \"#1c9f7c\",\r\n strokeWidth: 10,\r\n perPixelTargetFind: true,\r\n });\r\n}\r\n\r\nexport interface CanvasProps {\r\n canvasId: string;\r\n canvasType: \"color\" | \"metallic\";\r\n onChange: (canvas: fabric.Canvas) => void;\r\n baseImageUrl: string | null;\r\n textureSize: [number, number];\r\n defaultDrawingMode?: boolean;\r\n}\r\n\r\nexport default function Canvas({\r\n canvasId,\r\n onChange,\r\n baseImageUrl,\r\n textureSize,\r\n defaultDrawingMode = false,\r\n}: CanvasProps) {\r\n const canvasElementRef = useRef(null);\r\n const [canvas, setCanvas] = useState(null);\r\n const { activeCanvas } = useTools();\r\n const { canvasPadding } = useSettings();\r\n const { registerCanvas, unregisterCanvas } = useCanvas();\r\n const [isDrawingMode, setDrawingMode] = useState(defaultDrawingMode);\r\n const handleChangeRef = useRef();\r\n const trackChanges = useRef(true);\r\n const [undoHistory, setUndoHistory] = useState(() => []);\r\n const [redoHistory, setRedoHistory] = useState(() => []);\r\n\r\n const canUndo = undoHistory.length > 1;\r\n const canRedo = redoHistory.length > 0;\r\n\r\n const handleChange: CanvasProps[\"onChange\"] = useCallback((canvas) => {\r\n const handleChange = handleChangeRef.current;\r\n if (handleChange) {\r\n handleChange(canvas);\r\n }\r\n }, []);\r\n\r\n const undo = useCallback(async () => {\r\n if (!canvas) {\r\n return;\r\n }\r\n if (undoHistory.length > 1) {\r\n const [restoreState, currentState] = undoHistory.slice(-2);\r\n trackChanges.current = false;\r\n canvas.renderOnAddRemove = false;\r\n canvas.clear();\r\n canvas.loadFromJSON(restoreState, () => {\r\n canvas.renderAll();\r\n trackChanges.current = true;\r\n canvas.renderOnAddRemove = true;\r\n });\r\n setUndoHistory((undoHistory) => undoHistory.slice(0, -1));\r\n setRedoHistory((redoHistory) => [currentState, ...redoHistory]);\r\n }\r\n }, [canvas, undoHistory]);\r\n\r\n const redo = useCallback(() => {\r\n if (!canvas) {\r\n return;\r\n }\r\n if (redoHistory.length > 0) {\r\n const nextState = redoHistory[0];\r\n trackChanges.current = false;\r\n canvas.renderOnAddRemove = false;\r\n canvas.clear();\r\n canvas.loadFromJSON(nextState, () => {\r\n canvas.renderAll();\r\n trackChanges.current = true;\r\n canvas.renderOnAddRemove = true;\r\n });\r\n setUndoHistory((undoHistory) => [...undoHistory, nextState]);\r\n setRedoHistory((redoHistory) => redoHistory.slice(1));\r\n }\r\n }, [canvas, redoHistory]);\r\n\r\n useEffect(() => {\r\n handleChangeRef.current = onChange;\r\n }, [onChange]);\r\n\r\n const isActive = activeCanvas === canvasId;\r\n\r\n useEffect(() => {\r\n const options = {\r\n preserveObjectStacking: true,\r\n targetFindTolerance: 2,\r\n };\r\n updateObjectControlOptions();\r\n\r\n const canvas = new fabric.Canvas(canvasElementRef.current, options);\r\n\r\n let isSnapshotting = false;\r\n let changeTimer: ReturnType;\r\n\r\n const handleChangeWithCanvasArg = () => {\r\n handleChange(canvas);\r\n };\r\n\r\n const handleRender = () => {\r\n if (isSnapshotting) {\r\n return;\r\n }\r\n if (!trackChanges.current) {\r\n return;\r\n }\r\n clearTimeout(changeTimer);\r\n changeTimer = setTimeout(() => {\r\n const snapshot = snapshotCanvas();\r\n setUndoHistory((history) => [...history.slice(-5), snapshot]);\r\n setRedoHistory([]);\r\n }, 150);\r\n };\r\n\r\n const snapshotCanvas = () => {\r\n isSnapshotting = true;\r\n const snapshot = canvas.toJSON([\r\n \"lockMovementX\",\r\n \"lockMovementY\",\r\n \"lockRotation\",\r\n \"lockScalingX\",\r\n \"lockScalingY\",\r\n \"selectable\",\r\n \"hoverCursor\",\r\n \"moveCursor\",\r\n ]);\r\n isSnapshotting = false;\r\n return snapshot;\r\n };\r\n\r\n canvas.on(\"object:modified\", handleChangeWithCanvasArg);\r\n canvas.on(\"object:added\", handleChangeWithCanvasArg);\r\n canvas.on(\"object:removed\", handleChangeWithCanvasArg);\r\n canvas.on(\"after:render\", handleRender);\r\n\r\n setCanvas(canvas);\r\n\r\n return () => {\r\n clearTimeout(changeTimer);\r\n setCanvas(null);\r\n canvas.dispose();\r\n };\r\n }, [handleChange]);\r\n\r\n useEffect(() => {\r\n if (canvas) {\r\n canvas.isDrawingMode = isDrawingMode;\r\n }\r\n }, [canvas, isDrawingMode]);\r\n\r\n useEffect(() => {\r\n if (canvas && isActive) {\r\n canvas.calcOffset();\r\n }\r\n }, [canvas, isActive]);\r\n\r\n useEffect(() => {\r\n if (canvas) {\r\n registerCanvas(canvasId, {\r\n canvas,\r\n notifyChange: () => {\r\n canvas.renderAll();\r\n handleChange(canvas);\r\n },\r\n undo,\r\n redo,\r\n canUndo,\r\n canRedo,\r\n isDrawingMode,\r\n setDrawingMode,\r\n });\r\n return () => {\r\n unregisterCanvas(canvasId);\r\n };\r\n }\r\n }, [\r\n canvas,\r\n registerCanvas,\r\n unregisterCanvas,\r\n canvasId,\r\n handleChange,\r\n isDrawingMode,\r\n setDrawingMode,\r\n undo,\r\n redo,\r\n canUndo,\r\n canRedo,\r\n ]);\r\n\r\n useEffect(() => {\r\n if (canvas && textureSize) {\r\n trackChanges.current = false;\r\n canvas.clear();\r\n if (baseImageUrl) {\r\n let stale = false;\r\n const addImage = async () => {\r\n const image = await createFabricImage(baseImageUrl);\r\n if (!stale) {\r\n if (!image.width || !image.height) {\r\n throw new Error(\"Zero-height image\");\r\n }\r\n image.selectable = false;\r\n image.lockMovementX = true;\r\n image.lockMovementY = true;\r\n image.lockScalingX = true;\r\n image.lockScalingY = true;\r\n image.lockRotation = true;\r\n image.hoverCursor = \"default\";\r\n image.moveCursor = \"default\";\r\n const [expectedWidth, expectedHeight] = textureSize;\r\n const scaleX =\r\n image.width === expectedWidth ? 1 : expectedWidth / image.width;\r\n const scaleY =\r\n image.height === expectedHeight\r\n ? 1\r\n : expectedHeight / image.height;\r\n if (scaleX !== 1 || scaleY !== 1) {\r\n image.scaleX = scaleX;\r\n image.scaleY = scaleY;\r\n }\r\n canvas.centerObject(image);\r\n canvas.add(image);\r\n }\r\n trackChanges.current = true;\r\n canvas.requestRenderAll();\r\n };\r\n\r\n addImage();\r\n\r\n return () => {\r\n stale = true;\r\n };\r\n }\r\n }\r\n }, [canvas, baseImageUrl, textureSize]);\r\n\r\n return (\r\n \r\n \r\n
\r\n );\r\n}\r\n","import React, { useContext } from \"react\";\r\n\r\ninterface ImageLoaderContextValue {\r\n loadImage: (url: string) => Promise;\r\n}\r\n\r\nexport const ImageLoaderContext =\r\n React.createContext(null);\r\nImageLoaderContext.displayName = \"ImageLoaderContext\";\r\n\r\nexport default function useImageLoader() {\r\n const context = useContext(ImageLoaderContext);\r\n if (!context) {\r\n throw new Error(\"ImageLoaderContext.Provider not found!\");\r\n }\r\n return context;\r\n}\r\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\r\nimport Canvas, { CanvasProps } from \"./Canvas\";\r\nimport useSettings from \"./useSettings\";\r\nimport useSkin from \"./useSkin\";\r\nimport type { MaterialDefinition } from \"./Material\";\r\nimport useWarrior from \"./useWarrior\";\r\nimport useImageWorker from \"./useImageWorker\";\r\nimport useImageLoader from \"./useImageLoader\";\r\n\r\nconst defaultTextureSize = [512, 512] as [number, number];\r\n\r\nexport default function ColorCanvas({\r\n materialDef,\r\n frameIndex = 0,\r\n}: {\r\n materialDef: MaterialDefinition;\r\n frameIndex: number;\r\n}) {\r\n const { skinImageUrls, defaultSkinImageUrls } = useWarrior();\r\n const skinImageUrl =\r\n skinImageUrls[materialDef.file ?? materialDef.name]?.[frameIndex];\r\n const defaultSkinImageUrl =\r\n defaultSkinImageUrls[materialDef.file ?? materialDef.name]?.[frameIndex];\r\n const { setColorImageUrl } = useSkin();\r\n const { canvasPadding } = useSettings();\r\n const [noAlphaImageUrl, setNoAlphaImageUrl] = useState(null);\r\n const { removeAlphaFromArrayBuffer } = useImageWorker();\r\n const { loadImage } = useImageLoader();\r\n\r\n const textureSize = useMemo(\r\n () => materialDef.size ?? defaultTextureSize,\r\n [materialDef]\r\n );\r\n\r\n const handleChange = useCallback(\r\n async (canvas) => {\r\n const imageUrl = canvas.toDataURL({\r\n top: canvasPadding,\r\n left: canvasPadding,\r\n width: textureSize[0],\r\n height: textureSize[1],\r\n });\r\n setColorImageUrl(\r\n materialDef.file ?? materialDef.name,\r\n imageUrl,\r\n frameIndex\r\n );\r\n },\r\n [textureSize, canvasPadding, setColorImageUrl, materialDef, frameIndex]\r\n );\r\n\r\n useEffect(() => {\r\n if (skinImageUrl) {\r\n let stale = false;\r\n\r\n const generateImageUrl = async () => {\r\n let arrayBuffer;\r\n try {\r\n arrayBuffer = await loadImage(skinImageUrl);\r\n } catch (err) {\r\n if (materialDef.hasDefault !== false) {\r\n arrayBuffer = await loadImage(defaultSkinImageUrl);\r\n } else {\r\n return;\r\n }\r\n }\r\n const outputImageUrl = await removeAlphaFromArrayBuffer(arrayBuffer);\r\n if (!stale) {\r\n setNoAlphaImageUrl(outputImageUrl);\r\n }\r\n };\r\n\r\n generateImageUrl();\r\n\r\n return () => {\r\n stale = true;\r\n };\r\n } else {\r\n setNoAlphaImageUrl(null);\r\n }\r\n }, [\r\n materialDef,\r\n skinImageUrl,\r\n defaultSkinImageUrl,\r\n removeAlphaFromArrayBuffer,\r\n loadImage,\r\n ]);\r\n\r\n const canvasId = `${materialDef.name}:color:${frameIndex}`;\r\n\r\n return textureSize ? (\r\n \r\n ) : null;\r\n}\r\n","import { useCallback, useEffect, useRef, useMemo, useState } from \"react\";\r\nimport Canvas, { CanvasProps } from \"./Canvas\";\r\nimport useImageWorker from \"./useImageWorker\";\r\nimport useSettings from \"./useSettings\";\r\nimport type { MaterialDefinition } from \"./Material\";\r\nimport useSkin from \"./useSkin\";\r\nimport useWarrior from \"./useWarrior\";\r\nimport useImageLoader from \"./useImageLoader\";\r\n\r\nconst defaultTextureSize = [512, 512] as [number, number];\r\n\r\nexport default function MetallicCanvas({\r\n materialDef,\r\n frameIndex = 0,\r\n}: {\r\n materialDef: MaterialDefinition;\r\n frameIndex: number;\r\n}) {\r\n const { skinImageUrls, defaultSkinImageUrls } = useWarrior();\r\n const skinImageUrl =\r\n skinImageUrls[materialDef.file ?? materialDef.name]?.[frameIndex];\r\n const defaultSkinImageUrl =\r\n defaultSkinImageUrls[materialDef.file ?? materialDef.name]?.[frameIndex];\r\n const { setMetallicImageUrl } = useSkin();\r\n const { canvasPadding } = useSettings();\r\n const [alphaImageUrl, setAlphaImageUrl] = useState(null);\r\n const runningChangeHandlers = useRef(0);\r\n const {\r\n convertGrayscaleImageUrlToMetallicRoughness,\r\n convertArrayBufferAlphaToGrayscale,\r\n } = useImageWorker();\r\n const { loadImage } = useImageLoader();\r\n\r\n const textureSize = useMemo(\r\n () => materialDef.size ?? defaultTextureSize,\r\n [materialDef]\r\n );\r\n\r\n const handleChange = useCallback(\r\n async (canvas) => {\r\n runningChangeHandlers.current += 1;\r\n const imageUrl = canvas.toDataURL({\r\n top: canvasPadding,\r\n left: canvasPadding,\r\n width: textureSize[0],\r\n height: textureSize[1],\r\n });\r\n let outputImageUrl;\r\n try {\r\n outputImageUrl = await convertGrayscaleImageUrlToMetallicRoughness(\r\n imageUrl\r\n );\r\n } finally {\r\n runningChangeHandlers.current -= 1;\r\n }\r\n if (runningChangeHandlers.current === 0) {\r\n setMetallicImageUrl(\r\n materialDef.file ?? materialDef.name,\r\n outputImageUrl,\r\n frameIndex\r\n );\r\n }\r\n },\r\n [\r\n textureSize,\r\n canvasPadding,\r\n setMetallicImageUrl,\r\n convertGrayscaleImageUrlToMetallicRoughness,\r\n materialDef,\r\n frameIndex,\r\n ]\r\n );\r\n\r\n useEffect(() => {\r\n if (skinImageUrl) {\r\n let stale = false;\r\n\r\n const generateImageUrl = async () => {\r\n let arrayBuffer;\r\n try {\r\n arrayBuffer = await loadImage(skinImageUrl);\r\n } catch (err) {\r\n if (materialDef.hasDefault !== false) {\r\n arrayBuffer = await loadImage(defaultSkinImageUrl);\r\n } else {\r\n return;\r\n }\r\n }\r\n const outputImageUrl = await convertArrayBufferAlphaToGrayscale(\r\n arrayBuffer\r\n );\r\n if (!stale) {\r\n setAlphaImageUrl(outputImageUrl);\r\n }\r\n };\r\n\r\n generateImageUrl();\r\n\r\n return () => {\r\n stale = true;\r\n };\r\n } else {\r\n setAlphaImageUrl(null);\r\n }\r\n }, [\r\n materialDef,\r\n skinImageUrl,\r\n defaultSkinImageUrl,\r\n textureSize,\r\n convertArrayBufferAlphaToGrayscale,\r\n loadImage,\r\n ]);\r\n\r\n const canvasId = `${materialDef.name}:metallic:${frameIndex}`;\r\n\r\n return textureSize ? (\r\n \r\n ) : null;\r\n}\r\n","import React from \"react\";\r\nimport getConfig from \"next/config\";\r\nimport ColorCanvas from \"./ColorCanvas\";\r\nimport MetallicCanvas from \"./MetallicCanvas\";\r\nimport useWarrior from \"./useWarrior\";\r\nimport { MaterialDefinition } from \"./Material\";\r\n\r\nconst { publicRuntimeConfig } = getConfig();\r\n\r\nconst { materials } = publicRuntimeConfig;\r\n\r\nexport default function MaterialCanvases() {\r\n const { actualModel } = useWarrior();\r\n const materialDefs: MaterialDefinition[] = materials[actualModel];\r\n\r\n return (\r\n <>\r\n {materialDefs.map((materialDef) => {\r\n if (!materialDef) {\r\n return null;\r\n }\r\n const hasMetallic = !(\r\n materialDef.metallicFactor === 0 && materialDef.roughnessFactor === 1\r\n );\r\n const frameCount = materialDef.frameCount ?? 1;\r\n const frames = new Array(frameCount).fill(null);\r\n return (\r\n \r\n {frames.map((_, i) => (\r\n \r\n ))}\r\n {hasMetallic\r\n ? frames.map((_, i) => (\r\n \r\n ))\r\n : null}\r\n \r\n );\r\n })}\r\n >\r\n );\r\n}\r\n","import { useQueryClient } from \"@tanstack/react-query\";\r\nimport { ReactNode, useMemo } from \"react\";\r\nimport { ImageLoaderContext } from \"./useImageLoader\";\r\nimport { imageUrlToArrayBuffer } from \"./imageUtils\";\r\n\r\nexport default function ImageLoaderProvider({\r\n children,\r\n}: {\r\n children: ReactNode;\r\n}) {\r\n const queryClient = useQueryClient();\r\n const context = useMemo(() => {\r\n return {\r\n async loadImage(imageUrl: string) {\r\n if (imageUrl.startsWith(\"data:\")) {\r\n return imageUrlToArrayBuffer(imageUrl);\r\n } else {\r\n const arrayBuffer = await queryClient.fetchQuery({\r\n queryKey: [imageUrl],\r\n });\r\n return arrayBuffer;\r\n }\r\n },\r\n };\r\n }, [queryClient]);\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n","\"use client\";\r\nimport Head from \"next/head\";\r\nimport CanvasTools from \"../CanvasTools\";\r\nimport AppFooter from \"../AppFooter\";\r\nimport ToolsProvider from \"../ToolsProvider\";\r\nimport CanvasBackdrop from \"../CanvasBackdrop\";\r\nimport CanvasProvider from \"../CanvasProvider\";\r\nimport CanvasInteractions from \"../CanvasInteractions\";\r\nimport CanvasToggle from \"../CanvasToggle\";\r\nimport WarriorSelector from \"../WarriorSelector\";\r\nimport WarriorProvider from \"../WarriorProvider\";\r\nimport WarriorViewer from \"../WarriorViewer\";\r\nimport EnvironmentSelector from \"../EnvironmentSelector\";\r\nimport EnvironmentExposure from \"../EnvironmentExposure\";\r\nimport AnimationSelector from \"../AnimationSelector\";\r\nimport EnvironmentProvider from \"../EnvironmentProvider\";\r\nimport SkinProvider from \"../SkinProvider\";\r\nimport MaterialSelector from \"../MaterialSelector\";\r\nimport MaterialCanvases from \"../MaterialCanvases\";\r\nimport ImageLoaderProvider from \"../ImageLoaderProvider\";\r\nimport {\r\n QueryClient,\r\n QueryClientProvider,\r\n QueryKey,\r\n} from \"@tanstack/react-query\";\r\nimport { imageUrlToArrayBuffer } from \"../imageUtils\";\r\n\r\nasync function imageFetcher({ queryKey }: { queryKey: QueryKey }) {\r\n const [imageUrl] = queryKey as [string];\r\n return imageUrlToArrayBuffer(imageUrl);\r\n}\r\n\r\nconst queryClient = new QueryClient({\r\n defaultOptions: {\r\n queries: {\r\n queryFn: imageFetcher,\r\n staleTime: Infinity,\r\n cacheTime: 60000,\r\n refetchOnWindowFocus: false,\r\n refetchOnReconnect: false,\r\n },\r\n },\r\n});\r\n\r\nexport default function HomePage() {\r\n return (\r\n <>\r\n \r\n T2 Model Viewer & Skinner\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n >\r\n );\r\n}\r\n","import React, { useContext } from \"react\";\r\nimport { ModelViewerElement } from \"@google/model-viewer\";\r\n\r\nexport const ModelViewerContext = React.createContext<{\r\n modelViewer: ModelViewerElement;\r\n model: NonNullable;\r\n isLoaded: boolean;\r\n} | null>(null);\r\nModelViewerContext.displayName = \"ModelViewerContext\";\r\n\r\nexport default function useModelViewer() {\r\n const context = useContext(ModelViewerContext);\r\n if (!context) {\r\n throw new Error(\"No ModelViewerContext.Provider\");\r\n }\r\n return context;\r\n}\r\n","/*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */\r\n\r\nvar fabric = fabric || { version: '5.2.1' };\r\nif (typeof exports !== 'undefined') {\r\n exports.fabric = fabric;\r\n}\r\n/* _AMD_START_ */\r\nelse if (typeof define === 'function' && define.amd) {\r\n define([], function() { return fabric; });\r\n}\r\n/* _AMD_END_ */\r\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\r\n if (document instanceof (typeof HTMLDocument !== 'undefined' ? HTMLDocument : Document)) {\r\n fabric.document = document;\r\n }\r\n else {\r\n fabric.document = document.implementation.createHTMLDocument('');\r\n }\r\n fabric.window = window;\r\n}\r\nelse {\r\n // assume we're running under node.js when document/window are not present\r\n var jsdom = require('jsdom');\r\n var virtualWindow = new jsdom.JSDOM(\r\n decodeURIComponent('%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E'),\r\n {\r\n features: {\r\n FetchExternalResources: ['img']\r\n },\r\n resources: 'usable'\r\n }).window;\r\n fabric.document = virtualWindow.document;\r\n fabric.jsdomImplForWrapper = require('jsdom/lib/jsdom/living/generated/utils').implForWrapper;\r\n fabric.nodeCanvas = require('jsdom/lib/jsdom/utils').Canvas;\r\n fabric.window = virtualWindow;\r\n DOMParser = fabric.window.DOMParser;\r\n}\r\n\r\n/**\r\n * True when in environment that supports touch events\r\n * @type boolean\r\n */\r\nfabric.isTouchSupported = 'ontouchstart' in fabric.window || 'ontouchstart' in fabric.document ||\r\n (fabric.window && fabric.window.navigator && fabric.window.navigator.maxTouchPoints > 0);\r\n\r\n/**\r\n * True when in environment that's probably Node.js\r\n * @type boolean\r\n */\r\nfabric.isLikelyNode = typeof Buffer !== 'undefined' &&\r\n typeof window === 'undefined';\r\n\r\n\r\n\r\n/**\r\n * Pixel per Inch as a default value set to 96. Can be changed for more realistic conversion.\r\n */\r\nfabric.DPI = 96;\r\nfabric.reNum = '(?:[-+]?(?:\\\\d+|\\\\d*\\\\.\\\\d+)(?:[eE][-+]?\\\\d+)?)';\r\nfabric.commaWsp = '(?:\\\\s+,?\\\\s*|,\\\\s*)';\r\nfabric.rePathCommand = /([-+]?((\\d+\\.\\d+)|((\\d+)|(\\.\\d+)))(?:[eE][-+]?\\d+)?)/ig;\r\nfabric.reNonWord = /[ \\n\\.,;!\\?\\-]/;\r\nfabric.fontPaths = { };\r\nfabric.iMatrix = [1, 0, 0, 1, 0, 0];\r\nfabric.svgNS = 'http://www.w3.org/2000/svg';\r\n\r\n/**\r\n * Pixel limit for cache canvases. 1Mpx , 4Mpx should be fine.\r\n * @since 1.7.14\r\n * @type Number\r\n * @default\r\n */\r\nfabric.perfLimitSizeTotal = 2097152;\r\n\r\n/**\r\n * Pixel limit for cache canvases width or height. IE fixes the maximum at 5000\r\n * @since 1.7.14\r\n * @type Number\r\n * @default\r\n */\r\nfabric.maxCacheSideLimit = 4096;\r\n\r\n/**\r\n * Lowest pixel limit for cache canvases, set at 256PX\r\n * @since 1.7.14\r\n * @type Number\r\n * @default\r\n */\r\nfabric.minCacheSideLimit = 256;\r\n\r\n/**\r\n * Cache Object for widths of chars in text rendering.\r\n */\r\nfabric.charWidthsCache = { };\r\n\r\n/**\r\n * if webgl is enabled and available, textureSize will determine the size\r\n * of the canvas backend\r\n * @since 2.0.0\r\n * @type Number\r\n * @default\r\n */\r\nfabric.textureSize = 2048;\r\n\r\n/**\r\n * When 'true', style information is not retained when copy/pasting text, making\r\n * pasted text use destination style.\r\n * Defaults to 'false'.\r\n * @type Boolean\r\n * @default\r\n */\r\nfabric.disableStyleCopyPaste = false;\r\n\r\n/**\r\n * Enable webgl for filtering picture is available\r\n * A filtering backend will be initialized, this will both take memory and\r\n * time since a default 2048x2048 canvas will be created for the gl context\r\n * @since 2.0.0\r\n * @type Boolean\r\n * @default\r\n */\r\nfabric.enableGLFiltering = true;\r\n\r\n/**\r\n * Device Pixel Ratio\r\n * @see https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/HTML-canvas-guide/SettingUptheCanvas/SettingUptheCanvas.html\r\n */\r\nfabric.devicePixelRatio = fabric.window.devicePixelRatio ||\r\n fabric.window.webkitDevicePixelRatio ||\r\n fabric.window.mozDevicePixelRatio ||\r\n 1;\r\n/**\r\n * Browser-specific constant to adjust CanvasRenderingContext2D.shadowBlur value,\r\n * which is unitless and not rendered equally across browsers.\r\n *\r\n * Values that work quite well (as of October 2017) are:\r\n * - Chrome: 1.5\r\n * - Edge: 1.75\r\n * - Firefox: 0.9\r\n * - Safari: 0.95\r\n *\r\n * @since 2.0.0\r\n * @type Number\r\n * @default 1\r\n */\r\nfabric.browserShadowBlurConstant = 1;\r\n\r\n/**\r\n * This object contains the result of arc to bezier conversion for faster retrieving if the same arc needs to be converted again.\r\n * It was an internal variable, is accessible since version 2.3.4\r\n */\r\nfabric.arcToSegmentsCache = { };\r\n\r\n/**\r\n * This object keeps the results of the boundsOfCurve calculation mapped by the joined arguments necessary to calculate it.\r\n * It does speed up calculation, if you parse and add always the same paths, but in case of heavy usage of freedrawing\r\n * you do not get any speed benefit and you get a big object in memory.\r\n * The object was a private variable before, while now is appended to the lib so that you have access to it and you\r\n * can eventually clear it.\r\n * It was an internal variable, is accessible since version 2.3.4\r\n */\r\nfabric.boundsOfCurveCache = { };\r\n\r\n/**\r\n * If disabled boundsOfCurveCache is not used. For apps that make heavy usage of pencil drawing probably disabling it is better\r\n * @default true\r\n */\r\nfabric.cachesBoundsOfCurve = true;\r\n\r\n/**\r\n * Skip performance testing of setupGLContext and force the use of putImageData that seems to be the one that works best on\r\n * Chrome + old hardware. if your users are experiencing empty images after filtering you may try to force this to true\r\n * this has to be set before instantiating the filtering backend ( before filtering the first image )\r\n * @type Boolean\r\n * @default false\r\n */\r\nfabric.forceGLPutImageData = false;\r\n\r\nfabric.initFilterBackend = function() {\r\n if (fabric.enableGLFiltering && fabric.isWebglSupported && fabric.isWebglSupported(fabric.textureSize)) {\r\n console.log('max texture size: ' + fabric.maxTextureSize);\r\n return (new fabric.WebglFilterBackend({ tileSize: fabric.textureSize }));\r\n }\r\n else if (fabric.Canvas2dFilterBackend) {\r\n return (new fabric.Canvas2dFilterBackend());\r\n }\r\n};\r\n(function() {\r\n\r\n /**\r\n * @private\r\n * @param {String} eventName\r\n * @param {Function} handler\r\n */\r\n function _removeEventListener(eventName, handler) {\r\n if (!this.__eventListeners[eventName]) {\r\n return;\r\n }\r\n var eventListener = this.__eventListeners[eventName];\r\n if (handler) {\r\n eventListener[eventListener.indexOf(handler)] = false;\r\n }\r\n else {\r\n fabric.util.array.fill(eventListener, false);\r\n }\r\n }\r\n\r\n /**\r\n * Observes specified event\r\n * @memberOf fabric.Observable\r\n * @alias on\r\n * @param {String|Object} eventName Event name (eg. 'after:render') or object with key/value pairs (eg. {'after:render': handler, 'selection:cleared': handler})\r\n * @param {Function} handler Function that receives a notification when an event of the specified type occurs\r\n * @return {Self} thisArg\r\n * @chainable\r\n */\r\n function on(eventName, handler) {\r\n if (!this.__eventListeners) {\r\n this.__eventListeners = { };\r\n }\r\n // one object with key/value pairs was passed\r\n if (arguments.length === 1) {\r\n for (var prop in eventName) {\r\n this.on(prop, eventName[prop]);\r\n }\r\n }\r\n else {\r\n if (!this.__eventListeners[eventName]) {\r\n this.__eventListeners[eventName] = [];\r\n }\r\n this.__eventListeners[eventName].push(handler);\r\n }\r\n return this;\r\n }\r\n\r\n function _once(eventName, handler) {\r\n var _handler = function () {\r\n handler.apply(this, arguments);\r\n this.off(eventName, _handler);\r\n }.bind(this);\r\n this.on(eventName, _handler);\r\n }\r\n\r\n function once(eventName, handler) {\r\n // one object with key/value pairs was passed\r\n if (arguments.length === 1) {\r\n for (var prop in eventName) {\r\n _once.call(this, prop, eventName[prop]);\r\n }\r\n }\r\n else {\r\n _once.call(this, eventName, handler);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Stops event observing for a particular event handler. Calling this method\r\n * without arguments removes all handlers for all events\r\n * @memberOf fabric.Observable\r\n * @alias off\r\n * @param {String|Object} eventName Event name (eg. 'after:render') or object with key/value pairs (eg. {'after:render': handler, 'selection:cleared': handler})\r\n * @param {Function} handler Function to be deleted from EventListeners\r\n * @return {Self} thisArg\r\n * @chainable\r\n */\r\n function off(eventName, handler) {\r\n if (!this.__eventListeners) {\r\n return this;\r\n }\r\n\r\n // remove all key/value pairs (event name -> event handler)\r\n if (arguments.length === 0) {\r\n for (eventName in this.__eventListeners) {\r\n _removeEventListener.call(this, eventName);\r\n }\r\n }\r\n // one object with key/value pairs was passed\r\n else if (arguments.length === 1 && typeof arguments[0] === 'object') {\r\n for (var prop in eventName) {\r\n _removeEventListener.call(this, prop, eventName[prop]);\r\n }\r\n }\r\n else {\r\n _removeEventListener.call(this, eventName, handler);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Fires event with an optional options object\r\n * @memberOf fabric.Observable\r\n * @param {String} eventName Event name to fire\r\n * @param {Object} [options] Options object\r\n * @return {Self} thisArg\r\n * @chainable\r\n */\r\n function fire(eventName, options) {\r\n if (!this.__eventListeners) {\r\n return this;\r\n }\r\n\r\n var listenersForEvent = this.__eventListeners[eventName];\r\n if (!listenersForEvent) {\r\n return this;\r\n }\r\n\r\n for (var i = 0, len = listenersForEvent.length; i < len; i++) {\r\n listenersForEvent[i] && listenersForEvent[i].call(this, options || { });\r\n }\r\n this.__eventListeners[eventName] = listenersForEvent.filter(function(value) {\r\n return value !== false;\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * @namespace fabric.Observable\r\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#events}\r\n * @see {@link http://fabricjs.com/events|Events demo}\r\n */\r\n fabric.Observable = {\r\n fire: fire,\r\n on: on,\r\n once: once,\r\n off: off,\r\n };\r\n})();\r\n/**\r\n * @namespace fabric.Collection\r\n */\r\nfabric.Collection = {\r\n\r\n _objects: [],\r\n\r\n /**\r\n * Adds objects to collection, Canvas or Group, then renders canvas\r\n * (if `renderOnAddRemove` is not `false`).\r\n * in case of Group no changes to bounding box are made.\r\n * Objects should be instances of (or inherit from) fabric.Object\r\n * Use of this function is highly discouraged for groups.\r\n * you can add a bunch of objects with the add method but then you NEED\r\n * to run a addWithUpdate call for the Group class or position/bbox will be wrong.\r\n * @param {...fabric.Object} object Zero or more fabric instances\r\n * @return {Self} thisArg\r\n * @chainable\r\n */\r\n add: function () {\r\n this._objects.push.apply(this._objects, arguments);\r\n if (this._onObjectAdded) {\r\n for (var i = 0, length = arguments.length; i < length; i++) {\r\n this._onObjectAdded(arguments[i]);\r\n }\r\n }\r\n this.renderOnAddRemove && this.requestRenderAll();\r\n return this;\r\n },\r\n\r\n /**\r\n * Inserts an object into collection at specified index, then renders canvas (if `renderOnAddRemove` is not `false`)\r\n * An object should be an instance of (or inherit from) fabric.Object\r\n * Use of this function is highly discouraged for groups.\r\n * you can add a bunch of objects with the insertAt method but then you NEED\r\n * to run a addWithUpdate call for the Group class or position/bbox will be wrong.\r\n * @param {Object} object Object to insert\r\n * @param {Number} index Index to insert object at\r\n * @param {Boolean} nonSplicing When `true`, no splicing (shifting) of objects occurs\r\n * @return {Self} thisArg\r\n * @chainable\r\n */\r\n insertAt: function (object, index, nonSplicing) {\r\n var objects = this._objects;\r\n if (nonSplicing) {\r\n objects[index] = object;\r\n }\r\n else {\r\n objects.splice(index, 0, object);\r\n }\r\n this._onObjectAdded && this._onObjectAdded(object);\r\n this.renderOnAddRemove && this.requestRenderAll();\r\n return this;\r\n },\r\n\r\n /**\r\n * Removes objects from a collection, then renders canvas (if `renderOnAddRemove` is not `false`)\r\n * @param {...fabric.Object} object Zero or more fabric instances\r\n * @return {Self} thisArg\r\n * @chainable\r\n */\r\n remove: function() {\r\n var objects = this._objects,\r\n index, somethingRemoved = false;\r\n\r\n for (var i = 0, length = arguments.length; i < length; i++) {\r\n index = objects.indexOf(arguments[i]);\r\n\r\n // only call onObjectRemoved if an object was actually removed\r\n if (index !== -1) {\r\n somethingRemoved = true;\r\n objects.splice(index, 1);\r\n this._onObjectRemoved && this._onObjectRemoved(arguments[i]);\r\n }\r\n }\r\n\r\n this.renderOnAddRemove && somethingRemoved && this.requestRenderAll();\r\n return this;\r\n },\r\n\r\n /**\r\n * Executes given function for each object in this group\r\n * @param {Function} callback\r\n * Callback invoked with current object as first argument,\r\n * index - as second and an array of all objects - as third.\r\n * Callback is invoked in a context of Global Object (e.g. `window`)\r\n * when no `context` argument is given\r\n *\r\n * @param {Object} context Context (aka thisObject)\r\n * @return {Self} thisArg\r\n * @chainable\r\n */\r\n forEachObject: function(callback, context) {\r\n var objects = this.getObjects();\r\n for (var i = 0, len = objects.length; i < len; i++) {\r\n callback.call(context, objects[i], i, objects);\r\n }\r\n return this;\r\n },\r\n\r\n /**\r\n * Returns an array of children objects of this instance\r\n * Type parameter introduced in 1.3.10\r\n * since 2.3.5 this method return always a COPY of the array;\r\n * @param {String} [type] When specified, only objects of this type are returned\r\n * @return {Array}\r\n */\r\n getObjects: function(type) {\r\n if (typeof type === 'undefined') {\r\n return this._objects.concat();\r\n }\r\n return this._objects.filter(function(o) {\r\n return o.type === type;\r\n });\r\n },\r\n\r\n /**\r\n * Returns object at specified index\r\n * @param {Number} index\r\n * @return {Self} thisArg\r\n */\r\n item: function (index) {\r\n return this._objects[index];\r\n },\r\n\r\n /**\r\n * Returns true if collection contains no objects\r\n * @return {Boolean} true if collection is empty\r\n */\r\n isEmpty: function () {\r\n return this._objects.length === 0;\r\n },\r\n\r\n /**\r\n * Returns a size of a collection (i.e: length of an array containing its objects)\r\n * @return {Number} Collection size\r\n */\r\n size: function() {\r\n return this._objects.length;\r\n },\r\n\r\n /**\r\n * Returns true if collection contains an object\r\n * @param {Object} object Object to check against\r\n * @param {Boolean} [deep=false] `true` to check all descendants, `false` to check only `_objects`\r\n * @return {Boolean} `true` if collection contains an object\r\n */\r\n contains: function (object, deep) {\r\n if (this._objects.indexOf(object) > -1) {\r\n return true;\r\n }\r\n else if (deep) {\r\n return this._objects.some(function (obj) {\r\n return typeof obj.contains === 'function' && obj.contains(object, true);\r\n });\r\n }\r\n return false;\r\n },\r\n\r\n /**\r\n * Returns number representation of a collection complexity\r\n * @return {Number} complexity\r\n */\r\n complexity: function () {\r\n return this._objects.reduce(function (memo, current) {\r\n memo += current.complexity ? current.complexity() : 0;\r\n return memo;\r\n }, 0);\r\n }\r\n};\r\n/**\r\n * @namespace fabric.CommonMethods\r\n */\r\nfabric.CommonMethods = {\r\n\r\n /**\r\n * Sets object's properties from options\r\n * @param {Object} [options] Options object\r\n */\r\n _setOptions: function(options) {\r\n for (var prop in options) {\r\n this.set(prop, options[prop]);\r\n }\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Object} [filler] Options object\r\n * @param {String} [property] property to set the Gradient to\r\n */\r\n _initGradient: function(filler, property) {\r\n if (filler && filler.colorStops && !(filler instanceof fabric.Gradient)) {\r\n this.set(property, new fabric.Gradient(filler));\r\n }\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Object} [filler] Options object\r\n * @param {String} [property] property to set the Pattern to\r\n * @param {Function} [callback] callback to invoke after pattern load\r\n */\r\n _initPattern: function(filler, property, callback) {\r\n if (filler && filler.source && !(filler instanceof fabric.Pattern)) {\r\n this.set(property, new fabric.Pattern(filler, callback));\r\n }\r\n else {\r\n callback && callback();\r\n }\r\n },\r\n\r\n /**\r\n * @private\r\n */\r\n _setObject: function(obj) {\r\n for (var prop in obj) {\r\n this._set(prop, obj[prop]);\r\n }\r\n },\r\n\r\n /**\r\n * Sets property to a given value. When changing position/dimension -related properties (left, top, scale, angle, etc.) `set` does not update position of object's borders/controls. If you need to update those, call `setCoords()`.\r\n * @param {String|Object} key Property name or object (if object, iterate over the object properties)\r\n * @param {Object|Function} value Property value (if function, the value is passed into it and its return value is used as a new one)\r\n * @return {fabric.Object} thisArg\r\n * @chainable\r\n */\r\n set: function(key, value) {\r\n if (typeof key === 'object') {\r\n this._setObject(key);\r\n }\r\n else {\r\n this._set(key, value);\r\n }\r\n return this;\r\n },\r\n\r\n _set: function(key, value) {\r\n this[key] = value;\r\n },\r\n\r\n /**\r\n * Toggles specified property from `true` to `false` or from `false` to `true`\r\n * @param {String} property Property to toggle\r\n * @return {fabric.Object} thisArg\r\n * @chainable\r\n */\r\n toggle: function(property) {\r\n var value = this.get(property);\r\n if (typeof value === 'boolean') {\r\n this.set(property, !value);\r\n }\r\n return this;\r\n },\r\n\r\n /**\r\n * Basic getter\r\n * @param {String} property Property name\r\n * @return {*} value of a property\r\n */\r\n get: function(property) {\r\n return this[property];\r\n }\r\n};\r\n(function(global) {\r\n\r\n var sqrt = Math.sqrt,\r\n atan2 = Math.atan2,\r\n pow = Math.pow,\r\n PiBy180 = Math.PI / 180,\r\n PiBy2 = Math.PI / 2;\r\n\r\n /**\r\n * @namespace fabric.util\r\n */\r\n fabric.util = {\r\n\r\n /**\r\n * Calculate the cos of an angle, avoiding returning floats for known results\r\n * @static\r\n * @memberOf fabric.util\r\n * @param {Number} angle the angle in radians or in degree\r\n * @return {Number}\r\n */\r\n cos: function(angle) {\r\n if (angle === 0) { return 1; }\r\n if (angle < 0) {\r\n // cos(a) = cos(-a)\r\n angle = -angle;\r\n }\r\n var angleSlice = angle / PiBy2;\r\n switch (angleSlice) {\r\n case 1: case 3: return 0;\r\n case 2: return -1;\r\n }\r\n return Math.cos(angle);\r\n },\r\n\r\n /**\r\n * Calculate the sin of an angle, avoiding returning floats for known results\r\n * @static\r\n * @memberOf fabric.util\r\n * @param {Number} angle the angle in radians or in degree\r\n * @return {Number}\r\n */\r\n sin: function(angle) {\r\n if (angle === 0) { return 0; }\r\n var angleSlice = angle / PiBy2, sign = 1;\r\n if (angle < 0) {\r\n // sin(-a) = -sin(a)\r\n sign = -1;\r\n }\r\n switch (angleSlice) {\r\n case 1: return sign;\r\n case 2: return 0;\r\n case 3: return -sign;\r\n }\r\n return Math.sin(angle);\r\n },\r\n\r\n /**\r\n * Removes value from an array.\r\n * Presence of value (and its position in an array) is determined via `Array.prototype.indexOf`\r\n * @static\r\n * @memberOf fabric.util\r\n * @param {Array} array\r\n * @param {*} value\r\n * @return {Array} original array\r\n */\r\n removeFromArray: function(array, value) {\r\n var idx = array.indexOf(value);\r\n if (idx !== -1) {\r\n array.splice(idx, 1);\r\n }\r\n return array;\r\n },\r\n\r\n /**\r\n * Returns random number between 2 specified ones.\r\n * @static\r\n * @memberOf fabric.util\r\n * @param {Number} min lower limit\r\n * @param {Number} max upper limit\r\n * @return {Number} random value (between min and max)\r\n */\r\n getRandomInt: function(min, max) {\r\n return Math.floor(Math.random() * (max - min + 1)) + min;\r\n },\r\n\r\n /**\r\n * Transforms degrees to radians.\r\n * @static\r\n * @memberOf fabric.util\r\n * @param {Number} degrees value in degrees\r\n * @return {Number} value in radians\r\n */\r\n degreesToRadians: function(degrees) {\r\n return degrees * PiBy180;\r\n },\r\n\r\n /**\r\n * Transforms radians to degrees.\r\n * @static\r\n * @memberOf fabric.util\r\n * @param {Number} radians value in radians\r\n * @return {Number} value in degrees\r\n */\r\n radiansToDegrees: function(radians) {\r\n return radians / PiBy180;\r\n },\r\n\r\n /**\r\n * Rotates `point` around `origin` with `radians`\r\n * @static\r\n * @memberOf fabric.util\r\n * @param {fabric.Point} point The point to rotate\r\n * @param {fabric.Point} origin The origin of the rotation\r\n * @param {Number} radians The radians of the angle for the rotation\r\n * @return {fabric.Point} The new rotated point\r\n */\r\n rotatePoint: function(point, origin, radians) {\r\n var newPoint = new fabric.Point(point.x - origin.x, point.y - origin.y),\r\n v = fabric.util.rotateVector(newPoint, radians);\r\n return new fabric.Point(v.x, v.y).addEquals(origin);\r\n },\r\n\r\n /**\r\n * Rotates `vector` with `radians`\r\n * @static\r\n * @memberOf fabric.util\r\n * @param {Object} vector The vector to rotate (x and y)\r\n * @param {Number} radians The radians of the angle for the rotation\r\n * @return {Object} The new rotated point\r\n */\r\n rotateVector: function(vector, radians) {\r\n var sin = fabric.util.sin(radians),\r\n cos = fabric.util.cos(radians),\r\n rx = vector.x * cos - vector.y * sin,\r\n ry = vector.x * sin + vector.y * cos;\r\n return {\r\n x: rx,\r\n y: ry\r\n };\r\n },\r\n\r\n /**\r\n * Creates a vetor from points represented as a point\r\n * @static\r\n * @memberOf fabric.util\r\n *\r\n * @typedef {Object} Point\r\n * @property {number} x\r\n * @property {number} y\r\n *\r\n * @param {Point} from\r\n * @param {Point} to\r\n * @returns {Point} vector\r\n */\r\n createVector: function (from, to) {\r\n return new fabric.Point(to.x - from.x, to.y - from.y);\r\n },\r\n\r\n /**\r\n * Calculates angle between 2 vectors using dot product\r\n * @static\r\n * @memberOf fabric.util\r\n * @param {Point} a\r\n * @param {Point} b\r\n * @returns the angle in radian between the vectors\r\n */\r\n calcAngleBetweenVectors: function (a, b) {\r\n return Math.acos((a.x * b.x + a.y * b.y) / (Math.hypot(a.x, a.y) * Math.hypot(b.x, b.y)));\r\n },\r\n\r\n /**\r\n * @static\r\n * @memberOf fabric.util\r\n * @param {Point} v\r\n * @returns {Point} vector representing the unit vector of pointing to the direction of `v`\r\n */\r\n getHatVector: function (v) {\r\n return new fabric.Point(v.x, v.y).multiply(1 / Math.hypot(v.x, v.y));\r\n },\r\n\r\n /**\r\n * @static\r\n * @memberOf fabric.util\r\n * @param {Point} A\r\n * @param {Point} B\r\n * @param {Point} C\r\n * @returns {{ vector: Point, angle: number }} vector representing the bisector of A and A's angle\r\n */\r\n getBisector: function (A, B, C) {\r\n var AB = fabric.util.createVector(A, B), AC = fabric.util.createVector(A, C);\r\n var alpha = fabric.util.calcAngleBetweenVectors(AB, AC);\r\n // check if alpha is relative to AB->BC\r\n var ro = fabric.util.calcAngleBetweenVectors(fabric.util.rotateVector(AB, alpha), AC);\r\n var phi = alpha * (ro === 0 ? 1 : -1) / 2;\r\n return {\r\n vector: fabric.util.getHatVector(fabric.util.rotateVector(AB, phi)),\r\n angle: alpha\r\n };\r\n },\r\n\r\n /**\r\n * Project stroke width on points returning 2 projections for each point as follows:\r\n * - `miter`: 2 points corresponding to the outer boundary and the inner boundary of stroke.\r\n * - `bevel`: 2 points corresponding to the bevel boundaries, tangent to the bisector.\r\n * - `round`: same as `bevel`\r\n * Used to calculate object's bounding box\r\n * @static\r\n * @memberOf fabric.util\r\n * @param {Point[]} points\r\n * @param {Object} options\r\n * @param {number} options.strokeWidth\r\n * @param {'miter'|'bevel'|'round'} options.strokeLineJoin\r\n * @param {number} options.strokeMiterLimit https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit\r\n * @param {boolean} options.strokeUniform\r\n * @param {number} options.scaleX\r\n * @param {number} options.scaleY\r\n * @param {boolean} [openPath] whether the shape is open or not, affects the calculations of the first and last points\r\n * @returns {fabric.Point[]} array of size 2n/4n of all suspected points\r\n */\r\n projectStrokeOnPoints: function (points, options, openPath) {\r\n var coords = [], s = options.strokeWidth / 2,\r\n strokeUniformScalar = options.strokeUniform ?\r\n new fabric.Point(1 / options.scaleX, 1 / options.scaleY) : new fabric.Point(1, 1),\r\n getStrokeHatVector = function (v) {\r\n var scalar = s / (Math.hypot(v.x, v.y));\r\n return new fabric.Point(v.x * scalar * strokeUniformScalar.x, v.y * scalar * strokeUniformScalar.y);\r\n };\r\n if (points.length <= 1) {return coords;}\r\n points.forEach(function (p, index) {\r\n var A = new fabric.Point(p.x, p.y), B, C;\r\n if (index === 0) {\r\n C = points[index + 1];\r\n B = openPath ? getStrokeHatVector(fabric.util.createVector(C, A)).addEquals(A) : points[points.length - 1];\r\n }\r\n else if (index === points.length - 1) {\r\n B = points[index - 1];\r\n C = openPath ? getStrokeHatVector(fabric.util.createVector(B, A)).addEquals(A) : points[0];\r\n }\r\n else {\r\n B = points[index - 1];\r\n C = points[index + 1];\r\n }\r\n var bisector = fabric.util.getBisector(A, B, C),\r\n bisectorVector = bisector.vector,\r\n alpha = bisector.angle,\r\n scalar,\r\n miterVector;\r\n if (options.strokeLineJoin === 'miter') {\r\n scalar = -s / Math.sin(alpha / 2);\r\n miterVector = new fabric.Point(\r\n bisectorVector.x * scalar * strokeUniformScalar.x,\r\n bisectorVector.y * scalar * strokeUniformScalar.y\r\n );\r\n if (Math.hypot(miterVector.x, miterVector.y) / s <= options.strokeMiterLimit) {\r\n coords.push(A.add(miterVector));\r\n coords.push(A.subtract(miterVector));\r\n return;\r\n }\r\n }\r\n scalar = -s * Math.SQRT2;\r\n miterVector = new fabric.Point(\r\n bisectorVector.x * scalar * strokeUniformScalar.x,\r\n bisectorVector.y * scalar * strokeUniformScalar.y\r\n );\r\n coords.push(A.add(miterVector));\r\n coords.push(A.subtract(miterVector));\r\n });\r\n return coords;\r\n },\r\n\r\n /**\r\n * Apply transform t to point p\r\n * @static\r\n * @memberOf fabric.util\r\n * @param {fabric.Point} p The point to transform\r\n * @param {Array} t The transform\r\n * @param {Boolean} [ignoreOffset] Indicates that the offset should not be applied\r\n * @return {fabric.Point} The transformed point\r\n */\r\n transformPoint: function(p, t, ignoreOffset) {\r\n if (ignoreOffset) {\r\n return new fabric.Point(\r\n t[0] * p.x + t[2] * p.y,\r\n t[1] * p.x + t[3] * p.y\r\n );\r\n }\r\n return new fabric.Point(\r\n t[0] * p.x + t[2] * p.y + t[4],\r\n t[1] * p.x + t[3] * p.y + t[5]\r\n );\r\n },\r\n\r\n /**\r\n * Returns coordinates of points's bounding rectangle (left, top, width, height)\r\n * @param {Array} points 4 points array\r\n * @param {Array} [transform] an array of 6 numbers representing a 2x3 transform matrix\r\n * @return {Object} Object with left, top, width, height properties\r\n */\r\n makeBoundingBoxFromPoints: function(points, transform) {\r\n if (transform) {\r\n for (var i = 0; i < points.length; i++) {\r\n points[i] = fabric.util.transformPoint(points[i], transform);\r\n }\r\n }\r\n var xPoints = [points[0].x, points[1].x, points[2].x, points[3].x],\r\n minX = fabric.util.array.min(xPoints),\r\n maxX = fabric.util.array.max(xPoints),\r\n width = maxX - minX,\r\n yPoints = [points[0].y, points[1].y, points[2].y, points[3].y],\r\n minY = fabric.util.array.min(yPoints),\r\n maxY = fabric.util.array.max(yPoints),\r\n height = maxY - minY;\r\n\r\n return {\r\n left: minX,\r\n top: minY,\r\n width: width,\r\n height: height\r\n };\r\n },\r\n\r\n /**\r\n * Invert transformation t\r\n * @static\r\n * @memberOf fabric.util\r\n * @param {Array} t The transform\r\n * @return {Array} The inverted transform\r\n */\r\n invertTransform: function(t) {\r\n var a = 1 / (t[0] * t[3] - t[1] * t[2]),\r\n r = [a * t[3], -a * t[1], -a * t[2], a * t[0]],\r\n o = fabric.util.transformPoint({ x: t[4], y: t[5] }, r, true);\r\n r[4] = -o.x;\r\n r[5] = -o.y;\r\n return r;\r\n },\r\n\r\n /**\r\n * A wrapper around Number#toFixed, which contrary to native method returns number, not string.\r\n * @static\r\n * @memberOf fabric.util\r\n * @param {Number|String} number number to operate on\r\n * @param {Number} fractionDigits number of fraction digits to \"leave\"\r\n * @return {Number}\r\n */\r\n toFixed: function(number, fractionDigits) {\r\n return parseFloat(Number(number).toFixed(fractionDigits));\r\n },\r\n\r\n /**\r\n * Converts from attribute value to pixel value if applicable.\r\n * Returns converted pixels or original value not converted.\r\n * @param {Number|String} value number to operate on\r\n * @param {Number} fontSize\r\n * @return {Number|String}\r\n */\r\n parseUnit: function(value, fontSize) {\r\n var unit = /\\D{0,2}$/.exec(value),\r\n number = parseFloat(value);\r\n if (!fontSize) {\r\n fontSize = fabric.Text.DEFAULT_SVG_FONT_SIZE;\r\n }\r\n switch (unit[0]) {\r\n case 'mm':\r\n return number * fabric.DPI / 25.4;\r\n\r\n case 'cm':\r\n return number * fabric.DPI / 2.54;\r\n\r\n case 'in':\r\n return number * fabric.DPI;\r\n\r\n case 'pt':\r\n return number * fabric.DPI / 72; // or * 4 / 3\r\n\r\n case 'pc':\r\n return number * fabric.DPI / 72 * 12; // or * 16\r\n\r\n case 'em':\r\n return number * fontSize;\r\n\r\n default:\r\n return number;\r\n }\r\n },\r\n\r\n /**\r\n * Function which always returns `false`.\r\n * @static\r\n * @memberOf fabric.util\r\n * @return {Boolean}\r\n */\r\n falseFunction: function() {\r\n return false;\r\n },\r\n\r\n /**\r\n * Returns klass \"Class\" object of given namespace\r\n * @memberOf fabric.util\r\n * @param {String} type Type of object (eg. 'circle')\r\n * @param {String} namespace Namespace to get klass \"Class\" object from\r\n * @return {Object} klass \"Class\"\r\n */\r\n getKlass: function(type, namespace) {\r\n // capitalize first letter only\r\n type = fabric.util.string.camelize(type.charAt(0).toUpperCase() + type.slice(1));\r\n return fabric.util.resolveNamespace(namespace)[type];\r\n },\r\n\r\n /**\r\n * Returns array of attributes for given svg that fabric parses\r\n * @memberOf fabric.util\r\n * @param {String} type Type of svg element (eg. 'circle')\r\n * @return {Array} string names of supported attributes\r\n */\r\n getSvgAttributes: function(type) {\r\n var attributes = [\r\n 'instantiated_by_use',\r\n 'style',\r\n 'id',\r\n 'class'\r\n ];\r\n switch (type) {\r\n case 'linearGradient':\r\n attributes = attributes.concat(['x1', 'y1', 'x2', 'y2', 'gradientUnits', 'gradientTransform']);\r\n break;\r\n case 'radialGradient':\r\n attributes = attributes.concat(['gradientUnits', 'gradientTransform', 'cx', 'cy', 'r', 'fx', 'fy', 'fr']);\r\n break;\r\n case 'stop':\r\n attributes = attributes.concat(['offset', 'stop-color', 'stop-opacity']);\r\n break;\r\n }\r\n return attributes;\r\n },\r\n\r\n /**\r\n * Returns object of given namespace\r\n * @memberOf fabric.util\r\n * @param {String} namespace Namespace string e.g. 'fabric.Image.filter' or 'fabric'\r\n * @return {Object} Object for given namespace (default fabric)\r\n */\r\n resolveNamespace: function(namespace) {\r\n if (!namespace) {\r\n return fabric;\r\n }\r\n\r\n var parts = namespace.split('.'),\r\n len = parts.length, i,\r\n obj = global || fabric.window;\r\n\r\n for (i = 0; i < len; ++i) {\r\n obj = obj[parts[i]];\r\n }\r\n\r\n return obj;\r\n },\r\n\r\n /**\r\n * Loads image element from given url and passes it to a callback\r\n * @memberOf fabric.util\r\n * @param {String} url URL representing an image\r\n * @param {Function} callback Callback; invoked with loaded image\r\n * @param {*} [context] Context to invoke callback in\r\n * @param {Object} [crossOrigin] crossOrigin value to set image element to\r\n */\r\n loadImage: function(url, callback, context, crossOrigin) {\r\n if (!url) {\r\n callback && callback.call(context, url);\r\n return;\r\n }\r\n\r\n var img = fabric.util.createImage();\r\n\r\n /** @ignore */\r\n var onLoadCallback = function () {\r\n callback && callback.call(context, img, false);\r\n img = img.onload = img.onerror = null;\r\n };\r\n\r\n img.onload = onLoadCallback;\r\n /** @ignore */\r\n img.onerror = function() {\r\n fabric.log('Error loading ' + img.src);\r\n callback && callback.call(context, null, true);\r\n img = img.onload = img.onerror = null;\r\n };\r\n\r\n // data-urls appear to be buggy with crossOrigin\r\n // https://github.com/kangax/fabric.js/commit/d0abb90f1cd5c5ef9d2a94d3fb21a22330da3e0a#commitcomment-4513767\r\n // see https://code.google.com/p/chromium/issues/detail?id=315152\r\n // https://bugzilla.mozilla.org/show_bug.cgi?id=935069\r\n // crossOrigin null is the same as not set.\r\n if (url.indexOf('data') !== 0 &&\r\n crossOrigin !== undefined &&\r\n crossOrigin !== null) {\r\n img.crossOrigin = crossOrigin;\r\n }\r\n\r\n // IE10 / IE11-Fix: SVG contents from data: URI\r\n // will only be available if the IMG is present\r\n // in the DOM (and visible)\r\n if (url.substring(0,14) === 'data:image/svg') {\r\n img.onload = null;\r\n fabric.util.loadImageInDom(img, onLoadCallback);\r\n }\r\n\r\n img.src = url;\r\n },\r\n\r\n /**\r\n * Attaches SVG image with data: URL to the dom\r\n * @memberOf fabric.util\r\n * @param {Object} img Image object with data:image/svg src\r\n * @param {Function} callback Callback; invoked with loaded image\r\n * @return {Object} DOM element (div containing the SVG image)\r\n */\r\n loadImageInDom: function(img, onLoadCallback) {\r\n var div = fabric.document.createElement('div');\r\n div.style.width = div.style.height = '1px';\r\n div.style.left = div.style.top = '-100%';\r\n div.style.position = 'absolute';\r\n div.appendChild(img);\r\n fabric.document.querySelector('body').appendChild(div);\r\n /**\r\n * Wrap in function to:\r\n * 1. Call existing callback\r\n * 2. Cleanup DOM\r\n */\r\n img.onload = function () {\r\n onLoadCallback();\r\n div.parentNode.removeChild(div);\r\n div = null;\r\n };\r\n },\r\n\r\n /**\r\n * Creates corresponding fabric instances from their object representations\r\n * @static\r\n * @memberOf fabric.util\r\n * @param {Array} objects Objects to enliven\r\n * @param {Function} callback Callback to invoke when all objects are created\r\n * @param {String} namespace Namespace to get klass \"Class\" object from\r\n * @param {Function} reviver Method for further parsing of object elements,\r\n * called after each fabric object created.\r\n */\r\n enlivenObjects: function(objects, callback, namespace, reviver) {\r\n objects = objects || [];\r\n\r\n var enlivenedObjects = [],\r\n numLoadedObjects = 0,\r\n numTotalObjects = objects.length;\r\n\r\n function onLoaded() {\r\n if (++numLoadedObjects === numTotalObjects) {\r\n callback && callback(enlivenedObjects.filter(function(obj) {\r\n // filter out undefined objects (objects that gave error)\r\n return obj;\r\n }));\r\n }\r\n }\r\n\r\n if (!numTotalObjects) {\r\n callback && callback(enlivenedObjects);\r\n return;\r\n }\r\n\r\n objects.forEach(function (o, index) {\r\n // if sparse array\r\n if (!o || !o.type) {\r\n onLoaded();\r\n return;\r\n }\r\n var klass = fabric.util.getKlass(o.type, namespace);\r\n klass.fromObject(o, function (obj, error) {\r\n error || (enlivenedObjects[index] = obj);\r\n reviver && reviver(o, obj, error);\r\n onLoaded();\r\n });\r\n });\r\n },\r\n\r\n /**\r\n * Creates corresponding fabric instances residing in an object, e.g. `clipPath`\r\n * @see {@link fabric.Object.ENLIVEN_PROPS}\r\n * @param {Object} object\r\n * @param {Object} [context] assign enlived props to this object (pass null to skip this)\r\n * @param {(objects:fabric.Object[]) => void} callback\r\n */\r\n enlivenObjectEnlivables: function (object, context, callback) {\r\n var enlivenProps = fabric.Object.ENLIVEN_PROPS.filter(function (key) { return !!object[key]; });\r\n fabric.util.enlivenObjects(enlivenProps.map(function (key) { return object[key]; }), function (enlivedProps) {\r\n var objects = {};\r\n enlivenProps.forEach(function (key, index) {\r\n objects[key] = enlivedProps[index];\r\n context && (context[key] = enlivedProps[index]);\r\n });\r\n callback && callback(objects);\r\n });\r\n },\r\n\r\n /**\r\n * Create and wait for loading of patterns\r\n * @static\r\n * @memberOf fabric.util\r\n * @param {Array} patterns Objects to enliven\r\n * @param {Function} callback Callback to invoke when all objects are created\r\n * called after each fabric object created.\r\n */\r\n enlivenPatterns: function(patterns, callback) {\r\n patterns = patterns || [];\r\n\r\n function onLoaded() {\r\n if (++numLoadedPatterns === numPatterns) {\r\n callback && callback(enlivenedPatterns);\r\n }\r\n }\r\n\r\n var enlivenedPatterns = [],\r\n numLoadedPatterns = 0,\r\n numPatterns = patterns.length;\r\n\r\n if (!numPatterns) {\r\n callback && callback(enlivenedPatterns);\r\n return;\r\n }\r\n\r\n patterns.forEach(function (p, index) {\r\n if (p && p.source) {\r\n new fabric.Pattern(p, function(pattern) {\r\n enlivenedPatterns[index] = pattern;\r\n onLoaded();\r\n });\r\n }\r\n else {\r\n enlivenedPatterns[index] = p;\r\n onLoaded();\r\n }\r\n });\r\n },\r\n\r\n /**\r\n * Groups SVG elements (usually those retrieved from SVG document)\r\n * @static\r\n * @memberOf fabric.util\r\n * @param {Array} elements SVG elements to group\r\n * @param {Object} [options] Options object\r\n * @param {String} path Value to set sourcePath to\r\n * @return {fabric.Object|fabric.Group}\r\n */\r\n groupSVGElements: function(elements, options, path) {\r\n var object;\r\n if (elements && elements.length === 1) {\r\n return elements[0];\r\n }\r\n if (options) {\r\n if (options.width && options.height) {\r\n options.centerPoint = {\r\n x: options.width / 2,\r\n y: options.height / 2\r\n };\r\n }\r\n else {\r\n delete options.width;\r\n delete options.height;\r\n }\r\n }\r\n object = new fabric.Group(elements, options);\r\n if (typeof path !== 'undefined') {\r\n object.sourcePath = path;\r\n }\r\n return object;\r\n },\r\n\r\n /**\r\n * Populates an object with properties of another object\r\n * @static\r\n * @memberOf fabric.util\r\n * @param {Object} source Source object\r\n * @param {Object} destination Destination object\r\n * @return {Array} properties Properties names to include\r\n */\r\n populateWithProperties: function(source, destination, properties) {\r\n if (properties && Array.isArray(properties)) {\r\n for (var i = 0, len = properties.length; i < len; i++) {\r\n if (properties[i] in source) {\r\n destination[properties[i]] = source[properties[i]];\r\n }\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Creates canvas element\r\n * @static\r\n * @memberOf fabric.util\r\n * @return {CanvasElement} initialized canvas element\r\n */\r\n createCanvasElement: function() {\r\n return fabric.document.createElement('canvas');\r\n },\r\n\r\n /**\r\n * Creates a canvas element that is a copy of another and is also painted\r\n * @param {CanvasElement} canvas to copy size and content of\r\n * @static\r\n * @memberOf fabric.util\r\n * @return {CanvasElement} initialized canvas element\r\n */\r\n copyCanvasElement: function(canvas) {\r\n var newCanvas = fabric.util.createCanvasElement();\r\n newCanvas.width = canvas.width;\r\n newCanvas.height = canvas.height;\r\n newCanvas.getContext('2d').drawImage(canvas, 0, 0);\r\n return newCanvas;\r\n },\r\n\r\n /**\r\n * since 2.6.0 moved from canvas instance to utility.\r\n * @param {CanvasElement} canvasEl to copy size and content of\r\n * @param {String} format 'jpeg' or 'png', in some browsers 'webp' is ok too\r\n * @param {Number} quality <= 1 and > 0\r\n * @static\r\n * @memberOf fabric.util\r\n * @return {String} data url\r\n */\r\n toDataURL: function(canvasEl, format, quality) {\r\n return canvasEl.toDataURL('image/' + format, quality);\r\n },\r\n\r\n /**\r\n * Creates image element (works on client and node)\r\n * @static\r\n * @memberOf fabric.util\r\n * @return {HTMLImageElement} HTML image element\r\n */\r\n createImage: function() {\r\n return fabric.document.createElement('img');\r\n },\r\n\r\n /**\r\n * Multiply matrix A by matrix B to nest transformations\r\n * @static\r\n * @memberOf fabric.util\r\n * @param {Array} a First transformMatrix\r\n * @param {Array} b Second transformMatrix\r\n * @param {Boolean} is2x2 flag to multiply matrices as 2x2 matrices\r\n * @return {Array} The product of the two transform matrices\r\n */\r\n multiplyTransformMatrices: function(a, b, is2x2) {\r\n // Matrix multiply a * b\r\n return [\r\n a[0] * b[0] + a[2] * b[1],\r\n a[1] * b[0] + a[3] * b[1],\r\n a[0] * b[2] + a[2] * b[3],\r\n a[1] * b[2] + a[3] * b[3],\r\n is2x2 ? 0 : a[0] * b[4] + a[2] * b[5] + a[4],\r\n is2x2 ? 0 : a[1] * b[4] + a[3] * b[5] + a[5]\r\n ];\r\n },\r\n\r\n /**\r\n * Decomposes standard 2x3 matrix into transform components\r\n * @static\r\n * @memberOf fabric.util\r\n * @param {Array} a transformMatrix\r\n * @return {Object} Components of transform\r\n */\r\n qrDecompose: function(a) {\r\n var angle = atan2(a[1], a[0]),\r\n denom = pow(a[0], 2) + pow(a[1], 2),\r\n scaleX = sqrt(denom),\r\n scaleY = (a[0] * a[3] - a[2] * a[1]) / scaleX,\r\n skewX = atan2(a[0] * a[2] + a[1] * a [3], denom);\r\n return {\r\n angle: angle / PiBy180,\r\n scaleX: scaleX,\r\n scaleY: scaleY,\r\n skewX: skewX / PiBy180,\r\n skewY: 0,\r\n translateX: a[4],\r\n translateY: a[5]\r\n };\r\n },\r\n\r\n /**\r\n * Returns a transform matrix starting from an object of the same kind of\r\n * the one returned from qrDecompose, useful also if you want to calculate some\r\n * transformations from an object that is not enlived yet\r\n * @static\r\n * @memberOf fabric.util\r\n * @param {Object} options\r\n * @param {Number} [options.angle] angle in degrees\r\n * @return {Number[]} transform matrix\r\n */\r\n calcRotateMatrix: function(options) {\r\n if (!options.angle) {\r\n return fabric.iMatrix.concat();\r\n }\r\n var theta = fabric.util.degreesToRadians(options.angle),\r\n cos = fabric.util.cos(theta),\r\n sin = fabric.util.sin(theta);\r\n return [cos, sin, -sin, cos, 0, 0];\r\n },\r\n\r\n /**\r\n * Returns a transform matrix starting from an object of the same kind of\r\n * the one returned from qrDecompose, useful also if you want to calculate some\r\n * transformations from an object that is not enlived yet.\r\n * is called DimensionsTransformMatrix because those properties are the one that influence\r\n * the size of the resulting box of the object.\r\n * @static\r\n * @memberOf fabric.util\r\n * @param {Object} options\r\n * @param {Number} [options.scaleX]\r\n * @param {Number} [options.scaleY]\r\n * @param {Boolean} [options.flipX]\r\n * @param {Boolean} [options.flipY]\r\n * @param {Number} [options.skewX]\r\n * @param {Number} [options.skewY]\r\n * @return {Number[]} transform matrix\r\n */\r\n calcDimensionsMatrix: function(options) {\r\n var scaleX = typeof options.scaleX === 'undefined' ? 1 : options.scaleX,\r\n scaleY = typeof options.scaleY === 'undefined' ? 1 : options.scaleY,\r\n scaleMatrix = [\r\n options.flipX ? -scaleX : scaleX,\r\n 0,\r\n 0,\r\n options.flipY ? -scaleY : scaleY,\r\n 0,\r\n 0],\r\n multiply = fabric.util.multiplyTransformMatrices,\r\n degreesToRadians = fabric.util.degreesToRadians;\r\n if (options.skewX) {\r\n scaleMatrix = multiply(\r\n scaleMatrix,\r\n [1, 0, Math.tan(degreesToRadians(options.skewX)), 1],\r\n true);\r\n }\r\n if (options.skewY) {\r\n scaleMatrix = multiply(\r\n scaleMatrix,\r\n [1, Math.tan(degreesToRadians(options.skewY)), 0, 1],\r\n true);\r\n }\r\n return scaleMatrix;\r\n },\r\n\r\n /**\r\n * Returns a transform matrix starting from an object of the same kind of\r\n * the one returned from qrDecompose, useful also if you want to calculate some\r\n * transformations from an object that is not enlived yet\r\n * @static\r\n * @memberOf fabric.util\r\n * @param {Object} options\r\n * @param {Number} [options.angle]\r\n * @param {Number} [options.scaleX]\r\n * @param {Number} [options.scaleY]\r\n * @param {Boolean} [options.flipX]\r\n * @param {Boolean} [options.flipY]\r\n * @param {Number} [options.skewX]\r\n * @param {Number} [options.skewX]\r\n * @param {Number} [options.translateX]\r\n * @param {Number} [options.translateY]\r\n * @return {Number[]} transform matrix\r\n */\r\n composeMatrix: function(options) {\r\n var matrix = [1, 0, 0, 1, options.translateX || 0, options.translateY || 0],\r\n multiply = fabric.util.multiplyTransformMatrices;\r\n if (options.angle) {\r\n matrix = multiply(matrix, fabric.util.calcRotateMatrix(options));\r\n }\r\n if (options.scaleX !== 1 || options.scaleY !== 1 ||\r\n options.skewX || options.skewY || options.flipX || options.flipY) {\r\n matrix = multiply(matrix, fabric.util.calcDimensionsMatrix(options));\r\n }\r\n return matrix;\r\n },\r\n\r\n /**\r\n * reset an object transform state to neutral. Top and left are not accounted for\r\n * @static\r\n * @memberOf fabric.util\r\n * @param {fabric.Object} target object to transform\r\n */\r\n resetObjectTransform: function (target) {\r\n target.scaleX = 1;\r\n target.scaleY = 1;\r\n target.skewX = 0;\r\n target.skewY = 0;\r\n target.flipX = false;\r\n target.flipY = false;\r\n target.rotate(0);\r\n },\r\n\r\n /**\r\n * Extract Object transform values\r\n * @static\r\n * @memberOf fabric.util\r\n * @param {fabric.Object} target object to read from\r\n * @return {Object} Components of transform\r\n */\r\n saveObjectTransform: function (target) {\r\n return {\r\n scaleX: target.scaleX,\r\n scaleY: target.scaleY,\r\n skewX: target.skewX,\r\n skewY: target.skewY,\r\n angle: target.angle,\r\n left: target.left,\r\n flipX: target.flipX,\r\n flipY: target.flipY,\r\n top: target.top\r\n };\r\n },\r\n\r\n /**\r\n * Returns true if context has transparent pixel\r\n * at specified location (taking tolerance into account)\r\n * @param {CanvasRenderingContext2D} ctx context\r\n * @param {Number} x x coordinate\r\n * @param {Number} y y coordinate\r\n * @param {Number} tolerance Tolerance\r\n */\r\n isTransparent: function(ctx, x, y, tolerance) {\r\n\r\n // If tolerance is > 0 adjust start coords to take into account.\r\n // If moves off Canvas fix to 0\r\n if (tolerance > 0) {\r\n if (x > tolerance) {\r\n x -= tolerance;\r\n }\r\n else {\r\n x = 0;\r\n }\r\n if (y > tolerance) {\r\n y -= tolerance;\r\n }\r\n else {\r\n y = 0;\r\n }\r\n }\r\n\r\n var _isTransparent = true, i, temp,\r\n imageData = ctx.getImageData(x, y, (tolerance * 2) || 1, (tolerance * 2) || 1),\r\n l = imageData.data.length;\r\n\r\n // Split image data - for tolerance > 1, pixelDataSize = 4;\r\n for (i = 3; i < l; i += 4) {\r\n temp = imageData.data[i];\r\n _isTransparent = temp <= 0;\r\n if (_isTransparent === false) {\r\n break; // Stop if colour found\r\n }\r\n }\r\n\r\n imageData = null;\r\n\r\n return _isTransparent;\r\n },\r\n\r\n /**\r\n * Parse preserveAspectRatio attribute from element\r\n * @param {string} attribute to be parsed\r\n * @return {Object} an object containing align and meetOrSlice attribute\r\n */\r\n parsePreserveAspectRatioAttribute: function(attribute) {\r\n var meetOrSlice = 'meet', alignX = 'Mid', alignY = 'Mid',\r\n aspectRatioAttrs = attribute.split(' '), align;\r\n\r\n if (aspectRatioAttrs && aspectRatioAttrs.length) {\r\n meetOrSlice = aspectRatioAttrs.pop();\r\n if (meetOrSlice !== 'meet' && meetOrSlice !== 'slice') {\r\n align = meetOrSlice;\r\n meetOrSlice = 'meet';\r\n }\r\n else if (aspectRatioAttrs.length) {\r\n align = aspectRatioAttrs.pop();\r\n }\r\n }\r\n //divide align in alignX and alignY\r\n alignX = align !== 'none' ? align.slice(1, 4) : 'none';\r\n alignY = align !== 'none' ? align.slice(5, 8) : 'none';\r\n return {\r\n meetOrSlice: meetOrSlice,\r\n alignX: alignX,\r\n alignY: alignY\r\n };\r\n },\r\n\r\n /**\r\n * Clear char widths cache for the given font family or all the cache if no\r\n * fontFamily is specified.\r\n * Use it if you know you are loading fonts in a lazy way and you are not waiting\r\n * for custom fonts to load properly when adding text objects to the canvas.\r\n * If a text object is added when its own font is not loaded yet, you will get wrong\r\n * measurement and so wrong bounding boxes.\r\n * After the font cache is cleared, either change the textObject text content or call\r\n * initDimensions() to trigger a recalculation\r\n * @memberOf fabric.util\r\n * @param {String} [fontFamily] font family to clear\r\n */\r\n clearFabricFontCache: function(fontFamily) {\r\n fontFamily = (fontFamily || '').toLowerCase();\r\n if (!fontFamily) {\r\n fabric.charWidthsCache = { };\r\n }\r\n else if (fabric.charWidthsCache[fontFamily]) {\r\n delete fabric.charWidthsCache[fontFamily];\r\n }\r\n },\r\n\r\n /**\r\n * Given current aspect ratio, determines the max width and height that can\r\n * respect the total allowed area for the cache.\r\n * @memberOf fabric.util\r\n * @param {Number} ar aspect ratio\r\n * @param {Number} maximumArea Maximum area you want to achieve\r\n * @return {Object.x} Limited dimensions by X\r\n * @return {Object.y} Limited dimensions by Y\r\n */\r\n limitDimsByArea: function(ar, maximumArea) {\r\n var roughWidth = Math.sqrt(maximumArea * ar),\r\n perfLimitSizeY = Math.floor(maximumArea / roughWidth);\r\n return { x: Math.floor(roughWidth), y: perfLimitSizeY };\r\n },\r\n\r\n capValue: function(min, value, max) {\r\n return Math.max(min, Math.min(value, max));\r\n },\r\n\r\n /**\r\n * Finds the scale for the object source to fit inside the object destination,\r\n * keeping aspect ratio intact.\r\n * respect the total allowed area for the cache.\r\n * @memberOf fabric.util\r\n * @param {Object | fabric.Object} source\r\n * @param {Number} source.height natural unscaled height of the object\r\n * @param {Number} source.width natural unscaled width of the object\r\n * @param {Object | fabric.Object} destination\r\n * @param {Number} destination.height natural unscaled height of the object\r\n * @param {Number} destination.width natural unscaled width of the object\r\n * @return {Number} scale factor to apply to source to fit into destination\r\n */\r\n findScaleToFit: function(source, destination) {\r\n return Math.min(destination.width / source.width, destination.height / source.height);\r\n },\r\n\r\n /**\r\n * Finds the scale for the object source to cover entirely the object destination,\r\n * keeping aspect ratio intact.\r\n * respect the total allowed area for the cache.\r\n * @memberOf fabric.util\r\n * @param {Object | fabric.Object} source\r\n * @param {Number} source.height natural unscaled height of the object\r\n * @param {Number} source.width natural unscaled width of the object\r\n * @param {Object | fabric.Object} destination\r\n * @param {Number} destination.height natural unscaled height of the object\r\n * @param {Number} destination.width natural unscaled width of the object\r\n * @return {Number} scale factor to apply to source to cover destination\r\n */\r\n findScaleToCover: function(source, destination) {\r\n return Math.max(destination.width / source.width, destination.height / source.height);\r\n },\r\n\r\n /**\r\n * given an array of 6 number returns something like `\"matrix(...numbers)\"`\r\n * @memberOf fabric.util\r\n * @param {Array} transform an array with 6 numbers\r\n * @return {String} transform matrix for svg\r\n * @return {Object.y} Limited dimensions by Y\r\n */\r\n matrixToSVG: function(transform) {\r\n return 'matrix(' + transform.map(function(value) {\r\n return fabric.util.toFixed(value, fabric.Object.NUM_FRACTION_DIGITS);\r\n }).join(' ') + ')';\r\n },\r\n\r\n /**\r\n * given an object and a transform, apply the inverse transform to the object,\r\n * this is equivalent to remove from that object that transformation, so that\r\n * added in a space with the removed transform, the object will be the same as before.\r\n * Removing from an object a transform that scale by 2 is like scaling it by 1/2.\r\n * Removing from an object a transfrom that rotate by 30deg is like rotating by 30deg\r\n * in the opposite direction.\r\n * This util is used to add objects inside transformed groups or nested groups.\r\n * @memberOf fabric.util\r\n * @param {fabric.Object} object the object you want to transform\r\n * @param {Array} transform the destination transform\r\n */\r\n removeTransformFromObject: function(object, transform) {\r\n var inverted = fabric.util.invertTransform(transform),\r\n finalTransform = fabric.util.multiplyTransformMatrices(inverted, object.calcOwnMatrix());\r\n fabric.util.applyTransformToObject(object, finalTransform);\r\n },\r\n\r\n /**\r\n * given an object and a transform, apply the transform to the object.\r\n * this is equivalent to change the space where the object is drawn.\r\n * Adding to an object a transform that scale by 2 is like scaling it by 2.\r\n * This is used when removing an object from an active selection for example.\r\n * @memberOf fabric.util\r\n * @param {fabric.Object} object the object you want to transform\r\n * @param {Array} transform the destination transform\r\n */\r\n addTransformToObject: function(object, transform) {\r\n fabric.util.applyTransformToObject(\r\n object,\r\n fabric.util.multiplyTransformMatrices(transform, object.calcOwnMatrix())\r\n );\r\n },\r\n\r\n /**\r\n * discard an object transform state and apply the one from the matrix.\r\n * @memberOf fabric.util\r\n * @param {fabric.Object} object the object you want to transform\r\n * @param {Array} transform the destination transform\r\n */\r\n applyTransformToObject: function(object, transform) {\r\n var options = fabric.util.qrDecompose(transform),\r\n center = new fabric.Point(options.translateX, options.translateY);\r\n object.flipX = false;\r\n object.flipY = false;\r\n object.set('scaleX', options.scaleX);\r\n object.set('scaleY', options.scaleY);\r\n object.skewX = options.skewX;\r\n object.skewY = options.skewY;\r\n object.angle = options.angle;\r\n object.setPositionByOrigin(center, 'center', 'center');\r\n },\r\n\r\n /**\r\n * given a width and height, return the size of the bounding box\r\n * that can contains the box with width/height with applied transform\r\n * described in options.\r\n * Use to calculate the boxes around objects for controls.\r\n * @memberOf fabric.util\r\n * @param {Number} width\r\n * @param {Number} height\r\n * @param {Object} options\r\n * @param {Number} options.scaleX\r\n * @param {Number} options.scaleY\r\n * @param {Number} options.skewX\r\n * @param {Number} options.skewY\r\n * @return {Object.x} width of containing\r\n * @return {Object.y} height of containing\r\n */\r\n sizeAfterTransform: function(width, height, options) {\r\n var dimX = width / 2, dimY = height / 2,\r\n points = [\r\n {\r\n x: -dimX,\r\n y: -dimY\r\n },\r\n {\r\n x: dimX,\r\n y: -dimY\r\n },\r\n {\r\n x: -dimX,\r\n y: dimY\r\n },\r\n {\r\n x: dimX,\r\n y: dimY\r\n }],\r\n transformMatrix = fabric.util.calcDimensionsMatrix(options),\r\n bbox = fabric.util.makeBoundingBoxFromPoints(points, transformMatrix);\r\n return {\r\n x: bbox.width,\r\n y: bbox.height,\r\n };\r\n },\r\n\r\n /**\r\n * Merges 2 clip paths into one visually equal clip path\r\n *\r\n * **IMPORTANT**:\\\r\n * Does **NOT** clone the arguments, clone them proir if necessary.\r\n *\r\n * Creates a wrapper (group) that contains one clip path and is clipped by the other so content is kept where both overlap.\r\n * Use this method if both the clip paths may have nested clip paths of their own, so assigning one to the other's clip path property is not possible.\r\n *\r\n * In order to handle the `inverted` property we follow logic described in the following cases:\\\r\n * **(1)** both clip paths are inverted - the clip paths pass the inverted prop to the wrapper and loose it themselves.\\\r\n * **(2)** one is inverted and the other isn't - the wrapper shouldn't become inverted and the inverted clip path must clip the non inverted one to produce an identical visual effect.\\\r\n * **(3)** both clip paths are not inverted - wrapper and clip paths remain unchanged.\r\n *\r\n * @memberOf fabric.util\r\n * @param {fabric.Object} c1\r\n * @param {fabric.Object} c2\r\n * @returns {fabric.Object} merged clip path\r\n */\r\n mergeClipPaths: function (c1, c2) {\r\n var a = c1, b = c2;\r\n if (a.inverted && !b.inverted) {\r\n // case (2)\r\n a = c2;\r\n b = c1;\r\n }\r\n // `b` becomes `a`'s clip path so we transform `b` to `a` coordinate plane\r\n fabric.util.applyTransformToObject(\r\n b,\r\n fabric.util.multiplyTransformMatrices(\r\n fabric.util.invertTransform(a.calcTransformMatrix()),\r\n b.calcTransformMatrix()\r\n )\r\n );\r\n // assign the `inverted` prop to the wrapping group\r\n var inverted = a.inverted && b.inverted;\r\n if (inverted) {\r\n // case (1)\r\n a.inverted = b.inverted = false;\r\n }\r\n return new fabric.Group([a], { clipPath: b, inverted: inverted });\r\n },\r\n\r\n /**\r\n * @memberOf fabric.util\r\n * @param {Object} prevStyle first style to compare\r\n * @param {Object} thisStyle second style to compare\r\n * @param {boolean} forTextSpans whether to check overline, underline, and line-through properties\r\n * @return {boolean} true if the style changed\r\n */\r\n hasStyleChanged: function(prevStyle, thisStyle, forTextSpans) {\r\n forTextSpans = forTextSpans || false;\r\n return (prevStyle.fill !== thisStyle.fill ||\r\n prevStyle.stroke !== thisStyle.stroke ||\r\n prevStyle.strokeWidth !== thisStyle.strokeWidth ||\r\n prevStyle.fontSize !== thisStyle.fontSize ||\r\n prevStyle.fontFamily !== thisStyle.fontFamily ||\r\n prevStyle.fontWeight !== thisStyle.fontWeight ||\r\n prevStyle.fontStyle !== thisStyle.fontStyle ||\r\n prevStyle.deltaY !== thisStyle.deltaY) ||\r\n (forTextSpans &&\r\n (prevStyle.overline !== thisStyle.overline ||\r\n prevStyle.underline !== thisStyle.underline ||\r\n prevStyle.linethrough !== thisStyle.linethrough));\r\n },\r\n\r\n /**\r\n * Returns the array form of a text object's inline styles property with styles grouped in ranges\r\n * rather than per character. This format is less verbose, and is better suited for storage\r\n * so it is used in serialization (not during runtime).\r\n * @memberOf fabric.util\r\n * @param {object} styles per character styles for a text object\r\n * @param {String} text the text string that the styles are applied to\r\n * @return {{start: number, end: number, style: object}[]}\r\n */\r\n stylesToArray: function(styles, text) {\r\n // clone style structure to prevent mutation\r\n var styles = fabric.util.object.clone(styles, true),\r\n textLines = text.split('\\n'),\r\n charIndex = -1, prevStyle = {}, stylesArray = [];\r\n //loop through each textLine\r\n for (var i = 0; i < textLines.length; i++) {\r\n if (!styles[i]) {\r\n //no styles exist for this line, so add the line's length to the charIndex total\r\n charIndex += textLines[i].length;\r\n continue;\r\n }\r\n //loop through each character of the current line\r\n for (var c = 0; c < textLines[i].length; c++) {\r\n charIndex++;\r\n var thisStyle = styles[i][c];\r\n //check if style exists for this character\r\n if (thisStyle) {\r\n var styleChanged = fabric.util.hasStyleChanged(prevStyle, thisStyle, true);\r\n if (styleChanged) {\r\n stylesArray.push({\r\n start: charIndex,\r\n end: charIndex + 1,\r\n style: thisStyle\r\n });\r\n }\r\n else {\r\n //if style is the same as previous character, increase end index\r\n stylesArray[stylesArray.length - 1].end++;\r\n }\r\n }\r\n prevStyle = thisStyle || {};\r\n }\r\n }\r\n return stylesArray;\r\n },\r\n\r\n /**\r\n * Returns the object form of the styles property with styles that are assigned per\r\n * character rather than grouped by range. This format is more verbose, and is\r\n * only used during runtime (not for serialization/storage)\r\n * @memberOf fabric.util\r\n * @param {Array} styles the serialized form of a text object's styles\r\n * @param {String} text the text string that the styles are applied to\r\n * @return {Object}\r\n */\r\n stylesFromArray: function(styles, text) {\r\n if (!Array.isArray(styles)) {\r\n return styles;\r\n }\r\n var textLines = text.split('\\n'),\r\n charIndex = -1, styleIndex = 0, stylesObject = {};\r\n //loop through each textLine\r\n for (var i = 0; i < textLines.length; i++) {\r\n //loop through each character of the current line\r\n for (var c = 0; c < textLines[i].length; c++) {\r\n charIndex++;\r\n //check if there's a style collection that includes the current character\r\n if (styles[styleIndex]\r\n && styles[styleIndex].start <= charIndex\r\n && charIndex < styles[styleIndex].end) {\r\n //create object for line index if it doesn't exist\r\n stylesObject[i] = stylesObject[i] || {};\r\n //assign a style at this character's index\r\n stylesObject[i][c] = Object.assign({}, styles[styleIndex].style);\r\n //if character is at the end of the current style collection, move to the next\r\n if (charIndex === styles[styleIndex].end - 1) {\r\n styleIndex++;\r\n }\r\n }\r\n }\r\n }\r\n return stylesObject;\r\n }\r\n };\r\n})(typeof exports !== 'undefined' ? exports : this);\r\n(function() {\r\n var _join = Array.prototype.join,\r\n commandLengths = {\r\n m: 2,\r\n l: 2,\r\n h: 1,\r\n v: 1,\r\n c: 6,\r\n s: 4,\r\n q: 4,\r\n t: 2,\r\n a: 7\r\n },\r\n repeatedCommands = {\r\n m: 'l',\r\n M: 'L'\r\n };\r\n function segmentToBezier(th2, th3, cosTh, sinTh, rx, ry, cx1, cy1, mT, fromX, fromY) {\r\n var costh2 = fabric.util.cos(th2),\r\n sinth2 = fabric.util.sin(th2),\r\n costh3 = fabric.util.cos(th3),\r\n sinth3 = fabric.util.sin(th3),\r\n toX = cosTh * rx * costh3 - sinTh * ry * sinth3 + cx1,\r\n toY = sinTh * rx * costh3 + cosTh * ry * sinth3 + cy1,\r\n cp1X = fromX + mT * ( -cosTh * rx * sinth2 - sinTh * ry * costh2),\r\n cp1Y = fromY + mT * ( -sinTh * rx * sinth2 + cosTh * ry * costh2),\r\n cp2X = toX + mT * ( cosTh * rx * sinth3 + sinTh * ry * costh3),\r\n cp2Y = toY + mT * ( sinTh * rx * sinth3 - cosTh * ry * costh3);\r\n\r\n return ['C',\r\n cp1X, cp1Y,\r\n cp2X, cp2Y,\r\n toX, toY\r\n ];\r\n }\r\n\r\n /* Adapted from http://dxr.mozilla.org/mozilla-central/source/content/svg/content/src/nsSVGPathDataParser.cpp\r\n * by Andrea Bogazzi code is under MPL. if you don't have a copy of the license you can take it here\r\n * http://mozilla.org/MPL/2.0/\r\n */\r\n function arcToSegments(toX, toY, rx, ry, large, sweep, rotateX) {\r\n var PI = Math.PI, th = rotateX * PI / 180,\r\n sinTh = fabric.util.sin(th),\r\n cosTh = fabric.util.cos(th),\r\n fromX = 0, fromY = 0;\r\n\r\n rx = Math.abs(rx);\r\n ry = Math.abs(ry);\r\n\r\n var px = -cosTh * toX * 0.5 - sinTh * toY * 0.5,\r\n py = -cosTh * toY * 0.5 + sinTh * toX * 0.5,\r\n rx2 = rx * rx, ry2 = ry * ry, py2 = py * py, px2 = px * px,\r\n pl = rx2 * ry2 - rx2 * py2 - ry2 * px2,\r\n root = 0;\r\n\r\n if (pl < 0) {\r\n var s = Math.sqrt(1 - pl / (rx2 * ry2));\r\n rx *= s;\r\n ry *= s;\r\n }\r\n else {\r\n root = (large === sweep ? -1.0 : 1.0) *\r\n Math.sqrt( pl / (rx2 * py2 + ry2 * px2));\r\n }\r\n\r\n var cx = root * rx * py / ry,\r\n cy = -root * ry * px / rx,\r\n cx1 = cosTh * cx - sinTh * cy + toX * 0.5,\r\n cy1 = sinTh * cx + cosTh * cy + toY * 0.5,\r\n mTheta = calcVectorAngle(1, 0, (px - cx) / rx, (py - cy) / ry),\r\n dtheta = calcVectorAngle((px - cx) / rx, (py - cy) / ry, (-px - cx) / rx, (-py - cy) / ry);\r\n\r\n if (sweep === 0 && dtheta > 0) {\r\n dtheta -= 2 * PI;\r\n }\r\n else if (sweep === 1 && dtheta < 0) {\r\n dtheta += 2 * PI;\r\n }\r\n\r\n // Convert into cubic bezier segments <= 90deg\r\n var segments = Math.ceil(Math.abs(dtheta / PI * 2)),\r\n result = [], mDelta = dtheta / segments,\r\n mT = 8 / 3 * Math.sin(mDelta / 4) * Math.sin(mDelta / 4) / Math.sin(mDelta / 2),\r\n th3 = mTheta + mDelta;\r\n\r\n for (var i = 0; i < segments; i++) {\r\n result[i] = segmentToBezier(mTheta, th3, cosTh, sinTh, rx, ry, cx1, cy1, mT, fromX, fromY);\r\n fromX = result[i][5];\r\n fromY = result[i][6];\r\n mTheta = th3;\r\n th3 += mDelta;\r\n }\r\n return result;\r\n }\r\n\r\n /*\r\n * Private\r\n */\r\n function calcVectorAngle(ux, uy, vx, vy) {\r\n var ta = Math.atan2(uy, ux),\r\n tb = Math.atan2(vy, vx);\r\n if (tb >= ta) {\r\n return tb - ta;\r\n }\r\n else {\r\n return 2 * Math.PI - (ta - tb);\r\n }\r\n }\r\n\r\n /**\r\n * Calculate bounding box of a beziercurve\r\n * @param {Number} x0 starting point\r\n * @param {Number} y0\r\n * @param {Number} x1 first control point\r\n * @param {Number} y1\r\n * @param {Number} x2 secondo control point\r\n * @param {Number} y2\r\n * @param {Number} x3 end of bezier\r\n * @param {Number} y3\r\n */\r\n // taken from http://jsbin.com/ivomiq/56/edit no credits available for that.\r\n // TODO: can we normalize this with the starting points set at 0 and then translated the bbox?\r\n function getBoundsOfCurve(x0, y0, x1, y1, x2, y2, x3, y3) {\r\n var argsString;\r\n if (fabric.cachesBoundsOfCurve) {\r\n argsString = _join.call(arguments);\r\n if (fabric.boundsOfCurveCache[argsString]) {\r\n return fabric.boundsOfCurveCache[argsString];\r\n }\r\n }\r\n\r\n var sqrt = Math.sqrt,\r\n min = Math.min, max = Math.max,\r\n abs = Math.abs, tvalues = [],\r\n bounds = [[], []],\r\n a, b, c, t, t1, t2, b2ac, sqrtb2ac;\r\n\r\n b = 6 * x0 - 12 * x1 + 6 * x2;\r\n a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3;\r\n c = 3 * x1 - 3 * x0;\r\n\r\n for (var i = 0; i < 2; ++i) {\r\n if (i > 0) {\r\n b = 6 * y0 - 12 * y1 + 6 * y2;\r\n a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3;\r\n c = 3 * y1 - 3 * y0;\r\n }\r\n\r\n if (abs(a) < 1e-12) {\r\n if (abs(b) < 1e-12) {\r\n continue;\r\n }\r\n t = -c / b;\r\n if (0 < t && t < 1) {\r\n tvalues.push(t);\r\n }\r\n continue;\r\n }\r\n b2ac = b * b - 4 * c * a;\r\n if (b2ac < 0) {\r\n continue;\r\n }\r\n sqrtb2ac = sqrt(b2ac);\r\n t1 = (-b + sqrtb2ac) / (2 * a);\r\n if (0 < t1 && t1 < 1) {\r\n tvalues.push(t1);\r\n }\r\n t2 = (-b - sqrtb2ac) / (2 * a);\r\n if (0 < t2 && t2 < 1) {\r\n tvalues.push(t2);\r\n }\r\n }\r\n\r\n var x, y, j = tvalues.length, jlen = j, mt;\r\n while (j--) {\r\n t = tvalues[j];\r\n mt = 1 - t;\r\n x = (mt * mt * mt * x0) + (3 * mt * mt * t * x1) + (3 * mt * t * t * x2) + (t * t * t * x3);\r\n bounds[0][j] = x;\r\n\r\n y = (mt * mt * mt * y0) + (3 * mt * mt * t * y1) + (3 * mt * t * t * y2) + (t * t * t * y3);\r\n bounds[1][j] = y;\r\n }\r\n\r\n bounds[0][jlen] = x0;\r\n bounds[1][jlen] = y0;\r\n bounds[0][jlen + 1] = x3;\r\n bounds[1][jlen + 1] = y3;\r\n var result = [\r\n {\r\n x: min.apply(null, bounds[0]),\r\n y: min.apply(null, bounds[1])\r\n },\r\n {\r\n x: max.apply(null, bounds[0]),\r\n y: max.apply(null, bounds[1])\r\n }\r\n ];\r\n if (fabric.cachesBoundsOfCurve) {\r\n fabric.boundsOfCurveCache[argsString] = result;\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Converts arc to a bunch of bezier curves\r\n * @param {Number} fx starting point x\r\n * @param {Number} fy starting point y\r\n * @param {Array} coords Arc command\r\n */\r\n function fromArcToBeziers(fx, fy, coords) {\r\n var rx = coords[1],\r\n ry = coords[2],\r\n rot = coords[3],\r\n large = coords[4],\r\n sweep = coords[5],\r\n tx = coords[6],\r\n ty = coords[7],\r\n segsNorm = arcToSegments(tx - fx, ty - fy, rx, ry, large, sweep, rot);\r\n\r\n for (var i = 0, len = segsNorm.length; i < len; i++) {\r\n segsNorm[i][1] += fx;\r\n segsNorm[i][2] += fy;\r\n segsNorm[i][3] += fx;\r\n segsNorm[i][4] += fy;\r\n segsNorm[i][5] += fx;\r\n segsNorm[i][6] += fy;\r\n }\r\n return segsNorm;\r\n };\r\n\r\n /**\r\n * This function take a parsed SVG path and make it simpler for fabricJS logic.\r\n * simplification consist of: only UPPERCASE absolute commands ( relative converted to absolute )\r\n * S converted in C, T converted in Q, A converted in C.\r\n * @param {Array} path the array of commands of a parsed svg path for fabric.Path\r\n * @return {Array} the simplified array of commands of a parsed svg path for fabric.Path\r\n */\r\n function makePathSimpler(path) {\r\n // x and y represent the last point of the path. the previous command point.\r\n // we add them to each relative command to make it an absolute comment.\r\n // we also swap the v V h H with L, because are easier to transform.\r\n var x = 0, y = 0, len = path.length,\r\n // x1 and y1 represent the last point of the subpath. the subpath is started with\r\n // m or M command. When a z or Z command is drawn, x and y need to be resetted to\r\n // the last x1 and y1.\r\n x1 = 0, y1 = 0, current, i, converted,\r\n // previous will host the letter of the previous command, to handle S and T.\r\n // controlX and controlY will host the previous reflected control point\r\n destinationPath = [], previous, controlX, controlY;\r\n for (i = 0; i < len; ++i) {\r\n converted = false;\r\n current = path[i].slice(0);\r\n switch (current[0]) { // first letter\r\n case 'l': // lineto, relative\r\n current[0] = 'L';\r\n current[1] += x;\r\n current[2] += y;\r\n // falls through\r\n case 'L':\r\n x = current[1];\r\n y = current[2];\r\n break;\r\n case 'h': // horizontal lineto, relative\r\n current[1] += x;\r\n // falls through\r\n case 'H':\r\n current[0] = 'L';\r\n current[2] = y;\r\n x = current[1];\r\n break;\r\n case 'v': // vertical lineto, relative\r\n current[1] += y;\r\n // falls through\r\n case 'V':\r\n current[0] = 'L';\r\n y = current[1];\r\n current[1] = x;\r\n current[2] = y;\r\n break;\r\n case 'm': // moveTo, relative\r\n current[0] = 'M';\r\n current[1] += x;\r\n current[2] += y;\r\n // falls through\r\n case 'M':\r\n x = current[1];\r\n y = current[2];\r\n x1 = current[1];\r\n y1 = current[2];\r\n break;\r\n case 'c': // bezierCurveTo, relative\r\n current[0] = 'C';\r\n current[1] += x;\r\n current[2] += y;\r\n current[3] += x;\r\n current[4] += y;\r\n current[5] += x;\r\n current[6] += y;\r\n // falls through\r\n case 'C':\r\n controlX = current[3];\r\n controlY = current[4];\r\n x = current[5];\r\n y = current[6];\r\n break;\r\n case 's': // shorthand cubic bezierCurveTo, relative\r\n current[0] = 'S';\r\n current[1] += x;\r\n current[2] += y;\r\n current[3] += x;\r\n current[4] += y;\r\n // falls through\r\n case 'S':\r\n // would be sScC but since we are swapping sSc for C, we check just that.\r\n if (previous === 'C') {\r\n // calculate reflection of previous control points\r\n controlX = 2 * x - controlX;\r\n controlY = 2 * y - controlY;\r\n }\r\n else {\r\n // If there is no previous command or if the previous command was not a C, c, S, or s,\r\n // the control point is coincident with the current point\r\n controlX = x;\r\n controlY = y;\r\n }\r\n x = current[3];\r\n y = current[4];\r\n current[0] = 'C';\r\n current[5] = current[3];\r\n current[6] = current[4];\r\n current[3] = current[1];\r\n current[4] = current[2];\r\n current[1] = controlX;\r\n current[2] = controlY;\r\n // current[3] and current[4] are NOW the second control point.\r\n // we keep it for the next reflection.\r\n controlX = current[3];\r\n controlY = current[4];\r\n break;\r\n case 'q': // quadraticCurveTo, relative\r\n current[0] = 'Q';\r\n current[1] += x;\r\n current[2] += y;\r\n current[3] += x;\r\n current[4] += y;\r\n // falls through\r\n case 'Q':\r\n controlX = current[1];\r\n controlY = current[2];\r\n x = current[3];\r\n y = current[4];\r\n break;\r\n case 't': // shorthand quadraticCurveTo, relative\r\n current[0] = 'T';\r\n current[1] += x;\r\n current[2] += y;\r\n // falls through\r\n case 'T':\r\n if (previous === 'Q') {\r\n // calculate reflection of previous control point\r\n controlX = 2 * x - controlX;\r\n controlY = 2 * y - controlY;\r\n }\r\n else {\r\n // If there is no previous command or if the previous command was not a Q, q, T or t,\r\n // assume the control point is coincident with the current point\r\n controlX = x;\r\n controlY = y;\r\n }\r\n current[0] = 'Q';\r\n x = current[1];\r\n y = current[2];\r\n current[1] = controlX;\r\n current[2] = controlY;\r\n current[3] = x;\r\n current[4] = y;\r\n break;\r\n case 'a':\r\n current[0] = 'A';\r\n current[6] += x;\r\n current[7] += y;\r\n // falls through\r\n case 'A':\r\n converted = true;\r\n destinationPath = destinationPath.concat(fromArcToBeziers(x, y, current));\r\n x = current[6];\r\n y = current[7];\r\n break;\r\n case 'z':\r\n case 'Z':\r\n x = x1;\r\n y = y1;\r\n break;\r\n default:\r\n }\r\n if (!converted) {\r\n destinationPath.push(current);\r\n }\r\n previous = current[0];\r\n }\r\n return destinationPath;\r\n };\r\n\r\n /**\r\n * Calc length from point x1,y1 to x2,y2\r\n * @param {Number} x1 starting point x\r\n * @param {Number} y1 starting point y\r\n * @param {Number} x2 starting point x\r\n * @param {Number} y2 starting point y\r\n * @return {Number} length of segment\r\n */\r\n function calcLineLength(x1, y1, x2, y2) {\r\n return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\r\n }\r\n\r\n // functions for the Cubic beizer\r\n // taken from: https://github.com/konvajs/konva/blob/7.0.5/src/shapes/Path.ts#L350\r\n function CB1(t) {\r\n return t * t * t;\r\n }\r\n function CB2(t) {\r\n return 3 * t * t * (1 - t);\r\n }\r\n function CB3(t) {\r\n return 3 * t * (1 - t) * (1 - t);\r\n }\r\n function CB4(t) {\r\n return (1 - t) * (1 - t) * (1 - t);\r\n }\r\n\r\n function getPointOnCubicBezierIterator(p1x, p1y, p2x, p2y, p3x, p3y, p4x, p4y) {\r\n return function(pct) {\r\n var c1 = CB1(pct), c2 = CB2(pct), c3 = CB3(pct), c4 = CB4(pct);\r\n return {\r\n x: p4x * c1 + p3x * c2 + p2x * c3 + p1x * c4,\r\n y: p4y * c1 + p3y * c2 + p2y * c3 + p1y * c4\r\n };\r\n };\r\n }\r\n\r\n function getTangentCubicIterator(p1x, p1y, p2x, p2y, p3x, p3y, p4x, p4y) {\r\n return function (pct) {\r\n var invT = 1 - pct,\r\n tangentX = (3 * invT * invT * (p2x - p1x)) + (6 * invT * pct * (p3x - p2x)) +\r\n (3 * pct * pct * (p4x - p3x)),\r\n tangentY = (3 * invT * invT * (p2y - p1y)) + (6 * invT * pct * (p3y - p2y)) +\r\n (3 * pct * pct * (p4y - p3y));\r\n return Math.atan2(tangentY, tangentX);\r\n };\r\n }\r\n\r\n function QB1(t) {\r\n return t * t;\r\n }\r\n\r\n function QB2(t) {\r\n return 2 * t * (1 - t);\r\n }\r\n\r\n function QB3(t) {\r\n return (1 - t) * (1 - t);\r\n }\r\n\r\n function getPointOnQuadraticBezierIterator(p1x, p1y, p2x, p2y, p3x, p3y) {\r\n return function(pct) {\r\n var c1 = QB1(pct), c2 = QB2(pct), c3 = QB3(pct);\r\n return {\r\n x: p3x * c1 + p2x * c2 + p1x * c3,\r\n y: p3y * c1 + p2y * c2 + p1y * c3\r\n };\r\n };\r\n }\r\n\r\n function getTangentQuadraticIterator(p1x, p1y, p2x, p2y, p3x, p3y) {\r\n return function (pct) {\r\n var invT = 1 - pct,\r\n tangentX = (2 * invT * (p2x - p1x)) + (2 * pct * (p3x - p2x)),\r\n tangentY = (2 * invT * (p2y - p1y)) + (2 * pct * (p3y - p2y));\r\n return Math.atan2(tangentY, tangentX);\r\n };\r\n }\r\n\r\n\r\n // this will run over a path segment ( a cubic or quadratic segment) and approximate it\r\n // with 100 segemnts. This will good enough to calculate the length of the curve\r\n function pathIterator(iterator, x1, y1) {\r\n var tempP = { x: x1, y: y1 }, p, tmpLen = 0, perc;\r\n for (perc = 1; perc <= 100; perc += 1) {\r\n p = iterator(perc / 100);\r\n tmpLen += calcLineLength(tempP.x, tempP.y, p.x, p.y);\r\n tempP = p;\r\n }\r\n return tmpLen;\r\n }\r\n\r\n /**\r\n * Given a pathInfo, and a distance in pixels, find the percentage from 0 to 1\r\n * that correspond to that pixels run over the path.\r\n * The percentage will be then used to find the correct point on the canvas for the path.\r\n * @param {Array} segInfo fabricJS collection of information on a parsed path\r\n * @param {Number} distance from starting point, in pixels.\r\n * @return {Object} info object with x and y ( the point on canvas ) and angle, the tangent on that point;\r\n */\r\n function findPercentageForDistance(segInfo, distance) {\r\n var perc = 0, tmpLen = 0, iterator = segInfo.iterator, tempP = { x: segInfo.x, y: segInfo.y },\r\n p, nextLen, nextStep = 0.01, angleFinder = segInfo.angleFinder, lastPerc;\r\n // nextStep > 0.0001 covers 0.00015625 that 1/64th of 1/100\r\n // the path\r\n while (tmpLen < distance && nextStep > 0.0001) {\r\n p = iterator(perc);\r\n lastPerc = perc;\r\n nextLen = calcLineLength(tempP.x, tempP.y, p.x, p.y);\r\n // compare tmpLen each cycle with distance, decide next perc to test.\r\n if ((nextLen + tmpLen) > distance) {\r\n // we discard this step and we make smaller steps.\r\n perc -= nextStep;\r\n nextStep /= 2;\r\n }\r\n else {\r\n tempP = p;\r\n perc += nextStep;\r\n tmpLen += nextLen;\r\n }\r\n }\r\n p.angle = angleFinder(lastPerc);\r\n return p;\r\n }\r\n\r\n /**\r\n * Run over a parsed and simplifed path and extrac some informations.\r\n * informations are length of each command and starting point\r\n * @param {Array} path fabricJS parsed path commands\r\n * @return {Array} path commands informations\r\n */\r\n function getPathSegmentsInfo(path) {\r\n var totalLength = 0, len = path.length, current,\r\n //x2 and y2 are the coords of segment start\r\n //x1 and y1 are the coords of the current point\r\n x1 = 0, y1 = 0, x2 = 0, y2 = 0, info = [], iterator, tempInfo, angleFinder;\r\n for (var i = 0; i < len; i++) {\r\n current = path[i];\r\n tempInfo = {\r\n x: x1,\r\n y: y1,\r\n command: current[0],\r\n };\r\n switch (current[0]) { //first letter\r\n case 'M':\r\n tempInfo.length = 0;\r\n x2 = x1 = current[1];\r\n y2 = y1 = current[2];\r\n break;\r\n case 'L':\r\n tempInfo.length = calcLineLength(x1, y1, current[1], current[2]);\r\n x1 = current[1];\r\n y1 = current[2];\r\n break;\r\n case 'C':\r\n iterator = getPointOnCubicBezierIterator(\r\n x1,\r\n y1,\r\n current[1],\r\n current[2],\r\n current[3],\r\n current[4],\r\n current[5],\r\n current[6]\r\n );\r\n angleFinder = getTangentCubicIterator(\r\n x1,\r\n y1,\r\n current[1],\r\n current[2],\r\n current[3],\r\n current[4],\r\n current[5],\r\n current[6]\r\n );\r\n tempInfo.iterator = iterator;\r\n tempInfo.angleFinder = angleFinder;\r\n tempInfo.length = pathIterator(iterator, x1, y1);\r\n x1 = current[5];\r\n y1 = current[6];\r\n break;\r\n case 'Q':\r\n iterator = getPointOnQuadraticBezierIterator(\r\n x1,\r\n y1,\r\n current[1],\r\n current[2],\r\n current[3],\r\n current[4]\r\n );\r\n angleFinder = getTangentQuadraticIterator(\r\n x1,\r\n y1,\r\n current[1],\r\n current[2],\r\n current[3],\r\n current[4]\r\n );\r\n tempInfo.iterator = iterator;\r\n tempInfo.angleFinder = angleFinder;\r\n tempInfo.length = pathIterator(iterator, x1, y1);\r\n x1 = current[3];\r\n y1 = current[4];\r\n break;\r\n case 'Z':\r\n case 'z':\r\n // we add those in order to ease calculations later\r\n tempInfo.destX = x2;\r\n tempInfo.destY = y2;\r\n tempInfo.length = calcLineLength(x1, y1, x2, y2);\r\n x1 = x2;\r\n y1 = y2;\r\n break;\r\n }\r\n totalLength += tempInfo.length;\r\n info.push(tempInfo);\r\n }\r\n info.push({ length: totalLength, x: x1, y: y1 });\r\n return info;\r\n }\r\n\r\n function getPointOnPath(path, distance, infos) {\r\n if (!infos) {\r\n infos = getPathSegmentsInfo(path);\r\n }\r\n var i = 0;\r\n while ((distance - infos[i].length > 0) && i < (infos.length - 2)) {\r\n distance -= infos[i].length;\r\n i++;\r\n }\r\n // var distance = infos[infos.length - 1] * perc;\r\n var segInfo = infos[i], segPercent = distance / segInfo.length,\r\n command = segInfo.command, segment = path[i], info;\r\n\r\n switch (command) {\r\n case 'M':\r\n return { x: segInfo.x, y: segInfo.y, angle: 0 };\r\n case 'Z':\r\n case 'z':\r\n info = new fabric.Point(segInfo.x, segInfo.y).lerp(\r\n new fabric.Point(segInfo.destX, segInfo.destY),\r\n segPercent\r\n );\r\n info.angle = Math.atan2(segInfo.destY - segInfo.y, segInfo.destX - segInfo.x);\r\n return info;\r\n case 'L':\r\n info = new fabric.Point(segInfo.x, segInfo.y).lerp(\r\n new fabric.Point(segment[1], segment[2]),\r\n segPercent\r\n );\r\n info.angle = Math.atan2(segment[2] - segInfo.y, segment[1] - segInfo.x);\r\n return info;\r\n case 'C':\r\n return findPercentageForDistance(segInfo, distance);\r\n case 'Q':\r\n return findPercentageForDistance(segInfo, distance);\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param {string} pathString\r\n * @return {(string|number)[][]} An array of SVG path commands\r\n * @example Usage\r\n * parsePath('M 3 4 Q 3 5 2 1 4 0 Q 9 12 2 1 4 0') === [\r\n * ['M', 3, 4],\r\n * ['Q', 3, 5, 2, 1, 4, 0],\r\n * ['Q', 9, 12, 2, 1, 4, 0],\r\n * ];\r\n *\r\n */\r\n function parsePath(pathString) {\r\n var result = [],\r\n coords = [],\r\n currentPath,\r\n parsed,\r\n re = fabric.rePathCommand,\r\n rNumber = '[-+]?(?:\\\\d*\\\\.\\\\d+|\\\\d+\\\\.?)(?:[eE][-+]?\\\\d+)?\\\\s*',\r\n rNumberCommaWsp = '(' + rNumber + ')' + fabric.commaWsp,\r\n rFlagCommaWsp = '([01])' + fabric.commaWsp + '?',\r\n rArcSeq = rNumberCommaWsp + '?' + rNumberCommaWsp + '?' + rNumberCommaWsp + rFlagCommaWsp + rFlagCommaWsp +\r\n rNumberCommaWsp + '?(' + rNumber + ')',\r\n regArcArgumentSequence = new RegExp(rArcSeq, 'g'),\r\n match,\r\n coordsStr,\r\n // one of commands (m,M,l,L,q,Q,c,C,etc.) followed by non-command characters (i.e. command values)\r\n path;\r\n if (!pathString || !pathString.match) {\r\n return result;\r\n }\r\n path = pathString.match(/[mzlhvcsqta][^mzlhvcsqta]*/gi);\r\n\r\n for (var i = 0, coordsParsed, len = path.length; i < len; i++) {\r\n currentPath = path[i];\r\n\r\n coordsStr = currentPath.slice(1).trim();\r\n coords.length = 0;\r\n\r\n var command = currentPath.charAt(0);\r\n coordsParsed = [command];\r\n\r\n if (command.toLowerCase() === 'a') {\r\n // arcs have special flags that apparently don't require spaces so handle special\r\n for (var args; (args = regArcArgumentSequence.exec(coordsStr));) {\r\n for (var j = 1; j < args.length; j++) {\r\n coords.push(args[j]);\r\n }\r\n }\r\n }\r\n else {\r\n while ((match = re.exec(coordsStr))) {\r\n coords.push(match[0]);\r\n }\r\n }\r\n\r\n for (var j = 0, jlen = coords.length; j < jlen; j++) {\r\n parsed = parseFloat(coords[j]);\r\n if (!isNaN(parsed)) {\r\n coordsParsed.push(parsed);\r\n }\r\n }\r\n\r\n var commandLength = commandLengths[command.toLowerCase()],\r\n repeatedCommand = repeatedCommands[command] || command;\r\n\r\n if (coordsParsed.length - 1 > commandLength) {\r\n for (var k = 1, klen = coordsParsed.length; k < klen; k += commandLength) {\r\n result.push([command].concat(coordsParsed.slice(k, k + commandLength)));\r\n command = repeatedCommand;\r\n }\r\n }\r\n else {\r\n result.push(coordsParsed);\r\n }\r\n }\r\n\r\n return result;\r\n };\r\n\r\n /**\r\n *\r\n * Converts points to a smooth SVG path\r\n * @param {{ x: number,y: number }[]} points Array of points\r\n * @param {number} [correction] Apply a correction to the path (usually we use `width / 1000`). If value is undefined 0 is used as the correction value.\r\n * @return {(string|number)[][]} An array of SVG path commands\r\n */\r\n function getSmoothPathFromPoints(points, correction) {\r\n var path = [], i,\r\n p1 = new fabric.Point(points[0].x, points[0].y),\r\n p2 = new fabric.Point(points[1].x, points[1].y),\r\n len = points.length, multSignX = 1, multSignY = 0, manyPoints = len > 2;\r\n correction = correction || 0;\r\n\r\n if (manyPoints) {\r\n multSignX = points[2].x < p2.x ? -1 : points[2].x === p2.x ? 0 : 1;\r\n multSignY = points[2].y < p2.y ? -1 : points[2].y === p2.y ? 0 : 1;\r\n }\r\n path.push(['M', p1.x - multSignX * correction, p1.y - multSignY * correction]);\r\n for (i = 1; i < len; i++) {\r\n if (!p1.eq(p2)) {\r\n var midPoint = p1.midPointFrom(p2);\r\n // p1 is our bezier control point\r\n // midpoint is our endpoint\r\n // start point is p(i-1) value.\r\n path.push(['Q', p1.x, p1.y, midPoint.x, midPoint.y]);\r\n }\r\n p1 = points[i];\r\n if ((i + 1) < points.length) {\r\n p2 = points[i + 1];\r\n }\r\n }\r\n if (manyPoints) {\r\n multSignX = p1.x > points[i - 2].x ? 1 : p1.x === points[i - 2].x ? 0 : -1;\r\n multSignY = p1.y > points[i - 2].y ? 1 : p1.y === points[i - 2].y ? 0 : -1;\r\n }\r\n path.push(['L', p1.x + multSignX * correction, p1.y + multSignY * correction]);\r\n return path;\r\n }\r\n /**\r\n * Transform a path by transforming each segment.\r\n * it has to be a simplified path or it won't work.\r\n * WARNING: this depends from pathOffset for correct operation\r\n * @param {Array} path fabricJS parsed and simplified path commands\r\n * @param {Array} transform matrix that represent the transformation\r\n * @param {Object} [pathOffset] the fabric.Path pathOffset\r\n * @param {Number} pathOffset.x\r\n * @param {Number} pathOffset.y\r\n * @returns {Array} the transformed path\r\n */\r\n function transformPath(path, transform, pathOffset) {\r\n if (pathOffset) {\r\n transform = fabric.util.multiplyTransformMatrices(\r\n transform,\r\n [1, 0, 0, 1, -pathOffset.x, -pathOffset.y]\r\n );\r\n }\r\n return path.map(function(pathSegment) {\r\n var newSegment = pathSegment.slice(0), point = {};\r\n for (var i = 1; i < pathSegment.length - 1; i += 2) {\r\n point.x = pathSegment[i];\r\n point.y = pathSegment[i + 1];\r\n point = fabric.util.transformPoint(point, transform);\r\n newSegment[i] = point.x;\r\n newSegment[i + 1] = point.y;\r\n }\r\n return newSegment;\r\n });\r\n }\r\n\r\n /**\r\n * Join path commands to go back to svg format\r\n * @param {Array} pathData fabricJS parsed path commands\r\n * @return {String} joined path 'M 0 0 L 20 30'\r\n */\r\n fabric.util.joinPath = function(pathData) {\r\n return pathData.map(function (segment) { return segment.join(' '); }).join(' ');\r\n };\r\n fabric.util.parsePath = parsePath;\r\n fabric.util.makePathSimpler = makePathSimpler;\r\n fabric.util.getSmoothPathFromPoints = getSmoothPathFromPoints;\r\n fabric.util.getPathSegmentsInfo = getPathSegmentsInfo;\r\n fabric.util.getBoundsOfCurve = getBoundsOfCurve;\r\n fabric.util.getPointOnPath = getPointOnPath;\r\n fabric.util.transformPath = transformPath;\r\n})();\r\n(function() {\r\n\r\n var slice = Array.prototype.slice;\r\n\r\n /**\r\n * Invokes method on all items in a given array\r\n * @memberOf fabric.util.array\r\n * @param {Array} array Array to iterate over\r\n * @param {String} method Name of a method to invoke\r\n * @return {Array}\r\n */\r\n function invoke(array, method) {\r\n var args = slice.call(arguments, 2), result = [];\r\n for (var i = 0, len = array.length; i < len; i++) {\r\n result[i] = args.length ? array[i][method].apply(array[i], args) : array[i][method].call(array[i]);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Finds maximum value in array (not necessarily \"first\" one)\r\n * @memberOf fabric.util.array\r\n * @param {Array} array Array to iterate over\r\n * @param {String} byProperty\r\n * @return {*}\r\n */\r\n function max(array, byProperty) {\r\n return find(array, byProperty, function(value1, value2) {\r\n return value1 >= value2;\r\n });\r\n }\r\n\r\n /**\r\n * Finds minimum value in array (not necessarily \"first\" one)\r\n * @memberOf fabric.util.array\r\n * @param {Array} array Array to iterate over\r\n * @param {String} byProperty\r\n * @return {*}\r\n */\r\n function min(array, byProperty) {\r\n return find(array, byProperty, function(value1, value2) {\r\n return value1 < value2;\r\n });\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n function fill(array, value) {\r\n var k = array.length;\r\n while (k--) {\r\n array[k] = value;\r\n }\r\n return array;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n function find(array, byProperty, condition) {\r\n if (!array || array.length === 0) {\r\n return;\r\n }\r\n\r\n var i = array.length - 1,\r\n result = byProperty ? array[i][byProperty] : array[i];\r\n if (byProperty) {\r\n while (i--) {\r\n if (condition(array[i][byProperty], result)) {\r\n result = array[i][byProperty];\r\n }\r\n }\r\n }\r\n else {\r\n while (i--) {\r\n if (condition(array[i], result)) {\r\n result = array[i];\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * @namespace fabric.util.array\r\n */\r\n fabric.util.array = {\r\n fill: fill,\r\n invoke: invoke,\r\n min: min,\r\n max: max\r\n };\r\n\r\n})();\r\n(function() {\r\n /**\r\n * Copies all enumerable properties of one js object to another\r\n * this does not and cannot compete with generic utils.\r\n * Does not clone or extend fabric.Object subclasses.\r\n * This is mostly for internal use and has extra handling for fabricJS objects\r\n * it skips the canvas and group properties in deep cloning.\r\n * @memberOf fabric.util.object\r\n * @param {Object} destination Where to copy to\r\n * @param {Object} source Where to copy from\r\n * @param {Boolean} [deep] Whether to extend nested objects\r\n * @return {Object}\r\n */\r\n\r\n function extend(destination, source, deep) {\r\n // JScript DontEnum bug is not taken care of\r\n // the deep clone is for internal use, is not meant to avoid\r\n // javascript traps or cloning html element or self referenced objects.\r\n if (deep) {\r\n if (!fabric.isLikelyNode && source instanceof Element) {\r\n // avoid cloning deep images, canvases,\r\n destination = source;\r\n }\r\n else if (source instanceof Array) {\r\n destination = [];\r\n for (var i = 0, len = source.length; i < len; i++) {\r\n destination[i] = extend({ }, source[i], deep);\r\n }\r\n }\r\n else if (source && typeof source === 'object') {\r\n for (var property in source) {\r\n if (property === 'canvas' || property === 'group') {\r\n // we do not want to clone this props at all.\r\n // we want to keep the keys in the copy\r\n destination[property] = null;\r\n }\r\n else if (source.hasOwnProperty(property)) {\r\n destination[property] = extend({ }, source[property], deep);\r\n }\r\n }\r\n }\r\n else {\r\n // this sounds odd for an extend but is ok for recursive use\r\n destination = source;\r\n }\r\n }\r\n else {\r\n for (var property in source) {\r\n destination[property] = source[property];\r\n }\r\n }\r\n return destination;\r\n }\r\n\r\n /**\r\n * Creates an empty object and copies all enumerable properties of another object to it\r\n * This method is mostly for internal use, and not intended for duplicating shapes in canvas. \r\n * @memberOf fabric.util.object\r\n * @param {Object} object Object to clone\r\n * @param {Boolean} [deep] Whether to clone nested objects\r\n * @return {Object}\r\n */\r\n\r\n //TODO: this function return an empty object if you try to clone null\r\n function clone(object, deep) {\r\n return extend({ }, object, deep);\r\n }\r\n\r\n /** @namespace fabric.util.object */\r\n fabric.util.object = {\r\n extend: extend,\r\n clone: clone\r\n };\r\n fabric.util.object.extend(fabric.util, fabric.Observable);\r\n})();\r\n(function() {\r\n\r\n /**\r\n * Camelizes a string\r\n * @memberOf fabric.util.string\r\n * @param {String} string String to camelize\r\n * @return {String} Camelized version of a string\r\n */\r\n function camelize(string) {\r\n return string.replace(/-+(.)?/g, function(match, character) {\r\n return character ? character.toUpperCase() : '';\r\n });\r\n }\r\n\r\n /**\r\n * Capitalizes a string\r\n * @memberOf fabric.util.string\r\n * @param {String} string String to capitalize\r\n * @param {Boolean} [firstLetterOnly] If true only first letter is capitalized\r\n * and other letters stay untouched, if false first letter is capitalized\r\n * and other letters are converted to lowercase.\r\n * @return {String} Capitalized version of a string\r\n */\r\n function capitalize(string, firstLetterOnly) {\r\n return string.charAt(0).toUpperCase() +\r\n (firstLetterOnly ? string.slice(1) : string.slice(1).toLowerCase());\r\n }\r\n\r\n /**\r\n * Escapes XML in a string\r\n * @memberOf fabric.util.string\r\n * @param {String} string String to escape\r\n * @return {String} Escaped version of a string\r\n */\r\n function escapeXml(string) {\r\n return string.replace(/&/g, '&')\r\n .replace(/\"/g, '"')\r\n .replace(/'/g, ''')\r\n .replace(//g, '>');\r\n }\r\n\r\n /**\r\n * Divide a string in the user perceived single units\r\n * @memberOf fabric.util.string\r\n * @param {String} textstring String to escape\r\n * @return {Array} array containing the graphemes\r\n */\r\n function graphemeSplit(textstring) {\r\n var i = 0, chr, graphemes = [];\r\n for (i = 0, chr; i < textstring.length; i++) {\r\n if ((chr = getWholeChar(textstring, i)) === false) {\r\n continue;\r\n }\r\n graphemes.push(chr);\r\n }\r\n return graphemes;\r\n }\r\n\r\n // taken from mdn in the charAt doc page.\r\n function getWholeChar(str, i) {\r\n var code = str.charCodeAt(i);\r\n\r\n if (isNaN(code)) {\r\n return ''; // Position not found\r\n }\r\n if (code < 0xD800 || code > 0xDFFF) {\r\n return str.charAt(i);\r\n }\r\n\r\n // High surrogate (could change last hex to 0xDB7F to treat high private\r\n // surrogates as single characters)\r\n if (0xD800 <= code && code <= 0xDBFF) {\r\n if (str.length <= (i + 1)) {\r\n throw 'High surrogate without following low surrogate';\r\n }\r\n var next = str.charCodeAt(i + 1);\r\n if (0xDC00 > next || next > 0xDFFF) {\r\n throw 'High surrogate without following low surrogate';\r\n }\r\n return str.charAt(i) + str.charAt(i + 1);\r\n }\r\n // Low surrogate (0xDC00 <= code && code <= 0xDFFF)\r\n if (i === 0) {\r\n throw 'Low surrogate without preceding high surrogate';\r\n }\r\n var prev = str.charCodeAt(i - 1);\r\n\r\n // (could change last hex to 0xDB7F to treat high private\r\n // surrogates as single characters)\r\n if (0xD800 > prev || prev > 0xDBFF) {\r\n throw 'Low surrogate without preceding high surrogate';\r\n }\r\n // We can pass over low surrogates now as the second component\r\n // in a pair which we have already processed\r\n return false;\r\n }\r\n\r\n\r\n /**\r\n * String utilities\r\n * @namespace fabric.util.string\r\n */\r\n fabric.util.string = {\r\n camelize: camelize,\r\n capitalize: capitalize,\r\n escapeXml: escapeXml,\r\n graphemeSplit: graphemeSplit\r\n };\r\n})();\r\n(function() {\r\n\r\n var slice = Array.prototype.slice, emptyFunction = function() { },\r\n\r\n IS_DONTENUM_BUGGY = (function() {\r\n for (var p in { toString: 1 }) {\r\n if (p === 'toString') {\r\n return false;\r\n }\r\n }\r\n return true;\r\n })(),\r\n\r\n /** @ignore */\r\n addMethods = function(klass, source, parent) {\r\n for (var property in source) {\r\n\r\n if (property in klass.prototype &&\r\n typeof klass.prototype[property] === 'function' &&\r\n (source[property] + '').indexOf('callSuper') > -1) {\r\n\r\n klass.prototype[property] = (function(property) {\r\n return function() {\r\n\r\n var superclass = this.constructor.superclass;\r\n this.constructor.superclass = parent;\r\n var returnValue = source[property].apply(this, arguments);\r\n this.constructor.superclass = superclass;\r\n\r\n if (property !== 'initialize') {\r\n return returnValue;\r\n }\r\n };\r\n })(property);\r\n }\r\n else {\r\n klass.prototype[property] = source[property];\r\n }\r\n\r\n if (IS_DONTENUM_BUGGY) {\r\n if (source.toString !== Object.prototype.toString) {\r\n klass.prototype.toString = source.toString;\r\n }\r\n if (source.valueOf !== Object.prototype.valueOf) {\r\n klass.prototype.valueOf = source.valueOf;\r\n }\r\n }\r\n }\r\n };\r\n\r\n function Subclass() { }\r\n\r\n function callSuper(methodName) {\r\n var parentMethod = null,\r\n _this = this;\r\n\r\n // climb prototype chain to find method not equal to callee's method\r\n while (_this.constructor.superclass) {\r\n var superClassMethod = _this.constructor.superclass.prototype[methodName];\r\n if (_this[methodName] !== superClassMethod) {\r\n parentMethod = superClassMethod;\r\n break;\r\n }\r\n // eslint-disable-next-line\r\n _this = _this.constructor.superclass.prototype;\r\n }\r\n\r\n if (!parentMethod) {\r\n return console.log('tried to callSuper ' + methodName + ', method not found in prototype chain', this);\r\n }\r\n\r\n return (arguments.length > 1)\r\n ? parentMethod.apply(this, slice.call(arguments, 1))\r\n : parentMethod.call(this);\r\n }\r\n\r\n /**\r\n * Helper for creation of \"classes\".\r\n * @memberOf fabric.util\r\n * @param {Function} [parent] optional \"Class\" to inherit from\r\n * @param {Object} [properties] Properties shared by all instances of this class\r\n * (be careful modifying objects defined here as this would affect all instances)\r\n */\r\n function createClass() {\r\n var parent = null,\r\n properties = slice.call(arguments, 0);\r\n\r\n if (typeof properties[0] === 'function') {\r\n parent = properties.shift();\r\n }\r\n function klass() {\r\n this.initialize.apply(this, arguments);\r\n }\r\n\r\n klass.superclass = parent;\r\n klass.subclasses = [];\r\n\r\n if (parent) {\r\n Subclass.prototype = parent.prototype;\r\n klass.prototype = new Subclass();\r\n parent.subclasses.push(klass);\r\n }\r\n for (var i = 0, length = properties.length; i < length; i++) {\r\n addMethods(klass, properties[i], parent);\r\n }\r\n if (!klass.prototype.initialize) {\r\n klass.prototype.initialize = emptyFunction;\r\n }\r\n klass.prototype.constructor = klass;\r\n klass.prototype.callSuper = callSuper;\r\n return klass;\r\n }\r\n\r\n fabric.util.createClass = createClass;\r\n})();\r\n(function () {\r\n // since ie11 can use addEventListener but they do not support options, i need to check\r\n var couldUseAttachEvent = !!fabric.document.createElement('div').attachEvent,\r\n touchEvents = ['touchstart', 'touchmove', 'touchend'];\r\n /**\r\n * Adds an event listener to an element\r\n * @function\r\n * @memberOf fabric.util\r\n * @param {HTMLElement} element\r\n * @param {String} eventName\r\n * @param {Function} handler\r\n */\r\n fabric.util.addListener = function(element, eventName, handler, options) {\r\n element && element.addEventListener(eventName, handler, couldUseAttachEvent ? false : options);\r\n };\r\n\r\n /**\r\n * Removes an event listener from an element\r\n * @function\r\n * @memberOf fabric.util\r\n * @param {HTMLElement} element\r\n * @param {String} eventName\r\n * @param {Function} handler\r\n */\r\n fabric.util.removeListener = function(element, eventName, handler, options) {\r\n element && element.removeEventListener(eventName, handler, couldUseAttachEvent ? false : options);\r\n };\r\n\r\n function getTouchInfo(event) {\r\n var touchProp = event.changedTouches;\r\n if (touchProp && touchProp[0]) {\r\n return touchProp[0];\r\n }\r\n return event;\r\n }\r\n\r\n fabric.util.getPointer = function(event) {\r\n var element = event.target,\r\n scroll = fabric.util.getScrollLeftTop(element),\r\n _evt = getTouchInfo(event);\r\n return {\r\n x: _evt.clientX + scroll.left,\r\n y: _evt.clientY + scroll.top\r\n };\r\n };\r\n\r\n fabric.util.isTouchEvent = function(event) {\r\n return touchEvents.indexOf(event.type) > -1 || event.pointerType === 'touch';\r\n };\r\n})();\r\n(function () {\r\n\r\n /**\r\n * Cross-browser wrapper for setting element's style\r\n * @memberOf fabric.util\r\n * @param {HTMLElement} element\r\n * @param {Object} styles\r\n * @return {HTMLElement} Element that was passed as a first argument\r\n */\r\n function setStyle(element, styles) {\r\n var elementStyle = element.style;\r\n if (!elementStyle) {\r\n return element;\r\n }\r\n if (typeof styles === 'string') {\r\n element.style.cssText += ';' + styles;\r\n return styles.indexOf('opacity') > -1\r\n ? setOpacity(element, styles.match(/opacity:\\s*(\\d?\\.?\\d*)/)[1])\r\n : element;\r\n }\r\n for (var property in styles) {\r\n if (property === 'opacity') {\r\n setOpacity(element, styles[property]);\r\n }\r\n else {\r\n var normalizedProperty = (property === 'float' || property === 'cssFloat')\r\n ? (typeof elementStyle.styleFloat === 'undefined' ? 'cssFloat' : 'styleFloat')\r\n : property;\r\n elementStyle.setProperty(normalizedProperty, styles[property]);\r\n }\r\n }\r\n return element;\r\n }\r\n\r\n var parseEl = fabric.document.createElement('div'),\r\n supportsOpacity = typeof parseEl.style.opacity === 'string',\r\n supportsFilters = typeof parseEl.style.filter === 'string',\r\n reOpacity = /alpha\\s*\\(\\s*opacity\\s*=\\s*([^\\)]+)\\)/,\r\n\r\n /** @ignore */\r\n setOpacity = function (element) { return element; };\r\n\r\n if (supportsOpacity) {\r\n /** @ignore */\r\n setOpacity = function(element, value) {\r\n element.style.opacity = value;\r\n return element;\r\n };\r\n }\r\n else if (supportsFilters) {\r\n /** @ignore */\r\n setOpacity = function(element, value) {\r\n var es = element.style;\r\n if (element.currentStyle && !element.currentStyle.hasLayout) {\r\n es.zoom = 1;\r\n }\r\n if (reOpacity.test(es.filter)) {\r\n value = value >= 0.9999 ? '' : ('alpha(opacity=' + (value * 100) + ')');\r\n es.filter = es.filter.replace(reOpacity, value);\r\n }\r\n else {\r\n es.filter += ' alpha(opacity=' + (value * 100) + ')';\r\n }\r\n return element;\r\n };\r\n }\r\n\r\n fabric.util.setStyle = setStyle;\r\n\r\n})();\r\n(function() {\r\n\r\n var _slice = Array.prototype.slice;\r\n\r\n /**\r\n * Takes id and returns an element with that id (if one exists in a document)\r\n * @memberOf fabric.util\r\n * @param {String|HTMLElement} id\r\n * @return {HTMLElement|null}\r\n */\r\n function getById(id) {\r\n return typeof id === 'string' ? fabric.document.getElementById(id) : id;\r\n }\r\n\r\n var sliceCanConvertNodelists,\r\n /**\r\n * Converts an array-like object (e.g. arguments or NodeList) to an array\r\n * @memberOf fabric.util\r\n * @param {Object} arrayLike\r\n * @return {Array}\r\n */\r\n toArray = function(arrayLike) {\r\n return _slice.call(arrayLike, 0);\r\n };\r\n\r\n try {\r\n sliceCanConvertNodelists = toArray(fabric.document.childNodes) instanceof Array;\r\n }\r\n catch (err) { }\r\n\r\n if (!sliceCanConvertNodelists) {\r\n toArray = function(arrayLike) {\r\n var arr = new Array(arrayLike.length), i = arrayLike.length;\r\n while (i--) {\r\n arr[i] = arrayLike[i];\r\n }\r\n return arr;\r\n };\r\n }\r\n\r\n /**\r\n * Creates specified element with specified attributes\r\n * @memberOf fabric.util\r\n * @param {String} tagName Type of an element to create\r\n * @param {Object} [attributes] Attributes to set on an element\r\n * @return {HTMLElement} Newly created element\r\n */\r\n function makeElement(tagName, attributes) {\r\n var el = fabric.document.createElement(tagName);\r\n for (var prop in attributes) {\r\n if (prop === 'class') {\r\n el.className = attributes[prop];\r\n }\r\n else if (prop === 'for') {\r\n el.htmlFor = attributes[prop];\r\n }\r\n else {\r\n el.setAttribute(prop, attributes[prop]);\r\n }\r\n }\r\n return el;\r\n }\r\n\r\n /**\r\n * Adds class to an element\r\n * @memberOf fabric.util\r\n * @param {HTMLElement} element Element to add class to\r\n * @param {String} className Class to add to an element\r\n */\r\n function addClass(element, className) {\r\n if (element && (' ' + element.className + ' ').indexOf(' ' + className + ' ') === -1) {\r\n element.className += (element.className ? ' ' : '') + className;\r\n }\r\n }\r\n\r\n /**\r\n * Wraps element with another element\r\n * @memberOf fabric.util\r\n * @param {HTMLElement} element Element to wrap\r\n * @param {HTMLElement|String} wrapper Element to wrap with\r\n * @param {Object} [attributes] Attributes to set on a wrapper\r\n * @return {HTMLElement} wrapper\r\n */\r\n function wrapElement(element, wrapper, attributes) {\r\n if (typeof wrapper === 'string') {\r\n wrapper = makeElement(wrapper, attributes);\r\n }\r\n if (element.parentNode) {\r\n element.parentNode.replaceChild(wrapper, element);\r\n }\r\n wrapper.appendChild(element);\r\n return wrapper;\r\n }\r\n\r\n /**\r\n * Returns element scroll offsets\r\n * @memberOf fabric.util\r\n * @param {HTMLElement} element Element to operate on\r\n * @return {Object} Object with left/top values\r\n */\r\n function getScrollLeftTop(element) {\r\n\r\n var left = 0,\r\n top = 0,\r\n docElement = fabric.document.documentElement,\r\n body = fabric.document.body || {\r\n scrollLeft: 0, scrollTop: 0\r\n };\r\n\r\n // While loop checks (and then sets element to) .parentNode OR .host\r\n // to account for ShadowDOM. We still want to traverse up out of ShadowDOM,\r\n // but the .parentNode of a root ShadowDOM node will always be null, instead\r\n // it should be accessed through .host. See http://stackoverflow.com/a/24765528/4383938\r\n while (element && (element.parentNode || element.host)) {\r\n\r\n // Set element to element parent, or 'host' in case of ShadowDOM\r\n element = element.parentNode || element.host;\r\n\r\n if (element === fabric.document) {\r\n left = body.scrollLeft || docElement.scrollLeft || 0;\r\n top = body.scrollTop || docElement.scrollTop || 0;\r\n }\r\n else {\r\n left += element.scrollLeft || 0;\r\n top += element.scrollTop || 0;\r\n }\r\n\r\n if (element.nodeType === 1 && element.style.position === 'fixed') {\r\n break;\r\n }\r\n }\r\n\r\n return { left: left, top: top };\r\n }\r\n\r\n /**\r\n * Returns offset for a given element\r\n * @function\r\n * @memberOf fabric.util\r\n * @param {HTMLElement} element Element to get offset for\r\n * @return {Object} Object with \"left\" and \"top\" properties\r\n */\r\n function getElementOffset(element) {\r\n var docElem,\r\n doc = element && element.ownerDocument,\r\n box = { left: 0, top: 0 },\r\n offset = { left: 0, top: 0 },\r\n scrollLeftTop,\r\n offsetAttributes = {\r\n borderLeftWidth: 'left',\r\n borderTopWidth: 'top',\r\n paddingLeft: 'left',\r\n paddingTop: 'top'\r\n };\r\n\r\n if (!doc) {\r\n return offset;\r\n }\r\n\r\n for (var attr in offsetAttributes) {\r\n offset[offsetAttributes[attr]] += parseInt(getElementStyle(element, attr), 10) || 0;\r\n }\r\n\r\n docElem = doc.documentElement;\r\n if ( typeof element.getBoundingClientRect !== 'undefined' ) {\r\n box = element.getBoundingClientRect();\r\n }\r\n\r\n scrollLeftTop = getScrollLeftTop(element);\r\n\r\n return {\r\n left: box.left + scrollLeftTop.left - (docElem.clientLeft || 0) + offset.left,\r\n top: box.top + scrollLeftTop.top - (docElem.clientTop || 0) + offset.top\r\n };\r\n }\r\n\r\n /**\r\n * Returns style attribute value of a given element\r\n * @memberOf fabric.util\r\n * @param {HTMLElement} element Element to get style attribute for\r\n * @param {String} attr Style attribute to get for element\r\n * @return {String} Style attribute value of the given element.\r\n */\r\n var getElementStyle;\r\n if (fabric.document.defaultView && fabric.document.defaultView.getComputedStyle) {\r\n getElementStyle = function(element, attr) {\r\n var style = fabric.document.defaultView.getComputedStyle(element, null);\r\n return style ? style[attr] : undefined;\r\n };\r\n }\r\n else {\r\n getElementStyle = function(element, attr) {\r\n var value = element.style[attr];\r\n if (!value && element.currentStyle) {\r\n value = element.currentStyle[attr];\r\n }\r\n return value;\r\n };\r\n }\r\n\r\n (function () {\r\n var style = fabric.document.documentElement.style,\r\n selectProp = 'userSelect' in style\r\n ? 'userSelect'\r\n : 'MozUserSelect' in style\r\n ? 'MozUserSelect'\r\n : 'WebkitUserSelect' in style\r\n ? 'WebkitUserSelect'\r\n : 'KhtmlUserSelect' in style\r\n ? 'KhtmlUserSelect'\r\n : '';\r\n\r\n /**\r\n * Makes element unselectable\r\n * @memberOf fabric.util\r\n * @param {HTMLElement} element Element to make unselectable\r\n * @return {HTMLElement} Element that was passed in\r\n */\r\n function makeElementUnselectable(element) {\r\n if (typeof element.onselectstart !== 'undefined') {\r\n element.onselectstart = fabric.util.falseFunction;\r\n }\r\n if (selectProp) {\r\n element.style[selectProp] = 'none';\r\n }\r\n else if (typeof element.unselectable === 'string') {\r\n element.unselectable = 'on';\r\n }\r\n return element;\r\n }\r\n\r\n /**\r\n * Makes element selectable\r\n * @memberOf fabric.util\r\n * @param {HTMLElement} element Element to make selectable\r\n * @return {HTMLElement} Element that was passed in\r\n */\r\n function makeElementSelectable(element) {\r\n if (typeof element.onselectstart !== 'undefined') {\r\n element.onselectstart = null;\r\n }\r\n if (selectProp) {\r\n element.style[selectProp] = '';\r\n }\r\n else if (typeof element.unselectable === 'string') {\r\n element.unselectable = '';\r\n }\r\n return element;\r\n }\r\n\r\n fabric.util.makeElementUnselectable = makeElementUnselectable;\r\n fabric.util.makeElementSelectable = makeElementSelectable;\r\n })();\r\n\r\n function getNodeCanvas(element) {\r\n var impl = fabric.jsdomImplForWrapper(element);\r\n return impl._canvas || impl._image;\r\n };\r\n\r\n function cleanUpJsdomNode(element) {\r\n if (!fabric.isLikelyNode) {\r\n return;\r\n }\r\n var impl = fabric.jsdomImplForWrapper(element);\r\n if (impl) {\r\n impl._image = null;\r\n impl._canvas = null;\r\n // unsure if necessary\r\n impl._currentSrc = null;\r\n impl._attributes = null;\r\n impl._classList = null;\r\n }\r\n }\r\n\r\n function setImageSmoothing(ctx, value) {\r\n ctx.imageSmoothingEnabled = ctx.imageSmoothingEnabled || ctx.webkitImageSmoothingEnabled\r\n || ctx.mozImageSmoothingEnabled || ctx.msImageSmoothingEnabled || ctx.oImageSmoothingEnabled;\r\n ctx.imageSmoothingEnabled = value;\r\n }\r\n\r\n /**\r\n * setImageSmoothing sets the context imageSmoothingEnabled property.\r\n * Used by canvas and by ImageObject.\r\n * @memberOf fabric.util\r\n * @since 4.0.0\r\n * @param {HTMLRenderingContext2D} ctx to set on\r\n * @param {Boolean} value true or false\r\n */\r\n fabric.util.setImageSmoothing = setImageSmoothing;\r\n fabric.util.getById = getById;\r\n fabric.util.toArray = toArray;\r\n fabric.util.addClass = addClass;\r\n fabric.util.makeElement = makeElement;\r\n fabric.util.wrapElement = wrapElement;\r\n fabric.util.getScrollLeftTop = getScrollLeftTop;\r\n fabric.util.getElementOffset = getElementOffset;\r\n fabric.util.getNodeCanvas = getNodeCanvas;\r\n fabric.util.cleanUpJsdomNode = cleanUpJsdomNode;\r\n\r\n})();\r\n(function() {\r\n\r\n function addParamToUrl(url, param) {\r\n return url + (/\\?/.test(url) ? '&' : '?') + param;\r\n }\r\n\r\n function emptyFn() { }\r\n\r\n /**\r\n * Cross-browser abstraction for sending XMLHttpRequest\r\n * @memberOf fabric.util\r\n * @param {String} url URL to send XMLHttpRequest to\r\n * @param {Object} [options] Options object\r\n * @param {String} [options.method=\"GET\"]\r\n * @param {String} [options.parameters] parameters to append to url in GET or in body\r\n * @param {String} [options.body] body to send with POST or PUT request\r\n * @param {Function} options.onComplete Callback to invoke when request is completed\r\n * @return {XMLHttpRequest} request\r\n */\r\n function request(url, options) {\r\n options || (options = { });\r\n\r\n var method = options.method ? options.method.toUpperCase() : 'GET',\r\n onComplete = options.onComplete || function() { },\r\n xhr = new fabric.window.XMLHttpRequest(),\r\n body = options.body || options.parameters;\r\n\r\n /** @ignore */\r\n xhr.onreadystatechange = function() {\r\n if (xhr.readyState === 4) {\r\n onComplete(xhr);\r\n xhr.onreadystatechange = emptyFn;\r\n }\r\n };\r\n\r\n if (method === 'GET') {\r\n body = null;\r\n if (typeof options.parameters === 'string') {\r\n url = addParamToUrl(url, options.parameters);\r\n }\r\n }\r\n\r\n xhr.open(method, url, true);\r\n\r\n if (method === 'POST' || method === 'PUT') {\r\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\r\n }\r\n\r\n xhr.send(body);\r\n return xhr;\r\n }\r\n\r\n fabric.util.request = request;\r\n})();\r\n/**\r\n * Wrapper around `console.log` (when available)\r\n * @param {*} [values] Values to log\r\n */\r\nfabric.log = console.log;\r\n\r\n/**\r\n * Wrapper around `console.warn` (when available)\r\n * @param {*} [values] Values to log as a warning\r\n */\r\nfabric.warn = console.warn;\r\n(function () {\r\n\r\n var extend = fabric.util.object.extend,\r\n clone = fabric.util.object.clone;\r\n\r\n /**\r\n * @typedef {Object} AnimationOptions\r\n * Animation of a value or list of values.\r\n * When using lists, think of something like this:\r\n * fabric.util.animate({\r\n * startValue: [1, 2, 3],\r\n * endValue: [2, 4, 6],\r\n * onChange: function([a, b, c]) {\r\n * canvas.zoomToPoint({x: b, y: c}, a)\r\n * canvas.renderAll()\r\n * }\r\n * });\r\n * @example\r\n * @property {Function} [onChange] Callback; invoked on every value change\r\n * @property {Function} [onComplete] Callback; invoked when value change is completed\r\n * @example\r\n * // Note: startValue, endValue, and byValue must match the type\r\n * var animationOptions = { startValue: 0, endValue: 1, byValue: 0.25 }\r\n * var animationOptions = { startValue: [0, 1], endValue: [1, 2], byValue: [0.25, 0.25] }\r\n * @property {number | number[]} [startValue=0] Starting value\r\n * @property {number | number[]} [endValue=100] Ending value\r\n * @property {number | number[]} [byValue=100] Value to modify the property by\r\n * @property {Function} [easing] Easing function\r\n * @property {Number} [duration=500] Duration of change (in ms)\r\n * @property {Function} [abort] Additional function with logic. If returns true, animation aborts.\r\n *\r\n * @typedef {() => void} CancelFunction\r\n *\r\n * @typedef {Object} AnimationCurrentState\r\n * @property {number | number[]} currentValue value in range [`startValue`, `endValue`]\r\n * @property {number} completionRate value in range [0, 1]\r\n * @property {number} durationRate value in range [0, 1]\r\n *\r\n * @typedef {(AnimationOptions & AnimationCurrentState & { cancel: CancelFunction }} AnimationContext\r\n */\r\n\r\n /**\r\n * Array holding all running animations\r\n * @memberof fabric\r\n * @type {AnimationContext[]}\r\n */\r\n var RUNNING_ANIMATIONS = [];\r\n fabric.util.object.extend(RUNNING_ANIMATIONS, {\r\n\r\n /**\r\n * cancel all running animations at the next requestAnimFrame\r\n * @returns {AnimationContext[]}\r\n */\r\n cancelAll: function () {\r\n var animations = this.splice(0);\r\n animations.forEach(function (animation) {\r\n animation.cancel();\r\n });\r\n return animations;\r\n },\r\n\r\n /**\r\n * cancel all running animations attached to canvas at the next requestAnimFrame\r\n * @param {fabric.Canvas} canvas\r\n * @returns {AnimationContext[]}\r\n */\r\n cancelByCanvas: function (canvas) {\r\n if (!canvas) {\r\n return [];\r\n }\r\n var cancelled = this.filter(function (animation) {\r\n return typeof animation.target === 'object' && animation.target.canvas === canvas;\r\n });\r\n cancelled.forEach(function (animation) {\r\n animation.cancel();\r\n });\r\n return cancelled;\r\n },\r\n\r\n /**\r\n * cancel all running animations for target at the next requestAnimFrame\r\n * @param {*} target\r\n * @returns {AnimationContext[]}\r\n */\r\n cancelByTarget: function (target) {\r\n var cancelled = this.findAnimationsByTarget(target);\r\n cancelled.forEach(function (animation) {\r\n animation.cancel();\r\n });\r\n return cancelled;\r\n },\r\n\r\n /**\r\n *\r\n * @param {CancelFunction} cancelFunc the function returned by animate\r\n * @returns {number}\r\n */\r\n findAnimationIndex: function (cancelFunc) {\r\n return this.indexOf(this.findAnimation(cancelFunc));\r\n },\r\n\r\n /**\r\n *\r\n * @param {CancelFunction} cancelFunc the function returned by animate\r\n * @returns {AnimationContext | undefined} animation's options object\r\n */\r\n findAnimation: function (cancelFunc) {\r\n return this.find(function (animation) {\r\n return animation.cancel === cancelFunc;\r\n });\r\n },\r\n\r\n /**\r\n *\r\n * @param {*} target the object that is assigned to the target property of the animation context\r\n * @returns {AnimationContext[]} array of animation options object associated with target\r\n */\r\n findAnimationsByTarget: function (target) {\r\n if (!target) {\r\n return [];\r\n }\r\n return this.filter(function (animation) {\r\n return animation.target === target;\r\n });\r\n }\r\n });\r\n\r\n function noop() {\r\n return false;\r\n }\r\n\r\n function defaultEasing(t, b, c, d) {\r\n return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;\r\n }\r\n\r\n /**\r\n * Changes value from one to another within certain period of time, invoking callbacks as value is being changed.\r\n * @memberOf fabric.util\r\n * @param {AnimationOptions} [options] Animation options\r\n * @example\r\n * // Note: startValue, endValue, and byValue must match the type\r\n * fabric.util.animate({ startValue: 0, endValue: 1, byValue: 0.25 })\r\n * fabric.util.animate({ startValue: [0, 1], endValue: [1, 2], byValue: [0.25, 0.25] })\r\n * @returns {CancelFunction} cancel function\r\n */\r\n function animate(options) {\r\n options || (options = {});\r\n var cancel = false,\r\n context,\r\n removeFromRegistry = function () {\r\n var index = fabric.runningAnimations.indexOf(context);\r\n return index > -1 && fabric.runningAnimations.splice(index, 1)[0];\r\n };\r\n\r\n context = extend(clone(options), {\r\n cancel: function () {\r\n cancel = true;\r\n return removeFromRegistry();\r\n },\r\n currentValue: 'startValue' in options ? options.startValue : 0,\r\n completionRate: 0,\r\n durationRate: 0\r\n });\r\n fabric.runningAnimations.push(context);\r\n\r\n requestAnimFrame(function(timestamp) {\r\n var start = timestamp || +new Date(),\r\n duration = options.duration || 500,\r\n finish = start + duration, time,\r\n onChange = options.onChange || noop,\r\n abort = options.abort || noop,\r\n onComplete = options.onComplete || noop,\r\n easing = options.easing || defaultEasing,\r\n isMany = 'startValue' in options ? options.startValue.length > 0 : false,\r\n startValue = 'startValue' in options ? options.startValue : 0,\r\n endValue = 'endValue' in options ? options.endValue : 100,\r\n byValue = options.byValue || (isMany ? startValue.map(function(value, i) {\r\n return endValue[i] - startValue[i];\r\n }) : endValue - startValue);\r\n\r\n options.onStart && options.onStart();\r\n\r\n (function tick(ticktime) {\r\n time = ticktime || +new Date();\r\n var currentTime = time > finish ? duration : (time - start),\r\n timePerc = currentTime / duration,\r\n current = isMany ? startValue.map(function(_value, i) {\r\n return easing(currentTime, startValue[i], byValue[i], duration);\r\n }) : easing(currentTime, startValue, byValue, duration),\r\n valuePerc = isMany ? Math.abs((current[0] - startValue[0]) / byValue[0])\r\n : Math.abs((current - startValue) / byValue);\r\n // update context\r\n context.currentValue = isMany ? current.slice() : current;\r\n context.completionRate = valuePerc;\r\n context.durationRate = timePerc;\r\n if (cancel) {\r\n return;\r\n }\r\n if (abort(current, valuePerc, timePerc)) {\r\n removeFromRegistry();\r\n return;\r\n }\r\n if (time > finish) {\r\n // update context\r\n context.currentValue = isMany ? endValue.slice() : endValue;\r\n context.completionRate = 1;\r\n context.durationRate = 1;\r\n // execute callbacks\r\n onChange(isMany ? endValue.slice() : endValue, 1, 1);\r\n onComplete(endValue, 1, 1);\r\n removeFromRegistry();\r\n return;\r\n }\r\n else {\r\n onChange(current, valuePerc, timePerc);\r\n requestAnimFrame(tick);\r\n }\r\n })(start);\r\n });\r\n\r\n return context.cancel;\r\n }\r\n\r\n var _requestAnimFrame = fabric.window.requestAnimationFrame ||\r\n fabric.window.webkitRequestAnimationFrame ||\r\n fabric.window.mozRequestAnimationFrame ||\r\n fabric.window.oRequestAnimationFrame ||\r\n fabric.window.msRequestAnimationFrame ||\r\n function(callback) {\r\n return fabric.window.setTimeout(callback, 1000 / 60);\r\n };\r\n\r\n var _cancelAnimFrame = fabric.window.cancelAnimationFrame || fabric.window.clearTimeout;\r\n\r\n /**\r\n * requestAnimationFrame polyfill based on http://paulirish.com/2011/requestanimationframe-for-smart-animating/\r\n * In order to get a precise start time, `requestAnimFrame` should be called as an entry into the method\r\n * @memberOf fabric.util\r\n * @param {Function} callback Callback to invoke\r\n * @param {DOMElement} element optional Element to associate with animation\r\n */\r\n function requestAnimFrame() {\r\n return _requestAnimFrame.apply(fabric.window, arguments);\r\n }\r\n\r\n function cancelAnimFrame() {\r\n return _cancelAnimFrame.apply(fabric.window, arguments);\r\n }\r\n\r\n fabric.util.animate = animate;\r\n fabric.util.requestAnimFrame = requestAnimFrame;\r\n fabric.util.cancelAnimFrame = cancelAnimFrame;\r\n fabric.runningAnimations = RUNNING_ANIMATIONS;\r\n})();\r\n(function() {\r\n // Calculate an in-between color. Returns a \"rgba()\" string.\r\n // Credit: Edwin Martin \r\n // http://www.bitstorm.org/jquery/color-animation/jquery.animate-colors.js\r\n function calculateColor(begin, end, pos) {\r\n var color = 'rgba('\r\n + parseInt((begin[0] + pos * (end[0] - begin[0])), 10) + ','\r\n + parseInt((begin[1] + pos * (end[1] - begin[1])), 10) + ','\r\n + parseInt((begin[2] + pos * (end[2] - begin[2])), 10);\r\n\r\n color += ',' + (begin && end ? parseFloat(begin[3] + pos * (end[3] - begin[3])) : 1);\r\n color += ')';\r\n return color;\r\n }\r\n\r\n /**\r\n * Changes the color from one to another within certain period of time, invoking callbacks as value is being changed.\r\n * @memberOf fabric.util\r\n * @param {String} fromColor The starting color in hex or rgb(a) format.\r\n * @param {String} toColor The starting color in hex or rgb(a) format.\r\n * @param {Number} [duration] Duration of change (in ms).\r\n * @param {Object} [options] Animation options\r\n * @param {Function} [options.onChange] Callback; invoked on every value change\r\n * @param {Function} [options.onComplete] Callback; invoked when value change is completed\r\n * @param {Function} [options.colorEasing] Easing function. Note that this function only take two arguments (currentTime, duration). Thus the regular animation easing functions cannot be used.\r\n * @param {Function} [options.abort] Additional function with logic. If returns true, onComplete is called.\r\n * @returns {Function} abort function\r\n */\r\n function animateColor(fromColor, toColor, duration, options) {\r\n var startColor = new fabric.Color(fromColor).getSource(),\r\n endColor = new fabric.Color(toColor).getSource(),\r\n originalOnComplete = options.onComplete,\r\n originalOnChange = options.onChange;\r\n options = options || {};\r\n\r\n return fabric.util.animate(fabric.util.object.extend(options, {\r\n duration: duration || 500,\r\n startValue: startColor,\r\n endValue: endColor,\r\n byValue: endColor,\r\n easing: function (currentTime, startValue, byValue, duration) {\r\n var posValue = options.colorEasing\r\n ? options.colorEasing(currentTime, duration)\r\n : 1 - Math.cos(currentTime / duration * (Math.PI / 2));\r\n return calculateColor(startValue, byValue, posValue);\r\n },\r\n // has to take in account for color restoring;\r\n onComplete: function(current, valuePerc, timePerc) {\r\n if (originalOnComplete) {\r\n return originalOnComplete(\r\n calculateColor(endColor, endColor, 0),\r\n valuePerc,\r\n timePerc\r\n );\r\n }\r\n },\r\n onChange: function(current, valuePerc, timePerc) {\r\n if (originalOnChange) {\r\n if (Array.isArray(current)) {\r\n return originalOnChange(\r\n calculateColor(current, current, 0),\r\n valuePerc,\r\n timePerc\r\n );\r\n }\r\n originalOnChange(current, valuePerc, timePerc);\r\n }\r\n }\r\n }));\r\n }\r\n\r\n fabric.util.animateColor = animateColor;\r\n\r\n})();\r\n(function(global) {\r\n\r\n 'use strict';\r\n\r\n /* Adaptation of work of Kevin Lindsey (kevin@kevlindev.com) */\r\n\r\n var fabric = global.fabric || (global.fabric = { });\r\n\r\n if (fabric.Point) {\r\n fabric.warn('fabric.Point is already defined');\r\n return;\r\n }\r\n\r\n fabric.Point = Point;\r\n\r\n /**\r\n * Point class\r\n * @class fabric.Point\r\n * @memberOf fabric\r\n * @constructor\r\n * @param {Number} x\r\n * @param {Number} y\r\n * @return {fabric.Point} thisArg\r\n */\r\n function Point(x, y) {\r\n this.x = x;\r\n this.y = y;\r\n }\r\n\r\n Point.prototype = /** @lends fabric.Point.prototype */ {\r\n\r\n type: 'point',\r\n\r\n constructor: Point,\r\n\r\n /**\r\n * Adds another point to this one and returns another one\r\n * @param {fabric.Point} that\r\n * @return {fabric.Point} new Point instance with added values\r\n */\r\n add: function (that) {\r\n return new Point(this.x + that.x, this.y + that.y);\r\n },\r\n\r\n /**\r\n * Adds another point to this one\r\n * @param {fabric.Point} that\r\n * @return {fabric.Point} thisArg\r\n * @chainable\r\n */\r\n addEquals: function (that) {\r\n this.x += that.x;\r\n this.y += that.y;\r\n return this;\r\n },\r\n\r\n /**\r\n * Adds value to this point and returns a new one\r\n * @param {Number} scalar\r\n * @return {fabric.Point} new Point with added value\r\n */\r\n scalarAdd: function (scalar) {\r\n return new Point(this.x + scalar, this.y + scalar);\r\n },\r\n\r\n /**\r\n * Adds value to this point\r\n * @param {Number} scalar\r\n * @return {fabric.Point} thisArg\r\n * @chainable\r\n */\r\n scalarAddEquals: function (scalar) {\r\n this.x += scalar;\r\n this.y += scalar;\r\n return this;\r\n },\r\n\r\n /**\r\n * Subtracts another point from this point and returns a new one\r\n * @param {fabric.Point} that\r\n * @return {fabric.Point} new Point object with subtracted values\r\n */\r\n subtract: function (that) {\r\n return new Point(this.x - that.x, this.y - that.y);\r\n },\r\n\r\n /**\r\n * Subtracts another point from this point\r\n * @param {fabric.Point} that\r\n * @return {fabric.Point} thisArg\r\n * @chainable\r\n */\r\n subtractEquals: function (that) {\r\n this.x -= that.x;\r\n this.y -= that.y;\r\n return this;\r\n },\r\n\r\n /**\r\n * Subtracts value from this point and returns a new one\r\n * @param {Number} scalar\r\n * @return {fabric.Point}\r\n */\r\n scalarSubtract: function (scalar) {\r\n return new Point(this.x - scalar, this.y - scalar);\r\n },\r\n\r\n /**\r\n * Subtracts value from this point\r\n * @param {Number} scalar\r\n * @return {fabric.Point} thisArg\r\n * @chainable\r\n */\r\n scalarSubtractEquals: function (scalar) {\r\n this.x -= scalar;\r\n this.y -= scalar;\r\n return this;\r\n },\r\n\r\n /**\r\n * Multiplies this point by a value and returns a new one\r\n * TODO: rename in scalarMultiply in 2.0\r\n * @param {Number} scalar\r\n * @return {fabric.Point}\r\n */\r\n multiply: function (scalar) {\r\n return new Point(this.x * scalar, this.y * scalar);\r\n },\r\n\r\n /**\r\n * Multiplies this point by a value\r\n * TODO: rename in scalarMultiplyEquals in 2.0\r\n * @param {Number} scalar\r\n * @return {fabric.Point} thisArg\r\n * @chainable\r\n */\r\n multiplyEquals: function (scalar) {\r\n this.x *= scalar;\r\n this.y *= scalar;\r\n return this;\r\n },\r\n\r\n /**\r\n * Divides this point by a value and returns a new one\r\n * TODO: rename in scalarDivide in 2.0\r\n * @param {Number} scalar\r\n * @return {fabric.Point}\r\n */\r\n divide: function (scalar) {\r\n return new Point(this.x / scalar, this.y / scalar);\r\n },\r\n\r\n /**\r\n * Divides this point by a value\r\n * TODO: rename in scalarDivideEquals in 2.0\r\n * @param {Number} scalar\r\n * @return {fabric.Point} thisArg\r\n * @chainable\r\n */\r\n divideEquals: function (scalar) {\r\n this.x /= scalar;\r\n this.y /= scalar;\r\n return this;\r\n },\r\n\r\n /**\r\n * Returns true if this point is equal to another one\r\n * @param {fabric.Point} that\r\n * @return {Boolean}\r\n */\r\n eq: function (that) {\r\n return (this.x === that.x && this.y === that.y);\r\n },\r\n\r\n /**\r\n * Returns true if this point is less than another one\r\n * @param {fabric.Point} that\r\n * @return {Boolean}\r\n */\r\n lt: function (that) {\r\n return (this.x < that.x && this.y < that.y);\r\n },\r\n\r\n /**\r\n * Returns true if this point is less than or equal to another one\r\n * @param {fabric.Point} that\r\n * @return {Boolean}\r\n */\r\n lte: function (that) {\r\n return (this.x <= that.x && this.y <= that.y);\r\n },\r\n\r\n /**\r\n\r\n * Returns true if this point is greater another one\r\n * @param {fabric.Point} that\r\n * @return {Boolean}\r\n */\r\n gt: function (that) {\r\n return (this.x > that.x && this.y > that.y);\r\n },\r\n\r\n /**\r\n * Returns true if this point is greater than or equal to another one\r\n * @param {fabric.Point} that\r\n * @return {Boolean}\r\n */\r\n gte: function (that) {\r\n return (this.x >= that.x && this.y >= that.y);\r\n },\r\n\r\n /**\r\n * Returns new point which is the result of linear interpolation with this one and another one\r\n * @param {fabric.Point} that\r\n * @param {Number} t , position of interpolation, between 0 and 1 default 0.5\r\n * @return {fabric.Point}\r\n */\r\n lerp: function (that, t) {\r\n if (typeof t === 'undefined') {\r\n t = 0.5;\r\n }\r\n t = Math.max(Math.min(1, t), 0);\r\n return new Point(this.x + (that.x - this.x) * t, this.y + (that.y - this.y) * t);\r\n },\r\n\r\n /**\r\n * Returns distance from this point and another one\r\n * @param {fabric.Point} that\r\n * @return {Number}\r\n */\r\n distanceFrom: function (that) {\r\n var dx = this.x - that.x,\r\n dy = this.y - that.y;\r\n return Math.sqrt(dx * dx + dy * dy);\r\n },\r\n\r\n /**\r\n * Returns the point between this point and another one\r\n * @param {fabric.Point} that\r\n * @return {fabric.Point}\r\n */\r\n midPointFrom: function (that) {\r\n return this.lerp(that);\r\n },\r\n\r\n /**\r\n * Returns a new point which is the min of this and another one\r\n * @param {fabric.Point} that\r\n * @return {fabric.Point}\r\n */\r\n min: function (that) {\r\n return new Point(Math.min(this.x, that.x), Math.min(this.y, that.y));\r\n },\r\n\r\n /**\r\n * Returns a new point which is the max of this and another one\r\n * @param {fabric.Point} that\r\n * @return {fabric.Point}\r\n */\r\n max: function (that) {\r\n return new Point(Math.max(this.x, that.x), Math.max(this.y, that.y));\r\n },\r\n\r\n /**\r\n * Returns string representation of this point\r\n * @return {String}\r\n */\r\n toString: function () {\r\n return this.x + ',' + this.y;\r\n },\r\n\r\n /**\r\n * Sets x/y of this point\r\n * @param {Number} x\r\n * @param {Number} y\r\n * @chainable\r\n */\r\n setXY: function (x, y) {\r\n this.x = x;\r\n this.y = y;\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets x of this point\r\n * @param {Number} x\r\n * @chainable\r\n */\r\n setX: function (x) {\r\n this.x = x;\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets y of this point\r\n * @param {Number} y\r\n * @chainable\r\n */\r\n setY: function (y) {\r\n this.y = y;\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets x/y of this point from another point\r\n * @param {fabric.Point} that\r\n * @chainable\r\n */\r\n setFromPoint: function (that) {\r\n this.x = that.x;\r\n this.y = that.y;\r\n return this;\r\n },\r\n\r\n /**\r\n * Swaps x/y of this point and another point\r\n * @param {fabric.Point} that\r\n */\r\n swap: function (that) {\r\n var x = this.x,\r\n y = this.y;\r\n this.x = that.x;\r\n this.y = that.y;\r\n that.x = x;\r\n that.y = y;\r\n },\r\n\r\n /**\r\n * return a cloned instance of the point\r\n * @return {fabric.Point}\r\n */\r\n clone: function () {\r\n return new Point(this.x, this.y);\r\n }\r\n };\r\n\r\n})(typeof exports !== 'undefined' ? exports : this);\r\n(function(global) {\r\n\r\n 'use strict';\r\n\r\n /* Adaptation of work of Kevin Lindsey (kevin@kevlindev.com) */\r\n var fabric = global.fabric || (global.fabric = { });\r\n\r\n if (fabric.Intersection) {\r\n fabric.warn('fabric.Intersection is already defined');\r\n return;\r\n }\r\n\r\n /**\r\n * Intersection class\r\n * @class fabric.Intersection\r\n * @memberOf fabric\r\n * @constructor\r\n */\r\n function Intersection(status) {\r\n this.status = status;\r\n this.points = [];\r\n }\r\n\r\n fabric.Intersection = Intersection;\r\n\r\n fabric.Intersection.prototype = /** @lends fabric.Intersection.prototype */ {\r\n\r\n constructor: Intersection,\r\n\r\n /**\r\n * Appends a point to intersection\r\n * @param {fabric.Point} point\r\n * @return {fabric.Intersection} thisArg\r\n * @chainable\r\n */\r\n appendPoint: function (point) {\r\n this.points.push(point);\r\n return this;\r\n },\r\n\r\n /**\r\n * Appends points to intersection\r\n * @param {Array} points\r\n * @return {fabric.Intersection} thisArg\r\n * @chainable\r\n */\r\n appendPoints: function (points) {\r\n this.points = this.points.concat(points);\r\n return this;\r\n }\r\n };\r\n\r\n /**\r\n * Checks if one line intersects another\r\n * TODO: rename in intersectSegmentSegment\r\n * @static\r\n * @param {fabric.Point} a1\r\n * @param {fabric.Point} a2\r\n * @param {fabric.Point} b1\r\n * @param {fabric.Point} b2\r\n * @return {fabric.Intersection}\r\n */\r\n fabric.Intersection.intersectLineLine = function (a1, a2, b1, b2) {\r\n var result,\r\n uaT = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x),\r\n ubT = (a2.x - a1.x) * (a1.y - b1.y) - (a2.y - a1.y) * (a1.x - b1.x),\r\n uB = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y);\r\n if (uB !== 0) {\r\n var ua = uaT / uB,\r\n ub = ubT / uB;\r\n if (0 <= ua && ua <= 1 && 0 <= ub && ub <= 1) {\r\n result = new Intersection('Intersection');\r\n result.appendPoint(new fabric.Point(a1.x + ua * (a2.x - a1.x), a1.y + ua * (a2.y - a1.y)));\r\n }\r\n else {\r\n result = new Intersection();\r\n }\r\n }\r\n else {\r\n if (uaT === 0 || ubT === 0) {\r\n result = new Intersection('Coincident');\r\n }\r\n else {\r\n result = new Intersection('Parallel');\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n /**\r\n * Checks if line intersects polygon\r\n * TODO: rename in intersectSegmentPolygon\r\n * fix detection of coincident\r\n * @static\r\n * @param {fabric.Point} a1\r\n * @param {fabric.Point} a2\r\n * @param {Array} points\r\n * @return {fabric.Intersection}\r\n */\r\n fabric.Intersection.intersectLinePolygon = function(a1, a2, points) {\r\n var result = new Intersection(),\r\n length = points.length,\r\n b1, b2, inter, i;\r\n\r\n for (i = 0; i < length; i++) {\r\n b1 = points[i];\r\n b2 = points[(i + 1) % length];\r\n inter = Intersection.intersectLineLine(a1, a2, b1, b2);\r\n\r\n result.appendPoints(inter.points);\r\n }\r\n if (result.points.length > 0) {\r\n result.status = 'Intersection';\r\n }\r\n return result;\r\n };\r\n\r\n /**\r\n * Checks if polygon intersects another polygon\r\n * @static\r\n * @param {Array} points1\r\n * @param {Array} points2\r\n * @return {fabric.Intersection}\r\n */\r\n fabric.Intersection.intersectPolygonPolygon = function (points1, points2) {\r\n var result = new Intersection(),\r\n length = points1.length, i;\r\n\r\n for (i = 0; i < length; i++) {\r\n var a1 = points1[i],\r\n a2 = points1[(i + 1) % length],\r\n inter = Intersection.intersectLinePolygon(a1, a2, points2);\r\n\r\n result.appendPoints(inter.points);\r\n }\r\n if (result.points.length > 0) {\r\n result.status = 'Intersection';\r\n }\r\n return result;\r\n };\r\n\r\n /**\r\n * Checks if polygon intersects rectangle\r\n * @static\r\n * @param {Array} points\r\n * @param {fabric.Point} r1\r\n * @param {fabric.Point} r2\r\n * @return {fabric.Intersection}\r\n */\r\n fabric.Intersection.intersectPolygonRectangle = function (points, r1, r2) {\r\n var min = r1.min(r2),\r\n max = r1.max(r2),\r\n topRight = new fabric.Point(max.x, min.y),\r\n bottomLeft = new fabric.Point(min.x, max.y),\r\n inter1 = Intersection.intersectLinePolygon(min, topRight, points),\r\n inter2 = Intersection.intersectLinePolygon(topRight, max, points),\r\n inter3 = Intersection.intersectLinePolygon(max, bottomLeft, points),\r\n inter4 = Intersection.intersectLinePolygon(bottomLeft, min, points),\r\n result = new Intersection();\r\n\r\n result.appendPoints(inter1.points);\r\n result.appendPoints(inter2.points);\r\n result.appendPoints(inter3.points);\r\n result.appendPoints(inter4.points);\r\n\r\n if (result.points.length > 0) {\r\n result.status = 'Intersection';\r\n }\r\n return result;\r\n };\r\n\r\n})(typeof exports !== 'undefined' ? exports : this);\r\n(function(global) {\r\n\r\n 'use strict';\r\n\r\n var fabric = global.fabric || (global.fabric = { });\r\n\r\n if (fabric.Color) {\r\n fabric.warn('fabric.Color is already defined.');\r\n return;\r\n }\r\n\r\n /**\r\n * Color class\r\n * The purpose of {@link fabric.Color} is to abstract and encapsulate common color operations;\r\n * {@link fabric.Color} is a constructor and creates instances of {@link fabric.Color} objects.\r\n *\r\n * @class fabric.Color\r\n * @param {String} color optional in hex or rgb(a) or hsl format or from known color list\r\n * @return {fabric.Color} thisArg\r\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2/#colors}\r\n */\r\n function Color(color) {\r\n if (!color) {\r\n this.setSource([0, 0, 0, 1]);\r\n }\r\n else {\r\n this._tryParsingColor(color);\r\n }\r\n }\r\n\r\n fabric.Color = Color;\r\n\r\n fabric.Color.prototype = /** @lends fabric.Color.prototype */ {\r\n\r\n /**\r\n * @private\r\n * @param {String|Array} color Color value to parse\r\n */\r\n _tryParsingColor: function(color) {\r\n var source;\r\n\r\n if (color in Color.colorNameMap) {\r\n color = Color.colorNameMap[color];\r\n }\r\n\r\n if (color === 'transparent') {\r\n source = [255, 255, 255, 0];\r\n }\r\n\r\n if (!source) {\r\n source = Color.sourceFromHex(color);\r\n }\r\n if (!source) {\r\n source = Color.sourceFromRgb(color);\r\n }\r\n if (!source) {\r\n source = Color.sourceFromHsl(color);\r\n }\r\n if (!source) {\r\n //if color is not recognize let's make black as canvas does\r\n source = [0, 0, 0, 1];\r\n }\r\n if (source) {\r\n this.setSource(source);\r\n }\r\n },\r\n\r\n /**\r\n * Adapted from https://github.com/mjijackson\r\n * @private\r\n * @param {Number} r Red color value\r\n * @param {Number} g Green color value\r\n * @param {Number} b Blue color value\r\n * @return {Array} Hsl color\r\n */\r\n _rgbToHsl: function(r, g, b) {\r\n r /= 255; g /= 255; b /= 255;\r\n\r\n var h, s, l,\r\n max = fabric.util.array.max([r, g, b]),\r\n min = fabric.util.array.min([r, g, b]);\r\n\r\n l = (max + min) / 2;\r\n\r\n if (max === min) {\r\n h = s = 0; // achromatic\r\n }\r\n else {\r\n var d = max - min;\r\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\r\n switch (max) {\r\n case r:\r\n h = (g - b) / d + (g < b ? 6 : 0);\r\n break;\r\n case g:\r\n h = (b - r) / d + 2;\r\n break;\r\n case b:\r\n h = (r - g) / d + 4;\r\n break;\r\n }\r\n h /= 6;\r\n }\r\n\r\n return [\r\n Math.round(h * 360),\r\n Math.round(s * 100),\r\n Math.round(l * 100)\r\n ];\r\n },\r\n\r\n /**\r\n * Returns source of this color (where source is an array representation; ex: [200, 200, 100, 1])\r\n * @return {Array}\r\n */\r\n getSource: function() {\r\n return this._source;\r\n },\r\n\r\n /**\r\n * Sets source of this color (where source is an array representation; ex: [200, 200, 100, 1])\r\n * @param {Array} source\r\n */\r\n setSource: function(source) {\r\n this._source = source;\r\n },\r\n\r\n /**\r\n * Returns color representation in RGB format\r\n * @return {String} ex: rgb(0-255,0-255,0-255)\r\n */\r\n toRgb: function() {\r\n var source = this.getSource();\r\n return 'rgb(' + source[0] + ',' + source[1] + ',' + source[2] + ')';\r\n },\r\n\r\n /**\r\n * Returns color representation in RGBA format\r\n * @return {String} ex: rgba(0-255,0-255,0-255,0-1)\r\n */\r\n toRgba: function() {\r\n var source = this.getSource();\r\n return 'rgba(' + source[0] + ',' + source[1] + ',' + source[2] + ',' + source[3] + ')';\r\n },\r\n\r\n /**\r\n * Returns color representation in HSL format\r\n * @return {String} ex: hsl(0-360,0%-100%,0%-100%)\r\n */\r\n toHsl: function() {\r\n var source = this.getSource(),\r\n hsl = this._rgbToHsl(source[0], source[1], source[2]);\r\n\r\n return 'hsl(' + hsl[0] + ',' + hsl[1] + '%,' + hsl[2] + '%)';\r\n },\r\n\r\n /**\r\n * Returns color representation in HSLA format\r\n * @return {String} ex: hsla(0-360,0%-100%,0%-100%,0-1)\r\n */\r\n toHsla: function() {\r\n var source = this.getSource(),\r\n hsl = this._rgbToHsl(source[0], source[1], source[2]);\r\n\r\n return 'hsla(' + hsl[0] + ',' + hsl[1] + '%,' + hsl[2] + '%,' + source[3] + ')';\r\n },\r\n\r\n /**\r\n * Returns color representation in HEX format\r\n * @return {String} ex: FF5555\r\n */\r\n toHex: function() {\r\n var source = this.getSource(), r, g, b;\r\n\r\n r = source[0].toString(16);\r\n r = (r.length === 1) ? ('0' + r) : r;\r\n\r\n g = source[1].toString(16);\r\n g = (g.length === 1) ? ('0' + g) : g;\r\n\r\n b = source[2].toString(16);\r\n b = (b.length === 1) ? ('0' + b) : b;\r\n\r\n return r.toUpperCase() + g.toUpperCase() + b.toUpperCase();\r\n },\r\n\r\n /**\r\n * Returns color representation in HEXA format\r\n * @return {String} ex: FF5555CC\r\n */\r\n toHexa: function() {\r\n var source = this.getSource(), a;\r\n\r\n a = Math.round(source[3] * 255);\r\n a = a.toString(16);\r\n a = (a.length === 1) ? ('0' + a) : a;\r\n\r\n return this.toHex() + a.toUpperCase();\r\n },\r\n\r\n /**\r\n * Gets value of alpha channel for this color\r\n * @return {Number} 0-1\r\n */\r\n getAlpha: function() {\r\n return this.getSource()[3];\r\n },\r\n\r\n /**\r\n * Sets value of alpha channel for this color\r\n * @param {Number} alpha Alpha value 0-1\r\n * @return {fabric.Color} thisArg\r\n */\r\n setAlpha: function(alpha) {\r\n var source = this.getSource();\r\n source[3] = alpha;\r\n this.setSource(source);\r\n return this;\r\n },\r\n\r\n /**\r\n * Transforms color to its grayscale representation\r\n * @return {fabric.Color} thisArg\r\n */\r\n toGrayscale: function() {\r\n var source = this.getSource(),\r\n average = parseInt((source[0] * 0.3 + source[1] * 0.59 + source[2] * 0.11).toFixed(0), 10),\r\n currentAlpha = source[3];\r\n this.setSource([average, average, average, currentAlpha]);\r\n return this;\r\n },\r\n\r\n /**\r\n * Transforms color to its black and white representation\r\n * @param {Number} threshold\r\n * @return {fabric.Color} thisArg\r\n */\r\n toBlackWhite: function(threshold) {\r\n var source = this.getSource(),\r\n average = (source[0] * 0.3 + source[1] * 0.59 + source[2] * 0.11).toFixed(0),\r\n currentAlpha = source[3];\r\n\r\n threshold = threshold || 127;\r\n\r\n average = (Number(average) < Number(threshold)) ? 0 : 255;\r\n this.setSource([average, average, average, currentAlpha]);\r\n return this;\r\n },\r\n\r\n /**\r\n * Overlays color with another color\r\n * @param {String|fabric.Color} otherColor\r\n * @return {fabric.Color} thisArg\r\n */\r\n overlayWith: function(otherColor) {\r\n if (!(otherColor instanceof Color)) {\r\n otherColor = new Color(otherColor);\r\n }\r\n\r\n var result = [],\r\n alpha = this.getAlpha(),\r\n otherAlpha = 0.5,\r\n source = this.getSource(),\r\n otherSource = otherColor.getSource(), i;\r\n\r\n for (i = 0; i < 3; i++) {\r\n result.push(Math.round((source[i] * (1 - otherAlpha)) + (otherSource[i] * otherAlpha)));\r\n }\r\n\r\n result[3] = alpha;\r\n this.setSource(result);\r\n return this;\r\n }\r\n };\r\n\r\n /**\r\n * Regex matching color in RGB or RGBA formats (ex: rgb(0, 0, 0), rgba(255, 100, 10, 0.5), rgba( 255 , 100 , 10 , 0.5 ), rgb(1,1,1), rgba(100%, 60%, 10%, 0.5))\r\n * @static\r\n * @field\r\n * @memberOf fabric.Color\r\n */\r\n // eslint-disable-next-line max-len\r\n fabric.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;\r\n\r\n /**\r\n * Regex matching color in HSL or HSLA formats (ex: hsl(200, 80%, 10%), hsla(300, 50%, 80%, 0.5), hsla( 300 , 50% , 80% , 0.5 ))\r\n * @static\r\n * @field\r\n * @memberOf fabric.Color\r\n */\r\n fabric.Color.reHSLa = /^hsla?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3}\\%)\\s*,\\s*(\\d{1,3}\\%)\\s*(?:\\s*,\\s*(\\d+(?:\\.\\d+)?)\\s*)?\\)$/i;\r\n\r\n /**\r\n * Regex matching color in HEX format (ex: #FF5544CC, #FF5555, 010155, aff)\r\n * @static\r\n * @field\r\n * @memberOf fabric.Color\r\n */\r\n fabric.Color.reHex = /^#?([0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{4}|[0-9a-f]{3})$/i;\r\n\r\n /**\r\n * Map of the 148 color names with HEX code\r\n * @static\r\n * @field\r\n * @memberOf fabric.Color\r\n * @see: https://www.w3.org/TR/css3-color/#svg-color\r\n */\r\n fabric.Color.colorNameMap = {\r\n aliceblue: '#F0F8FF',\r\n antiquewhite: '#FAEBD7',\r\n aqua: '#00FFFF',\r\n aquamarine: '#7FFFD4',\r\n azure: '#F0FFFF',\r\n beige: '#F5F5DC',\r\n bisque: '#FFE4C4',\r\n black: '#000000',\r\n blanchedalmond: '#FFEBCD',\r\n blue: '#0000FF',\r\n blueviolet: '#8A2BE2',\r\n brown: '#A52A2A',\r\n burlywood: '#DEB887',\r\n cadetblue: '#5F9EA0',\r\n chartreuse: '#7FFF00',\r\n chocolate: '#D2691E',\r\n coral: '#FF7F50',\r\n cornflowerblue: '#6495ED',\r\n cornsilk: '#FFF8DC',\r\n crimson: '#DC143C',\r\n cyan: '#00FFFF',\r\n darkblue: '#00008B',\r\n darkcyan: '#008B8B',\r\n darkgoldenrod: '#B8860B',\r\n darkgray: '#A9A9A9',\r\n darkgrey: '#A9A9A9',\r\n darkgreen: '#006400',\r\n darkkhaki: '#BDB76B',\r\n darkmagenta: '#8B008B',\r\n darkolivegreen: '#556B2F',\r\n darkorange: '#FF8C00',\r\n darkorchid: '#9932CC',\r\n darkred: '#8B0000',\r\n darksalmon: '#E9967A',\r\n darkseagreen: '#8FBC8F',\r\n darkslateblue: '#483D8B',\r\n darkslategray: '#2F4F4F',\r\n darkslategrey: '#2F4F4F',\r\n darkturquoise: '#00CED1',\r\n darkviolet: '#9400D3',\r\n deeppink: '#FF1493',\r\n deepskyblue: '#00BFFF',\r\n dimgray: '#696969',\r\n dimgrey: '#696969',\r\n dodgerblue: '#1E90FF',\r\n firebrick: '#B22222',\r\n floralwhite: '#FFFAF0',\r\n forestgreen: '#228B22',\r\n fuchsia: '#FF00FF',\r\n gainsboro: '#DCDCDC',\r\n ghostwhite: '#F8F8FF',\r\n gold: '#FFD700',\r\n goldenrod: '#DAA520',\r\n gray: '#808080',\r\n grey: '#808080',\r\n green: '#008000',\r\n greenyellow: '#ADFF2F',\r\n honeydew: '#F0FFF0',\r\n hotpink: '#FF69B4',\r\n indianred: '#CD5C5C',\r\n indigo: '#4B0082',\r\n ivory: '#FFFFF0',\r\n khaki: '#F0E68C',\r\n lavender: '#E6E6FA',\r\n lavenderblush: '#FFF0F5',\r\n lawngreen: '#7CFC00',\r\n lemonchiffon: '#FFFACD',\r\n lightblue: '#ADD8E6',\r\n lightcoral: '#F08080',\r\n lightcyan: '#E0FFFF',\r\n lightgoldenrodyellow: '#FAFAD2',\r\n lightgray: '#D3D3D3',\r\n lightgrey: '#D3D3D3',\r\n lightgreen: '#90EE90',\r\n lightpink: '#FFB6C1',\r\n lightsalmon: '#FFA07A',\r\n lightseagreen: '#20B2AA',\r\n lightskyblue: '#87CEFA',\r\n lightslategray: '#778899',\r\n lightslategrey: '#778899',\r\n lightsteelblue: '#B0C4DE',\r\n lightyellow: '#FFFFE0',\r\n lime: '#00FF00',\r\n limegreen: '#32CD32',\r\n linen: '#FAF0E6',\r\n magenta: '#FF00FF',\r\n maroon: '#800000',\r\n mediumaquamarine: '#66CDAA',\r\n mediumblue: '#0000CD',\r\n mediumorchid: '#BA55D3',\r\n mediumpurple: '#9370DB',\r\n mediumseagreen: '#3CB371',\r\n mediumslateblue: '#7B68EE',\r\n mediumspringgreen: '#00FA9A',\r\n mediumturquoise: '#48D1CC',\r\n mediumvioletred: '#C71585',\r\n midnightblue: '#191970',\r\n mintcream: '#F5FFFA',\r\n mistyrose: '#FFE4E1',\r\n moccasin: '#FFE4B5',\r\n navajowhite: '#FFDEAD',\r\n navy: '#000080',\r\n oldlace: '#FDF5E6',\r\n olive: '#808000',\r\n olivedrab: '#6B8E23',\r\n orange: '#FFA500',\r\n orangered: '#FF4500',\r\n orchid: '#DA70D6',\r\n palegoldenrod: '#EEE8AA',\r\n palegreen: '#98FB98',\r\n paleturquoise: '#AFEEEE',\r\n palevioletred: '#DB7093',\r\n papayawhip: '#FFEFD5',\r\n peachpuff: '#FFDAB9',\r\n peru: '#CD853F',\r\n pink: '#FFC0CB',\r\n plum: '#DDA0DD',\r\n powderblue: '#B0E0E6',\r\n purple: '#800080',\r\n rebeccapurple: '#663399',\r\n red: '#FF0000',\r\n rosybrown: '#BC8F8F',\r\n royalblue: '#4169E1',\r\n saddlebrown: '#8B4513',\r\n salmon: '#FA8072',\r\n sandybrown: '#F4A460',\r\n seagreen: '#2E8B57',\r\n seashell: '#FFF5EE',\r\n sienna: '#A0522D',\r\n silver: '#C0C0C0',\r\n skyblue: '#87CEEB',\r\n slateblue: '#6A5ACD',\r\n slategray: '#708090',\r\n slategrey: '#708090',\r\n snow: '#FFFAFA',\r\n springgreen: '#00FF7F',\r\n steelblue: '#4682B4',\r\n tan: '#D2B48C',\r\n teal: '#008080',\r\n thistle: '#D8BFD8',\r\n tomato: '#FF6347',\r\n turquoise: '#40E0D0',\r\n violet: '#EE82EE',\r\n wheat: '#F5DEB3',\r\n white: '#FFFFFF',\r\n whitesmoke: '#F5F5F5',\r\n yellow: '#FFFF00',\r\n yellowgreen: '#9ACD32'\r\n };\r\n\r\n /**\r\n * @private\r\n * @param {Number} p\r\n * @param {Number} q\r\n * @param {Number} t\r\n * @return {Number}\r\n */\r\n function hue2rgb(p, q, t) {\r\n if (t < 0) {\r\n t += 1;\r\n }\r\n if (t > 1) {\r\n t -= 1;\r\n }\r\n if (t < 1 / 6) {\r\n return p + (q - p) * 6 * t;\r\n }\r\n if (t < 1 / 2) {\r\n return q;\r\n }\r\n if (t < 2 / 3) {\r\n return p + (q - p) * (2 / 3 - t) * 6;\r\n }\r\n return p;\r\n }\r\n\r\n /**\r\n * Returns new color object, when given a color in RGB format\r\n * @memberOf fabric.Color\r\n * @param {String} color Color value ex: rgb(0-255,0-255,0-255)\r\n * @return {fabric.Color}\r\n */\r\n fabric.Color.fromRgb = function(color) {\r\n return Color.fromSource(Color.sourceFromRgb(color));\r\n };\r\n\r\n /**\r\n * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in RGB or RGBA format\r\n * @memberOf fabric.Color\r\n * @param {String} color Color value ex: rgb(0-255,0-255,0-255), rgb(0%-100%,0%-100%,0%-100%)\r\n * @return {Array} source\r\n */\r\n fabric.Color.sourceFromRgb = function(color) {\r\n var match = color.match(Color.reRGBa);\r\n if (match) {\r\n var r = parseInt(match[1], 10) / (/%$/.test(match[1]) ? 100 : 1) * (/%$/.test(match[1]) ? 255 : 1),\r\n g = parseInt(match[2], 10) / (/%$/.test(match[2]) ? 100 : 1) * (/%$/.test(match[2]) ? 255 : 1),\r\n b = parseInt(match[3], 10) / (/%$/.test(match[3]) ? 100 : 1) * (/%$/.test(match[3]) ? 255 : 1);\r\n\r\n return [\r\n parseInt(r, 10),\r\n parseInt(g, 10),\r\n parseInt(b, 10),\r\n match[4] ? parseFloat(match[4]) : 1\r\n ];\r\n }\r\n };\r\n\r\n /**\r\n * Returns new color object, when given a color in RGBA format\r\n * @static\r\n * @function\r\n * @memberOf fabric.Color\r\n * @param {String} color\r\n * @return {fabric.Color}\r\n */\r\n fabric.Color.fromRgba = Color.fromRgb;\r\n\r\n /**\r\n * Returns new color object, when given a color in HSL format\r\n * @param {String} color Color value ex: hsl(0-260,0%-100%,0%-100%)\r\n * @memberOf fabric.Color\r\n * @return {fabric.Color}\r\n */\r\n fabric.Color.fromHsl = function(color) {\r\n return Color.fromSource(Color.sourceFromHsl(color));\r\n };\r\n\r\n /**\r\n * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in HSL or HSLA format.\r\n * Adapted from https://github.com/mjijackson\r\n * @memberOf fabric.Color\r\n * @param {String} color Color value ex: hsl(0-360,0%-100%,0%-100%) or hsla(0-360,0%-100%,0%-100%, 0-1)\r\n * @return {Array} source\r\n * @see http://http://www.w3.org/TR/css3-color/#hsl-color\r\n */\r\n fabric.Color.sourceFromHsl = function(color) {\r\n var match = color.match(Color.reHSLa);\r\n if (!match) {\r\n return;\r\n }\r\n\r\n var h = (((parseFloat(match[1]) % 360) + 360) % 360) / 360,\r\n s = parseFloat(match[2]) / (/%$/.test(match[2]) ? 100 : 1),\r\n l = parseFloat(match[3]) / (/%$/.test(match[3]) ? 100 : 1),\r\n r, g, b;\r\n\r\n if (s === 0) {\r\n r = g = b = l;\r\n }\r\n else {\r\n var q = l <= 0.5 ? l * (s + 1) : l + s - l * s,\r\n p = l * 2 - q;\r\n\r\n r = hue2rgb(p, q, h + 1 / 3);\r\n g = hue2rgb(p, q, h);\r\n b = hue2rgb(p, q, h - 1 / 3);\r\n }\r\n\r\n return [\r\n Math.round(r * 255),\r\n Math.round(g * 255),\r\n Math.round(b * 255),\r\n match[4] ? parseFloat(match[4]) : 1\r\n ];\r\n };\r\n\r\n /**\r\n * Returns new color object, when given a color in HSLA format\r\n * @static\r\n * @function\r\n * @memberOf fabric.Color\r\n * @param {String} color\r\n * @return {fabric.Color}\r\n */\r\n fabric.Color.fromHsla = Color.fromHsl;\r\n\r\n /**\r\n * Returns new color object, when given a color in HEX format\r\n * @static\r\n * @memberOf fabric.Color\r\n * @param {String} color Color value ex: FF5555\r\n * @return {fabric.Color}\r\n */\r\n fabric.Color.fromHex = function(color) {\r\n return Color.fromSource(Color.sourceFromHex(color));\r\n };\r\n\r\n /**\r\n * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in HEX format\r\n * @static\r\n * @memberOf fabric.Color\r\n * @param {String} color ex: FF5555 or FF5544CC (RGBa)\r\n * @return {Array} source\r\n */\r\n fabric.Color.sourceFromHex = function(color) {\r\n if (color.match(Color.reHex)) {\r\n var value = color.slice(color.indexOf('#') + 1),\r\n isShortNotation = (value.length === 3 || value.length === 4),\r\n isRGBa = (value.length === 8 || value.length === 4),\r\n r = isShortNotation ? (value.charAt(0) + value.charAt(0)) : value.substring(0, 2),\r\n g = isShortNotation ? (value.charAt(1) + value.charAt(1)) : value.substring(2, 4),\r\n b = isShortNotation ? (value.charAt(2) + value.charAt(2)) : value.substring(4, 6),\r\n a = isRGBa ? (isShortNotation ? (value.charAt(3) + value.charAt(3)) : value.substring(6, 8)) : 'FF';\r\n\r\n return [\r\n parseInt(r, 16),\r\n parseInt(g, 16),\r\n parseInt(b, 16),\r\n parseFloat((parseInt(a, 16) / 255).toFixed(2))\r\n ];\r\n }\r\n };\r\n\r\n /**\r\n * Returns new color object, when given color in array representation (ex: [200, 100, 100, 0.5])\r\n * @static\r\n * @memberOf fabric.Color\r\n * @param {Array} source\r\n * @return {fabric.Color}\r\n */\r\n fabric.Color.fromSource = function(source) {\r\n var oColor = new Color();\r\n oColor.setSource(source);\r\n return oColor;\r\n };\r\n\r\n})(typeof exports !== 'undefined' ? exports : this);\r\n(function(global) {\r\n\r\n 'use strict';\r\n\r\n var fabric = global.fabric || (global.fabric = { }),\r\n scaleMap = ['e', 'se', 's', 'sw', 'w', 'nw', 'n', 'ne', 'e'],\r\n skewMap = ['ns', 'nesw', 'ew', 'nwse'],\r\n controls = {},\r\n LEFT = 'left', TOP = 'top', RIGHT = 'right', BOTTOM = 'bottom', CENTER = 'center',\r\n opposite = {\r\n top: BOTTOM,\r\n bottom: TOP,\r\n left: RIGHT,\r\n right: LEFT,\r\n center: CENTER,\r\n }, radiansToDegrees = fabric.util.radiansToDegrees,\r\n sign = (Math.sign || function(x) { return ((x > 0) - (x < 0)) || +x; });\r\n\r\n /**\r\n * Combine control position and object angle to find the control direction compared\r\n * to the object center.\r\n * @param {fabric.Object} fabricObject the fabric object for which we are rendering controls\r\n * @param {fabric.Control} control the control class\r\n * @return {Number} 0 - 7 a quadrant number\r\n */\r\n function findCornerQuadrant(fabricObject, control) {\r\n var cornerAngle = fabricObject.angle + radiansToDegrees(Math.atan2(control.y, control.x)) + 360;\r\n return Math.round((cornerAngle % 360) / 45);\r\n }\r\n\r\n function fireEvent(eventName, options) {\r\n var target = options.transform.target,\r\n canvas = target.canvas,\r\n canvasOptions = fabric.util.object.clone(options);\r\n canvasOptions.target = target;\r\n canvas && canvas.fire('object:' + eventName, canvasOptions);\r\n target.fire(eventName, options);\r\n }\r\n\r\n /**\r\n * Inspect event and fabricObject properties to understand if the scaling action\r\n * @param {Event} eventData from the user action\r\n * @param {fabric.Object} fabricObject the fabric object about to scale\r\n * @return {Boolean} true if scale is proportional\r\n */\r\n function scaleIsProportional(eventData, fabricObject) {\r\n var canvas = fabricObject.canvas, uniScaleKey = canvas.uniScaleKey,\r\n uniformIsToggled = eventData[uniScaleKey];\r\n return (canvas.uniformScaling && !uniformIsToggled) ||\r\n (!canvas.uniformScaling && uniformIsToggled);\r\n }\r\n\r\n /**\r\n * Checks if transform is centered\r\n * @param {Object} transform transform data\r\n * @return {Boolean} true if transform is centered\r\n */\r\n function isTransformCentered(transform) {\r\n return transform.originX === CENTER && transform.originY === CENTER;\r\n }\r\n\r\n /**\r\n * Inspect fabricObject to understand if the current scaling action is allowed\r\n * @param {fabric.Object} fabricObject the fabric object about to scale\r\n * @param {String} by 'x' or 'y' or ''\r\n * @param {Boolean} scaleProportionally true if we are trying to scale proportionally\r\n * @return {Boolean} true if scaling is not allowed at current conditions\r\n */\r\n function scalingIsForbidden(fabricObject, by, scaleProportionally) {\r\n var lockX = fabricObject.lockScalingX, lockY = fabricObject.lockScalingY;\r\n if (lockX && lockY) {\r\n return true;\r\n }\r\n if (!by && (lockX || lockY) && scaleProportionally) {\r\n return true;\r\n }\r\n if (lockX && by === 'x') {\r\n return true;\r\n }\r\n if (lockY && by === 'y') {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * return the correct cursor style for the scale action\r\n * @param {Event} eventData the javascript event that is causing the scale\r\n * @param {fabric.Control} control the control that is interested in the action\r\n * @param {fabric.Object} fabricObject the fabric object that is interested in the action\r\n * @return {String} a valid css string for the cursor\r\n */\r\n function scaleCursorStyleHandler(eventData, control, fabricObject) {\r\n var notAllowed = 'not-allowed',\r\n scaleProportionally = scaleIsProportional(eventData, fabricObject),\r\n by = '';\r\n if (control.x !== 0 && control.y === 0) {\r\n by = 'x';\r\n }\r\n else if (control.x === 0 && control.y !== 0) {\r\n by = 'y';\r\n }\r\n if (scalingIsForbidden(fabricObject, by, scaleProportionally)) {\r\n return notAllowed;\r\n }\r\n var n = findCornerQuadrant(fabricObject, control);\r\n return scaleMap[n] + '-resize';\r\n }\r\n\r\n /**\r\n * return the correct cursor style for the skew action\r\n * @param {Event} eventData the javascript event that is causing the scale\r\n * @param {fabric.Control} control the control that is interested in the action\r\n * @param {fabric.Object} fabricObject the fabric object that is interested in the action\r\n * @return {String} a valid css string for the cursor\r\n */\r\n function skewCursorStyleHandler(eventData, control, fabricObject) {\r\n var notAllowed = 'not-allowed';\r\n if (control.x !== 0 && fabricObject.lockSkewingY) {\r\n return notAllowed;\r\n }\r\n if (control.y !== 0 && fabricObject.lockSkewingX) {\r\n return notAllowed;\r\n }\r\n var n = findCornerQuadrant(fabricObject, control) % 4;\r\n return skewMap[n] + '-resize';\r\n }\r\n\r\n /**\r\n * Combine skew and scale style handlers to cover fabric standard use case\r\n * @param {Event} eventData the javascript event that is causing the scale\r\n * @param {fabric.Control} control the control that is interested in the action\r\n * @param {fabric.Object} fabricObject the fabric object that is interested in the action\r\n * @return {String} a valid css string for the cursor\r\n */\r\n function scaleSkewCursorStyleHandler(eventData, control, fabricObject) {\r\n if (eventData[fabricObject.canvas.altActionKey]) {\r\n return controls.skewCursorStyleHandler(eventData, control, fabricObject);\r\n }\r\n return controls.scaleCursorStyleHandler(eventData, control, fabricObject);\r\n }\r\n\r\n /**\r\n * Inspect event, control and fabricObject to return the correct action name\r\n * @param {Event} eventData the javascript event that is causing the scale\r\n * @param {fabric.Control} control the control that is interested in the action\r\n * @param {fabric.Object} fabricObject the fabric object that is interested in the action\r\n * @return {String} an action name\r\n */\r\n function scaleOrSkewActionName(eventData, control, fabricObject) {\r\n var isAlternative = eventData[fabricObject.canvas.altActionKey];\r\n if (control.x === 0) {\r\n // then is scaleY or skewX\r\n return isAlternative ? 'skewX' : 'scaleY';\r\n }\r\n if (control.y === 0) {\r\n // then is scaleY or skewX\r\n return isAlternative ? 'skewY' : 'scaleX';\r\n }\r\n }\r\n\r\n /**\r\n * Find the correct style for the control that is used for rotation.\r\n * this function is very simple and it just take care of not-allowed or standard cursor\r\n * @param {Event} eventData the javascript event that is causing the scale\r\n * @param {fabric.Control} control the control that is interested in the action\r\n * @param {fabric.Object} fabricObject the fabric object that is interested in the action\r\n * @return {String} a valid css string for the cursor\r\n */\r\n function rotationStyleHandler(eventData, control, fabricObject) {\r\n if (fabricObject.lockRotation) {\r\n return 'not-allowed';\r\n }\r\n return control.cursorStyle;\r\n }\r\n\r\n function commonEventInfo(eventData, transform, x, y) {\r\n return {\r\n e: eventData,\r\n transform: transform,\r\n pointer: {\r\n x: x,\r\n y: y,\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Wrap an action handler with saving/restoring object position on the transform.\r\n * this is the code that permits to objects to keep their position while transforming.\r\n * @param {Function} actionHandler the function to wrap\r\n * @return {Function} a function with an action handler signature\r\n */\r\n function wrapWithFixedAnchor(actionHandler) {\r\n return function(eventData, transform, x, y) {\r\n var target = transform.target, centerPoint = target.getCenterPoint(),\r\n constraint = target.translateToOriginPoint(centerPoint, transform.originX, transform.originY),\r\n actionPerformed = actionHandler(eventData, transform, x, y);\r\n target.setPositionByOrigin(constraint, transform.originX, transform.originY);\r\n return actionPerformed;\r\n };\r\n }\r\n\r\n /**\r\n * Wrap an action handler with firing an event if the action is performed\r\n * @param {Function} actionHandler the function to wrap\r\n * @return {Function} a function with an action handler signature\r\n */\r\n function wrapWithFireEvent(eventName, actionHandler) {\r\n return function(eventData, transform, x, y) {\r\n var actionPerformed = actionHandler(eventData, transform, x, y);\r\n if (actionPerformed) {\r\n fireEvent(eventName, commonEventInfo(eventData, transform, x, y));\r\n }\r\n return actionPerformed;\r\n };\r\n }\r\n\r\n /**\r\n * Transforms a point described by x and y in a distance from the top left corner of the object\r\n * bounding box.\r\n * @param {Object} transform\r\n * @param {String} originX\r\n * @param {String} originY\r\n * @param {number} x\r\n * @param {number} y\r\n * @return {Fabric.Point} the normalized point\r\n */\r\n function getLocalPoint(transform, originX, originY, x, y) {\r\n var target = transform.target,\r\n control = target.controls[transform.corner],\r\n zoom = target.canvas.getZoom(),\r\n padding = target.padding / zoom,\r\n localPoint = target.toLocalPoint(new fabric.Point(x, y), originX, originY);\r\n if (localPoint.x >= padding) {\r\n localPoint.x -= padding;\r\n }\r\n if (localPoint.x <= -padding) {\r\n localPoint.x += padding;\r\n }\r\n if (localPoint.y >= padding) {\r\n localPoint.y -= padding;\r\n }\r\n if (localPoint.y <= padding) {\r\n localPoint.y += padding;\r\n }\r\n localPoint.x -= control.offsetX;\r\n localPoint.y -= control.offsetY;\r\n return localPoint;\r\n }\r\n\r\n /**\r\n * Detect if the fabric object is flipped on one side.\r\n * @param {fabric.Object} target\r\n * @return {Boolean} true if one flip, but not two.\r\n */\r\n function targetHasOneFlip(target) {\r\n return target.flipX !== target.flipY;\r\n }\r\n\r\n /**\r\n * Utility function to compensate the scale factor when skew is applied on both axes\r\n * @private\r\n */\r\n function compensateScaleForSkew(target, oppositeSkew, scaleToCompensate, axis, reference) {\r\n if (target[oppositeSkew] !== 0) {\r\n var newDim = target._getTransformedDimensions()[axis];\r\n var newValue = reference / newDim * target[scaleToCompensate];\r\n target.set(scaleToCompensate, newValue);\r\n }\r\n }\r\n\r\n /**\r\n * Action handler for skewing on the X axis\r\n * @private\r\n */\r\n function skewObjectX(eventData, transform, x, y) {\r\n var target = transform.target,\r\n // find how big the object would be, if there was no skewX. takes in account scaling\r\n dimNoSkew = target._getTransformedDimensions(0, target.skewY),\r\n localPoint = getLocalPoint(transform, transform.originX, transform.originY, x, y),\r\n // the mouse is in the center of the object, and we want it to stay there.\r\n // so the object will grow twice as much as the mouse.\r\n // this makes the skew growth to localPoint * 2 - dimNoSkew.\r\n totalSkewSize = Math.abs(localPoint.x * 2) - dimNoSkew.x,\r\n currentSkew = target.skewX, newSkew;\r\n if (totalSkewSize < 2) {\r\n // let's make it easy to go back to position 0.\r\n newSkew = 0;\r\n }\r\n else {\r\n newSkew = radiansToDegrees(\r\n Math.atan2((totalSkewSize / target.scaleX), (dimNoSkew.y / target.scaleY))\r\n );\r\n // now we have to find the sign of the skew.\r\n // it mostly depend on the origin of transformation.\r\n if (transform.originX === LEFT && transform.originY === BOTTOM) {\r\n newSkew = -newSkew;\r\n }\r\n if (transform.originX === RIGHT && transform.originY === TOP) {\r\n newSkew = -newSkew;\r\n }\r\n if (targetHasOneFlip(target)) {\r\n newSkew = -newSkew;\r\n }\r\n }\r\n var hasSkewed = currentSkew !== newSkew;\r\n if (hasSkewed) {\r\n var dimBeforeSkewing = target._getTransformedDimensions().y;\r\n target.set('skewX', newSkew);\r\n compensateScaleForSkew(target, 'skewY', 'scaleY', 'y', dimBeforeSkewing);\r\n }\r\n return hasSkewed;\r\n }\r\n\r\n /**\r\n * Action handler for skewing on the Y axis\r\n * @private\r\n */\r\n function skewObjectY(eventData, transform, x, y) {\r\n var target = transform.target,\r\n // find how big the object would be, if there was no skewX. takes in account scaling\r\n dimNoSkew = target._getTransformedDimensions(target.skewX, 0),\r\n localPoint = getLocalPoint(transform, transform.originX, transform.originY, x, y),\r\n // the mouse is in the center of the object, and we want it to stay there.\r\n // so the object will grow twice as much as the mouse.\r\n // this makes the skew growth to localPoint * 2 - dimNoSkew.\r\n totalSkewSize = Math.abs(localPoint.y * 2) - dimNoSkew.y,\r\n currentSkew = target.skewY, newSkew;\r\n if (totalSkewSize < 2) {\r\n // let's make it easy to go back to position 0.\r\n newSkew = 0;\r\n }\r\n else {\r\n newSkew = radiansToDegrees(\r\n Math.atan2((totalSkewSize / target.scaleY), (dimNoSkew.x / target.scaleX))\r\n );\r\n // now we have to find the sign of the skew.\r\n // it mostly depend on the origin of transformation.\r\n if (transform.originX === LEFT && transform.originY === BOTTOM) {\r\n newSkew = -newSkew;\r\n }\r\n if (transform.originX === RIGHT && transform.originY === TOP) {\r\n newSkew = -newSkew;\r\n }\r\n if (targetHasOneFlip(target)) {\r\n newSkew = -newSkew;\r\n }\r\n }\r\n var hasSkewed = currentSkew !== newSkew;\r\n if (hasSkewed) {\r\n var dimBeforeSkewing = target._getTransformedDimensions().x;\r\n target.set('skewY', newSkew);\r\n compensateScaleForSkew(target, 'skewX', 'scaleX', 'x', dimBeforeSkewing);\r\n }\r\n return hasSkewed;\r\n }\r\n\r\n /**\r\n * Wrapped Action handler for skewing on the Y axis, takes care of the\r\n * skew direction and determine the correct transform origin for the anchor point\r\n * @param {Event} eventData javascript event that is doing the transform\r\n * @param {Object} transform javascript object containing a series of information around the current transform\r\n * @param {number} x current mouse x position, canvas normalized\r\n * @param {number} y current mouse y position, canvas normalized\r\n * @return {Boolean} true if some change happened\r\n */\r\n function skewHandlerX(eventData, transform, x, y) {\r\n // step1 figure out and change transform origin.\r\n // if skewX > 0 and originY bottom we anchor on right\r\n // if skewX > 0 and originY top we anchor on left\r\n // if skewX < 0 and originY bottom we anchor on left\r\n // if skewX < 0 and originY top we anchor on right\r\n // if skewX is 0, we look for mouse position to understand where are we going.\r\n var target = transform.target, currentSkew = target.skewX, originX, originY = transform.originY;\r\n if (target.lockSkewingX) {\r\n return false;\r\n }\r\n if (currentSkew === 0) {\r\n var localPointFromCenter = getLocalPoint(transform, CENTER, CENTER, x, y);\r\n if (localPointFromCenter.x > 0) {\r\n // we are pulling right, anchor left;\r\n originX = LEFT;\r\n }\r\n else {\r\n // we are pulling right, anchor right\r\n originX = RIGHT;\r\n }\r\n }\r\n else {\r\n if (currentSkew > 0) {\r\n originX = originY === TOP ? LEFT : RIGHT;\r\n }\r\n if (currentSkew < 0) {\r\n originX = originY === TOP ? RIGHT : LEFT;\r\n }\r\n // is the object flipped on one side only? swap the origin.\r\n if (targetHasOneFlip(target)) {\r\n originX = originX === LEFT ? RIGHT : LEFT;\r\n }\r\n }\r\n\r\n // once we have the origin, we find the anchor point\r\n transform.originX = originX;\r\n var finalHandler = wrapWithFireEvent('skewing', wrapWithFixedAnchor(skewObjectX));\r\n return finalHandler(eventData, transform, x, y);\r\n }\r\n\r\n /**\r\n * Wrapped Action handler for skewing on the Y axis, takes care of the\r\n * skew direction and determine the correct transform origin for the anchor point\r\n * @param {Event} eventData javascript event that is doing the transform\r\n * @param {Object} transform javascript object containing a series of information around the current transform\r\n * @param {number} x current mouse x position, canvas normalized\r\n * @param {number} y current mouse y position, canvas normalized\r\n * @return {Boolean} true if some change happened\r\n */\r\n function skewHandlerY(eventData, transform, x, y) {\r\n // step1 figure out and change transform origin.\r\n // if skewY > 0 and originX left we anchor on top\r\n // if skewY > 0 and originX right we anchor on bottom\r\n // if skewY < 0 and originX left we anchor on bottom\r\n // if skewY < 0 and originX right we anchor on top\r\n // if skewY is 0, we look for mouse position to understand where are we going.\r\n var target = transform.target, currentSkew = target.skewY, originY, originX = transform.originX;\r\n if (target.lockSkewingY) {\r\n return false;\r\n }\r\n if (currentSkew === 0) {\r\n var localPointFromCenter = getLocalPoint(transform, CENTER, CENTER, x, y);\r\n if (localPointFromCenter.y > 0) {\r\n // we are pulling down, anchor up;\r\n originY = TOP;\r\n }\r\n else {\r\n // we are pulling up, anchor down\r\n originY = BOTTOM;\r\n }\r\n }\r\n else {\r\n if (currentSkew > 0) {\r\n originY = originX === LEFT ? TOP : BOTTOM;\r\n }\r\n if (currentSkew < 0) {\r\n originY = originX === LEFT ? BOTTOM : TOP;\r\n }\r\n // is the object flipped on one side only? swap the origin.\r\n if (targetHasOneFlip(target)) {\r\n originY = originY === TOP ? BOTTOM : TOP;\r\n }\r\n }\r\n\r\n // once we have the origin, we find the anchor point\r\n transform.originY = originY;\r\n var finalHandler = wrapWithFireEvent('skewing', wrapWithFixedAnchor(skewObjectY));\r\n return finalHandler(eventData, transform, x, y);\r\n }\r\n\r\n /**\r\n * Action handler for rotation and snapping, without anchor point.\r\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\r\n * @param {Event} eventData javascript event that is doing the transform\r\n * @param {Object} transform javascript object containing a series of information around the current transform\r\n * @param {number} x current mouse x position, canvas normalized\r\n * @param {number} y current mouse y position, canvas normalized\r\n * @return {Boolean} true if some change happened\r\n * @private\r\n */\r\n function rotationWithSnapping(eventData, transform, x, y) {\r\n var t = transform,\r\n target = t.target,\r\n pivotPoint = target.translateToOriginPoint(target.getCenterPoint(), t.originX, t.originY);\r\n\r\n if (target.lockRotation) {\r\n return false;\r\n }\r\n\r\n var lastAngle = Math.atan2(t.ey - pivotPoint.y, t.ex - pivotPoint.x),\r\n curAngle = Math.atan2(y - pivotPoint.y, x - pivotPoint.x),\r\n angle = radiansToDegrees(curAngle - lastAngle + t.theta),\r\n hasRotated = true;\r\n\r\n if (target.snapAngle > 0) {\r\n var snapAngle = target.snapAngle,\r\n snapThreshold = target.snapThreshold || snapAngle,\r\n rightAngleLocked = Math.ceil(angle / snapAngle) * snapAngle,\r\n leftAngleLocked = Math.floor(angle / snapAngle) * snapAngle;\r\n\r\n if (Math.abs(angle - leftAngleLocked) < snapThreshold) {\r\n angle = leftAngleLocked;\r\n }\r\n else if (Math.abs(angle - rightAngleLocked) < snapThreshold) {\r\n angle = rightAngleLocked;\r\n }\r\n }\r\n\r\n // normalize angle to positive value\r\n if (angle < 0) {\r\n angle = 360 + angle;\r\n }\r\n angle %= 360;\r\n\r\n hasRotated = target.angle !== angle;\r\n target.angle = angle;\r\n return hasRotated;\r\n }\r\n\r\n /**\r\n * Basic scaling logic, reused with different constrain for scaling X,Y, freely or equally.\r\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\r\n * @param {Event} eventData javascript event that is doing the transform\r\n * @param {Object} transform javascript object containing a series of information around the current transform\r\n * @param {number} x current mouse x position, canvas normalized\r\n * @param {number} y current mouse y position, canvas normalized\r\n * @param {Object} options additional information for scaling\r\n * @param {String} options.by 'x', 'y', 'equally' or '' to indicate type of scaling\r\n * @return {Boolean} true if some change happened\r\n * @private\r\n */\r\n function scaleObject(eventData, transform, x, y, options) {\r\n options = options || {};\r\n var target = transform.target,\r\n lockScalingX = target.lockScalingX, lockScalingY = target.lockScalingY,\r\n by = options.by, newPoint, scaleX, scaleY, dim,\r\n scaleProportionally = scaleIsProportional(eventData, target),\r\n forbidScaling = scalingIsForbidden(target, by, scaleProportionally),\r\n signX, signY, gestureScale = transform.gestureScale;\r\n\r\n if (forbidScaling) {\r\n return false;\r\n }\r\n if (gestureScale) {\r\n scaleX = transform.scaleX * gestureScale;\r\n scaleY = transform.scaleY * gestureScale;\r\n }\r\n else {\r\n newPoint = getLocalPoint(transform, transform.originX, transform.originY, x, y);\r\n // use of sign: We use sign to detect change of direction of an action. sign usually change when\r\n // we cross the origin point with the mouse. So a scale flip for example. There is an issue when scaling\r\n // by center and scaling using one middle control ( default: mr, mt, ml, mb), the mouse movement can easily\r\n // cross many time the origin point and flip the object. so we need a way to filter out the noise.\r\n // This ternary here should be ok to filter out X scaling when we want Y only and vice versa.\r\n signX = by !== 'y' ? sign(newPoint.x) : 1;\r\n signY = by !== 'x' ? sign(newPoint.y) : 1;\r\n if (!transform.signX) {\r\n transform.signX = signX;\r\n }\r\n if (!transform.signY) {\r\n transform.signY = signY;\r\n }\r\n\r\n if (target.lockScalingFlip &&\r\n (transform.signX !== signX || transform.signY !== signY)\r\n ) {\r\n return false;\r\n }\r\n\r\n dim = target._getTransformedDimensions();\r\n // missing detection of flip and logic to switch the origin\r\n if (scaleProportionally && !by) {\r\n // uniform scaling\r\n var distance = Math.abs(newPoint.x) + Math.abs(newPoint.y),\r\n original = transform.original,\r\n originalDistance = Math.abs(dim.x * original.scaleX / target.scaleX) +\r\n Math.abs(dim.y * original.scaleY / target.scaleY),\r\n scale = distance / originalDistance;\r\n scaleX = original.scaleX * scale;\r\n scaleY = original.scaleY * scale;\r\n }\r\n else {\r\n scaleX = Math.abs(newPoint.x * target.scaleX / dim.x);\r\n scaleY = Math.abs(newPoint.y * target.scaleY / dim.y);\r\n }\r\n // if we are scaling by center, we need to double the scale\r\n if (isTransformCentered(transform)) {\r\n scaleX *= 2;\r\n scaleY *= 2;\r\n }\r\n if (transform.signX !== signX && by !== 'y') {\r\n transform.originX = opposite[transform.originX];\r\n scaleX *= -1;\r\n transform.signX = signX;\r\n }\r\n if (transform.signY !== signY && by !== 'x') {\r\n transform.originY = opposite[transform.originY];\r\n scaleY *= -1;\r\n transform.signY = signY;\r\n }\r\n }\r\n // minScale is taken are in the setter.\r\n var oldScaleX = target.scaleX, oldScaleY = target.scaleY;\r\n if (!by) {\r\n !lockScalingX && target.set('scaleX', scaleX);\r\n !lockScalingY && target.set('scaleY', scaleY);\r\n }\r\n else {\r\n // forbidden cases already handled on top here.\r\n by === 'x' && target.set('scaleX', scaleX);\r\n by === 'y' && target.set('scaleY', scaleY);\r\n }\r\n return oldScaleX !== target.scaleX || oldScaleY !== target.scaleY;\r\n }\r\n\r\n /**\r\n * Generic scaling logic, to scale from corners either equally or freely.\r\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\r\n * @param {Event} eventData javascript event that is doing the transform\r\n * @param {Object} transform javascript object containing a series of information around the current transform\r\n * @param {number} x current mouse x position, canvas normalized\r\n * @param {number} y current mouse y position, canvas normalized\r\n * @return {Boolean} true if some change happened\r\n */\r\n function scaleObjectFromCorner(eventData, transform, x, y) {\r\n return scaleObject(eventData, transform, x, y);\r\n }\r\n\r\n /**\r\n * Scaling logic for the X axis.\r\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\r\n * @param {Event} eventData javascript event that is doing the transform\r\n * @param {Object} transform javascript object containing a series of information around the current transform\r\n * @param {number} x current mouse x position, canvas normalized\r\n * @param {number} y current mouse y position, canvas normalized\r\n * @return {Boolean} true if some change happened\r\n */\r\n function scaleObjectX(eventData, transform, x, y) {\r\n return scaleObject(eventData, transform, x, y , { by: 'x' });\r\n }\r\n\r\n /**\r\n * Scaling logic for the Y axis.\r\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\r\n * @param {Event} eventData javascript event that is doing the transform\r\n * @param {Object} transform javascript object containing a series of information around the current transform\r\n * @param {number} x current mouse x position, canvas normalized\r\n * @param {number} y current mouse y position, canvas normalized\r\n * @return {Boolean} true if some change happened\r\n */\r\n function scaleObjectY(eventData, transform, x, y) {\r\n return scaleObject(eventData, transform, x, y , { by: 'y' });\r\n }\r\n\r\n /**\r\n * Composed action handler to either scale Y or skew X\r\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\r\n * @param {Event} eventData javascript event that is doing the transform\r\n * @param {Object} transform javascript object containing a series of information around the current transform\r\n * @param {number} x current mouse x position, canvas normalized\r\n * @param {number} y current mouse y position, canvas normalized\r\n * @return {Boolean} true if some change happened\r\n */\r\n function scalingYOrSkewingX(eventData, transform, x, y) {\r\n // ok some safety needed here.\r\n if (eventData[transform.target.canvas.altActionKey]) {\r\n return controls.skewHandlerX(eventData, transform, x, y);\r\n }\r\n return controls.scalingY(eventData, transform, x, y);\r\n }\r\n\r\n /**\r\n * Composed action handler to either scale X or skew Y\r\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\r\n * @param {Event} eventData javascript event that is doing the transform\r\n * @param {Object} transform javascript object containing a series of information around the current transform\r\n * @param {number} x current mouse x position, canvas normalized\r\n * @param {number} y current mouse y position, canvas normalized\r\n * @return {Boolean} true if some change happened\r\n */\r\n function scalingXOrSkewingY(eventData, transform, x, y) {\r\n // ok some safety needed here.\r\n if (eventData[transform.target.canvas.altActionKey]) {\r\n return controls.skewHandlerY(eventData, transform, x, y);\r\n }\r\n return controls.scalingX(eventData, transform, x, y);\r\n }\r\n\r\n /**\r\n * Action handler to change textbox width\r\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\r\n * @param {Event} eventData javascript event that is doing the transform\r\n * @param {Object} transform javascript object containing a series of information around the current transform\r\n * @param {number} x current mouse x position, canvas normalized\r\n * @param {number} y current mouse y position, canvas normalized\r\n * @return {Boolean} true if some change happened\r\n */\r\n function changeWidth(eventData, transform, x, y) {\r\n var target = transform.target, localPoint = getLocalPoint(transform, transform.originX, transform.originY, x, y),\r\n strokePadding = target.strokeWidth / (target.strokeUniform ? target.scaleX : 1),\r\n multiplier = isTransformCentered(transform) ? 2 : 1,\r\n oldWidth = target.width,\r\n newWidth = Math.abs(localPoint.x * multiplier / target.scaleX) - strokePadding;\r\n target.set('width', Math.max(newWidth, 0));\r\n return oldWidth !== newWidth;\r\n }\r\n\r\n /**\r\n * Action handler\r\n * @private\r\n * @param {Event} eventData javascript event that is doing the transform\r\n * @param {Object} transform javascript object containing a series of information around the current transform\r\n * @param {number} x current mouse x position, canvas normalized\r\n * @param {number} y current mouse y position, canvas normalized\r\n * @return {Boolean} true if the translation occurred\r\n */\r\n function dragHandler(eventData, transform, x, y) {\r\n var target = transform.target,\r\n newLeft = x - transform.offsetX,\r\n newTop = y - transform.offsetY,\r\n moveX = !target.get('lockMovementX') && target.left !== newLeft,\r\n moveY = !target.get('lockMovementY') && target.top !== newTop;\r\n moveX && target.set('left', newLeft);\r\n moveY && target.set('top', newTop);\r\n if (moveX || moveY) {\r\n fireEvent('moving', commonEventInfo(eventData, transform, x, y));\r\n }\r\n return moveX || moveY;\r\n }\r\n\r\n controls.scaleCursorStyleHandler = scaleCursorStyleHandler;\r\n controls.skewCursorStyleHandler = skewCursorStyleHandler;\r\n controls.scaleSkewCursorStyleHandler = scaleSkewCursorStyleHandler;\r\n controls.rotationWithSnapping = wrapWithFireEvent('rotating', wrapWithFixedAnchor(rotationWithSnapping));\r\n controls.scalingEqually = wrapWithFireEvent('scaling', wrapWithFixedAnchor( scaleObjectFromCorner));\r\n controls.scalingX = wrapWithFireEvent('scaling', wrapWithFixedAnchor(scaleObjectX));\r\n controls.scalingY = wrapWithFireEvent('scaling', wrapWithFixedAnchor(scaleObjectY));\r\n controls.scalingYOrSkewingX = scalingYOrSkewingX;\r\n controls.scalingXOrSkewingY = scalingXOrSkewingY;\r\n controls.changeWidth = wrapWithFireEvent('resizing', wrapWithFixedAnchor(changeWidth));\r\n controls.skewHandlerX = skewHandlerX;\r\n controls.skewHandlerY = skewHandlerY;\r\n controls.dragHandler = dragHandler;\r\n controls.scaleOrSkewActionName = scaleOrSkewActionName;\r\n controls.rotationStyleHandler = rotationStyleHandler;\r\n controls.fireEvent = fireEvent;\r\n controls.wrapWithFixedAnchor = wrapWithFixedAnchor;\r\n controls.wrapWithFireEvent = wrapWithFireEvent;\r\n controls.getLocalPoint = getLocalPoint;\r\n fabric.controlsUtils = controls;\r\n\r\n})(typeof exports !== 'undefined' ? exports : this);\r\n(function(global) {\r\n\r\n 'use strict';\r\n\r\n var fabric = global.fabric || (global.fabric = { }),\r\n degreesToRadians = fabric.util.degreesToRadians,\r\n controls = fabric.controlsUtils;\r\n\r\n /**\r\n * Render a round control, as per fabric features.\r\n * This function is written to respect object properties like transparentCorners, cornerSize\r\n * cornerColor, cornerStrokeColor\r\n * plus the addition of offsetY and offsetX.\r\n * @param {CanvasRenderingContext2D} ctx context to render on\r\n * @param {Number} left x coordinate where the control center should be\r\n * @param {Number} top y coordinate where the control center should be\r\n * @param {Object} styleOverride override for fabric.Object controls style\r\n * @param {fabric.Object} fabricObject the fabric object for which we are rendering controls\r\n */\r\n function renderCircleControl (ctx, left, top, styleOverride, fabricObject) {\r\n styleOverride = styleOverride || {};\r\n var xSize = this.sizeX || styleOverride.cornerSize || fabricObject.cornerSize,\r\n ySize = this.sizeY || styleOverride.cornerSize || fabricObject.cornerSize,\r\n transparentCorners = typeof styleOverride.transparentCorners !== 'undefined' ?\r\n styleOverride.transparentCorners : fabricObject.transparentCorners,\r\n methodName = transparentCorners ? 'stroke' : 'fill',\r\n stroke = !transparentCorners && (styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor),\r\n myLeft = left,\r\n myTop = top, size;\r\n ctx.save();\r\n ctx.fillStyle = styleOverride.cornerColor || fabricObject.cornerColor;\r\n ctx.strokeStyle = styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor;\r\n // as soon as fabric react v5, remove ie11, use proper ellipse code.\r\n if (xSize > ySize) {\r\n size = xSize;\r\n ctx.scale(1.0, ySize / xSize);\r\n myTop = top * xSize / ySize;\r\n }\r\n else if (ySize > xSize) {\r\n size = ySize;\r\n ctx.scale(xSize / ySize, 1.0);\r\n myLeft = left * ySize / xSize;\r\n }\r\n else {\r\n size = xSize;\r\n }\r\n // this is still wrong\r\n ctx.lineWidth = 1;\r\n ctx.beginPath();\r\n ctx.arc(myLeft, myTop, size / 2, 0, 2 * Math.PI, false);\r\n ctx[methodName]();\r\n if (stroke) {\r\n ctx.stroke();\r\n }\r\n ctx.restore();\r\n }\r\n\r\n /**\r\n * Render a square control, as per fabric features.\r\n * This function is written to respect object properties like transparentCorners, cornerSize\r\n * cornerColor, cornerStrokeColor\r\n * plus the addition of offsetY and offsetX.\r\n * @param {CanvasRenderingContext2D} ctx context to render on\r\n * @param {Number} left x coordinate where the control center should be\r\n * @param {Number} top y coordinate where the control center should be\r\n * @param {Object} styleOverride override for fabric.Object controls style\r\n * @param {fabric.Object} fabricObject the fabric object for which we are rendering controls\r\n */\r\n function renderSquareControl(ctx, left, top, styleOverride, fabricObject) {\r\n styleOverride = styleOverride || {};\r\n var xSize = this.sizeX || styleOverride.cornerSize || fabricObject.cornerSize,\r\n ySize = this.sizeY || styleOverride.cornerSize || fabricObject.cornerSize,\r\n transparentCorners = typeof styleOverride.transparentCorners !== 'undefined' ?\r\n styleOverride.transparentCorners : fabricObject.transparentCorners,\r\n methodName = transparentCorners ? 'stroke' : 'fill',\r\n stroke = !transparentCorners && (\r\n styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor\r\n ), xSizeBy2 = xSize / 2, ySizeBy2 = ySize / 2;\r\n ctx.save();\r\n ctx.fillStyle = styleOverride.cornerColor || fabricObject.cornerColor;\r\n ctx.strokeStyle = styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor;\r\n // this is still wrong\r\n ctx.lineWidth = 1;\r\n ctx.translate(left, top);\r\n ctx.rotate(degreesToRadians(fabricObject.angle));\r\n // this does not work, and fixed with ( && ) does not make sense.\r\n // to have real transparent corners we need the controls on upperCanvas\r\n // transparentCorners || ctx.clearRect(-xSizeBy2, -ySizeBy2, xSize, ySize);\r\n ctx[methodName + 'Rect'](-xSizeBy2, -ySizeBy2, xSize, ySize);\r\n if (stroke) {\r\n ctx.strokeRect(-xSizeBy2, -ySizeBy2, xSize, ySize);\r\n }\r\n ctx.restore();\r\n }\r\n\r\n controls.renderCircleControl = renderCircleControl;\r\n controls.renderSquareControl = renderSquareControl;\r\n\r\n})(typeof exports !== 'undefined' ? exports : this);\r\n(function(global) {\r\n\r\n 'use strict';\r\n\r\n var fabric = global.fabric || (global.fabric = { });\r\n\r\n function Control(options) {\r\n for (var i in options) {\r\n this[i] = options[i];\r\n }\r\n }\r\n\r\n fabric.Control = Control;\r\n\r\n fabric.Control.prototype = /** @lends fabric.Control.prototype */ {\r\n\r\n /**\r\n * keep track of control visibility.\r\n * mainly for backward compatibility.\r\n * if you do not want to see a control, you can remove it\r\n * from the controlset.\r\n * @type {Boolean}\r\n * @default true\r\n */\r\n visible: true,\r\n\r\n /**\r\n * Name of the action that the control will likely execute.\r\n * This is optional. FabricJS uses to identify what the user is doing for some\r\n * extra optimizations. If you are writing a custom control and you want to know\r\n * somewhere else in the code what is going on, you can use this string here.\r\n * you can also provide a custom getActionName if your control run multiple actions\r\n * depending on some external state.\r\n * default to scale since is the most common, used on 4 corners by default\r\n * @type {String}\r\n * @default 'scale'\r\n */\r\n actionName: 'scale',\r\n\r\n /**\r\n * Drawing angle of the control.\r\n * NOT used for now, but name marked as needed for internal logic\r\n * example: to reuse the same drawing function for different rotated controls\r\n * @type {Number}\r\n * @default 0\r\n */\r\n angle: 0,\r\n\r\n /**\r\n * Relative position of the control. X\r\n * 0,0 is the center of the Object, while -0.5 (left) or 0.5 (right) are the extremities\r\n * of the bounding box.\r\n * @type {Number}\r\n * @default 0\r\n */\r\n x: 0,\r\n\r\n /**\r\n * Relative position of the control. Y\r\n * 0,0 is the center of the Object, while -0.5 (top) or 0.5 (bottom) are the extremities\r\n * of the bounding box.\r\n * @type {Number}\r\n * @default 0\r\n */\r\n y: 0,\r\n\r\n /**\r\n * Horizontal offset of the control from the defined position. In pixels\r\n * Positive offset moves the control to the right, negative to the left.\r\n * It used when you want to have position of control that does not scale with\r\n * the bounding box. Example: rotation control is placed at x:0, y: 0.5 on\r\n * the boundindbox, with an offset of 30 pixels vertically. Those 30 pixels will\r\n * stay 30 pixels no matter how the object is big. Another example is having 2\r\n * controls in the corner, that stay in the same position when the object scale.\r\n * of the bounding box.\r\n * @type {Number}\r\n * @default 0\r\n */\r\n offsetX: 0,\r\n\r\n /**\r\n * Vertical offset of the control from the defined position. In pixels\r\n * Positive offset moves the control to the bottom, negative to the top.\r\n * @type {Number}\r\n * @default 0\r\n */\r\n offsetY: 0,\r\n\r\n /**\r\n * Sets the length of the control. If null, defaults to object's cornerSize.\r\n * Expects both sizeX and sizeY to be set when set.\r\n * @type {?Number}\r\n * @default null\r\n */\r\n sizeX: null,\r\n\r\n /**\r\n * Sets the height of the control. If null, defaults to object's cornerSize.\r\n * Expects both sizeX and sizeY to be set when set.\r\n * @type {?Number}\r\n * @default null\r\n */\r\n sizeY: null,\r\n\r\n /**\r\n * Sets the length of the touch area of the control. If null, defaults to object's touchCornerSize.\r\n * Expects both touchSizeX and touchSizeY to be set when set.\r\n * @type {?Number}\r\n * @default null\r\n */\r\n touchSizeX: null,\r\n\r\n /**\r\n * Sets the height of the touch area of the control. If null, defaults to object's touchCornerSize.\r\n * Expects both touchSizeX and touchSizeY to be set when set.\r\n * @type {?Number}\r\n * @default null\r\n */\r\n touchSizeY: null,\r\n\r\n /**\r\n * Css cursor style to display when the control is hovered.\r\n * if the method `cursorStyleHandler` is provided, this property is ignored.\r\n * @type {String}\r\n * @default 'crosshair'\r\n */\r\n cursorStyle: 'crosshair',\r\n\r\n /**\r\n * If controls has an offsetY or offsetX, draw a line that connects\r\n * the control to the bounding box\r\n * @type {Boolean}\r\n * @default false\r\n */\r\n withConnection: false,\r\n\r\n /**\r\n * The control actionHandler, provide one to handle action ( control being moved )\r\n * @param {Event} eventData the native mouse event\r\n * @param {Object} transformData properties of the current transform\r\n * @param {Number} x x position of the cursor\r\n * @param {Number} y y position of the cursor\r\n * @return {Boolean} true if the action/event modified the object\r\n */\r\n actionHandler: function(/* eventData, transformData, x, y */) { },\r\n\r\n /**\r\n * The control handler for mouse down, provide one to handle mouse down on control\r\n * @param {Event} eventData the native mouse event\r\n * @param {Object} transformData properties of the current transform\r\n * @param {Number} x x position of the cursor\r\n * @param {Number} y y position of the cursor\r\n * @return {Boolean} true if the action/event modified the object\r\n */\r\n mouseDownHandler: function(/* eventData, transformData, x, y */) { },\r\n\r\n /**\r\n * The control mouseUpHandler, provide one to handle an effect on mouse up.\r\n * @param {Event} eventData the native mouse event\r\n * @param {Object} transformData properties of the current transform\r\n * @param {Number} x x position of the cursor\r\n * @param {Number} y y position of the cursor\r\n * @return {Boolean} true if the action/event modified the object\r\n */\r\n mouseUpHandler: function(/* eventData, transformData, x, y */) { },\r\n\r\n /**\r\n * Returns control actionHandler\r\n * @param {Event} eventData the native mouse event\r\n * @param {fabric.Object} fabricObject on which the control is displayed\r\n * @param {fabric.Control} control control for which the action handler is being asked\r\n * @return {Function} the action handler\r\n */\r\n getActionHandler: function(/* eventData, fabricObject, control */) {\r\n return this.actionHandler;\r\n },\r\n\r\n /**\r\n * Returns control mouseDown handler\r\n * @param {Event} eventData the native mouse event\r\n * @param {fabric.Object} fabricObject on which the control is displayed\r\n * @param {fabric.Control} control control for which the action handler is being asked\r\n * @return {Function} the action handler\r\n */\r\n getMouseDownHandler: function(/* eventData, fabricObject, control */) {\r\n return this.mouseDownHandler;\r\n },\r\n\r\n /**\r\n * Returns control mouseUp handler\r\n * @param {Event} eventData the native mouse event\r\n * @param {fabric.Object} fabricObject on which the control is displayed\r\n * @param {fabric.Control} control control for which the action handler is being asked\r\n * @return {Function} the action handler\r\n */\r\n getMouseUpHandler: function(/* eventData, fabricObject, control */) {\r\n return this.mouseUpHandler;\r\n },\r\n\r\n /**\r\n * Returns control cursorStyle for css using cursorStyle. If you need a more elaborate\r\n * function you can pass one in the constructor\r\n * the cursorStyle property\r\n * @param {Event} eventData the native mouse event\r\n * @param {fabric.Control} control the current control ( likely this)\r\n * @param {fabric.Object} object on which the control is displayed\r\n * @return {String}\r\n */\r\n cursorStyleHandler: function(eventData, control /* fabricObject */) {\r\n return control.cursorStyle;\r\n },\r\n\r\n /**\r\n * Returns the action name. The basic implementation just return the actionName property.\r\n * @param {Event} eventData the native mouse event\r\n * @param {fabric.Control} control the current control ( likely this)\r\n * @param {fabric.Object} object on which the control is displayed\r\n * @return {String}\r\n */\r\n getActionName: function(eventData, control /* fabricObject */) {\r\n return control.actionName;\r\n },\r\n\r\n /**\r\n * Returns controls visibility\r\n * @param {fabric.Object} object on which the control is displayed\r\n * @param {String} controlKey key where the control is memorized on the\r\n * @return {Boolean}\r\n */\r\n getVisibility: function(fabricObject, controlKey) {\r\n var objectVisibility = fabricObject._controlsVisibility;\r\n if (objectVisibility && typeof objectVisibility[controlKey] !== 'undefined') {\r\n return objectVisibility[controlKey];\r\n }\r\n return this.visible;\r\n },\r\n\r\n /**\r\n * Sets controls visibility\r\n * @param {Boolean} visibility for the object\r\n * @return {Void}\r\n */\r\n setVisibility: function(visibility /* name, fabricObject */) {\r\n this.visible = visibility;\r\n },\r\n\r\n\r\n positionHandler: function(dim, finalMatrix /*, fabricObject, currentControl */) {\r\n var point = fabric.util.transformPoint({\r\n x: this.x * dim.x + this.offsetX,\r\n y: this.y * dim.y + this.offsetY }, finalMatrix);\r\n return point;\r\n },\r\n\r\n /**\r\n * Returns the coords for this control based on object values.\r\n * @param {Number} objectAngle angle from the fabric object holding the control\r\n * @param {Number} objectCornerSize cornerSize from the fabric object holding the control (or touchCornerSize if\r\n * isTouch is true)\r\n * @param {Number} centerX x coordinate where the control center should be\r\n * @param {Number} centerY y coordinate where the control center should be\r\n * @param {boolean} isTouch true if touch corner, false if normal corner\r\n */\r\n calcCornerCoords: function(objectAngle, objectCornerSize, centerX, centerY, isTouch) {\r\n var cosHalfOffset,\r\n sinHalfOffset,\r\n cosHalfOffsetComp,\r\n sinHalfOffsetComp,\r\n xSize = (isTouch) ? this.touchSizeX : this.sizeX,\r\n ySize = (isTouch) ? this.touchSizeY : this.sizeY;\r\n if (xSize && ySize && xSize !== ySize) {\r\n // handle rectangular corners\r\n var controlTriangleAngle = Math.atan2(ySize, xSize);\r\n var cornerHypotenuse = Math.sqrt(xSize * xSize + ySize * ySize) / 2;\r\n var newTheta = controlTriangleAngle - fabric.util.degreesToRadians(objectAngle);\r\n var newThetaComp = Math.PI / 2 - controlTriangleAngle - fabric.util.degreesToRadians(objectAngle);\r\n cosHalfOffset = cornerHypotenuse * fabric.util.cos(newTheta);\r\n sinHalfOffset = cornerHypotenuse * fabric.util.sin(newTheta);\r\n // use complementary angle for two corners\r\n cosHalfOffsetComp = cornerHypotenuse * fabric.util.cos(newThetaComp);\r\n sinHalfOffsetComp = cornerHypotenuse * fabric.util.sin(newThetaComp);\r\n }\r\n else {\r\n // handle square corners\r\n // use default object corner size unless size is defined\r\n var cornerSize = (xSize && ySize) ? xSize : objectCornerSize;\r\n /* 0.7071067812 stands for sqrt(2)/2 */\r\n cornerHypotenuse = cornerSize * 0.7071067812;\r\n // complementary angles are equal since they're both 45 degrees\r\n var newTheta = fabric.util.degreesToRadians(45 - objectAngle);\r\n cosHalfOffset = cosHalfOffsetComp = cornerHypotenuse * fabric.util.cos(newTheta);\r\n sinHalfOffset = sinHalfOffsetComp = cornerHypotenuse * fabric.util.sin(newTheta);\r\n }\r\n\r\n return {\r\n tl: {\r\n x: centerX - sinHalfOffsetComp,\r\n y: centerY - cosHalfOffsetComp,\r\n },\r\n tr: {\r\n x: centerX + cosHalfOffset,\r\n y: centerY - sinHalfOffset,\r\n },\r\n bl: {\r\n x: centerX - cosHalfOffset,\r\n y: centerY + sinHalfOffset,\r\n },\r\n br: {\r\n x: centerX + sinHalfOffsetComp,\r\n y: centerY + cosHalfOffsetComp,\r\n },\r\n };\r\n },\r\n\r\n /**\r\n * Render function for the control.\r\n * When this function runs the context is unscaled. unrotate. Just retina scaled.\r\n * all the functions will have to translate to the point left,top before starting Drawing\r\n * if they want to draw a control where the position is detected.\r\n * left and top are the result of the positionHandler function\r\n * @param {RenderingContext2D} ctx the context where the control will be drawn\r\n * @param {Number} left position of the canvas where we are about to render the control.\r\n * @param {Number} top position of the canvas where we are about to render the control.\r\n * @param {Object} styleOverride\r\n * @param {fabric.Object} fabricObject the object where the control is about to be rendered\r\n */\r\n render: function(ctx, left, top, styleOverride, fabricObject) {\r\n styleOverride = styleOverride || {};\r\n switch (styleOverride.cornerStyle || fabricObject.cornerStyle) {\r\n case 'circle':\r\n fabric.controlsUtils.renderCircleControl.call(this, ctx, left, top, styleOverride, fabricObject);\r\n break;\r\n default:\r\n fabric.controlsUtils.renderSquareControl.call(this, ctx, left, top, styleOverride, fabricObject);\r\n }\r\n },\r\n };\r\n\r\n})(typeof exports !== 'undefined' ? exports : this);\r\n(function () {\r\n\r\n 'use strict';\r\n\r\n if (fabric.StaticCanvas) {\r\n fabric.warn('fabric.StaticCanvas is already defined.');\r\n return;\r\n }\r\n\r\n // aliases for faster resolution\r\n var extend = fabric.util.object.extend,\r\n getElementOffset = fabric.util.getElementOffset,\r\n removeFromArray = fabric.util.removeFromArray,\r\n toFixed = fabric.util.toFixed,\r\n transformPoint = fabric.util.transformPoint,\r\n invertTransform = fabric.util.invertTransform,\r\n getNodeCanvas = fabric.util.getNodeCanvas,\r\n createCanvasElement = fabric.util.createCanvasElement,\r\n\r\n CANVAS_INIT_ERROR = new Error('Could not initialize `canvas` element');\r\n\r\n /**\r\n * Static canvas class\r\n * @class fabric.StaticCanvas\r\n * @mixes fabric.Collection\r\n * @mixes fabric.Observable\r\n * @see {@link http://fabricjs.com/static_canvas|StaticCanvas demo}\r\n * @see {@link fabric.StaticCanvas#initialize} for constructor definition\r\n * @fires before:render\r\n * @fires after:render\r\n * @fires canvas:cleared\r\n * @fires object:added\r\n * @fires object:removed\r\n */\r\n fabric.StaticCanvas = fabric.util.createClass(fabric.CommonMethods, /** @lends fabric.StaticCanvas.prototype */ {\r\n\r\n /**\r\n * Constructor\r\n * @param {HTMLElement | String} el <canvas> element to initialize instance on\r\n * @param {Object} [options] Options object\r\n * @return {Object} thisArg\r\n */\r\n initialize: function(el, options) {\r\n options || (options = { });\r\n this.renderAndResetBound = this.renderAndReset.bind(this);\r\n this.requestRenderAllBound = this.requestRenderAll.bind(this);\r\n this._initStatic(el, options);\r\n },\r\n\r\n /**\r\n * Background color of canvas instance.\r\n * Should be set via {@link fabric.StaticCanvas#setBackgroundColor}.\r\n * @type {(String|fabric.Pattern)}\r\n * @default\r\n */\r\n backgroundColor: '',\r\n\r\n /**\r\n * Background image of canvas instance.\r\n * since 2.4.0 image caching is active, please when putting an image as background, add to the\r\n * canvas property a reference to the canvas it is on. Otherwise the image cannot detect the zoom\r\n * vale. As an alternative you can disable image objectCaching\r\n * @type fabric.Image\r\n * @default\r\n */\r\n backgroundImage: null,\r\n\r\n /**\r\n * Overlay color of canvas instance.\r\n * Should be set via {@link fabric.StaticCanvas#setOverlayColor}\r\n * @since 1.3.9\r\n * @type {(String|fabric.Pattern)}\r\n * @default\r\n */\r\n overlayColor: '',\r\n\r\n /**\r\n * Overlay image of canvas instance.\r\n * since 2.4.0 image caching is active, please when putting an image as overlay, add to the\r\n * canvas property a reference to the canvas it is on. Otherwise the image cannot detect the zoom\r\n * vale. As an alternative you can disable image objectCaching\r\n * @type fabric.Image\r\n * @default\r\n */\r\n overlayImage: null,\r\n\r\n /**\r\n * Indicates whether toObject/toDatalessObject should include default values\r\n * if set to false, takes precedence over the object value.\r\n * @type Boolean\r\n * @default\r\n */\r\n includeDefaultValues: true,\r\n\r\n /**\r\n * Indicates whether objects' state should be saved\r\n * @type Boolean\r\n * @default\r\n */\r\n stateful: false,\r\n\r\n /**\r\n * Indicates whether {@link fabric.Collection.add}, {@link fabric.Collection.insertAt} and {@link fabric.Collection.remove},\r\n * {@link fabric.StaticCanvas.moveTo}, {@link fabric.StaticCanvas.clear} and many more, should also re-render canvas.\r\n * Disabling this option will not give a performance boost when adding/removing a lot of objects to/from canvas at once\r\n * since the renders are quequed and executed one per frame.\r\n * Disabling is suggested anyway and managing the renders of the app manually is not a big effort ( canvas.requestRenderAll() )\r\n * Left default to true to do not break documentation and old app, fiddles.\r\n * @type Boolean\r\n * @default\r\n */\r\n renderOnAddRemove: true,\r\n\r\n /**\r\n * Indicates whether object controls (borders/controls) are rendered above overlay image\r\n * @type Boolean\r\n * @default\r\n */\r\n controlsAboveOverlay: false,\r\n\r\n /**\r\n * Indicates whether the browser can be scrolled when using a touchscreen and dragging on the canvas\r\n * @type Boolean\r\n * @default\r\n */\r\n allowTouchScrolling: false,\r\n\r\n /**\r\n * Indicates whether this canvas will use image smoothing, this is on by default in browsers\r\n * @type Boolean\r\n * @default\r\n */\r\n imageSmoothingEnabled: true,\r\n\r\n /**\r\n * The transformation (a Canvas 2D API transform matrix) which focuses the viewport\r\n * @type Array\r\n * @example Default transform\r\n * canvas.viewportTransform = [1, 0, 0, 1, 0, 0];\r\n * @example Scale by 70% and translate toward bottom-right by 50, without skewing\r\n * canvas.viewportTransform = [0.7, 0, 0, 0.7, 50, 50];\r\n * @default\r\n */\r\n viewportTransform: fabric.iMatrix.concat(),\r\n\r\n /**\r\n * if set to false background image is not affected by viewport transform\r\n * @since 1.6.3\r\n * @type Boolean\r\n * @default\r\n */\r\n backgroundVpt: true,\r\n\r\n /**\r\n * if set to false overlya image is not affected by viewport transform\r\n * @since 1.6.3\r\n * @type Boolean\r\n * @default\r\n */\r\n overlayVpt: true,\r\n\r\n /**\r\n * When true, canvas is scaled by devicePixelRatio for better rendering on retina screens\r\n * @type Boolean\r\n * @default\r\n */\r\n enableRetinaScaling: true,\r\n\r\n /**\r\n * Describe canvas element extension over design\r\n * properties are tl,tr,bl,br.\r\n * if canvas is not zoomed/panned those points are the four corner of canvas\r\n * if canvas is viewportTransformed you those points indicate the extension\r\n * of canvas element in plain untrasformed coordinates\r\n * The coordinates get updated with @method calcViewportBoundaries.\r\n * @memberOf fabric.StaticCanvas.prototype\r\n */\r\n vptCoords: { },\r\n\r\n /**\r\n * Based on vptCoords and object.aCoords, skip rendering of objects that\r\n * are not included in current viewport.\r\n * May greatly help in applications with crowded canvas and use of zoom/pan\r\n * If One of the corner of the bounding box of the object is on the canvas\r\n * the objects get rendered.\r\n * @memberOf fabric.StaticCanvas.prototype\r\n * @type Boolean\r\n * @default\r\n */\r\n skipOffscreen: true,\r\n\r\n /**\r\n * a fabricObject that, without stroke define a clipping area with their shape. filled in black\r\n * the clipPath object gets used when the canvas has rendered, and the context is placed in the\r\n * top left corner of the canvas.\r\n * clipPath will clip away controls, if you do not want this to happen use controlsAboveOverlay = true\r\n * @type fabric.Object\r\n */\r\n clipPath: undefined,\r\n\r\n /**\r\n * @private\r\n * @param {HTMLElement | String} el <canvas> element to initialize instance on\r\n * @param {Object} [options] Options object\r\n */\r\n _initStatic: function(el, options) {\r\n var cb = this.requestRenderAllBound;\r\n this._objects = [];\r\n this._createLowerCanvas(el);\r\n this._initOptions(options);\r\n // only initialize retina scaling once\r\n if (!this.interactive) {\r\n this._initRetinaScaling();\r\n }\r\n\r\n if (options.overlayImage) {\r\n this.setOverlayImage(options.overlayImage, cb);\r\n }\r\n if (options.backgroundImage) {\r\n this.setBackgroundImage(options.backgroundImage, cb);\r\n }\r\n if (options.backgroundColor) {\r\n this.setBackgroundColor(options.backgroundColor, cb);\r\n }\r\n if (options.overlayColor) {\r\n this.setOverlayColor(options.overlayColor, cb);\r\n }\r\n this.calcOffset();\r\n },\r\n\r\n /**\r\n * @private\r\n */\r\n _isRetinaScaling: function() {\r\n return (fabric.devicePixelRatio > 1 && this.enableRetinaScaling);\r\n },\r\n\r\n /**\r\n * @private\r\n * @return {Number} retinaScaling if applied, otherwise 1;\r\n */\r\n getRetinaScaling: function() {\r\n return this._isRetinaScaling() ? Math.max(1, fabric.devicePixelRatio) : 1;\r\n },\r\n\r\n /**\r\n * @private\r\n */\r\n _initRetinaScaling: function() {\r\n if (!this._isRetinaScaling()) {\r\n return;\r\n }\r\n var scaleRatio = fabric.devicePixelRatio;\r\n this.__initRetinaScaling(scaleRatio, this.lowerCanvasEl, this.contextContainer);\r\n if (this.upperCanvasEl) {\r\n this.__initRetinaScaling(scaleRatio, this.upperCanvasEl, this.contextTop);\r\n }\r\n },\r\n\r\n __initRetinaScaling: function(scaleRatio, canvas, context) {\r\n canvas.setAttribute('width', this.width * scaleRatio);\r\n canvas.setAttribute('height', this.height * scaleRatio);\r\n context.scale(scaleRatio, scaleRatio);\r\n },\r\n\r\n\r\n /**\r\n * Calculates canvas element offset relative to the document\r\n * This method is also attached as \"resize\" event handler of window\r\n * @return {fabric.Canvas} instance\r\n * @chainable\r\n */\r\n calcOffset: function () {\r\n this._offset = getElementOffset(this.lowerCanvasEl);\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets {@link fabric.StaticCanvas#overlayImage|overlay image} for this canvas\r\n * @param {(fabric.Image|String)} image fabric.Image instance or URL of an image to set overlay to\r\n * @param {Function} callback callback to invoke when image is loaded and set as an overlay\r\n * @param {Object} [options] Optional options to set for the {@link fabric.Image|overlay image}.\r\n * @return {fabric.Canvas} thisArg\r\n * @chainable\r\n * @see {@link http://jsfiddle.net/fabricjs/MnzHT/|jsFiddle demo}\r\n * @example Normal overlayImage with left/top = 0\r\n * canvas.setOverlayImage('http://fabricjs.com/assets/jail_cell_bars.png', canvas.renderAll.bind(canvas), {\r\n * // Needed to position overlayImage at 0/0\r\n * originX: 'left',\r\n * originY: 'top'\r\n * });\r\n * @example overlayImage with different properties\r\n * canvas.setOverlayImage('http://fabricjs.com/assets/jail_cell_bars.png', canvas.renderAll.bind(canvas), {\r\n * opacity: 0.5,\r\n * angle: 45,\r\n * left: 400,\r\n * top: 400,\r\n * originX: 'left',\r\n * originY: 'top'\r\n * });\r\n * @example Stretched overlayImage #1 - width/height correspond to canvas width/height\r\n * fabric.Image.fromURL('http://fabricjs.com/assets/jail_cell_bars.png', function(img, isError) {\r\n * img.set({width: canvas.width, height: canvas.height, originX: 'left', originY: 'top'});\r\n * canvas.setOverlayImage(img, canvas.renderAll.bind(canvas));\r\n * });\r\n * @example Stretched overlayImage #2 - width/height correspond to canvas width/height\r\n * canvas.setOverlayImage('http://fabricjs.com/assets/jail_cell_bars.png', canvas.renderAll.bind(canvas), {\r\n * width: canvas.width,\r\n * height: canvas.height,\r\n * // Needed to position overlayImage at 0/0\r\n * originX: 'left',\r\n * originY: 'top'\r\n * });\r\n * @example overlayImage loaded from cross-origin\r\n * canvas.setOverlayImage('http://fabricjs.com/assets/jail_cell_bars.png', canvas.renderAll.bind(canvas), {\r\n * opacity: 0.5,\r\n * angle: 45,\r\n * left: 400,\r\n * top: 400,\r\n * originX: 'left',\r\n * originY: 'top',\r\n * crossOrigin: 'anonymous'\r\n * });\r\n */\r\n setOverlayImage: function (image, callback, options) {\r\n return this.__setBgOverlayImage('overlayImage', image, callback, options);\r\n },\r\n\r\n /**\r\n * Sets {@link fabric.StaticCanvas#backgroundImage|background image} for this canvas\r\n * @param {(fabric.Image|String)} image fabric.Image instance or URL of an image to set background to\r\n * @param {Function} callback Callback to invoke when image is loaded and set as background\r\n * @param {Object} [options] Optional options to set for the {@link fabric.Image|background image}.\r\n * @return {fabric.Canvas} thisArg\r\n * @chainable\r\n * @see {@link http://jsfiddle.net/djnr8o7a/28/|jsFiddle demo}\r\n * @example Normal backgroundImage with left/top = 0\r\n * canvas.setBackgroundImage('http://fabricjs.com/assets/honey_im_subtle.png', canvas.renderAll.bind(canvas), {\r\n * // Needed to position backgroundImage at 0/0\r\n * originX: 'left',\r\n * originY: 'top'\r\n * });\r\n * @example backgroundImage with different properties\r\n * canvas.setBackgroundImage('http://fabricjs.com/assets/honey_im_subtle.png', canvas.renderAll.bind(canvas), {\r\n * opacity: 0.5,\r\n * angle: 45,\r\n * left: 400,\r\n * top: 400,\r\n * originX: 'left',\r\n * originY: 'top'\r\n * });\r\n * @example Stretched backgroundImage #1 - width/height correspond to canvas width/height\r\n * fabric.Image.fromURL('http://fabricjs.com/assets/honey_im_subtle.png', function(img, isError) {\r\n * img.set({width: canvas.width, height: canvas.height, originX: 'left', originY: 'top'});\r\n * canvas.setBackgroundImage(img, canvas.renderAll.bind(canvas));\r\n * });\r\n * @example Stretched backgroundImage #2 - width/height correspond to canvas width/height\r\n * canvas.setBackgroundImage('http://fabricjs.com/assets/honey_im_subtle.png', canvas.renderAll.bind(canvas), {\r\n * width: canvas.width,\r\n * height: canvas.height,\r\n * // Needed to position backgroundImage at 0/0\r\n * originX: 'left',\r\n * originY: 'top'\r\n * });\r\n * @example backgroundImage loaded from cross-origin\r\n * canvas.setBackgroundImage('http://fabricjs.com/assets/honey_im_subtle.png', canvas.renderAll.bind(canvas), {\r\n * opacity: 0.5,\r\n * angle: 45,\r\n * left: 400,\r\n * top: 400,\r\n * originX: 'left',\r\n * originY: 'top',\r\n * crossOrigin: 'anonymous'\r\n * });\r\n */\r\n // TODO: fix stretched examples\r\n setBackgroundImage: function (image, callback, options) {\r\n return this.__setBgOverlayImage('backgroundImage', image, callback, options);\r\n },\r\n\r\n /**\r\n * Sets {@link fabric.StaticCanvas#overlayColor|foreground color} for this canvas\r\n * @param {(String|fabric.Pattern)} overlayColor Color or pattern to set foreground color to\r\n * @param {Function} callback Callback to invoke when foreground color is set\r\n * @return {fabric.Canvas} thisArg\r\n * @chainable\r\n * @see {@link http://jsfiddle.net/fabricjs/pB55h/|jsFiddle demo}\r\n * @example Normal overlayColor - color value\r\n * canvas.setOverlayColor('rgba(255, 73, 64, 0.6)', canvas.renderAll.bind(canvas));\r\n * @example fabric.Pattern used as overlayColor\r\n * canvas.setOverlayColor({\r\n * source: 'http://fabricjs.com/assets/escheresque_ste.png'\r\n * }, canvas.renderAll.bind(canvas));\r\n * @example fabric.Pattern used as overlayColor with repeat and offset\r\n * canvas.setOverlayColor({\r\n * source: 'http://fabricjs.com/assets/escheresque_ste.png',\r\n * repeat: 'repeat',\r\n * offsetX: 200,\r\n * offsetY: 100\r\n * }, canvas.renderAll.bind(canvas));\r\n */\r\n setOverlayColor: function(overlayColor, callback) {\r\n return this.__setBgOverlayColor('overlayColor', overlayColor, callback);\r\n },\r\n\r\n /**\r\n * Sets {@link fabric.StaticCanvas#backgroundColor|background color} for this canvas\r\n * @param {(String|fabric.Pattern)} backgroundColor Color or pattern to set background color to\r\n * @param {Function} callback Callback to invoke when background color is set\r\n * @return {fabric.Canvas} thisArg\r\n * @chainable\r\n * @see {@link http://jsfiddle.net/fabricjs/hXzvk/|jsFiddle demo}\r\n * @example Normal backgroundColor - color value\r\n * canvas.setBackgroundColor('rgba(255, 73, 64, 0.6)', canvas.renderAll.bind(canvas));\r\n * @example fabric.Pattern used as backgroundColor\r\n * canvas.setBackgroundColor({\r\n * source: 'http://fabricjs.com/assets/escheresque_ste.png'\r\n * }, canvas.renderAll.bind(canvas));\r\n * @example fabric.Pattern used as backgroundColor with repeat and offset\r\n * canvas.setBackgroundColor({\r\n * source: 'http://fabricjs.com/assets/escheresque_ste.png',\r\n * repeat: 'repeat',\r\n * offsetX: 200,\r\n * offsetY: 100\r\n * }, canvas.renderAll.bind(canvas));\r\n */\r\n setBackgroundColor: function(backgroundColor, callback) {\r\n return this.__setBgOverlayColor('backgroundColor', backgroundColor, callback);\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {String} property Property to set ({@link fabric.StaticCanvas#backgroundImage|backgroundImage}\r\n * or {@link fabric.StaticCanvas#overlayImage|overlayImage})\r\n * @param {(fabric.Image|String|null)} image fabric.Image instance, URL of an image or null to set background or overlay to\r\n * @param {Function} callback Callback to invoke when image is loaded and set as background or overlay. The first argument is the created image, the second argument is a flag indicating whether an error occurred or not.\r\n * @param {Object} [options] Optional options to set for the {@link fabric.Image|image}.\r\n */\r\n __setBgOverlayImage: function(property, image, callback, options) {\r\n if (typeof image === 'string') {\r\n fabric.util.loadImage(image, function(img, isError) {\r\n if (img) {\r\n var instance = new fabric.Image(img, options);\r\n this[property] = instance;\r\n instance.canvas = this;\r\n }\r\n callback && callback(img, isError);\r\n }, this, options && options.crossOrigin);\r\n }\r\n else {\r\n options && image.setOptions(options);\r\n this[property] = image;\r\n image && (image.canvas = this);\r\n callback && callback(image, false);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {String} property Property to set ({@link fabric.StaticCanvas#backgroundColor|backgroundColor}\r\n * or {@link fabric.StaticCanvas#overlayColor|overlayColor})\r\n * @param {(Object|String|null)} color Object with pattern information, color value or null\r\n * @param {Function} [callback] Callback is invoked when color is set\r\n */\r\n __setBgOverlayColor: function(property, color, callback) {\r\n this[property] = color;\r\n this._initGradient(color, property);\r\n this._initPattern(color, property, callback);\r\n return this;\r\n },\r\n\r\n /**\r\n * @private\r\n */\r\n _createCanvasElement: function() {\r\n var element = createCanvasElement();\r\n if (!element) {\r\n throw CANVAS_INIT_ERROR;\r\n }\r\n if (!element.style) {\r\n element.style = { };\r\n }\r\n if (typeof element.getContext === 'undefined') {\r\n throw CANVAS_INIT_ERROR;\r\n }\r\n return element;\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Object} [options] Options object\r\n */\r\n _initOptions: function (options) {\r\n var lowerCanvasEl = this.lowerCanvasEl;\r\n this._setOptions(options);\r\n\r\n this.width = this.width || parseInt(lowerCanvasEl.width, 10) || 0;\r\n this.height = this.height || parseInt(lowerCanvasEl.height, 10) || 0;\r\n\r\n if (!this.lowerCanvasEl.style) {\r\n return;\r\n }\r\n\r\n lowerCanvasEl.width = this.width;\r\n lowerCanvasEl.height = this.height;\r\n\r\n lowerCanvasEl.style.width = this.width + 'px';\r\n lowerCanvasEl.style.height = this.height + 'px';\r\n\r\n this.viewportTransform = this.viewportTransform.slice();\r\n },\r\n\r\n /**\r\n * Creates a bottom canvas\r\n * @private\r\n * @param {HTMLElement} [canvasEl]\r\n */\r\n _createLowerCanvas: function (canvasEl) {\r\n // canvasEl === 'HTMLCanvasElement' does not work on jsdom/node\r\n if (canvasEl && canvasEl.getContext) {\r\n this.lowerCanvasEl = canvasEl;\r\n }\r\n else {\r\n this.lowerCanvasEl = fabric.util.getById(canvasEl) || this._createCanvasElement();\r\n }\r\n\r\n fabric.util.addClass(this.lowerCanvasEl, 'lower-canvas');\r\n this._originalCanvasStyle = this.lowerCanvasEl.style;\r\n if (this.interactive) {\r\n this._applyCanvasStyle(this.lowerCanvasEl);\r\n }\r\n\r\n this.contextContainer = this.lowerCanvasEl.getContext('2d');\r\n },\r\n\r\n /**\r\n * Returns canvas width (in px)\r\n * @return {Number}\r\n */\r\n getWidth: function () {\r\n return this.width;\r\n },\r\n\r\n /**\r\n * Returns canvas height (in px)\r\n * @return {Number}\r\n */\r\n getHeight: function () {\r\n return this.height;\r\n },\r\n\r\n /**\r\n * Sets width of this canvas instance\r\n * @param {Number|String} value Value to set width to\r\n * @param {Object} [options] Options object\r\n * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions\r\n * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions\r\n * @return {fabric.Canvas} instance\r\n * @chainable true\r\n */\r\n setWidth: function (value, options) {\r\n return this.setDimensions({ width: value }, options);\r\n },\r\n\r\n /**\r\n * Sets height of this canvas instance\r\n * @param {Number|String} value Value to set height to\r\n * @param {Object} [options] Options object\r\n * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions\r\n * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions\r\n * @return {fabric.Canvas} instance\r\n * @chainable true\r\n */\r\n setHeight: function (value, options) {\r\n return this.setDimensions({ height: value }, options);\r\n },\r\n\r\n /**\r\n * Sets dimensions (width, height) of this canvas instance. when options.cssOnly flag active you should also supply the unit of measure (px/%/em)\r\n * @param {Object} dimensions Object with width/height properties\r\n * @param {Number|String} [dimensions.width] Width of canvas element\r\n * @param {Number|String} [dimensions.height] Height of canvas element\r\n * @param {Object} [options] Options object\r\n * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions\r\n * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions\r\n * @return {fabric.Canvas} thisArg\r\n * @chainable\r\n */\r\n setDimensions: function (dimensions, options) {\r\n var cssValue;\r\n\r\n options = options || {};\r\n\r\n for (var prop in dimensions) {\r\n cssValue = dimensions[prop];\r\n\r\n if (!options.cssOnly) {\r\n this._setBackstoreDimension(prop, dimensions[prop]);\r\n cssValue += 'px';\r\n this.hasLostContext = true;\r\n }\r\n\r\n if (!options.backstoreOnly) {\r\n this._setCssDimension(prop, cssValue);\r\n }\r\n }\r\n if (this._isCurrentlyDrawing) {\r\n this.freeDrawingBrush && this.freeDrawingBrush._setBrushStyles(this.contextTop);\r\n }\r\n this._initRetinaScaling();\r\n this.calcOffset();\r\n\r\n if (!options.cssOnly) {\r\n this.requestRenderAll();\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Helper for setting width/height\r\n * @private\r\n * @param {String} prop property (width|height)\r\n * @param {Number} value value to set property to\r\n * @return {fabric.Canvas} instance\r\n * @chainable true\r\n */\r\n _setBackstoreDimension: function (prop, value) {\r\n this.lowerCanvasEl[prop] = value;\r\n\r\n if (this.upperCanvasEl) {\r\n this.upperCanvasEl[prop] = value;\r\n }\r\n\r\n if (this.cacheCanvasEl) {\r\n this.cacheCanvasEl[prop] = value;\r\n }\r\n\r\n this[prop] = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Helper for setting css width/height\r\n * @private\r\n * @param {String} prop property (width|height)\r\n * @param {String} value value to set property to\r\n * @return {fabric.Canvas} instance\r\n * @chainable true\r\n */\r\n _setCssDimension: function (prop, value) {\r\n this.lowerCanvasEl.style[prop] = value;\r\n\r\n if (this.upperCanvasEl) {\r\n this.upperCanvasEl.style[prop] = value;\r\n }\r\n\r\n if (this.wrapperEl) {\r\n this.wrapperEl.style[prop] = value;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Returns canvas zoom level\r\n * @return {Number}\r\n */\r\n getZoom: function () {\r\n return this.viewportTransform[0];\r\n },\r\n\r\n /**\r\n * Sets viewport transformation of this canvas instance\r\n * @param {Array} vpt a Canvas 2D API transform matrix\r\n * @return {fabric.Canvas} instance\r\n * @chainable true\r\n */\r\n setViewportTransform: function (vpt) {\r\n var activeObject = this._activeObject,\r\n backgroundObject = this.backgroundImage,\r\n overlayObject = this.overlayImage,\r\n object, i, len;\r\n this.viewportTransform = vpt;\r\n for (i = 0, len = this._objects.length; i < len; i++) {\r\n object = this._objects[i];\r\n object.group || object.setCoords(true);\r\n }\r\n if (activeObject) {\r\n activeObject.setCoords();\r\n }\r\n if (backgroundObject) {\r\n backgroundObject.setCoords(true);\r\n }\r\n if (overlayObject) {\r\n overlayObject.setCoords(true);\r\n }\r\n this.calcViewportBoundaries();\r\n this.renderOnAddRemove && this.requestRenderAll();\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets zoom level of this canvas instance, the zoom centered around point\r\n * meaning that following zoom to point with the same point will have the visual\r\n * effect of the zoom originating from that point. The point won't move.\r\n * It has nothing to do with canvas center or visual center of the viewport.\r\n * @param {fabric.Point} point to zoom with respect to\r\n * @param {Number} value to set zoom to, less than 1 zooms out\r\n * @return {fabric.Canvas} instance\r\n * @chainable true\r\n */\r\n zoomToPoint: function (point, value) {\r\n // TODO: just change the scale, preserve other transformations\r\n var before = point, vpt = this.viewportTransform.slice(0);\r\n point = transformPoint(point, invertTransform(this.viewportTransform));\r\n vpt[0] = value;\r\n vpt[3] = value;\r\n var after = transformPoint(point, vpt);\r\n vpt[4] += before.x - after.x;\r\n vpt[5] += before.y - after.y;\r\n return this.setViewportTransform(vpt);\r\n },\r\n\r\n /**\r\n * Sets zoom level of this canvas instance\r\n * @param {Number} value to set zoom to, less than 1 zooms out\r\n * @return {fabric.Canvas} instance\r\n * @chainable true\r\n */\r\n setZoom: function (value) {\r\n this.zoomToPoint(new fabric.Point(0, 0), value);\r\n return this;\r\n },\r\n\r\n /**\r\n * Pan viewport so as to place point at top left corner of canvas\r\n * @param {fabric.Point} point to move to\r\n * @return {fabric.Canvas} instance\r\n * @chainable true\r\n */\r\n absolutePan: function (point) {\r\n var vpt = this.viewportTransform.slice(0);\r\n vpt[4] = -point.x;\r\n vpt[5] = -point.y;\r\n return this.setViewportTransform(vpt);\r\n },\r\n\r\n /**\r\n * Pans viewpoint relatively\r\n * @param {fabric.Point} point (position vector) to move by\r\n * @return {fabric.Canvas} instance\r\n * @chainable true\r\n */\r\n relativePan: function (point) {\r\n return this.absolutePan(new fabric.Point(\r\n -point.x - this.viewportTransform[4],\r\n -point.y - this.viewportTransform[5]\r\n ));\r\n },\r\n\r\n /**\r\n * Returns <canvas> element corresponding to this instance\r\n * @return {HTMLCanvasElement}\r\n */\r\n getElement: function () {\r\n return this.lowerCanvasEl;\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {fabric.Object} obj Object that was added\r\n */\r\n _onObjectAdded: function(obj) {\r\n this.stateful && obj.setupState();\r\n obj._set('canvas', this);\r\n obj.setCoords();\r\n this.fire('object:added', { target: obj });\r\n obj.fire('added');\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {fabric.Object} obj Object that was removed\r\n */\r\n _onObjectRemoved: function(obj) {\r\n this.fire('object:removed', { target: obj });\r\n obj.fire('removed');\r\n delete obj.canvas;\r\n },\r\n\r\n /**\r\n * Clears specified context of canvas element\r\n * @param {CanvasRenderingContext2D} ctx Context to clear\r\n * @return {fabric.Canvas} thisArg\r\n * @chainable\r\n */\r\n clearContext: function(ctx) {\r\n ctx.clearRect(0, 0, this.width, this.height);\r\n return this;\r\n },\r\n\r\n /**\r\n * Returns context of canvas where objects are drawn\r\n * @return {CanvasRenderingContext2D}\r\n */\r\n getContext: function () {\r\n return this.contextContainer;\r\n },\r\n\r\n /**\r\n * Clears all contexts (background, main, top) of an instance\r\n * @return {fabric.Canvas} thisArg\r\n * @chainable\r\n */\r\n clear: function () {\r\n this.remove.apply(this, this.getObjects());\r\n this.backgroundImage = null;\r\n this.overlayImage = null;\r\n this.backgroundColor = '';\r\n this.overlayColor = '';\r\n if (this._hasITextHandlers) {\r\n this.off('mouse:up', this._mouseUpITextHandler);\r\n this._iTextInstances = null;\r\n this._hasITextHandlers = false;\r\n }\r\n this.clearContext(this.contextContainer);\r\n this.fire('canvas:cleared');\r\n this.renderOnAddRemove && this.requestRenderAll();\r\n return this;\r\n },\r\n\r\n /**\r\n * Renders the canvas\r\n * @return {fabric.Canvas} instance\r\n * @chainable\r\n */\r\n renderAll: function () {\r\n var canvasToDrawOn = this.contextContainer;\r\n this.renderCanvas(canvasToDrawOn, this._objects);\r\n return this;\r\n },\r\n\r\n /**\r\n * Function created to be instance bound at initialization\r\n * used in requestAnimationFrame rendering\r\n * Let the fabricJS call it. If you call it manually you could have more\r\n * animationFrame stacking on to of each other\r\n * for an imperative rendering, use canvas.renderAll\r\n * @private\r\n * @return {fabric.Canvas} instance\r\n * @chainable\r\n */\r\n renderAndReset: function() {\r\n this.isRendering = 0;\r\n this.renderAll();\r\n },\r\n\r\n /**\r\n * Append a renderAll request to next animation frame.\r\n * unless one is already in progress, in that case nothing is done\r\n * a boolean flag will avoid appending more.\r\n * @return {fabric.Canvas} instance\r\n * @chainable\r\n */\r\n requestRenderAll: function () {\r\n if (!this.isRendering) {\r\n this.isRendering = fabric.util.requestAnimFrame(this.renderAndResetBound);\r\n }\r\n return this;\r\n },\r\n\r\n /**\r\n * Calculate the position of the 4 corner of canvas with current viewportTransform.\r\n * helps to determinate when an object is in the current rendering viewport using\r\n * object absolute coordinates ( aCoords )\r\n * @return {Object} points.tl\r\n * @chainable\r\n */\r\n calcViewportBoundaries: function() {\r\n var points = { }, width = this.width, height = this.height,\r\n iVpt = invertTransform(this.viewportTransform);\r\n points.tl = transformPoint({ x: 0, y: 0 }, iVpt);\r\n points.br = transformPoint({ x: width, y: height }, iVpt);\r\n points.tr = new fabric.Point(points.br.x, points.tl.y);\r\n points.bl = new fabric.Point(points.tl.x, points.br.y);\r\n this.vptCoords = points;\r\n return points;\r\n },\r\n\r\n cancelRequestedRender: function() {\r\n if (this.isRendering) {\r\n fabric.util.cancelAnimFrame(this.isRendering);\r\n this.isRendering = 0;\r\n }\r\n },\r\n\r\n /**\r\n * Renders background, objects, overlay and controls.\r\n * @param {CanvasRenderingContext2D} ctx\r\n * @param {Array} objects to render\r\n * @return {fabric.Canvas} instance\r\n * @chainable\r\n */\r\n renderCanvas: function(ctx, objects) {\r\n var v = this.viewportTransform, path = this.clipPath;\r\n this.cancelRequestedRender();\r\n this.calcViewportBoundaries();\r\n this.clearContext(ctx);\r\n fabric.util.setImageSmoothing(ctx, this.imageSmoothingEnabled);\r\n this.fire('before:render', { ctx: ctx, });\r\n this._renderBackground(ctx);\r\n\r\n ctx.save();\r\n //apply viewport transform once for all rendering process\r\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\r\n this._renderObjects(ctx, objects);\r\n ctx.restore();\r\n if (!this.controlsAboveOverlay && this.interactive) {\r\n this.drawControls(ctx);\r\n }\r\n if (path) {\r\n path.canvas = this;\r\n // needed to setup a couple of variables\r\n path.shouldCache();\r\n path._transformDone = true;\r\n path.renderCache({ forClipping: true });\r\n this.drawClipPathOnCanvas(ctx);\r\n }\r\n this._renderOverlay(ctx);\r\n if (this.controlsAboveOverlay && this.interactive) {\r\n this.drawControls(ctx);\r\n }\r\n this.fire('after:render', { ctx: ctx, });\r\n },\r\n\r\n /**\r\n * Paint the cached clipPath on the lowerCanvasEl\r\n * @param {CanvasRenderingContext2D} ctx Context to render on\r\n */\r\n drawClipPathOnCanvas: function(ctx) {\r\n var v = this.viewportTransform, path = this.clipPath;\r\n ctx.save();\r\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\r\n // DEBUG: uncomment this line, comment the following\r\n // ctx.globalAlpha = 0.4;\r\n ctx.globalCompositeOperation = 'destination-in';\r\n path.transform(ctx);\r\n ctx.scale(1 / path.zoomX, 1 / path.zoomY);\r\n ctx.drawImage(path._cacheCanvas, -path.cacheTranslationX, -path.cacheTranslationY);\r\n ctx.restore();\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {CanvasRenderingContext2D} ctx Context to render on\r\n * @param {Array} objects to render\r\n */\r\n _renderObjects: function(ctx, objects) {\r\n var i, len;\r\n for (i = 0, len = objects.length; i < len; ++i) {\r\n objects[i] && objects[i].render(ctx);\r\n }\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {CanvasRenderingContext2D} ctx Context to render on\r\n * @param {string} property 'background' or 'overlay'\r\n */\r\n _renderBackgroundOrOverlay: function(ctx, property) {\r\n var fill = this[property + 'Color'], object = this[property + 'Image'],\r\n v = this.viewportTransform, needsVpt = this[property + 'Vpt'];\r\n if (!fill && !object) {\r\n return;\r\n }\r\n if (fill) {\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.moveTo(0, 0);\r\n ctx.lineTo(this.width, 0);\r\n ctx.lineTo(this.width, this.height);\r\n ctx.lineTo(0, this.height);\r\n ctx.closePath();\r\n ctx.fillStyle = fill.toLive\r\n ? fill.toLive(ctx, this)\r\n : fill;\r\n if (needsVpt) {\r\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\r\n }\r\n ctx.transform(1, 0, 0, 1, fill.offsetX || 0, fill.offsetY || 0);\r\n var m = fill.gradientTransform || fill.patternTransform;\r\n m && ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\r\n ctx.fill();\r\n ctx.restore();\r\n }\r\n if (object) {\r\n ctx.save();\r\n if (needsVpt) {\r\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\r\n }\r\n object.render(ctx);\r\n ctx.restore();\r\n }\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {CanvasRenderingContext2D} ctx Context to render on\r\n */\r\n _renderBackground: function(ctx) {\r\n this._renderBackgroundOrOverlay(ctx, 'background');\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {CanvasRenderingContext2D} ctx Context to render on\r\n */\r\n _renderOverlay: function(ctx) {\r\n this._renderBackgroundOrOverlay(ctx, 'overlay');\r\n },\r\n\r\n /**\r\n * Returns coordinates of a center of canvas.\r\n * Returned value is an object with top and left properties\r\n * @return {Object} object with \"top\" and \"left\" number values\r\n * @deprecated migrate to `getCenterPoint`\r\n */\r\n getCenter: function () {\r\n return {\r\n top: this.height / 2,\r\n left: this.width / 2\r\n };\r\n },\r\n\r\n /**\r\n * Returns coordinates of a center of canvas.\r\n * @return {fabric.Point} \r\n */\r\n getCenterPoint: function () {\r\n return new fabric.Point(this.width / 2, this.height / 2);\r\n },\r\n\r\n /**\r\n * Centers object horizontally in the canvas\r\n * @param {fabric.Object} object Object to center horizontally\r\n * @return {fabric.Canvas} thisArg\r\n */\r\n centerObjectH: function (object) {\r\n return this._centerObject(object, new fabric.Point(this.getCenterPoint().x, object.getCenterPoint().y));\r\n },\r\n\r\n /**\r\n * Centers object vertically in the canvas\r\n * @param {fabric.Object} object Object to center vertically\r\n * @return {fabric.Canvas} thisArg\r\n * @chainable\r\n */\r\n centerObjectV: function (object) {\r\n return this._centerObject(object, new fabric.Point(object.getCenterPoint().x, this.getCenterPoint().y));\r\n },\r\n\r\n /**\r\n * Centers object vertically and horizontally in the canvas\r\n * @param {fabric.Object} object Object to center vertically and horizontally\r\n * @return {fabric.Canvas} thisArg\r\n * @chainable\r\n */\r\n centerObject: function(object) {\r\n var center = this.getCenterPoint();\r\n return this._centerObject(object, center);\r\n },\r\n\r\n /**\r\n * Centers object vertically and horizontally in the viewport\r\n * @param {fabric.Object} object Object to center vertically and horizontally\r\n * @return {fabric.Canvas} thisArg\r\n * @chainable\r\n */\r\n viewportCenterObject: function(object) {\r\n var vpCenter = this.getVpCenter();\r\n return this._centerObject(object, vpCenter);\r\n },\r\n\r\n /**\r\n * Centers object horizontally in the viewport, object.top is unchanged\r\n * @param {fabric.Object} object Object to center vertically and horizontally\r\n * @return {fabric.Canvas} thisArg\r\n * @chainable\r\n */\r\n viewportCenterObjectH: function(object) {\r\n var vpCenter = this.getVpCenter();\r\n this._centerObject(object, new fabric.Point(vpCenter.x, object.getCenterPoint().y));\r\n return this;\r\n },\r\n\r\n /**\r\n * Centers object Vertically in the viewport, object.top is unchanged\r\n * @param {fabric.Object} object Object to center vertically and horizontally\r\n * @return {fabric.Canvas} thisArg\r\n * @chainable\r\n */\r\n viewportCenterObjectV: function(object) {\r\n var vpCenter = this.getVpCenter();\r\n\r\n return this._centerObject(object, new fabric.Point(object.getCenterPoint().x, vpCenter.y));\r\n },\r\n\r\n /**\r\n * Calculate the point in canvas that correspond to the center of actual viewport.\r\n * @return {fabric.Point} vpCenter, viewport center\r\n * @chainable\r\n */\r\n getVpCenter: function() {\r\n var center = this.getCenterPoint(),\r\n iVpt = invertTransform(this.viewportTransform);\r\n return transformPoint(center, iVpt);\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {fabric.Object} object Object to center\r\n * @param {fabric.Point} center Center point\r\n * @return {fabric.Canvas} thisArg\r\n * @chainable\r\n */\r\n _centerObject: function(object, center) {\r\n object.setPositionByOrigin(center, 'center', 'center');\r\n object.setCoords();\r\n this.renderOnAddRemove && this.requestRenderAll();\r\n return this;\r\n },\r\n\r\n /**\r\n * Returns dataless JSON representation of canvas\r\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\r\n * @return {String} json string\r\n */\r\n toDatalessJSON: function (propertiesToInclude) {\r\n return this.toDatalessObject(propertiesToInclude);\r\n },\r\n\r\n /**\r\n * Returns object representation of canvas\r\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\r\n * @return {Object} object representation of an instance\r\n */\r\n toObject: function (propertiesToInclude) {\r\n return this._toObjectMethod('toObject', propertiesToInclude);\r\n },\r\n\r\n /**\r\n * Returns dataless object representation of canvas\r\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\r\n * @return {Object} object representation of an instance\r\n */\r\n toDatalessObject: function (propertiesToInclude) {\r\n return this._toObjectMethod('toDatalessObject', propertiesToInclude);\r\n },\r\n\r\n /**\r\n * @private\r\n */\r\n _toObjectMethod: function (methodName, propertiesToInclude) {\r\n\r\n var clipPath = this.clipPath, data = {\r\n version: fabric.version,\r\n objects: this._toObjects(methodName, propertiesToInclude),\r\n };\r\n if (clipPath && !clipPath.excludeFromExport) {\r\n data.clipPath = this._toObject(this.clipPath, methodName, propertiesToInclude);\r\n }\r\n extend(data, this.__serializeBgOverlay(methodName, propertiesToInclude));\r\n\r\n fabric.util.populateWithProperties(this, data, propertiesToInclude);\r\n\r\n return data;\r\n },\r\n\r\n /**\r\n * @private\r\n */\r\n _toObjects: function(methodName, propertiesToInclude) {\r\n return this._objects.filter(function(object) {\r\n return !object.excludeFromExport;\r\n }).map(function(instance) {\r\n return this._toObject(instance, methodName, propertiesToInclude);\r\n }, this);\r\n },\r\n\r\n /**\r\n * @private\r\n */\r\n _toObject: function(instance, methodName, propertiesToInclude) {\r\n var originalValue;\r\n\r\n if (!this.includeDefaultValues) {\r\n originalValue = instance.includeDefaultValues;\r\n instance.includeDefaultValues = false;\r\n }\r\n\r\n var object = instance[methodName](propertiesToInclude);\r\n if (!this.includeDefaultValues) {\r\n instance.includeDefaultValues = originalValue;\r\n }\r\n return object;\r\n },\r\n\r\n /**\r\n * @private\r\n */\r\n __serializeBgOverlay: function(methodName, propertiesToInclude) {\r\n var data = {}, bgImage = this.backgroundImage, overlayImage = this.overlayImage,\r\n bgColor = this.backgroundColor, overlayColor = this.overlayColor;\r\n\r\n if (bgColor && bgColor.toObject) {\r\n if (!bgColor.excludeFromExport) {\r\n data.background = bgColor.toObject(propertiesToInclude);\r\n }\r\n }\r\n else if (bgColor) {\r\n data.background = bgColor;\r\n }\r\n\r\n if (overlayColor && overlayColor.toObject) {\r\n if (!overlayColor.excludeFromExport) {\r\n data.overlay = overlayColor.toObject(propertiesToInclude);\r\n }\r\n }\r\n else if (overlayColor) {\r\n data.overlay = overlayColor;\r\n }\r\n\r\n if (bgImage && !bgImage.excludeFromExport) {\r\n data.backgroundImage = this._toObject(bgImage, methodName, propertiesToInclude);\r\n }\r\n if (overlayImage && !overlayImage.excludeFromExport) {\r\n data.overlayImage = this._toObject(overlayImage, methodName, propertiesToInclude);\r\n }\r\n\r\n return data;\r\n },\r\n\r\n \r\n\r\n /**\r\n * Moves an object or the objects of a multiple selection\r\n * to the bottom of the stack of drawn objects\r\n * @param {fabric.Object} object Object to send to back\r\n * @return {fabric.Canvas} thisArg\r\n * @chainable\r\n */\r\n sendToBack: function (object) {\r\n if (!object) {\r\n return this;\r\n }\r\n var activeSelection = this._activeObject,\r\n i, obj, objs;\r\n if (object === activeSelection && object.type === 'activeSelection') {\r\n objs = activeSelection._objects;\r\n for (i = objs.length; i--;) {\r\n obj = objs[i];\r\n removeFromArray(this._objects, obj);\r\n this._objects.unshift(obj);\r\n }\r\n }\r\n else {\r\n removeFromArray(this._objects, object);\r\n this._objects.unshift(object);\r\n }\r\n this.renderOnAddRemove && this.requestRenderAll();\r\n return this;\r\n },\r\n\r\n /**\r\n * Moves an object or the objects of a multiple selection\r\n * to the top of the stack of drawn objects\r\n * @param {fabric.Object} object Object to send\r\n * @return {fabric.Canvas} thisArg\r\n * @chainable\r\n */\r\n bringToFront: function (object) {\r\n if (!object) {\r\n return this;\r\n }\r\n var activeSelection = this._activeObject,\r\n i, obj, objs;\r\n if (object === activeSelection && object.type === 'activeSelection') {\r\n objs = activeSelection._objects;\r\n for (i = 0; i < objs.length; i++) {\r\n obj = objs[i];\r\n removeFromArray(this._objects, obj);\r\n this._objects.push(obj);\r\n }\r\n }\r\n else {\r\n removeFromArray(this._objects, object);\r\n this._objects.push(object);\r\n }\r\n this.renderOnAddRemove && this.requestRenderAll();\r\n return this;\r\n },\r\n\r\n /**\r\n * Moves an object or a selection down in stack of drawn objects\r\n * An optional parameter, intersecting allows to move the object in behind\r\n * the first intersecting object. Where intersection is calculated with\r\n * bounding box. If no intersection is found, there will not be change in the\r\n * stack.\r\n * @param {fabric.Object} object Object to send\r\n * @param {Boolean} [intersecting] If `true`, send object behind next lower intersecting object\r\n * @return {fabric.Canvas} thisArg\r\n * @chainable\r\n */\r\n sendBackwards: function (object, intersecting) {\r\n if (!object) {\r\n return this;\r\n }\r\n var activeSelection = this._activeObject,\r\n i, obj, idx, newIdx, objs, objsMoved = 0;\r\n\r\n if (object === activeSelection && object.type === 'activeSelection') {\r\n objs = activeSelection._objects;\r\n for (i = 0; i < objs.length; i++) {\r\n obj = objs[i];\r\n idx = this._objects.indexOf(obj);\r\n if (idx > 0 + objsMoved) {\r\n newIdx = idx - 1;\r\n removeFromArray(this._objects, obj);\r\n this._objects.splice(newIdx, 0, obj);\r\n }\r\n objsMoved++;\r\n }\r\n }\r\n else {\r\n idx = this._objects.indexOf(object);\r\n if (idx !== 0) {\r\n // if object is not on the bottom of stack\r\n newIdx = this._findNewLowerIndex(object, idx, intersecting);\r\n removeFromArray(this._objects, object);\r\n this._objects.splice(newIdx, 0, object);\r\n }\r\n }\r\n this.renderOnAddRemove && this.requestRenderAll();\r\n return this;\r\n },\r\n\r\n /**\r\n * @private\r\n */\r\n _findNewLowerIndex: function(object, idx, intersecting) {\r\n var newIdx, i;\r\n\r\n if (intersecting) {\r\n newIdx = idx;\r\n\r\n // traverse down the stack looking for the nearest intersecting object\r\n for (i = idx - 1; i >= 0; --i) {\r\n\r\n var isIntersecting = object.intersectsWithObject(this._objects[i]) ||\r\n object.isContainedWithinObject(this._objects[i]) ||\r\n this._objects[i].isContainedWithinObject(object);\r\n\r\n if (isIntersecting) {\r\n newIdx = i;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n newIdx = idx - 1;\r\n }\r\n\r\n return newIdx;\r\n },\r\n\r\n /**\r\n * Moves an object or a selection up in stack of drawn objects\r\n * An optional parameter, intersecting allows to move the object in front\r\n * of the first intersecting object. Where intersection is calculated with\r\n * bounding box. If no intersection is found, there will not be change in the\r\n * stack.\r\n * @param {fabric.Object} object Object to send\r\n * @param {Boolean} [intersecting] If `true`, send object in front of next upper intersecting object\r\n * @return {fabric.Canvas} thisArg\r\n * @chainable\r\n */\r\n bringForward: function (object, intersecting) {\r\n if (!object) {\r\n return this;\r\n }\r\n var activeSelection = this._activeObject,\r\n i, obj, idx, newIdx, objs, objsMoved = 0;\r\n\r\n if (object === activeSelection && object.type === 'activeSelection') {\r\n objs = activeSelection._objects;\r\n for (i = objs.length; i--;) {\r\n obj = objs[i];\r\n idx = this._objects.indexOf(obj);\r\n if (idx < this._objects.length - 1 - objsMoved) {\r\n newIdx = idx + 1;\r\n removeFromArray(this._objects, obj);\r\n this._objects.splice(newIdx, 0, obj);\r\n }\r\n objsMoved++;\r\n }\r\n }\r\n else {\r\n idx = this._objects.indexOf(object);\r\n if (idx !== this._objects.length - 1) {\r\n // if object is not on top of stack (last item in an array)\r\n newIdx = this._findNewUpperIndex(object, idx, intersecting);\r\n removeFromArray(this._objects, object);\r\n this._objects.splice(newIdx, 0, object);\r\n }\r\n }\r\n this.renderOnAddRemove && this.requestRenderAll();\r\n return this;\r\n },\r\n\r\n /**\r\n * @private\r\n */\r\n _findNewUpperIndex: function(object, idx, intersecting) {\r\n var newIdx, i, len;\r\n\r\n if (intersecting) {\r\n newIdx = idx;\r\n\r\n // traverse up the stack looking for the nearest intersecting object\r\n for (i = idx + 1, len = this._objects.length; i < len; ++i) {\r\n\r\n var isIntersecting = object.intersectsWithObject(this._objects[i]) ||\r\n object.isContainedWithinObject(this._objects[i]) ||\r\n this._objects[i].isContainedWithinObject(object);\r\n\r\n if (isIntersecting) {\r\n newIdx = i;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n newIdx = idx + 1;\r\n }\r\n\r\n return newIdx;\r\n },\r\n\r\n /**\r\n * Moves an object to specified level in stack of drawn objects\r\n * @param {fabric.Object} object Object to send\r\n * @param {Number} index Position to move to\r\n * @return {fabric.Canvas} thisArg\r\n * @chainable\r\n */\r\n moveTo: function (object, index) {\r\n removeFromArray(this._objects, object);\r\n this._objects.splice(index, 0, object);\r\n return this.renderOnAddRemove && this.requestRenderAll();\r\n },\r\n\r\n /**\r\n * Clears a canvas element and dispose objects\r\n * @return {fabric.Canvas} thisArg\r\n * @chainable\r\n */\r\n dispose: function () {\r\n // cancel eventually ongoing renders\r\n if (this.isRendering) {\r\n fabric.util.cancelAnimFrame(this.isRendering);\r\n this.isRendering = 0;\r\n }\r\n this.forEachObject(function(object) {\r\n object.dispose && object.dispose();\r\n });\r\n this._objects = [];\r\n if (this.backgroundImage && this.backgroundImage.dispose) {\r\n this.backgroundImage.dispose();\r\n }\r\n this.backgroundImage = null;\r\n if (this.overlayImage && this.overlayImage.dispose) {\r\n this.overlayImage.dispose();\r\n }\r\n this.overlayImage = null;\r\n this._iTextInstances = null;\r\n this.contextContainer = null;\r\n // restore canvas style\r\n this.lowerCanvasEl.classList.remove('lower-canvas');\r\n fabric.util.setStyle(this.lowerCanvasEl, this._originalCanvasStyle);\r\n delete this._originalCanvasStyle;\r\n // restore canvas size to original size in case retina scaling was applied\r\n this.lowerCanvasEl.setAttribute('width', this.width);\r\n this.lowerCanvasEl.setAttribute('height', this.height);\r\n fabric.util.cleanUpJsdomNode(this.lowerCanvasEl);\r\n this.lowerCanvasEl = undefined;\r\n return this;\r\n },\r\n\r\n /**\r\n * Returns a string representation of an instance\r\n * @return {String} string representation of an instance\r\n */\r\n toString: function () {\r\n return '#';\r\n }\r\n });\r\n\r\n extend(fabric.StaticCanvas.prototype, fabric.Observable);\r\n extend(fabric.StaticCanvas.prototype, fabric.Collection);\r\n extend(fabric.StaticCanvas.prototype, fabric.DataURLExporter);\r\n\r\n extend(fabric.StaticCanvas, /** @lends fabric.StaticCanvas */ {\r\n\r\n /**\r\n * @static\r\n * @type String\r\n * @default\r\n */\r\n EMPTY_JSON: '{\"objects\": [], \"background\": \"white\"}',\r\n\r\n /**\r\n * Provides a way to check support of some of the canvas methods\r\n * (either those of HTMLCanvasElement itself, or rendering context)\r\n *\r\n * @param {String} methodName Method to check support for;\r\n * Could be one of \"setLineDash\"\r\n * @return {Boolean | null} `true` if method is supported (or at least exists),\r\n * `null` if canvas element or context can not be initialized\r\n */\r\n supports: function (methodName) {\r\n var el = createCanvasElement();\r\n\r\n if (!el || !el.getContext) {\r\n return null;\r\n }\r\n\r\n var ctx = el.getContext('2d');\r\n if (!ctx) {\r\n return null;\r\n }\r\n\r\n switch (methodName) {\r\n\r\n case 'setLineDash':\r\n return typeof ctx.setLineDash !== 'undefined';\r\n\r\n default:\r\n return null;\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * Returns Object representation of canvas\r\n * this alias is provided because if you call JSON.stringify on an instance,\r\n * the toJSON object will be invoked if it exists.\r\n * Having a toJSON method means you can do JSON.stringify(myCanvas)\r\n * @function\r\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\r\n * @return {Object} JSON compatible object\r\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#serialization}\r\n * @see {@link http://jsfiddle.net/fabricjs/pec86/|jsFiddle demo}\r\n * @example JSON without additional properties\r\n * var json = canvas.toJSON();\r\n * @example JSON with additional properties included\r\n * var json = canvas.toJSON(['lockMovementX', 'lockMovementY', 'lockRotation', 'lockScalingX', 'lockScalingY']);\r\n * @example JSON without default values\r\n * canvas.includeDefaultValues = false;\r\n * var json = canvas.toJSON();\r\n */\r\n fabric.StaticCanvas.prototype.toJSON = fabric.StaticCanvas.prototype.toObject;\r\n\r\n if (fabric.isLikelyNode) {\r\n fabric.StaticCanvas.prototype.createPNGStream = function() {\r\n var impl = getNodeCanvas(this.lowerCanvasEl);\r\n return impl && impl.createPNGStream();\r\n };\r\n fabric.StaticCanvas.prototype.createJPEGStream = function(opts) {\r\n var impl = getNodeCanvas(this.lowerCanvasEl);\r\n return impl && impl.createJPEGStream(opts);\r\n };\r\n }\r\n})();\r\n/**\r\n * BaseBrush class\r\n * @class fabric.BaseBrush\r\n * @see {@link http://fabricjs.com/freedrawing|Freedrawing demo}\r\n */\r\nfabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype */ {\r\n\r\n /**\r\n * Color of a brush\r\n * @type String\r\n * @default\r\n */\r\n color: 'rgb(0, 0, 0)',\r\n\r\n /**\r\n * Width of a brush, has to be a Number, no string literals\r\n * @type Number\r\n * @default\r\n */\r\n width: 1,\r\n\r\n /**\r\n * Shadow object representing shadow of this shape.\r\n * Backwards incompatibility note: This property replaces \"shadowColor\" (String), \"shadowOffsetX\" (Number),\r\n * \"shadowOffsetY\" (Number) and \"shadowBlur\" (Number) since v1.2.12\r\n * @type fabric.Shadow\r\n * @default\r\n */\r\n shadow: null,\r\n\r\n /**\r\n * Line endings style of a brush (one of \"butt\", \"round\", \"square\")\r\n * @type String\r\n * @default\r\n */\r\n strokeLineCap: 'round',\r\n\r\n /**\r\n * Corner style of a brush (one of \"bevel\", \"round\", \"miter\")\r\n * @type String\r\n * @default\r\n */\r\n strokeLineJoin: 'round',\r\n\r\n /**\r\n * Maximum miter length (used for strokeLineJoin = \"miter\") of a brush's\r\n * @type Number\r\n * @default\r\n */\r\n strokeMiterLimit: 10,\r\n\r\n /**\r\n * Stroke Dash Array.\r\n * @type Array\r\n * @default\r\n */\r\n strokeDashArray: null,\r\n\r\n /**\r\n * When `true`, the free drawing is limited to the whiteboard size. Default to false.\r\n * @type Boolean\r\n * @default false\r\n */\r\n\r\n limitedToCanvasSize: false,\r\n\r\n\r\n /**\r\n * Sets brush styles\r\n * @private\r\n * @param {CanvasRenderingContext2D} ctx\r\n */\r\n _setBrushStyles: function (ctx) {\r\n ctx.strokeStyle = this.color;\r\n ctx.lineWidth = this.width;\r\n ctx.lineCap = this.strokeLineCap;\r\n ctx.miterLimit = this.strokeMiterLimit;\r\n ctx.lineJoin = this.strokeLineJoin;\r\n ctx.setLineDash(this.strokeDashArray || []);\r\n },\r\n\r\n /**\r\n * Sets the transformation on given context\r\n * @param {RenderingContext2d} ctx context to render on\r\n * @private\r\n */\r\n _saveAndTransform: function(ctx) {\r\n var v = this.canvas.viewportTransform;\r\n ctx.save();\r\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\r\n },\r\n\r\n /**\r\n * Sets brush shadow styles\r\n * @private\r\n */\r\n _setShadow: function() {\r\n if (!this.shadow) {\r\n return;\r\n }\r\n\r\n var canvas = this.canvas,\r\n shadow = this.shadow,\r\n ctx = canvas.contextTop,\r\n zoom = canvas.getZoom();\r\n if (canvas && canvas._isRetinaScaling()) {\r\n zoom *= fabric.devicePixelRatio;\r\n }\r\n\r\n ctx.shadowColor = shadow.color;\r\n ctx.shadowBlur = shadow.blur * zoom;\r\n ctx.shadowOffsetX = shadow.offsetX * zoom;\r\n ctx.shadowOffsetY = shadow.offsetY * zoom;\r\n },\r\n\r\n needsFullRender: function() {\r\n var color = new fabric.Color(this.color);\r\n return color.getAlpha() < 1 || !!this.shadow;\r\n },\r\n\r\n /**\r\n * Removes brush shadow styles\r\n * @private\r\n */\r\n _resetShadow: function() {\r\n var ctx = this.canvas.contextTop;\r\n\r\n ctx.shadowColor = '';\r\n ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0;\r\n },\r\n\r\n /**\r\n * Check is pointer is outside canvas boundaries\r\n * @param {Object} pointer\r\n * @private\r\n */\r\n _isOutSideCanvas: function(pointer) {\r\n return pointer.x < 0 || pointer.x > this.canvas.getWidth() || pointer.y < 0 || pointer.y > this.canvas.getHeight();\r\n }\r\n});\r\n(function() {\r\n /**\r\n * PencilBrush class\r\n * @class fabric.PencilBrush\r\n * @extends fabric.BaseBrush\r\n */\r\n fabric.PencilBrush = fabric.util.createClass(fabric.BaseBrush, /** @lends fabric.PencilBrush.prototype */ {\r\n\r\n /**\r\n * Discard points that are less than `decimate` pixel distant from each other\r\n * @type Number\r\n * @default 0.4\r\n */\r\n decimate: 0.4,\r\n\r\n /**\r\n * Draws a straight line between last recorded point to current pointer\r\n * Used for `shift` functionality\r\n *\r\n * @type boolean\r\n * @default false\r\n */\r\n drawStraightLine: false,\r\n\r\n /**\r\n * The event modifier key that makes the brush draw a straight line.\r\n * If `null` or 'none' or any other string that is not a modifier key the feature is disabled.\r\n * @type {'altKey' | 'shiftKey' | 'ctrlKey' | 'none' | undefined | null}\r\n */\r\n straightLineKey: 'shiftKey',\r\n\r\n /**\r\n * Constructor\r\n * @param {fabric.Canvas} canvas\r\n * @return {fabric.PencilBrush} Instance of a pencil brush\r\n */\r\n initialize: function(canvas) {\r\n this.canvas = canvas;\r\n this._points = [];\r\n },\r\n\r\n needsFullRender: function () {\r\n return this.callSuper('needsFullRender') || this._hasStraightLine;\r\n },\r\n\r\n /**\r\n * Invoked inside on mouse down and mouse move\r\n * @param {Object} pointer\r\n */\r\n _drawSegment: function (ctx, p1, p2) {\r\n var midPoint = p1.midPointFrom(p2);\r\n ctx.quadraticCurveTo(p1.x, p1.y, midPoint.x, midPoint.y);\r\n return midPoint;\r\n },\r\n\r\n /**\r\n * Invoked on mouse down\r\n * @param {Object} pointer\r\n */\r\n onMouseDown: function(pointer, options) {\r\n if (!this.canvas._isMainEvent(options.e)) {\r\n return;\r\n }\r\n this.drawStraightLine = options.e[this.straightLineKey];\r\n this._prepareForDrawing(pointer);\r\n // capture coordinates immediately\r\n // this allows to draw dots (when movement never occurs)\r\n this._captureDrawingPath(pointer);\r\n this._render();\r\n },\r\n\r\n /**\r\n * Invoked on mouse move\r\n * @param {Object} pointer\r\n */\r\n onMouseMove: function(pointer, options) {\r\n if (!this.canvas._isMainEvent(options.e)) {\r\n return;\r\n }\r\n this.drawStraightLine = options.e[this.straightLineKey];\r\n if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {\r\n return;\r\n }\r\n if (this._captureDrawingPath(pointer) && this._points.length > 1) {\r\n if (this.needsFullRender()) {\r\n // redraw curve\r\n // clear top canvas\r\n this.canvas.clearContext(this.canvas.contextTop);\r\n this._render();\r\n }\r\n else {\r\n var points = this._points, length = points.length, ctx = this.canvas.contextTop;\r\n // draw the curve update\r\n this._saveAndTransform(ctx);\r\n if (this.oldEnd) {\r\n ctx.beginPath();\r\n ctx.moveTo(this.oldEnd.x, this.oldEnd.y);\r\n }\r\n this.oldEnd = this._drawSegment(ctx, points[length - 2], points[length - 1], true);\r\n ctx.stroke();\r\n ctx.restore();\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Invoked on mouse up\r\n */\r\n onMouseUp: function(options) {\r\n if (!this.canvas._isMainEvent(options.e)) {\r\n return true;\r\n }\r\n this.drawStraightLine = false;\r\n this.oldEnd = undefined;\r\n this._finalizeAndAddPath();\r\n return false;\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Object} pointer Actual mouse position related to the canvas.\r\n */\r\n _prepareForDrawing: function(pointer) {\r\n\r\n var p = new fabric.Point(pointer.x, pointer.y);\r\n\r\n this._reset();\r\n this._addPoint(p);\r\n this.canvas.contextTop.moveTo(p.x, p.y);\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {fabric.Point} point Point to be added to points array\r\n */\r\n _addPoint: function(point) {\r\n if (this._points.length > 1 && point.eq(this._points[this._points.length - 1])) {\r\n return false;\r\n }\r\n if (this.drawStraightLine && this._points.length > 1) {\r\n this._hasStraightLine = true;\r\n this._points.pop();\r\n }\r\n this._points.push(point);\r\n return true;\r\n },\r\n\r\n /**\r\n * Clear points array and set contextTop canvas style.\r\n * @private\r\n */\r\n _reset: function() {\r\n this._points = [];\r\n this._setBrushStyles(this.canvas.contextTop);\r\n this._setShadow();\r\n this._hasStraightLine = false;\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Object} pointer Actual mouse position related to the canvas.\r\n */\r\n _captureDrawingPath: function(pointer) {\r\n var pointerPoint = new fabric.Point(pointer.x, pointer.y);\r\n return this._addPoint(pointerPoint);\r\n },\r\n\r\n /**\r\n * Draw a smooth path on the topCanvas using quadraticCurveTo\r\n * @private\r\n * @param {CanvasRenderingContext2D} [ctx]\r\n */\r\n _render: function(ctx) {\r\n var i, len,\r\n p1 = this._points[0],\r\n p2 = this._points[1];\r\n ctx = ctx || this.canvas.contextTop;\r\n this._saveAndTransform(ctx);\r\n ctx.beginPath();\r\n //if we only have 2 points in the path and they are the same\r\n //it means that the user only clicked the canvas without moving the mouse\r\n //then we should be drawing a dot. A path isn't drawn between two identical dots\r\n //that's why we set them apart a bit\r\n if (this._points.length === 2 && p1.x === p2.x && p1.y === p2.y) {\r\n var width = this.width / 1000;\r\n p1 = new fabric.Point(p1.x, p1.y);\r\n p2 = new fabric.Point(p2.x, p2.y);\r\n p1.x -= width;\r\n p2.x += width;\r\n }\r\n ctx.moveTo(p1.x, p1.y);\r\n\r\n for (i = 1, len = this._points.length; i < len; i++) {\r\n // we pick the point between pi + 1 & pi + 2 as the\r\n // end point and p1 as our control point.\r\n this._drawSegment(ctx, p1, p2);\r\n p1 = this._points[i];\r\n p2 = this._points[i + 1];\r\n }\r\n // Draw last line as a straight line while\r\n // we wait for the next point to be able to calculate\r\n // the bezier control point\r\n ctx.lineTo(p1.x, p1.y);\r\n ctx.stroke();\r\n ctx.restore();\r\n },\r\n\r\n /**\r\n * Converts points to SVG path\r\n * @param {Array} points Array of points\r\n * @return {(string|number)[][]} SVG path commands\r\n */\r\n convertPointsToSVGPath: function (points) {\r\n var correction = this.width / 1000;\r\n return fabric.util.getSmoothPathFromPoints(points, correction);\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {(string|number)[][]} pathData SVG path commands\r\n * @returns {boolean}\r\n */\r\n _isEmptySVGPath: function (pathData) {\r\n var pathString = fabric.util.joinPath(pathData);\r\n return pathString === 'M 0 0 Q 0 0 0 0 L 0 0';\r\n },\r\n\r\n /**\r\n * Creates fabric.Path object to add on canvas\r\n * @param {(string|number)[][]} pathData Path data\r\n * @return {fabric.Path} Path to add on canvas\r\n */\r\n createPath: function(pathData) {\r\n var path = new fabric.Path(pathData, {\r\n fill: null,\r\n stroke: this.color,\r\n strokeWidth: this.width,\r\n strokeLineCap: this.strokeLineCap,\r\n strokeMiterLimit: this.strokeMiterLimit,\r\n strokeLineJoin: this.strokeLineJoin,\r\n strokeDashArray: this.strokeDashArray,\r\n });\r\n if (this.shadow) {\r\n this.shadow.affectStroke = true;\r\n path.shadow = new fabric.Shadow(this.shadow);\r\n }\r\n\r\n return path;\r\n },\r\n\r\n /**\r\n * Decimate points array with the decimate value\r\n */\r\n decimatePoints: function(points, distance) {\r\n if (points.length <= 2) {\r\n return points;\r\n }\r\n var zoom = this.canvas.getZoom(), adjustedDistance = Math.pow(distance / zoom, 2),\r\n i, l = points.length - 1, lastPoint = points[0], newPoints = [lastPoint],\r\n cDistance;\r\n for (i = 1; i < l - 1; i++) {\r\n cDistance = Math.pow(lastPoint.x - points[i].x, 2) + Math.pow(lastPoint.y - points[i].y, 2);\r\n if (cDistance >= adjustedDistance) {\r\n lastPoint = points[i];\r\n newPoints.push(lastPoint);\r\n }\r\n }\r\n /**\r\n * Add the last point from the original line to the end of the array.\r\n * This ensures decimate doesn't delete the last point on the line, and ensures the line is > 1 point.\r\n */\r\n newPoints.push(points[l]);\r\n return newPoints;\r\n },\r\n\r\n /**\r\n * On mouseup after drawing the path on contextTop canvas\r\n * we use the points captured to create an new fabric path object\r\n * and add it to the fabric canvas.\r\n */\r\n _finalizeAndAddPath: function() {\r\n var ctx = this.canvas.contextTop;\r\n ctx.closePath();\r\n if (this.decimate) {\r\n this._points = this.decimatePoints(this._points, this.decimate);\r\n }\r\n var pathData = this.convertPointsToSVGPath(this._points);\r\n if (this._isEmptySVGPath(pathData)) {\r\n // do not create 0 width/height paths, as they are\r\n // rendered inconsistently across browsers\r\n // Firefox 4, for example, renders a dot,\r\n // whereas Chrome 10 renders nothing\r\n this.canvas.requestRenderAll();\r\n return;\r\n }\r\n\r\n var path = this.createPath(pathData);\r\n this.canvas.clearContext(this.canvas.contextTop);\r\n this.canvas.fire('before:path:created', { path: path });\r\n this.canvas.add(path);\r\n this.canvas.requestRenderAll();\r\n path.setCoords();\r\n this._resetShadow();\r\n\r\n\r\n // fire event 'path' created\r\n this.canvas.fire('path:created', { path: path });\r\n }\r\n });\r\n})();\r\n/**\r\n * CircleBrush class\r\n * @class fabric.CircleBrush\r\n */\r\nfabric.CircleBrush = fabric.util.createClass(fabric.BaseBrush, /** @lends fabric.CircleBrush.prototype */ {\r\n\r\n /**\r\n * Width of a brush\r\n * @type Number\r\n * @default\r\n */\r\n width: 10,\r\n\r\n /**\r\n * Constructor\r\n * @param {fabric.Canvas} canvas\r\n * @return {fabric.CircleBrush} Instance of a circle brush\r\n */\r\n initialize: function(canvas) {\r\n this.canvas = canvas;\r\n this.points = [];\r\n },\r\n\r\n /**\r\n * Invoked inside on mouse down and mouse move\r\n * @param {Object} pointer\r\n */\r\n drawDot: function(pointer) {\r\n var point = this.addPoint(pointer),\r\n ctx = this.canvas.contextTop;\r\n this._saveAndTransform(ctx);\r\n this.dot(ctx, point);\r\n ctx.restore();\r\n },\r\n\r\n dot: function(ctx, point) {\r\n ctx.fillStyle = point.fill;\r\n ctx.beginPath();\r\n ctx.arc(point.x, point.y, point.radius, 0, Math.PI * 2, false);\r\n ctx.closePath();\r\n ctx.fill();\r\n },\r\n\r\n /**\r\n * Invoked on mouse down\r\n */\r\n onMouseDown: function(pointer) {\r\n this.points.length = 0;\r\n this.canvas.clearContext(this.canvas.contextTop);\r\n this._setShadow();\r\n this.drawDot(pointer);\r\n },\r\n\r\n /**\r\n * Render the full state of the brush\r\n * @private\r\n */\r\n _render: function() {\r\n var ctx = this.canvas.contextTop, i, len,\r\n points = this.points;\r\n this._saveAndTransform(ctx);\r\n for (i = 0, len = points.length; i < len; i++) {\r\n this.dot(ctx, points[i]);\r\n }\r\n ctx.restore();\r\n },\r\n\r\n /**\r\n * Invoked on mouse move\r\n * @param {Object} pointer\r\n */\r\n onMouseMove: function(pointer) {\r\n if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {\r\n return;\r\n }\r\n if (this.needsFullRender()) {\r\n this.canvas.clearContext(this.canvas.contextTop);\r\n this.addPoint(pointer);\r\n this._render();\r\n }\r\n else {\r\n this.drawDot(pointer);\r\n }\r\n },\r\n\r\n /**\r\n * Invoked on mouse up\r\n */\r\n onMouseUp: function() {\r\n var originalRenderOnAddRemove = this.canvas.renderOnAddRemove, i, len;\r\n this.canvas.renderOnAddRemove = false;\r\n\r\n var circles = [];\r\n\r\n for (i = 0, len = this.points.length; i < len; i++) {\r\n var point = this.points[i],\r\n circle = new fabric.Circle({\r\n radius: point.radius,\r\n left: point.x,\r\n top: point.y,\r\n originX: 'center',\r\n originY: 'center',\r\n fill: point.fill\r\n });\r\n\r\n this.shadow && (circle.shadow = new fabric.Shadow(this.shadow));\r\n\r\n circles.push(circle);\r\n }\r\n var group = new fabric.Group(circles);\r\n group.canvas = this.canvas;\r\n\r\n this.canvas.fire('before:path:created', { path: group });\r\n this.canvas.add(group);\r\n this.canvas.fire('path:created', { path: group });\r\n\r\n this.canvas.clearContext(this.canvas.contextTop);\r\n this._resetShadow();\r\n this.canvas.renderOnAddRemove = originalRenderOnAddRemove;\r\n this.canvas.requestRenderAll();\r\n },\r\n\r\n /**\r\n * @param {Object} pointer\r\n * @return {fabric.Point} Just added pointer point\r\n */\r\n addPoint: function(pointer) {\r\n var pointerPoint = new fabric.Point(pointer.x, pointer.y),\r\n\r\n circleRadius = fabric.util.getRandomInt(\r\n Math.max(0, this.width - 20), this.width + 20) / 2,\r\n\r\n circleColor = new fabric.Color(this.color)\r\n .setAlpha(fabric.util.getRandomInt(0, 100) / 100)\r\n .toRgba();\r\n\r\n pointerPoint.radius = circleRadius;\r\n pointerPoint.fill = circleColor;\r\n\r\n this.points.push(pointerPoint);\r\n\r\n return pointerPoint;\r\n }\r\n});\r\n/**\r\n * SprayBrush class\r\n * @class fabric.SprayBrush\r\n */\r\nfabric.SprayBrush = fabric.util.createClass( fabric.BaseBrush, /** @lends fabric.SprayBrush.prototype */ {\r\n\r\n /**\r\n * Width of a spray\r\n * @type Number\r\n * @default\r\n */\r\n width: 10,\r\n\r\n /**\r\n * Density of a spray (number of dots per chunk)\r\n * @type Number\r\n * @default\r\n */\r\n density: 20,\r\n\r\n /**\r\n * Width of spray dots\r\n * @type Number\r\n * @default\r\n */\r\n dotWidth: 1,\r\n\r\n /**\r\n * Width variance of spray dots\r\n * @type Number\r\n * @default\r\n */\r\n dotWidthVariance: 1,\r\n\r\n /**\r\n * Whether opacity of a dot should be random\r\n * @type Boolean\r\n * @default\r\n */\r\n randomOpacity: false,\r\n\r\n /**\r\n * Whether overlapping dots (rectangles) should be removed (for performance reasons)\r\n * @type Boolean\r\n * @default\r\n */\r\n optimizeOverlapping: true,\r\n\r\n /**\r\n * Constructor\r\n * @param {fabric.Canvas} canvas\r\n * @return {fabric.SprayBrush} Instance of a spray brush\r\n */\r\n initialize: function(canvas) {\r\n this.canvas = canvas;\r\n this.sprayChunks = [];\r\n },\r\n\r\n /**\r\n * Invoked on mouse down\r\n * @param {Object} pointer\r\n */\r\n onMouseDown: function(pointer) {\r\n this.sprayChunks.length = 0;\r\n this.canvas.clearContext(this.canvas.contextTop);\r\n this._setShadow();\r\n\r\n this.addSprayChunk(pointer);\r\n this.render(this.sprayChunkPoints);\r\n },\r\n\r\n /**\r\n * Invoked on mouse move\r\n * @param {Object} pointer\r\n */\r\n onMouseMove: function(pointer) {\r\n if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {\r\n return;\r\n }\r\n this.addSprayChunk(pointer);\r\n this.render(this.sprayChunkPoints);\r\n },\r\n\r\n /**\r\n * Invoked on mouse up\r\n */\r\n onMouseUp: function() {\r\n var originalRenderOnAddRemove = this.canvas.renderOnAddRemove;\r\n this.canvas.renderOnAddRemove = false;\r\n\r\n var rects = [];\r\n\r\n for (var i = 0, ilen = this.sprayChunks.length; i < ilen; i++) {\r\n var sprayChunk = this.sprayChunks[i];\r\n\r\n for (var j = 0, jlen = sprayChunk.length; j < jlen; j++) {\r\n\r\n var rect = new fabric.Rect({\r\n width: sprayChunk[j].width,\r\n height: sprayChunk[j].width,\r\n left: sprayChunk[j].x + 1,\r\n top: sprayChunk[j].y + 1,\r\n originX: 'center',\r\n originY: 'center',\r\n fill: this.color\r\n });\r\n rects.push(rect);\r\n }\r\n }\r\n\r\n if (this.optimizeOverlapping) {\r\n rects = this._getOptimizedRects(rects);\r\n }\r\n\r\n var group = new fabric.Group(rects);\r\n this.shadow && group.set('shadow', new fabric.Shadow(this.shadow));\r\n this.canvas.fire('before:path:created', { path: group });\r\n this.canvas.add(group);\r\n this.canvas.fire('path:created', { path: group });\r\n\r\n this.canvas.clearContext(this.canvas.contextTop);\r\n this._resetShadow();\r\n this.canvas.renderOnAddRemove = originalRenderOnAddRemove;\r\n this.canvas.requestRenderAll();\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Array} rects\r\n */\r\n _getOptimizedRects: function(rects) {\r\n\r\n // avoid creating duplicate rects at the same coordinates\r\n var uniqueRects = { }, key, i, len;\r\n\r\n for (i = 0, len = rects.length; i < len; i++) {\r\n key = rects[i].left + '' + rects[i].top;\r\n if (!uniqueRects[key]) {\r\n uniqueRects[key] = rects[i];\r\n }\r\n }\r\n var uniqueRectsArray = [];\r\n for (key in uniqueRects) {\r\n uniqueRectsArray.push(uniqueRects[key]);\r\n }\r\n\r\n return uniqueRectsArray;\r\n },\r\n\r\n /**\r\n * Render new chunk of spray brush\r\n */\r\n render: function(sprayChunk) {\r\n var ctx = this.canvas.contextTop, i, len;\r\n ctx.fillStyle = this.color;\r\n\r\n this._saveAndTransform(ctx);\r\n\r\n for (i = 0, len = sprayChunk.length; i < len; i++) {\r\n var point = sprayChunk[i];\r\n if (typeof point.opacity !== 'undefined') {\r\n ctx.globalAlpha = point.opacity;\r\n }\r\n ctx.fillRect(point.x, point.y, point.width, point.width);\r\n }\r\n ctx.restore();\r\n },\r\n\r\n /**\r\n * Render all spray chunks\r\n */\r\n _render: function() {\r\n var ctx = this.canvas.contextTop, i, ilen;\r\n ctx.fillStyle = this.color;\r\n\r\n this._saveAndTransform(ctx);\r\n\r\n for (i = 0, ilen = this.sprayChunks.length; i < ilen; i++) {\r\n this.render(this.sprayChunks[i]);\r\n }\r\n ctx.restore();\r\n },\r\n\r\n /**\r\n * @param {Object} pointer\r\n */\r\n addSprayChunk: function(pointer) {\r\n this.sprayChunkPoints = [];\r\n\r\n var x, y, width, radius = this.width / 2, i;\r\n\r\n for (i = 0; i < this.density; i++) {\r\n\r\n x = fabric.util.getRandomInt(pointer.x - radius, pointer.x + radius);\r\n y = fabric.util.getRandomInt(pointer.y - radius, pointer.y + radius);\r\n\r\n if (this.dotWidthVariance) {\r\n width = fabric.util.getRandomInt(\r\n // bottom clamp width to 1\r\n Math.max(1, this.dotWidth - this.dotWidthVariance),\r\n this.dotWidth + this.dotWidthVariance);\r\n }\r\n else {\r\n width = this.dotWidth;\r\n }\r\n\r\n var point = new fabric.Point(x, y);\r\n point.width = width;\r\n\r\n if (this.randomOpacity) {\r\n point.opacity = fabric.util.getRandomInt(0, 100) / 100;\r\n }\r\n\r\n this.sprayChunkPoints.push(point);\r\n }\r\n\r\n this.sprayChunks.push(this.sprayChunkPoints);\r\n }\r\n});\r\n/**\r\n * PatternBrush class\r\n * @class fabric.PatternBrush\r\n * @extends fabric.BaseBrush\r\n */\r\nfabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fabric.PatternBrush.prototype */ {\r\n\r\n getPatternSrc: function() {\r\n\r\n var dotWidth = 20,\r\n dotDistance = 5,\r\n patternCanvas = fabric.util.createCanvasElement(),\r\n patternCtx = patternCanvas.getContext('2d');\r\n\r\n patternCanvas.width = patternCanvas.height = dotWidth + dotDistance;\r\n\r\n patternCtx.fillStyle = this.color;\r\n patternCtx.beginPath();\r\n patternCtx.arc(dotWidth / 2, dotWidth / 2, dotWidth / 2, 0, Math.PI * 2, false);\r\n patternCtx.closePath();\r\n patternCtx.fill();\r\n\r\n return patternCanvas;\r\n },\r\n\r\n getPatternSrcFunction: function() {\r\n return String(this.getPatternSrc).replace('this.color', '\"' + this.color + '\"');\r\n },\r\n\r\n /**\r\n * Creates \"pattern\" instance property\r\n * @param {CanvasRenderingContext2D} ctx\r\n */\r\n getPattern: function(ctx) {\r\n return ctx.createPattern(this.source || this.getPatternSrc(), 'repeat');\r\n },\r\n\r\n /**\r\n * Sets brush styles\r\n * @param {CanvasRenderingContext2D} ctx\r\n */\r\n _setBrushStyles: function(ctx) {\r\n this.callSuper('_setBrushStyles', ctx);\r\n ctx.strokeStyle = this.getPattern(ctx);\r\n },\r\n\r\n /**\r\n * Creates path\r\n */\r\n createPath: function(pathData) {\r\n var path = this.callSuper('createPath', pathData),\r\n topLeft = path._getLeftTopCoords().scalarAdd(path.strokeWidth / 2);\r\n\r\n path.stroke = new fabric.Pattern({\r\n source: this.source || this.getPatternSrcFunction(),\r\n offsetX: -topLeft.x,\r\n offsetY: -topLeft.y\r\n });\r\n return path;\r\n }\r\n});\r\n(function() {\r\n\r\n var getPointer = fabric.util.getPointer,\r\n degreesToRadians = fabric.util.degreesToRadians,\r\n isTouchEvent = fabric.util.isTouchEvent;\r\n\r\n /**\r\n * Canvas class\r\n * @class fabric.Canvas\r\n * @extends fabric.StaticCanvas\r\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#canvas}\r\n * @see {@link fabric.Canvas#initialize} for constructor definition\r\n *\r\n * @fires object:modified at the end of a transform or any change when statefull is true\r\n * @fires object:rotating while an object is being rotated from the control\r\n * @fires object:scaling while an object is being scaled by controls\r\n * @fires object:moving while an object is being dragged\r\n * @fires object:skewing while an object is being skewed from the controls\r\n *\r\n * @fires before:transform before a transform is is started\r\n * @fires before:selection:cleared\r\n * @fires selection:cleared\r\n * @fires selection:updated\r\n * @fires selection:created\r\n *\r\n * @fires path:created after a drawing operation ends and the path is added\r\n * @fires mouse:down\r\n * @fires mouse:move\r\n * @fires mouse:up\r\n * @fires mouse:down:before on mouse down, before the inner fabric logic runs\r\n * @fires mouse:move:before on mouse move, before the inner fabric logic runs\r\n * @fires mouse:up:before on mouse up, before the inner fabric logic runs\r\n * @fires mouse:over\r\n * @fires mouse:out\r\n * @fires mouse:dblclick whenever a native dbl click event fires on the canvas.\r\n *\r\n * @fires dragover\r\n * @fires dragenter\r\n * @fires dragleave\r\n * @fires drop:before before drop event. same native event. This is added to handle edge cases\r\n * @fires drop\r\n * @fires after:render at the end of the render process, receives the context in the callback\r\n * @fires before:render at start the render process, receives the context in the callback\r\n *\r\n */\r\n fabric.Canvas = fabric.util.createClass(fabric.StaticCanvas, /** @lends fabric.Canvas.prototype */ {\r\n\r\n /**\r\n * Constructor\r\n * @param {HTMLElement | String} el <canvas> element to initialize instance on\r\n * @param {Object} [options] Options object\r\n * @return {Object} thisArg\r\n */\r\n initialize: function(el, options) {\r\n options || (options = { });\r\n this.renderAndResetBound = this.renderAndReset.bind(this);\r\n this.requestRenderAllBound = this.requestRenderAll.bind(this);\r\n this._initStatic(el, options);\r\n this._initInteractive();\r\n this._createCacheCanvas();\r\n },\r\n\r\n /**\r\n * When true, objects can be transformed by one side (unproportionally)\r\n * when dragged on the corners that normally would not do that.\r\n * @type Boolean\r\n * @default\r\n * @since fabric 4.0 // changed name and default value\r\n */\r\n uniformScaling: true,\r\n\r\n /**\r\n * Indicates which key switches uniform scaling.\r\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\r\n * If `null` or 'none' or any other string that is not a modifier key\r\n * feature is disabled.\r\n * totally wrong named. this sounds like `uniform scaling`\r\n * if Canvas.uniformScaling is true, pressing this will set it to false\r\n * and viceversa.\r\n * @since 1.6.2\r\n * @type String\r\n * @default\r\n */\r\n uniScaleKey: 'shiftKey',\r\n\r\n /**\r\n * When true, objects use center point as the origin of scale transformation.\r\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\r\n * @since 1.3.4\r\n * @type Boolean\r\n * @default\r\n */\r\n centeredScaling: false,\r\n\r\n /**\r\n * When true, objects use center point as the origin of rotate transformation.\r\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\r\n * @since 1.3.4\r\n * @type Boolean\r\n * @default\r\n */\r\n centeredRotation: false,\r\n\r\n /**\r\n * Indicates which key enable centered Transform\r\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\r\n * If `null` or 'none' or any other string that is not a modifier key\r\n * feature is disabled feature disabled.\r\n * @since 1.6.2\r\n * @type String\r\n * @default\r\n */\r\n centeredKey: 'altKey',\r\n\r\n /**\r\n * Indicates which key enable alternate action on corner\r\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\r\n * If `null` or 'none' or any other string that is not a modifier key\r\n * feature is disabled feature disabled.\r\n * @since 1.6.2\r\n * @type String\r\n * @default\r\n */\r\n altActionKey: 'shiftKey',\r\n\r\n /**\r\n * Indicates that canvas is interactive. This property should not be changed.\r\n * @type Boolean\r\n * @default\r\n */\r\n interactive: true,\r\n\r\n /**\r\n * Indicates whether group selection should be enabled\r\n * @type Boolean\r\n * @default\r\n */\r\n selection: true,\r\n\r\n /**\r\n * Indicates which key or keys enable multiple click selection\r\n * Pass value as a string or array of strings\r\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\r\n * If `null` or empty or containing any other string that is not a modifier key\r\n * feature is disabled.\r\n * @since 1.6.2\r\n * @type String|Array\r\n * @default\r\n */\r\n selectionKey: 'shiftKey',\r\n\r\n /**\r\n * Indicates which key enable alternative selection\r\n * in case of target overlapping with active object\r\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\r\n * For a series of reason that come from the general expectations on how\r\n * things should work, this feature works only for preserveObjectStacking true.\r\n * If `null` or 'none' or any other string that is not a modifier key\r\n * feature is disabled.\r\n * @since 1.6.5\r\n * @type null|String\r\n * @default\r\n */\r\n altSelectionKey: null,\r\n\r\n /**\r\n * Color of selection\r\n * @type String\r\n * @default\r\n */\r\n selectionColor: 'rgba(100, 100, 255, 0.3)', // blue\r\n\r\n /**\r\n * Default dash array pattern\r\n * If not empty the selection border is dashed\r\n * @type Array\r\n */\r\n selectionDashArray: [],\r\n\r\n /**\r\n * Color of the border of selection (usually slightly darker than color of selection itself)\r\n * @type String\r\n * @default\r\n */\r\n selectionBorderColor: 'rgba(255, 255, 255, 0.3)',\r\n\r\n /**\r\n * Width of a line used in object/group selection\r\n * @type Number\r\n * @default\r\n */\r\n selectionLineWidth: 1,\r\n\r\n /**\r\n * Select only shapes that are fully contained in the dragged selection rectangle.\r\n * @type Boolean\r\n * @default\r\n */\r\n selectionFullyContained: false,\r\n\r\n /**\r\n * Default cursor value used when hovering over an object on canvas\r\n * @type String\r\n * @default\r\n */\r\n hoverCursor: 'move',\r\n\r\n /**\r\n * Default cursor value used when moving an object on canvas\r\n * @type String\r\n * @default\r\n */\r\n moveCursor: 'move',\r\n\r\n /**\r\n * Default cursor value used for the entire canvas\r\n * @type String\r\n * @default\r\n */\r\n defaultCursor: 'default',\r\n\r\n /**\r\n * Cursor value used during free drawing\r\n * @type String\r\n * @default\r\n */\r\n freeDrawingCursor: 'crosshair',\r\n\r\n /**\r\n * Cursor value used for disabled elements ( corners with disabled action )\r\n * @type String\r\n * @since 2.0.0\r\n * @default\r\n */\r\n notAllowedCursor: 'not-allowed',\r\n\r\n /**\r\n * Default element class that's given to wrapper (div) element of canvas\r\n * @type String\r\n * @default\r\n */\r\n containerClass: 'canvas-container',\r\n\r\n /**\r\n * When true, object detection happens on per-pixel basis rather than on per-bounding-box\r\n * @type Boolean\r\n * @default\r\n */\r\n perPixelTargetFind: false,\r\n\r\n /**\r\n * Number of pixels around target pixel to tolerate (consider active) during object detection\r\n * @type Number\r\n * @default\r\n */\r\n targetFindTolerance: 0,\r\n\r\n /**\r\n * When true, target detection is skipped. Target detection will return always undefined.\r\n * click selection won't work anymore, events will fire with no targets.\r\n * if something is selected before setting it to true, it will be deselected at the first click.\r\n * area selection will still work. check the `selection` property too.\r\n * if you deactivate both, you should look into staticCanvas.\r\n * @type Boolean\r\n * @default\r\n */\r\n skipTargetFind: false,\r\n\r\n /**\r\n * When true, mouse events on canvas (mousedown/mousemove/mouseup) result in free drawing.\r\n * After mousedown, mousemove creates a shape,\r\n * and then mouseup finalizes it and adds an instance of `fabric.Path` onto canvas.\r\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-4#free_drawing}\r\n * @type Boolean\r\n * @default\r\n */\r\n isDrawingMode: false,\r\n\r\n /**\r\n * Indicates whether objects should remain in current stack position when selected.\r\n * When false objects are brought to top and rendered as part of the selection group\r\n * @type Boolean\r\n * @default\r\n */\r\n preserveObjectStacking: false,\r\n\r\n /**\r\n * Indicates the angle that an object will lock to while rotating.\r\n * @type Number\r\n * @since 1.6.7\r\n * @default\r\n */\r\n snapAngle: 0,\r\n\r\n /**\r\n * Indicates the distance from the snapAngle the rotation will lock to the snapAngle.\r\n * When `null`, the snapThreshold will default to the snapAngle.\r\n * @type null|Number\r\n * @since 1.6.7\r\n * @default\r\n */\r\n snapThreshold: null,\r\n\r\n /**\r\n * Indicates if the right click on canvas can output the context menu or not\r\n * @type Boolean\r\n * @since 1.6.5\r\n * @default\r\n */\r\n stopContextMenu: false,\r\n\r\n /**\r\n * Indicates if the canvas can fire right click events\r\n * @type Boolean\r\n * @since 1.6.5\r\n * @default\r\n */\r\n fireRightClick: false,\r\n\r\n /**\r\n * Indicates if the canvas can fire middle click events\r\n * @type Boolean\r\n * @since 1.7.8\r\n * @default\r\n */\r\n fireMiddleClick: false,\r\n\r\n /**\r\n * Keep track of the subTargets for Mouse Events\r\n * @type fabric.Object[]\r\n */\r\n targets: [],\r\n\r\n /**\r\n * When the option is enabled, PointerEvent is used instead of MouseEvent.\r\n * @type Boolean\r\n * @default\r\n */\r\n enablePointerEvents: false,\r\n\r\n /**\r\n * Keep track of the hovered target\r\n * @type fabric.Object\r\n * @private\r\n */\r\n _hoveredTarget: null,\r\n\r\n /**\r\n * hold the list of nested targets hovered\r\n * @type fabric.Object[]\r\n * @private\r\n */\r\n _hoveredTargets: [],\r\n\r\n /**\r\n * @private\r\n */\r\n _initInteractive: function() {\r\n this._currentTransform = null;\r\n this._groupSelector = null;\r\n this._initWrapperElement();\r\n this._createUpperCanvas();\r\n this._initEventListeners();\r\n\r\n this._initRetinaScaling();\r\n\r\n this.freeDrawingBrush = fabric.PencilBrush && new fabric.PencilBrush(this);\r\n\r\n this.calcOffset();\r\n },\r\n\r\n /**\r\n * Divides objects in two groups, one to render immediately\r\n * and one to render as activeGroup.\r\n * @return {Array} objects to render immediately and pushes the other in the activeGroup.\r\n */\r\n _chooseObjectsToRender: function() {\r\n var activeObjects = this.getActiveObjects(),\r\n object, objsToRender, activeGroupObjects;\r\n\r\n if (activeObjects.length > 0 && !this.preserveObjectStacking) {\r\n objsToRender = [];\r\n activeGroupObjects = [];\r\n for (var i = 0, length = this._objects.length; i < length; i++) {\r\n object = this._objects[i];\r\n if (activeObjects.indexOf(object) === -1 ) {\r\n objsToRender.push(object);\r\n }\r\n else {\r\n activeGroupObjects.push(object);\r\n }\r\n }\r\n if (activeObjects.length > 1) {\r\n this._activeObject._objects = activeGroupObjects;\r\n }\r\n objsToRender.push.apply(objsToRender, activeGroupObjects);\r\n }\r\n else {\r\n objsToRender = this._objects;\r\n }\r\n return objsToRender;\r\n },\r\n\r\n /**\r\n * Renders both the top canvas and the secondary container canvas.\r\n * @return {fabric.Canvas} instance\r\n * @chainable\r\n */\r\n renderAll: function () {\r\n if (this.contextTopDirty && !this._groupSelector && !this.isDrawingMode) {\r\n this.clearContext(this.contextTop);\r\n this.contextTopDirty = false;\r\n }\r\n if (this.hasLostContext) {\r\n this.renderTopLayer(this.contextTop);\r\n this.hasLostContext = false;\r\n }\r\n var canvasToDrawOn = this.contextContainer;\r\n this.renderCanvas(canvasToDrawOn, this._chooseObjectsToRender());\r\n return this;\r\n },\r\n\r\n renderTopLayer: function(ctx) {\r\n ctx.save();\r\n if (this.isDrawingMode && this._isCurrentlyDrawing) {\r\n this.freeDrawingBrush && this.freeDrawingBrush._render();\r\n this.contextTopDirty = true;\r\n }\r\n // we render the top context - last object\r\n if (this.selection && this._groupSelector) {\r\n this._drawSelection(ctx);\r\n this.contextTopDirty = true;\r\n }\r\n ctx.restore();\r\n },\r\n\r\n /**\r\n * Method to render only the top canvas.\r\n * Also used to render the group selection box.\r\n * @return {fabric.Canvas} thisArg\r\n * @chainable\r\n */\r\n renderTop: function () {\r\n var ctx = this.contextTop;\r\n this.clearContext(ctx);\r\n this.renderTopLayer(ctx);\r\n this.fire('after:render');\r\n return this;\r\n },\r\n\r\n /**\r\n * @private\r\n */\r\n _normalizePointer: function (object, pointer) {\r\n var m = object.calcTransformMatrix(),\r\n invertedM = fabric.util.invertTransform(m),\r\n vptPointer = this.restorePointerVpt(pointer);\r\n return fabric.util.transformPoint(vptPointer, invertedM);\r\n },\r\n\r\n /**\r\n * Returns true if object is transparent at a certain location\r\n * @param {fabric.Object} target Object to check\r\n * @param {Number} x Left coordinate\r\n * @param {Number} y Top coordinate\r\n * @return {Boolean}\r\n */\r\n isTargetTransparent: function (target, x, y) {\r\n // in case the target is the activeObject, we cannot execute this optimization\r\n // because we need to draw controls too.\r\n if (target.shouldCache() && target._cacheCanvas && target !== this._activeObject) {\r\n var normalizedPointer = this._normalizePointer(target, {x: x, y: y}),\r\n targetRelativeX = Math.max(target.cacheTranslationX + (normalizedPointer.x * target.zoomX), 0),\r\n targetRelativeY = Math.max(target.cacheTranslationY + (normalizedPointer.y * target.zoomY), 0);\r\n\r\n var isTransparent = fabric.util.isTransparent(\r\n target._cacheContext, Math.round(targetRelativeX), Math.round(targetRelativeY), this.targetFindTolerance);\r\n\r\n return isTransparent;\r\n }\r\n\r\n var ctx = this.contextCache,\r\n originalColor = target.selectionBackgroundColor, v = this.viewportTransform;\r\n\r\n target.selectionBackgroundColor = '';\r\n\r\n this.clearContext(ctx);\r\n\r\n ctx.save();\r\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\r\n target.render(ctx);\r\n ctx.restore();\r\n\r\n target.selectionBackgroundColor = originalColor;\r\n\r\n var isTransparent = fabric.util.isTransparent(\r\n ctx, x, y, this.targetFindTolerance);\r\n\r\n return isTransparent;\r\n },\r\n\r\n /**\r\n * takes an event and determines if selection key has been pressed\r\n * @private\r\n * @param {Event} e Event object\r\n */\r\n _isSelectionKeyPressed: function(e) {\r\n var selectionKeyPressed = false;\r\n\r\n if (Array.isArray(this.selectionKey)) {\r\n selectionKeyPressed = !!this.selectionKey.find(function(key) { return e[key] === true; });\r\n }\r\n else {\r\n selectionKeyPressed = e[this.selectionKey];\r\n }\r\n\r\n return selectionKeyPressed;\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Event} e Event object\r\n * @param {fabric.Object} target\r\n */\r\n _shouldClearSelection: function (e, target) {\r\n var activeObjects = this.getActiveObjects(),\r\n activeObject = this._activeObject;\r\n\r\n return (\r\n !target\r\n ||\r\n (target &&\r\n activeObject &&\r\n activeObjects.length > 1 &&\r\n activeObjects.indexOf(target) === -1 &&\r\n activeObject !== target &&\r\n !this._isSelectionKeyPressed(e))\r\n ||\r\n (target && !target.evented)\r\n ||\r\n (target &&\r\n !target.selectable &&\r\n activeObject &&\r\n activeObject !== target)\r\n );\r\n },\r\n\r\n /**\r\n * centeredScaling from object can't override centeredScaling from canvas.\r\n * this should be fixed, since object setting should take precedence over canvas.\r\n * also this should be something that will be migrated in the control properties.\r\n * as ability to define the origin of the transformation that the control provide.\r\n * @private\r\n * @param {fabric.Object} target\r\n * @param {String} action\r\n * @param {Boolean} altKey\r\n */\r\n _shouldCenterTransform: function (target, action, altKey) {\r\n if (!target) {\r\n return;\r\n }\r\n\r\n var centerTransform;\r\n\r\n if (action === 'scale' || action === 'scaleX' || action === 'scaleY' || action === 'resizing') {\r\n centerTransform = this.centeredScaling || target.centeredScaling;\r\n }\r\n else if (action === 'rotate') {\r\n centerTransform = this.centeredRotation || target.centeredRotation;\r\n }\r\n\r\n return centerTransform ? !altKey : altKey;\r\n },\r\n\r\n /**\r\n * should disappear before release 4.0\r\n * @private\r\n */\r\n _getOriginFromCorner: function(target, corner) {\r\n var origin = {\r\n x: target.originX,\r\n y: target.originY\r\n };\r\n\r\n if (corner === 'ml' || corner === 'tl' || corner === 'bl') {\r\n origin.x = 'right';\r\n }\r\n else if (corner === 'mr' || corner === 'tr' || corner === 'br') {\r\n origin.x = 'left';\r\n }\r\n\r\n if (corner === 'tl' || corner === 'mt' || corner === 'tr') {\r\n origin.y = 'bottom';\r\n }\r\n else if (corner === 'bl' || corner === 'mb' || corner === 'br') {\r\n origin.y = 'top';\r\n }\r\n return origin;\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Boolean} alreadySelected true if target is already selected\r\n * @param {String} corner a string representing the corner ml, mr, tl ...\r\n * @param {Event} e Event object\r\n * @param {fabric.Object} [target] inserted back to help overriding. Unused\r\n */\r\n _getActionFromCorner: function(alreadySelected, corner, e, target) {\r\n if (!corner || !alreadySelected) {\r\n return 'drag';\r\n }\r\n var control = target.controls[corner];\r\n return control.getActionName(e, control, target);\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Event} e Event object\r\n * @param {fabric.Object} target\r\n */\r\n _setupCurrentTransform: function (e, target, alreadySelected) {\r\n if (!target) {\r\n return;\r\n }\r\n\r\n var pointer = this.getPointer(e), corner = target.__corner,\r\n control = target.controls[corner],\r\n actionHandler = (alreadySelected && corner) ?\r\n control.getActionHandler(e, target, control) : fabric.controlsUtils.dragHandler,\r\n action = this._getActionFromCorner(alreadySelected, corner, e, target),\r\n origin = this._getOriginFromCorner(target, corner),\r\n altKey = e[this.centeredKey],\r\n transform = {\r\n target: target,\r\n action: action,\r\n actionHandler: actionHandler,\r\n corner: corner,\r\n scaleX: target.scaleX,\r\n scaleY: target.scaleY,\r\n skewX: target.skewX,\r\n skewY: target.skewY,\r\n // used by transation\r\n offsetX: pointer.x - target.left,\r\n offsetY: pointer.y - target.top,\r\n originX: origin.x,\r\n originY: origin.y,\r\n ex: pointer.x,\r\n ey: pointer.y,\r\n lastX: pointer.x,\r\n lastY: pointer.y,\r\n // unsure they are useful anymore.\r\n // left: target.left,\r\n // top: target.top,\r\n theta: degreesToRadians(target.angle),\r\n // end of unsure\r\n width: target.width * target.scaleX,\r\n shiftKey: e.shiftKey,\r\n altKey: altKey,\r\n original: fabric.util.saveObjectTransform(target),\r\n };\r\n\r\n if (this._shouldCenterTransform(target, action, altKey)) {\r\n transform.originX = 'center';\r\n transform.originY = 'center';\r\n }\r\n transform.original.originX = origin.x;\r\n transform.original.originY = origin.y;\r\n this._currentTransform = transform;\r\n this._beforeTransform(e);\r\n },\r\n\r\n /**\r\n * Set the cursor type of the canvas element\r\n * @param {String} value Cursor type of the canvas element.\r\n * @see http://www.w3.org/TR/css3-ui/#cursor\r\n */\r\n setCursor: function (value) {\r\n this.upperCanvasEl.style.cursor = value;\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {CanvasRenderingContext2D} ctx to draw the selection on\r\n */\r\n _drawSelection: function (ctx) {\r\n var selector = this._groupSelector,\r\n viewportStart = new fabric.Point(selector.ex, selector.ey),\r\n start = fabric.util.transformPoint(viewportStart, this.viewportTransform),\r\n viewportExtent = new fabric.Point(selector.ex + selector.left, selector.ey + selector.top),\r\n extent = fabric.util.transformPoint(viewportExtent, this.viewportTransform),\r\n minX = Math.min(start.x, extent.x),\r\n minY = Math.min(start.y, extent.y),\r\n maxX = Math.max(start.x, extent.x),\r\n maxY = Math.max(start.y, extent.y),\r\n strokeOffset = this.selectionLineWidth / 2;\r\n\r\n if (this.selectionColor) {\r\n ctx.fillStyle = this.selectionColor;\r\n ctx.fillRect(minX, minY, maxX - minX, maxY - minY);\r\n }\r\n\r\n if (!this.selectionLineWidth || !this.selectionBorderColor) {\r\n return;\r\n }\r\n ctx.lineWidth = this.selectionLineWidth;\r\n ctx.strokeStyle = this.selectionBorderColor;\r\n\r\n minX += strokeOffset;\r\n minY += strokeOffset;\r\n maxX -= strokeOffset;\r\n maxY -= strokeOffset;\r\n // selection border\r\n fabric.Object.prototype._setLineDash.call(this, ctx, this.selectionDashArray);\r\n ctx.strokeRect(minX, minY, maxX - minX, maxY - minY);\r\n },\r\n\r\n /**\r\n * Method that determines what object we are clicking on\r\n * the skipGroup parameter is for internal use, is needed for shift+click action\r\n * 11/09/2018 TODO: would be cool if findTarget could discern between being a full target\r\n * or the outside part of the corner.\r\n * @param {Event} e mouse event\r\n * @param {Boolean} skipGroup when true, activeGroup is skipped and only objects are traversed through\r\n * @return {fabric.Object} the target found\r\n */\r\n findTarget: function (e, skipGroup) {\r\n if (this.skipTargetFind) {\r\n return;\r\n }\r\n\r\n var ignoreZoom = true,\r\n pointer = this.getPointer(e, ignoreZoom),\r\n activeObject = this._activeObject,\r\n aObjects = this.getActiveObjects(),\r\n activeTarget, activeTargetSubs,\r\n isTouch = isTouchEvent(e),\r\n shouldLookForActive = (aObjects.length > 1 && !skipGroup) || aObjects.length === 1;\r\n\r\n // first check current group (if one exists)\r\n // active group does not check sub targets like normal groups.\r\n // if active group just exits.\r\n this.targets = [];\r\n\r\n // if we hit the corner of an activeObject, let's return that.\r\n if (shouldLookForActive && activeObject._findTargetCorner(pointer, isTouch)) {\r\n return activeObject;\r\n }\r\n if (aObjects.length > 1 && !skipGroup && activeObject === this._searchPossibleTargets([activeObject], pointer)) {\r\n return activeObject;\r\n }\r\n if (aObjects.length === 1 &&\r\n activeObject === this._searchPossibleTargets([activeObject], pointer)) {\r\n if (!this.preserveObjectStacking) {\r\n return activeObject;\r\n }\r\n else {\r\n activeTarget = activeObject;\r\n activeTargetSubs = this.targets;\r\n this.targets = [];\r\n }\r\n }\r\n var target = this._searchPossibleTargets(this._objects, pointer);\r\n if (e[this.altSelectionKey] && target && activeTarget && target !== activeTarget) {\r\n target = activeTarget;\r\n this.targets = activeTargetSubs;\r\n }\r\n return target;\r\n },\r\n\r\n /**\r\n * Checks point is inside the object.\r\n * @param {Object} [pointer] x,y object of point coordinates we want to check.\r\n * @param {fabric.Object} obj Object to test against\r\n * @param {Object} [globalPointer] x,y object of point coordinates relative to canvas used to search per pixel target.\r\n * @return {Boolean} true if point is contained within an area of given object\r\n * @private\r\n */\r\n _checkTarget: function(pointer, obj, globalPointer) {\r\n if (obj &&\r\n obj.visible &&\r\n obj.evented &&\r\n // http://www.geog.ubc.ca/courses/klink/gis.notes/ncgia/u32.html\r\n // http://idav.ucdavis.edu/~okreylos/TAship/Spring2000/PointInPolygon.html\r\n obj.containsPoint(pointer)\r\n ) {\r\n if ((this.perPixelTargetFind || obj.perPixelTargetFind) && !obj.isEditing) {\r\n var isTransparent = this.isTargetTransparent(obj, globalPointer.x, globalPointer.y);\r\n if (!isTransparent) {\r\n return true;\r\n }\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Function used to search inside objects an object that contains pointer in bounding box or that contains pointerOnCanvas when painted\r\n * @param {Array} [objects] objects array to look into\r\n * @param {Object} [pointer] x,y object of point coordinates we want to check.\r\n * @return {fabric.Object} object that contains pointer\r\n * @private\r\n */\r\n _searchPossibleTargets: function(objects, pointer) {\r\n // Cache all targets where their bounding box contains point.\r\n var target, i = objects.length, subTarget;\r\n // Do not check for currently grouped objects, since we check the parent group itself.\r\n // until we call this function specifically to search inside the activeGroup\r\n while (i--) {\r\n var objToCheck = objects[i];\r\n var pointerToUse = objToCheck.group ?\r\n this._normalizePointer(objToCheck.group, pointer) : pointer;\r\n if (this._checkTarget(pointerToUse, objToCheck, pointer)) {\r\n target = objects[i];\r\n if (target.subTargetCheck && target instanceof fabric.Group) {\r\n subTarget = this._searchPossibleTargets(target._objects, pointer);\r\n subTarget && this.targets.push(subTarget);\r\n }\r\n break;\r\n }\r\n }\r\n return target;\r\n },\r\n\r\n /**\r\n * Returns pointer coordinates without the effect of the viewport\r\n * @param {Object} pointer with \"x\" and \"y\" number values\r\n * @return {Object} object with \"x\" and \"y\" number values\r\n */\r\n restorePointerVpt: function(pointer) {\r\n return fabric.util.transformPoint(\r\n pointer,\r\n fabric.util.invertTransform(this.viewportTransform)\r\n );\r\n },\r\n\r\n /**\r\n * Returns pointer coordinates relative to canvas.\r\n * Can return coordinates with or without viewportTransform.\r\n * ignoreZoom false gives back coordinates that represent\r\n * the point clicked on canvas element.\r\n * ignoreZoom true gives back coordinates after being processed\r\n * by the viewportTransform ( sort of coordinates of what is displayed\r\n * on the canvas where you are clicking.\r\n * ignoreZoom true = HTMLElement coordinates relative to top,left\r\n * ignoreZoom false, default = fabric space coordinates, the same used for shape position\r\n * To interact with your shapes top and left you want to use ignoreZoom true\r\n * most of the time, while ignoreZoom false will give you coordinates\r\n * compatible with the object.oCoords system.\r\n * of the time.\r\n * @param {Event} e\r\n * @param {Boolean} ignoreZoom\r\n * @return {Object} object with \"x\" and \"y\" number values\r\n */\r\n getPointer: function (e, ignoreZoom) {\r\n // return cached values if we are in the event processing chain\r\n if (this._absolutePointer && !ignoreZoom) {\r\n return this._absolutePointer;\r\n }\r\n if (this._pointer && ignoreZoom) {\r\n return this._pointer;\r\n }\r\n\r\n var pointer = getPointer(e),\r\n upperCanvasEl = this.upperCanvasEl,\r\n bounds = upperCanvasEl.getBoundingClientRect(),\r\n boundsWidth = bounds.width || 0,\r\n boundsHeight = bounds.height || 0,\r\n cssScale;\r\n\r\n if (!boundsWidth || !boundsHeight ) {\r\n if ('top' in bounds && 'bottom' in bounds) {\r\n boundsHeight = Math.abs( bounds.top - bounds.bottom );\r\n }\r\n if ('right' in bounds && 'left' in bounds) {\r\n boundsWidth = Math.abs( bounds.right - bounds.left );\r\n }\r\n }\r\n\r\n this.calcOffset();\r\n pointer.x = pointer.x - this._offset.left;\r\n pointer.y = pointer.y - this._offset.top;\r\n if (!ignoreZoom) {\r\n pointer = this.restorePointerVpt(pointer);\r\n }\r\n\r\n var retinaScaling = this.getRetinaScaling();\r\n if (retinaScaling !== 1) {\r\n pointer.x /= retinaScaling;\r\n pointer.y /= retinaScaling;\r\n }\r\n\r\n if (boundsWidth === 0 || boundsHeight === 0) {\r\n // If bounds are not available (i.e. not visible), do not apply scale.\r\n cssScale = { width: 1, height: 1 };\r\n }\r\n else {\r\n cssScale = {\r\n width: upperCanvasEl.width / boundsWidth,\r\n height: upperCanvasEl.height / boundsHeight\r\n };\r\n }\r\n\r\n return {\r\n x: pointer.x * cssScale.width,\r\n y: pointer.y * cssScale.height\r\n };\r\n },\r\n\r\n /**\r\n * @private\r\n * @throws {CANVAS_INIT_ERROR} If canvas can not be initialized\r\n */\r\n _createUpperCanvas: function () {\r\n var lowerCanvasClass = this.lowerCanvasEl.className.replace(/\\s*lower-canvas\\s*/, ''),\r\n lowerCanvasEl = this.lowerCanvasEl, upperCanvasEl = this.upperCanvasEl;\r\n\r\n // there is no need to create a new upperCanvas element if we have already one.\r\n if (upperCanvasEl) {\r\n upperCanvasEl.className = '';\r\n }\r\n else {\r\n upperCanvasEl = this._createCanvasElement();\r\n this.upperCanvasEl = upperCanvasEl;\r\n }\r\n fabric.util.addClass(upperCanvasEl, 'upper-canvas ' + lowerCanvasClass);\r\n\r\n this.wrapperEl.appendChild(upperCanvasEl);\r\n\r\n this._copyCanvasStyle(lowerCanvasEl, upperCanvasEl);\r\n this._applyCanvasStyle(upperCanvasEl);\r\n this.contextTop = upperCanvasEl.getContext('2d');\r\n },\r\n\r\n /**\r\n * Returns context of top canvas where interactions are drawn\r\n * @returns {CanvasRenderingContext2D}\r\n */\r\n getTopContext: function () {\r\n return this.contextTop;\r\n },\r\n\r\n /**\r\n * @private\r\n */\r\n _createCacheCanvas: function () {\r\n this.cacheCanvasEl = this._createCanvasElement();\r\n this.cacheCanvasEl.setAttribute('width', this.width);\r\n this.cacheCanvasEl.setAttribute('height', this.height);\r\n this.contextCache = this.cacheCanvasEl.getContext('2d');\r\n },\r\n\r\n /**\r\n * @private\r\n */\r\n _initWrapperElement: function () {\r\n this.wrapperEl = fabric.util.wrapElement(this.lowerCanvasEl, 'div', {\r\n 'class': this.containerClass\r\n });\r\n fabric.util.setStyle(this.wrapperEl, {\r\n width: this.width + 'px',\r\n height: this.height + 'px',\r\n position: 'relative'\r\n });\r\n fabric.util.makeElementUnselectable(this.wrapperEl);\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {HTMLElement} element canvas element to apply styles on\r\n */\r\n _applyCanvasStyle: function (element) {\r\n var width = this.width || element.width,\r\n height = this.height || element.height;\r\n\r\n fabric.util.setStyle(element, {\r\n position: 'absolute',\r\n width: width + 'px',\r\n height: height + 'px',\r\n left: 0,\r\n top: 0,\r\n 'touch-action': this.allowTouchScrolling ? 'manipulation' : 'none',\r\n '-ms-touch-action': this.allowTouchScrolling ? 'manipulation' : 'none'\r\n });\r\n element.width = width;\r\n element.height = height;\r\n fabric.util.makeElementUnselectable(element);\r\n },\r\n\r\n /**\r\n * Copy the entire inline style from one element (fromEl) to another (toEl)\r\n * @private\r\n * @param {Element} fromEl Element style is copied from\r\n * @param {Element} toEl Element copied style is applied to\r\n */\r\n _copyCanvasStyle: function (fromEl, toEl) {\r\n toEl.style.cssText = fromEl.style.cssText;\r\n },\r\n\r\n /**\r\n * Returns context of canvas where object selection is drawn\r\n * @return {CanvasRenderingContext2D}\r\n */\r\n getSelectionContext: function() {\r\n return this.contextTop;\r\n },\r\n\r\n /**\r\n * Returns <canvas> element on which object selection is drawn\r\n * @return {HTMLCanvasElement}\r\n */\r\n getSelectionElement: function () {\r\n return this.upperCanvasEl;\r\n },\r\n\r\n /**\r\n * Returns currently active object\r\n * @return {fabric.Object} active object\r\n */\r\n getActiveObject: function () {\r\n return this._activeObject;\r\n },\r\n\r\n /**\r\n * Returns an array with the current selected objects\r\n * @return {fabric.Object} active object\r\n */\r\n getActiveObjects: function () {\r\n var active = this._activeObject;\r\n if (active) {\r\n if (active.type === 'activeSelection' && active._objects) {\r\n return active._objects.slice(0);\r\n }\r\n else {\r\n return [active];\r\n }\r\n }\r\n return [];\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {fabric.Object} obj Object that was removed\r\n */\r\n _onObjectRemoved: function(obj) {\r\n // removing active object should fire \"selection:cleared\" events\r\n if (obj === this._activeObject) {\r\n this.fire('before:selection:cleared', { target: obj });\r\n this._discardActiveObject();\r\n this.fire('selection:cleared', { target: obj });\r\n obj.fire('deselected');\r\n }\r\n if (obj === this._hoveredTarget){\r\n this._hoveredTarget = null;\r\n this._hoveredTargets = [];\r\n }\r\n this.callSuper('_onObjectRemoved', obj);\r\n },\r\n\r\n /**\r\n * @private\r\n * Compares the old activeObject with the current one and fires correct events\r\n * @param {fabric.Object} obj old activeObject\r\n */\r\n _fireSelectionEvents: function(oldObjects, e) {\r\n var somethingChanged = false, objects = this.getActiveObjects(),\r\n added = [], removed = [];\r\n oldObjects.forEach(function(oldObject) {\r\n if (objects.indexOf(oldObject) === -1) {\r\n somethingChanged = true;\r\n oldObject.fire('deselected', {\r\n e: e,\r\n target: oldObject\r\n });\r\n removed.push(oldObject);\r\n }\r\n });\r\n objects.forEach(function(object) {\r\n if (oldObjects.indexOf(object) === -1) {\r\n somethingChanged = true;\r\n object.fire('selected', {\r\n e: e,\r\n target: object\r\n });\r\n added.push(object);\r\n }\r\n });\r\n if (oldObjects.length > 0 && objects.length > 0) {\r\n somethingChanged && this.fire('selection:updated', {\r\n e: e,\r\n selected: added,\r\n deselected: removed,\r\n });\r\n }\r\n else if (objects.length > 0) {\r\n this.fire('selection:created', {\r\n e: e,\r\n selected: added,\r\n });\r\n }\r\n else if (oldObjects.length > 0) {\r\n this.fire('selection:cleared', {\r\n e: e,\r\n deselected: removed,\r\n });\r\n }\r\n },\r\n\r\n /**\r\n * Sets given object as the only active object on canvas\r\n * @param {fabric.Object} object Object to set as an active one\r\n * @param {Event} [e] Event (passed along when firing \"object:selected\")\r\n * @return {fabric.Canvas} thisArg\r\n * @chainable\r\n */\r\n setActiveObject: function (object, e) {\r\n var currentActives = this.getActiveObjects();\r\n this._setActiveObject(object, e);\r\n this._fireSelectionEvents(currentActives, e);\r\n return this;\r\n },\r\n\r\n /**\r\n * This is a private method for now.\r\n * This is supposed to be equivalent to setActiveObject but without firing\r\n * any event. There is commitment to have this stay this way.\r\n * This is the functional part of setActiveObject.\r\n * @private\r\n * @param {Object} object to set as active\r\n * @param {Event} [e] Event (passed along when firing \"object:selected\")\r\n * @return {Boolean} true if the selection happened\r\n */\r\n _setActiveObject: function(object, e) {\r\n if (this._activeObject === object) {\r\n return false;\r\n }\r\n if (!this._discardActiveObject(e, object)) {\r\n return false;\r\n }\r\n if (object.onSelect({ e: e })) {\r\n return false;\r\n }\r\n this._activeObject = object;\r\n return true;\r\n },\r\n\r\n /**\r\n * This is a private method for now.\r\n * This is supposed to be equivalent to discardActiveObject but without firing\r\n * any events. There is commitment to have this stay this way.\r\n * This is the functional part of discardActiveObject.\r\n * @param {Event} [e] Event (passed along when firing \"object:deselected\")\r\n * @param {Object} object to set as active\r\n * @return {Boolean} true if the selection happened\r\n * @private\r\n */\r\n _discardActiveObject: function(e, object) {\r\n var obj = this._activeObject;\r\n if (obj) {\r\n // onDeselect return TRUE to cancel selection;\r\n if (obj.onDeselect({ e: e, object: object })) {\r\n return false;\r\n }\r\n this._activeObject = null;\r\n }\r\n return true;\r\n },\r\n\r\n /**\r\n * Discards currently active object and fire events. If the function is called by fabric\r\n * as a consequence of a mouse event, the event is passed as a parameter and\r\n * sent to the fire function for the custom events. When used as a method the\r\n * e param does not have any application.\r\n * @param {event} e\r\n * @return {fabric.Canvas} thisArg\r\n * @chainable\r\n */\r\n discardActiveObject: function (e) {\r\n var currentActives = this.getActiveObjects(), activeObject = this.getActiveObject();\r\n if (currentActives.length) {\r\n this.fire('before:selection:cleared', { target: activeObject, e: e });\r\n }\r\n this._discardActiveObject(e);\r\n this._fireSelectionEvents(currentActives, e);\r\n return this;\r\n },\r\n\r\n /**\r\n * Clears a canvas element and removes all event listeners\r\n * @return {fabric.Canvas} thisArg\r\n * @chainable\r\n */\r\n dispose: function () {\r\n var wrapper = this.wrapperEl;\r\n this.removeListeners();\r\n wrapper.removeChild(this.upperCanvasEl);\r\n wrapper.removeChild(this.lowerCanvasEl);\r\n this.contextCache = null;\r\n this.contextTop = null;\r\n ['upperCanvasEl', 'cacheCanvasEl'].forEach((function(element) {\r\n fabric.util.cleanUpJsdomNode(this[element]);\r\n this[element] = undefined;\r\n }).bind(this));\r\n if (wrapper.parentNode) {\r\n wrapper.parentNode.replaceChild(this.lowerCanvasEl, this.wrapperEl);\r\n }\r\n delete this.wrapperEl;\r\n fabric.StaticCanvas.prototype.dispose.call(this);\r\n return this;\r\n },\r\n\r\n /**\r\n * Clears all contexts (background, main, top) of an instance\r\n * @return {fabric.Canvas} thisArg\r\n * @chainable\r\n */\r\n clear: function () {\r\n // this.discardActiveGroup();\r\n this.discardActiveObject();\r\n this.clearContext(this.contextTop);\r\n return this.callSuper('clear');\r\n },\r\n\r\n /**\r\n * Draws objects' controls (borders/controls)\r\n * @param {CanvasRenderingContext2D} ctx Context to render controls on\r\n */\r\n drawControls: function(ctx) {\r\n var activeObject = this._activeObject;\r\n\r\n if (activeObject) {\r\n activeObject._renderControls(ctx);\r\n }\r\n },\r\n\r\n /**\r\n * @private\r\n */\r\n _toObject: function(instance, methodName, propertiesToInclude) {\r\n //If the object is part of the current selection group, it should\r\n //be transformed appropriately\r\n //i.e. it should be serialised as it would appear if the selection group\r\n //were to be destroyed.\r\n var originalProperties = this._realizeGroupTransformOnObject(instance),\r\n object = this.callSuper('_toObject', instance, methodName, propertiesToInclude);\r\n //Undo the damage we did by changing all of its properties\r\n this._unwindGroupTransformOnObject(instance, originalProperties);\r\n return object;\r\n },\r\n\r\n /**\r\n * Realises an object's group transformation on it\r\n * @private\r\n * @param {fabric.Object} [instance] the object to transform (gets mutated)\r\n * @returns the original values of instance which were changed\r\n */\r\n _realizeGroupTransformOnObject: function(instance) {\r\n if (instance.group && instance.group.type === 'activeSelection' && this._activeObject === instance.group) {\r\n var layoutProps = ['angle', 'flipX', 'flipY', 'left', 'scaleX', 'scaleY', 'skewX', 'skewY', 'top'];\r\n //Copy all the positionally relevant properties across now\r\n var originalValues = {};\r\n layoutProps.forEach(function(prop) {\r\n originalValues[prop] = instance[prop];\r\n });\r\n fabric.util.addTransformToObject(instance, this._activeObject.calcOwnMatrix());\r\n return originalValues;\r\n }\r\n else {\r\n return null;\r\n }\r\n },\r\n\r\n /**\r\n * Restores the changed properties of instance\r\n * @private\r\n * @param {fabric.Object} [instance] the object to un-transform (gets mutated)\r\n * @param {Object} [originalValues] the original values of instance, as returned by _realizeGroupTransformOnObject\r\n */\r\n _unwindGroupTransformOnObject: function(instance, originalValues) {\r\n if (originalValues) {\r\n instance.set(originalValues);\r\n }\r\n },\r\n\r\n /**\r\n * @private\r\n */\r\n _setSVGObject: function(markup, instance, reviver) {\r\n //If the object is in a selection group, simulate what would happen to that\r\n //object when the group is deselected\r\n var originalProperties = this._realizeGroupTransformOnObject(instance);\r\n this.callSuper('_setSVGObject', markup, instance, reviver);\r\n this._unwindGroupTransformOnObject(instance, originalProperties);\r\n },\r\n\r\n setViewportTransform: function (vpt) {\r\n if (this.renderOnAddRemove && this._activeObject && this._activeObject.isEditing) {\r\n this._activeObject.clearContextTop();\r\n }\r\n fabric.StaticCanvas.prototype.setViewportTransform.call(this, vpt);\r\n }\r\n });\r\n\r\n // copying static properties manually to work around Opera's bug,\r\n // where \"prototype\" property is enumerable and overrides existing prototype\r\n for (var prop in fabric.StaticCanvas) {\r\n if (prop !== 'prototype') {\r\n fabric.Canvas[prop] = fabric.StaticCanvas[prop];\r\n }\r\n }\r\n})();\r\n(function() {\r\n\r\n var addListener = fabric.util.addListener,\r\n removeListener = fabric.util.removeListener,\r\n RIGHT_CLICK = 3, MIDDLE_CLICK = 2, LEFT_CLICK = 1,\r\n addEventOptions = { passive: false };\r\n\r\n function checkClick(e, value) {\r\n return e.button && (e.button === value - 1);\r\n }\r\n\r\n fabric.util.object.extend(fabric.Canvas.prototype, /** @lends fabric.Canvas.prototype */ {\r\n\r\n /**\r\n * Contains the id of the touch event that owns the fabric transform\r\n * @type Number\r\n * @private\r\n */\r\n mainTouchId: null,\r\n\r\n /**\r\n * Adds mouse listeners to canvas\r\n * @private\r\n */\r\n _initEventListeners: function () {\r\n // in case we initialized the class twice. This should not happen normally\r\n // but in some kind of applications where the canvas element may be changed\r\n // this is a workaround to having double listeners.\r\n this.removeListeners();\r\n this._bindEvents();\r\n this.addOrRemove(addListener, 'add');\r\n },\r\n\r\n /**\r\n * return an event prefix pointer or mouse.\r\n * @private\r\n */\r\n _getEventPrefix: function () {\r\n return this.enablePointerEvents ? 'pointer' : 'mouse';\r\n },\r\n\r\n addOrRemove: function(functor, eventjsFunctor) {\r\n var canvasElement = this.upperCanvasEl,\r\n eventTypePrefix = this._getEventPrefix();\r\n functor(fabric.window, 'resize', this._onResize);\r\n functor(canvasElement, eventTypePrefix + 'down', this._onMouseDown);\r\n functor(canvasElement, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\r\n functor(canvasElement, eventTypePrefix + 'out', this._onMouseOut);\r\n functor(canvasElement, eventTypePrefix + 'enter', this._onMouseEnter);\r\n functor(canvasElement, 'wheel', this._onMouseWheel);\r\n functor(canvasElement, 'contextmenu', this._onContextMenu);\r\n functor(canvasElement, 'dblclick', this._onDoubleClick);\r\n functor(canvasElement, 'dragover', this._onDragOver);\r\n functor(canvasElement, 'dragenter', this._onDragEnter);\r\n functor(canvasElement, 'dragleave', this._onDragLeave);\r\n functor(canvasElement, 'drop', this._onDrop);\r\n if (!this.enablePointerEvents) {\r\n functor(canvasElement, 'touchstart', this._onTouchStart, addEventOptions);\r\n }\r\n if (typeof eventjs !== 'undefined' && eventjsFunctor in eventjs) {\r\n eventjs[eventjsFunctor](canvasElement, 'gesture', this._onGesture);\r\n eventjs[eventjsFunctor](canvasElement, 'drag', this._onDrag);\r\n eventjs[eventjsFunctor](canvasElement, 'orientation', this._onOrientationChange);\r\n eventjs[eventjsFunctor](canvasElement, 'shake', this._onShake);\r\n eventjs[eventjsFunctor](canvasElement, 'longpress', this._onLongPress);\r\n }\r\n },\r\n\r\n /**\r\n * Removes all event listeners\r\n */\r\n removeListeners: function() {\r\n this.addOrRemove(removeListener, 'remove');\r\n // if you dispose on a mouseDown, before mouse up, you need to clean document to...\r\n var eventTypePrefix = this._getEventPrefix();\r\n removeListener(fabric.document, eventTypePrefix + 'up', this._onMouseUp);\r\n removeListener(fabric.document, 'touchend', this._onTouchEnd, addEventOptions);\r\n removeListener(fabric.document, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\r\n removeListener(fabric.document, 'touchmove', this._onMouseMove, addEventOptions);\r\n },\r\n\r\n /**\r\n * @private\r\n */\r\n _bindEvents: function() {\r\n if (this.eventsBound) {\r\n // for any reason we pass here twice we do not want to bind events twice.\r\n return;\r\n }\r\n this._onMouseDown = this._onMouseDown.bind(this);\r\n this._onTouchStart = this._onTouchStart.bind(this);\r\n this._onMouseMove = this._onMouseMove.bind(this);\r\n this._onMouseUp = this._onMouseUp.bind(this);\r\n this._onTouchEnd = this._onTouchEnd.bind(this);\r\n this._onResize = this._onResize.bind(this);\r\n this._onGesture = this._onGesture.bind(this);\r\n this._onDrag = this._onDrag.bind(this);\r\n this._onShake = this._onShake.bind(this);\r\n this._onLongPress = this._onLongPress.bind(this);\r\n this._onOrientationChange = this._onOrientationChange.bind(this);\r\n this._onMouseWheel = this._onMouseWheel.bind(this);\r\n this._onMouseOut = this._onMouseOut.bind(this);\r\n this._onMouseEnter = this._onMouseEnter.bind(this);\r\n this._onContextMenu = this._onContextMenu.bind(this);\r\n this._onDoubleClick = this._onDoubleClick.bind(this);\r\n this._onDragOver = this._onDragOver.bind(this);\r\n this._onDragEnter = this._simpleEventHandler.bind(this, 'dragenter');\r\n this._onDragLeave = this._simpleEventHandler.bind(this, 'dragleave');\r\n this._onDrop = this._onDrop.bind(this);\r\n this.eventsBound = true;\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Event} [e] Event object fired on Event.js gesture\r\n * @param {Event} [self] Inner Event object\r\n */\r\n _onGesture: function(e, self) {\r\n this.__onTransformGesture && this.__onTransformGesture(e, self);\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Event} [e] Event object fired on Event.js drag\r\n * @param {Event} [self] Inner Event object\r\n */\r\n _onDrag: function(e, self) {\r\n this.__onDrag && this.__onDrag(e, self);\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Event} [e] Event object fired on wheel event\r\n */\r\n _onMouseWheel: function(e) {\r\n this.__onMouseWheel(e);\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Event} e Event object fired on mousedown\r\n */\r\n _onMouseOut: function(e) {\r\n var target = this._hoveredTarget;\r\n this.fire('mouse:out', { target: target, e: e });\r\n this._hoveredTarget = null;\r\n target && target.fire('mouseout', { e: e });\r\n\r\n var _this = this;\r\n this._hoveredTargets.forEach(function(_target){\r\n _this.fire('mouse:out', { target: target, e: e });\r\n _target && target.fire('mouseout', { e: e });\r\n });\r\n this._hoveredTargets = [];\r\n\r\n if (this._iTextInstances) {\r\n this._iTextInstances.forEach(function(obj) {\r\n if (obj.isEditing) {\r\n obj.hiddenTextarea.focus();\r\n }\r\n });\r\n }\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Event} e Event object fired on mouseenter\r\n */\r\n _onMouseEnter: function(e) {\r\n // This find target and consequent 'mouse:over' is used to\r\n // clear old instances on hovered target.\r\n // calling findTarget has the side effect of killing target.__corner.\r\n // as a short term fix we are not firing this if we are currently transforming.\r\n // as a long term fix we need to separate the action of finding a target with the\r\n // side effects we added to it.\r\n if (!this._currentTransform && !this.findTarget(e)) {\r\n this.fire('mouse:over', { target: null, e: e });\r\n this._hoveredTarget = null;\r\n this._hoveredTargets = [];\r\n }\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Event} [e] Event object fired on Event.js orientation change\r\n * @param {Event} [self] Inner Event object\r\n */\r\n _onOrientationChange: function(e, self) {\r\n this.__onOrientationChange && this.__onOrientationChange(e, self);\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Event} [e] Event object fired on Event.js shake\r\n * @param {Event} [self] Inner Event object\r\n */\r\n _onShake: function(e, self) {\r\n this.__onShake && this.__onShake(e, self);\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Event} [e] Event object fired on Event.js shake\r\n * @param {Event} [self] Inner Event object\r\n */\r\n _onLongPress: function(e, self) {\r\n this.__onLongPress && this.__onLongPress(e, self);\r\n },\r\n\r\n /**\r\n * prevent default to allow drop event to be fired\r\n * @private\r\n * @param {Event} [e] Event object fired on Event.js shake\r\n */\r\n _onDragOver: function(e) {\r\n e.preventDefault();\r\n var target = this._simpleEventHandler('dragover', e);\r\n this._fireEnterLeaveEvents(target, e);\r\n },\r\n\r\n /**\r\n * `drop:before` is a an event that allow you to schedule logic\r\n * before the `drop` event. Prefer `drop` event always, but if you need\r\n * to run some drop-disabling logic on an event, since there is no way\r\n * to handle event handlers ordering, use `drop:before`\r\n * @param {Event} e\r\n */\r\n _onDrop: function (e) {\r\n this._simpleEventHandler('drop:before', e);\r\n return this._simpleEventHandler('drop', e);\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Event} e Event object fired on mousedown\r\n */\r\n _onContextMenu: function (e) {\r\n if (this.stopContextMenu) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n }\r\n return false;\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Event} e Event object fired on mousedown\r\n */\r\n _onDoubleClick: function (e) {\r\n this._cacheTransformEventData(e);\r\n this._handleEvent(e, 'dblclick');\r\n this._resetTransformEventData(e);\r\n },\r\n\r\n /**\r\n * Return a the id of an event.\r\n * returns either the pointerId or the identifier or 0 for the mouse event\r\n * @private\r\n * @param {Event} evt Event object\r\n */\r\n getPointerId: function(evt) {\r\n var changedTouches = evt.changedTouches;\r\n\r\n if (changedTouches) {\r\n return changedTouches[0] && changedTouches[0].identifier;\r\n }\r\n\r\n if (this.enablePointerEvents) {\r\n return evt.pointerId;\r\n }\r\n\r\n return -1;\r\n },\r\n\r\n /**\r\n * Determines if an event has the id of the event that is considered main\r\n * @private\r\n * @param {evt} event Event object\r\n */\r\n _isMainEvent: function(evt) {\r\n if (evt.isPrimary === true) {\r\n return true;\r\n }\r\n if (evt.isPrimary === false) {\r\n return false;\r\n }\r\n if (evt.type === 'touchend' && evt.touches.length === 0) {\r\n return true;\r\n }\r\n if (evt.changedTouches) {\r\n return evt.changedTouches[0].identifier === this.mainTouchId;\r\n }\r\n return true;\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Event} e Event object fired on mousedown\r\n */\r\n _onTouchStart: function(e) {\r\n e.preventDefault();\r\n if (this.mainTouchId === null) {\r\n this.mainTouchId = this.getPointerId(e);\r\n }\r\n this.__onMouseDown(e);\r\n this._resetTransformEventData();\r\n var canvasElement = this.upperCanvasEl,\r\n eventTypePrefix = this._getEventPrefix();\r\n addListener(fabric.document, 'touchend', this._onTouchEnd, addEventOptions);\r\n addListener(fabric.document, 'touchmove', this._onMouseMove, addEventOptions);\r\n // Unbind mousedown to prevent double triggers from touch devices\r\n removeListener(canvasElement, eventTypePrefix + 'down', this._onMouseDown);\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Event} e Event object fired on mousedown\r\n */\r\n _onMouseDown: function (e) {\r\n this.__onMouseDown(e);\r\n this._resetTransformEventData();\r\n var canvasElement = this.upperCanvasEl,\r\n eventTypePrefix = this._getEventPrefix();\r\n removeListener(canvasElement, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\r\n addListener(fabric.document, eventTypePrefix + 'up', this._onMouseUp);\r\n addListener(fabric.document, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Event} e Event object fired on mousedown\r\n */\r\n _onTouchEnd: function(e) {\r\n if (e.touches.length > 0) {\r\n // if there are still touches stop here\r\n return;\r\n }\r\n this.__onMouseUp(e);\r\n this._resetTransformEventData();\r\n this.mainTouchId = null;\r\n var eventTypePrefix = this._getEventPrefix();\r\n removeListener(fabric.document, 'touchend', this._onTouchEnd, addEventOptions);\r\n removeListener(fabric.document, 'touchmove', this._onMouseMove, addEventOptions);\r\n var _this = this;\r\n if (this._willAddMouseDown) {\r\n clearTimeout(this._willAddMouseDown);\r\n }\r\n this._willAddMouseDown = setTimeout(function() {\r\n // Wait 400ms before rebinding mousedown to prevent double triggers\r\n // from touch devices\r\n addListener(_this.upperCanvasEl, eventTypePrefix + 'down', _this._onMouseDown);\r\n _this._willAddMouseDown = 0;\r\n }, 400);\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Event} e Event object fired on mouseup\r\n */\r\n _onMouseUp: function (e) {\r\n this.__onMouseUp(e);\r\n this._resetTransformEventData();\r\n var canvasElement = this.upperCanvasEl,\r\n eventTypePrefix = this._getEventPrefix();\r\n if (this._isMainEvent(e)) {\r\n removeListener(fabric.document, eventTypePrefix + 'up', this._onMouseUp);\r\n removeListener(fabric.document, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\r\n addListener(canvasElement, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\r\n }\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Event} e Event object fired on mousemove\r\n */\r\n _onMouseMove: function (e) {\r\n !this.allowTouchScrolling && e.preventDefault && e.preventDefault();\r\n this.__onMouseMove(e);\r\n },\r\n\r\n /**\r\n * @private\r\n */\r\n _onResize: function () {\r\n this.calcOffset();\r\n },\r\n\r\n /**\r\n * Decides whether the canvas should be redrawn in mouseup and mousedown events.\r\n * @private\r\n * @param {Object} target\r\n */\r\n _shouldRender: function(target) {\r\n var activeObject = this._activeObject;\r\n\r\n if (\r\n !!activeObject !== !!target ||\r\n (activeObject && target && (activeObject !== target))\r\n ) {\r\n // this covers: switch of target, from target to no target, selection of target\r\n // multiSelection with key and mouse\r\n return true;\r\n }\r\n else if (activeObject && activeObject.isEditing) {\r\n // if we mouse up/down over a editing textbox a cursor change,\r\n // there is no need to re render\r\n return false;\r\n }\r\n return false;\r\n },\r\n\r\n /**\r\n * Method that defines the actions when mouse is released on canvas.\r\n * The method resets the currentTransform parameters, store the image corner\r\n * position in the image object and render the canvas on top.\r\n * @private\r\n * @param {Event} e Event object fired on mouseup\r\n */\r\n __onMouseUp: function (e) {\r\n var target, transform = this._currentTransform,\r\n groupSelector = this._groupSelector, shouldRender = false,\r\n isClick = (!groupSelector || (groupSelector.left === 0 && groupSelector.top === 0));\r\n this._cacheTransformEventData(e);\r\n target = this._target;\r\n this._handleEvent(e, 'up:before');\r\n // if right/middle click just fire events and return\r\n // target undefined will make the _handleEvent search the target\r\n if (checkClick(e, RIGHT_CLICK)) {\r\n if (this.fireRightClick) {\r\n this._handleEvent(e, 'up', RIGHT_CLICK, isClick);\r\n }\r\n return;\r\n }\r\n\r\n if (checkClick(e, MIDDLE_CLICK)) {\r\n if (this.fireMiddleClick) {\r\n this._handleEvent(e, 'up', MIDDLE_CLICK, isClick);\r\n }\r\n this._resetTransformEventData();\r\n return;\r\n }\r\n\r\n if (this.isDrawingMode && this._isCurrentlyDrawing) {\r\n this._onMouseUpInDrawingMode(e);\r\n return;\r\n }\r\n\r\n if (!this._isMainEvent(e)) {\r\n return;\r\n }\r\n if (transform) {\r\n this._finalizeCurrentTransform(e);\r\n shouldRender = transform.actionPerformed;\r\n }\r\n if (!isClick) {\r\n var targetWasActive = target === this._activeObject;\r\n this._maybeGroupObjects(e);\r\n if (!shouldRender) {\r\n shouldRender = (\r\n this._shouldRender(target) ||\r\n (!targetWasActive && target === this._activeObject)\r\n );\r\n }\r\n }\r\n var corner, pointer;\r\n if (target) {\r\n corner = target._findTargetCorner(\r\n this.getPointer(e, true),\r\n fabric.util.isTouchEvent(e)\r\n );\r\n if (target.selectable && target !== this._activeObject && target.activeOn === 'up') {\r\n this.setActiveObject(target, e);\r\n shouldRender = true;\r\n }\r\n else {\r\n var control = target.controls[corner],\r\n mouseUpHandler = control && control.getMouseUpHandler(e, target, control);\r\n if (mouseUpHandler) {\r\n pointer = this.getPointer(e);\r\n mouseUpHandler(e, transform, pointer.x, pointer.y);\r\n }\r\n }\r\n target.isMoving = false;\r\n }\r\n // if we are ending up a transform on a different control or a new object\r\n // fire the original mouse up from the corner that started the transform\r\n if (transform && (transform.target !== target || transform.corner !== corner)) {\r\n var originalControl = transform.target && transform.target.controls[transform.corner],\r\n originalMouseUpHandler = originalControl && originalControl.getMouseUpHandler(e, target, control);\r\n pointer = pointer || this.getPointer(e);\r\n originalMouseUpHandler && originalMouseUpHandler(e, transform, pointer.x, pointer.y);\r\n }\r\n this._setCursorFromEvent(e, target);\r\n this._handleEvent(e, 'up', LEFT_CLICK, isClick);\r\n this._groupSelector = null;\r\n this._currentTransform = null;\r\n // reset the target information about which corner is selected\r\n target && (target.__corner = 0);\r\n if (shouldRender) {\r\n this.requestRenderAll();\r\n }\r\n else if (!isClick) {\r\n this.renderTop();\r\n }\r\n },\r\n\r\n /**\r\n * @private\r\n * Handle event firing for target and subtargets\r\n * @param {Event} e event from mouse\r\n * @param {String} eventType event to fire (up, down or move)\r\n * @return {Fabric.Object} target return the the target found, for internal reasons.\r\n */\r\n _simpleEventHandler: function(eventType, e) {\r\n var target = this.findTarget(e),\r\n targets = this.targets,\r\n options = {\r\n e: e,\r\n target: target,\r\n subTargets: targets,\r\n };\r\n this.fire(eventType, options);\r\n target && target.fire(eventType, options);\r\n if (!targets) {\r\n return target;\r\n }\r\n for (var i = 0; i < targets.length; i++) {\r\n targets[i].fire(eventType, options);\r\n }\r\n return target;\r\n },\r\n\r\n /**\r\n * @private\r\n * Handle event firing for target and subtargets\r\n * @param {Event} e event from mouse\r\n * @param {String} eventType event to fire (up, down or move)\r\n * @param {fabric.Object} targetObj receiving event\r\n * @param {Number} [button] button used in the event 1 = left, 2 = middle, 3 = right\r\n * @param {Boolean} isClick for left button only, indicates that the mouse up happened without move.\r\n */\r\n _handleEvent: function(e, eventType, button, isClick) {\r\n var target = this._target,\r\n targets = this.targets || [],\r\n options = {\r\n e: e,\r\n target: target,\r\n subTargets: targets,\r\n button: button || LEFT_CLICK,\r\n isClick: isClick || false,\r\n pointer: this._pointer,\r\n absolutePointer: this._absolutePointer,\r\n transform: this._currentTransform\r\n };\r\n if (eventType === 'up') {\r\n options.currentTarget = this.findTarget(e);\r\n options.currentSubTargets = this.targets;\r\n }\r\n this.fire('mouse:' + eventType, options);\r\n target && target.fire('mouse' + eventType, options);\r\n for (var i = 0; i < targets.length; i++) {\r\n targets[i].fire('mouse' + eventType, options);\r\n }\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Event} e send the mouse event that generate the finalize down, so it can be used in the event\r\n */\r\n _finalizeCurrentTransform: function(e) {\r\n\r\n var transform = this._currentTransform,\r\n target = transform.target,\r\n options = {\r\n e: e,\r\n target: target,\r\n transform: transform,\r\n action: transform.action,\r\n };\r\n\r\n if (target._scaling) {\r\n target._scaling = false;\r\n }\r\n\r\n target.setCoords();\r\n\r\n if (transform.actionPerformed || (this.stateful && target.hasStateChanged())) {\r\n this._fire('modified', options);\r\n }\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Event} e Event object fired on mousedown\r\n */\r\n _onMouseDownInDrawingMode: function(e) {\r\n this._isCurrentlyDrawing = true;\r\n if (this.getActiveObject()) {\r\n this.discardActiveObject(e).requestRenderAll();\r\n }\r\n var pointer = this.getPointer(e);\r\n this.freeDrawingBrush.onMouseDown(pointer, { e: e, pointer: pointer });\r\n this._handleEvent(e, 'down');\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Event} e Event object fired on mousemove\r\n */\r\n _onMouseMoveInDrawingMode: function(e) {\r\n if (this._isCurrentlyDrawing) {\r\n var pointer = this.getPointer(e);\r\n this.freeDrawingBrush.onMouseMove(pointer, { e: e, pointer: pointer });\r\n }\r\n this.setCursor(this.freeDrawingCursor);\r\n this._handleEvent(e, 'move');\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Event} e Event object fired on mouseup\r\n */\r\n _onMouseUpInDrawingMode: function(e) {\r\n var pointer = this.getPointer(e);\r\n this._isCurrentlyDrawing = this.freeDrawingBrush.onMouseUp({ e: e, pointer: pointer });\r\n this._handleEvent(e, 'up');\r\n },\r\n\r\n /**\r\n * Method that defines the actions when mouse is clicked on canvas.\r\n * The method inits the currentTransform parameters and renders all the\r\n * canvas so the current image can be placed on the top canvas and the rest\r\n * in on the container one.\r\n * @private\r\n * @param {Event} e Event object fired on mousedown\r\n */\r\n __onMouseDown: function (e) {\r\n this._cacheTransformEventData(e);\r\n this._handleEvent(e, 'down:before');\r\n var target = this._target;\r\n // if right click just fire events\r\n if (checkClick(e, RIGHT_CLICK)) {\r\n if (this.fireRightClick) {\r\n this._handleEvent(e, 'down', RIGHT_CLICK);\r\n }\r\n return;\r\n }\r\n\r\n if (checkClick(e, MIDDLE_CLICK)) {\r\n if (this.fireMiddleClick) {\r\n this._handleEvent(e, 'down', MIDDLE_CLICK);\r\n }\r\n return;\r\n }\r\n\r\n if (this.isDrawingMode) {\r\n this._onMouseDownInDrawingMode(e);\r\n return;\r\n }\r\n\r\n if (!this._isMainEvent(e)) {\r\n return;\r\n }\r\n\r\n // ignore if some object is being transformed at this moment\r\n if (this._currentTransform) {\r\n return;\r\n }\r\n\r\n var pointer = this._pointer;\r\n // save pointer for check in __onMouseUp event\r\n this._previousPointer = pointer;\r\n var shouldRender = this._shouldRender(target),\r\n shouldGroup = this._shouldGroup(e, target);\r\n if (this._shouldClearSelection(e, target)) {\r\n this.discardActiveObject(e);\r\n }\r\n else if (shouldGroup) {\r\n this._handleGrouping(e, target);\r\n target = this._activeObject;\r\n }\r\n\r\n if (this.selection && (!target ||\r\n (!target.selectable && !target.isEditing && target !== this._activeObject))) {\r\n this._groupSelector = {\r\n ex: this._absolutePointer.x,\r\n ey: this._absolutePointer.y,\r\n top: 0,\r\n left: 0\r\n };\r\n }\r\n\r\n if (target) {\r\n var alreadySelected = target === this._activeObject;\r\n if (target.selectable && target.activeOn === 'down') {\r\n this.setActiveObject(target, e);\r\n }\r\n var corner = target._findTargetCorner(\r\n this.getPointer(e, true),\r\n fabric.util.isTouchEvent(e)\r\n );\r\n target.__corner = corner;\r\n if (target === this._activeObject && (corner || !shouldGroup)) {\r\n this._setupCurrentTransform(e, target, alreadySelected);\r\n var control = target.controls[corner],\r\n pointer = this.getPointer(e),\r\n mouseDownHandler = control && control.getMouseDownHandler(e, target, control);\r\n if (mouseDownHandler) {\r\n mouseDownHandler(e, this._currentTransform, pointer.x, pointer.y);\r\n }\r\n }\r\n }\r\n this._handleEvent(e, 'down');\r\n // we must renderAll so that we update the visuals\r\n (shouldRender || shouldGroup) && this.requestRenderAll();\r\n },\r\n\r\n /**\r\n * reset cache form common information needed during event processing\r\n * @private\r\n */\r\n _resetTransformEventData: function() {\r\n this._target = null;\r\n this._pointer = null;\r\n this._absolutePointer = null;\r\n },\r\n\r\n /**\r\n * Cache common information needed during event processing\r\n * @private\r\n * @param {Event} e Event object fired on event\r\n */\r\n _cacheTransformEventData: function(e) {\r\n // reset in order to avoid stale caching\r\n this._resetTransformEventData();\r\n this._pointer = this.getPointer(e, true);\r\n this._absolutePointer = this.restorePointerVpt(this._pointer);\r\n this._target = this._currentTransform ? this._currentTransform.target : this.findTarget(e) || null;\r\n },\r\n\r\n /**\r\n * @private\r\n */\r\n _beforeTransform: function(e) {\r\n var t = this._currentTransform;\r\n this.stateful && t.target.saveState();\r\n this.fire('before:transform', {\r\n e: e,\r\n transform: t,\r\n });\r\n },\r\n\r\n /**\r\n * Method that defines the actions when mouse is hovering the canvas.\r\n * The currentTransform parameter will define whether the user is rotating/scaling/translating\r\n * an image or neither of them (only hovering). A group selection is also possible and would cancel\r\n * all any other type of action.\r\n * In case of an image transformation only the top canvas will be rendered.\r\n * @private\r\n * @param {Event} e Event object fired on mousemove\r\n */\r\n __onMouseMove: function (e) {\r\n this._handleEvent(e, 'move:before');\r\n this._cacheTransformEventData(e);\r\n var target, pointer;\r\n\r\n if (this.isDrawingMode) {\r\n this._onMouseMoveInDrawingMode(e);\r\n return;\r\n }\r\n\r\n if (!this._isMainEvent(e)) {\r\n return;\r\n }\r\n\r\n var groupSelector = this._groupSelector;\r\n\r\n // We initially clicked in an empty area, so we draw a box for multiple selection\r\n if (groupSelector) {\r\n pointer = this._absolutePointer;\r\n\r\n groupSelector.left = pointer.x - groupSelector.ex;\r\n groupSelector.top = pointer.y - groupSelector.ey;\r\n\r\n this.renderTop();\r\n }\r\n else if (!this._currentTransform) {\r\n target = this.findTarget(e) || null;\r\n this._setCursorFromEvent(e, target);\r\n this._fireOverOutEvents(target, e);\r\n }\r\n else {\r\n this._transformObject(e);\r\n }\r\n this._handleEvent(e, 'move');\r\n this._resetTransformEventData();\r\n },\r\n\r\n /**\r\n * Manage the mouseout, mouseover events for the fabric object on the canvas\r\n * @param {Fabric.Object} target the target where the target from the mousemove event\r\n * @param {Event} e Event object fired on mousemove\r\n * @private\r\n */\r\n _fireOverOutEvents: function(target, e) {\r\n var _hoveredTarget = this._hoveredTarget,\r\n _hoveredTargets = this._hoveredTargets, targets = this.targets,\r\n length = Math.max(_hoveredTargets.length, targets.length);\r\n\r\n this.fireSyntheticInOutEvents(target, e, {\r\n oldTarget: _hoveredTarget,\r\n evtOut: 'mouseout',\r\n canvasEvtOut: 'mouse:out',\r\n evtIn: 'mouseover',\r\n canvasEvtIn: 'mouse:over',\r\n });\r\n for (var i = 0; i < length; i++){\r\n this.fireSyntheticInOutEvents(targets[i], e, {\r\n oldTarget: _hoveredTargets[i],\r\n evtOut: 'mouseout',\r\n evtIn: 'mouseover',\r\n });\r\n }\r\n this._hoveredTarget = target;\r\n this._hoveredTargets = this.targets.concat();\r\n },\r\n\r\n /**\r\n * Manage the dragEnter, dragLeave events for the fabric objects on the canvas\r\n * @param {Fabric.Object} target the target where the target from the onDrag event\r\n * @param {Event} e Event object fired on ondrag\r\n * @private\r\n */\r\n _fireEnterLeaveEvents: function(target, e) {\r\n var _draggedoverTarget = this._draggedoverTarget,\r\n _hoveredTargets = this._hoveredTargets, targets = this.targets,\r\n length = Math.max(_hoveredTargets.length, targets.length);\r\n\r\n this.fireSyntheticInOutEvents(target, e, {\r\n oldTarget: _draggedoverTarget,\r\n evtOut: 'dragleave',\r\n evtIn: 'dragenter',\r\n });\r\n for (var i = 0; i < length; i++) {\r\n this.fireSyntheticInOutEvents(targets[i], e, {\r\n oldTarget: _hoveredTargets[i],\r\n evtOut: 'dragleave',\r\n evtIn: 'dragenter',\r\n });\r\n }\r\n this._draggedoverTarget = target;\r\n },\r\n\r\n /**\r\n * Manage the synthetic in/out events for the fabric objects on the canvas\r\n * @param {Fabric.Object} target the target where the target from the supported events\r\n * @param {Event} e Event object fired\r\n * @param {Object} config configuration for the function to work\r\n * @param {String} config.targetName property on the canvas where the old target is stored\r\n * @param {String} [config.canvasEvtOut] name of the event to fire at canvas level for out\r\n * @param {String} config.evtOut name of the event to fire for out\r\n * @param {String} [config.canvasEvtIn] name of the event to fire at canvas level for in\r\n * @param {String} config.evtIn name of the event to fire for in\r\n * @private\r\n */\r\n fireSyntheticInOutEvents: function(target, e, config) {\r\n var inOpt, outOpt, oldTarget = config.oldTarget, outFires, inFires,\r\n targetChanged = oldTarget !== target, canvasEvtIn = config.canvasEvtIn, canvasEvtOut = config.canvasEvtOut;\r\n if (targetChanged) {\r\n inOpt = { e: e, target: target, previousTarget: oldTarget };\r\n outOpt = { e: e, target: oldTarget, nextTarget: target };\r\n }\r\n inFires = target && targetChanged;\r\n outFires = oldTarget && targetChanged;\r\n if (outFires) {\r\n canvasEvtOut && this.fire(canvasEvtOut, outOpt);\r\n oldTarget.fire(config.evtOut, outOpt);\r\n }\r\n if (inFires) {\r\n canvasEvtIn && this.fire(canvasEvtIn, inOpt);\r\n target.fire(config.evtIn, inOpt);\r\n }\r\n },\r\n\r\n /**\r\n * Method that defines actions when an Event Mouse Wheel\r\n * @param {Event} e Event object fired on mouseup\r\n */\r\n __onMouseWheel: function(e) {\r\n this._cacheTransformEventData(e);\r\n this._handleEvent(e, 'wheel');\r\n this._resetTransformEventData();\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Event} e Event fired on mousemove\r\n */\r\n _transformObject: function(e) {\r\n var pointer = this.getPointer(e),\r\n transform = this._currentTransform;\r\n\r\n transform.reset = false;\r\n transform.shiftKey = e.shiftKey;\r\n transform.altKey = e[this.centeredKey];\r\n\r\n this._performTransformAction(e, transform, pointer);\r\n transform.actionPerformed && this.requestRenderAll();\r\n },\r\n\r\n /**\r\n * @private\r\n */\r\n _performTransformAction: function(e, transform, pointer) {\r\n var x = pointer.x,\r\n y = pointer.y,\r\n action = transform.action,\r\n actionPerformed = false,\r\n actionHandler = transform.actionHandler;\r\n // this object could be created from the function in the control handlers\r\n\r\n\r\n if (actionHandler) {\r\n actionPerformed = actionHandler(e, transform, x, y);\r\n }\r\n if (action === 'drag' && actionPerformed) {\r\n transform.target.isMoving = true;\r\n this.setCursor(transform.target.moveCursor || this.moveCursor);\r\n }\r\n transform.actionPerformed = transform.actionPerformed || actionPerformed;\r\n },\r\n\r\n /**\r\n * @private\r\n */\r\n _fire: fabric.controlsUtils.fireEvent,\r\n\r\n /**\r\n * Sets the cursor depending on where the canvas is being hovered.\r\n * Note: very buggy in Opera\r\n * @param {Event} e Event object\r\n * @param {Object} target Object that the mouse is hovering, if so.\r\n */\r\n _setCursorFromEvent: function (e, target) {\r\n if (!target) {\r\n this.setCursor(this.defaultCursor);\r\n return false;\r\n }\r\n var hoverCursor = target.hoverCursor || this.hoverCursor,\r\n activeSelection = this._activeObject && this._activeObject.type === 'activeSelection' ?\r\n this._activeObject : null,\r\n // only show proper corner when group selection is not active\r\n corner = (!activeSelection || !activeSelection.contains(target))\r\n // here we call findTargetCorner always with undefined for the touch parameter.\r\n // we assume that if you are using a cursor you do not need to interact with\r\n // the bigger touch area.\r\n && target._findTargetCorner(this.getPointer(e, true));\r\n\r\n if (!corner) {\r\n if (target.subTargetCheck){\r\n // hoverCursor should come from top-most subTarget,\r\n // so we walk the array backwards\r\n this.targets.concat().reverse().map(function(_target){\r\n hoverCursor = _target.hoverCursor || hoverCursor;\r\n });\r\n }\r\n this.setCursor(hoverCursor);\r\n }\r\n else {\r\n this.setCursor(this.getCornerCursor(corner, target, e));\r\n }\r\n },\r\n\r\n /**\r\n * @private\r\n */\r\n getCornerCursor: function(corner, target, e) {\r\n var control = target.controls[corner];\r\n return control.cursorStyleHandler(e, control, target);\r\n }\r\n });\r\n})();\r\n(function() {\r\n\r\n var min = Math.min,\r\n max = Math.max;\r\n\r\n fabric.util.object.extend(fabric.Canvas.prototype, /** @lends fabric.Canvas.prototype */ {\r\n\r\n /**\r\n * @private\r\n * @param {Event} e Event object\r\n * @param {fabric.Object} target\r\n * @return {Boolean}\r\n */\r\n _shouldGroup: function(e, target) {\r\n var activeObject = this._activeObject;\r\n return activeObject && this._isSelectionKeyPressed(e) && target && target.selectable && this.selection &&\r\n (activeObject !== target || activeObject.type === 'activeSelection') && !target.onSelect({ e: e });\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Event} e Event object\r\n * @param {fabric.Object} target\r\n */\r\n _handleGrouping: function (e, target) {\r\n var activeObject = this._activeObject;\r\n // avoid multi select when shift click on a corner\r\n if (activeObject.__corner) {\r\n return;\r\n }\r\n if (target === activeObject) {\r\n // if it's a group, find target again, using activeGroup objects\r\n target = this.findTarget(e, true);\r\n // if even object is not found or we are on activeObjectCorner, bail out\r\n if (!target || !target.selectable) {\r\n return;\r\n }\r\n }\r\n if (activeObject && activeObject.type === 'activeSelection') {\r\n this._updateActiveSelection(target, e);\r\n }\r\n else {\r\n this._createActiveSelection(target, e);\r\n }\r\n },\r\n\r\n /**\r\n * @private\r\n */\r\n _updateActiveSelection: function(target, e) {\r\n var activeSelection = this._activeObject,\r\n currentActiveObjects = activeSelection._objects.slice(0);\r\n if (activeSelection.contains(target)) {\r\n activeSelection.removeWithUpdate(target);\r\n this._hoveredTarget = target;\r\n this._hoveredTargets = this.targets.concat();\r\n if (activeSelection.size() === 1) {\r\n // activate last remaining object\r\n this._setActiveObject(activeSelection.item(0), e);\r\n }\r\n }\r\n else {\r\n activeSelection.addWithUpdate(target);\r\n this._hoveredTarget = activeSelection;\r\n this._hoveredTargets = this.targets.concat();\r\n }\r\n this._fireSelectionEvents(currentActiveObjects, e);\r\n },\r\n\r\n /**\r\n * @private\r\n */\r\n _createActiveSelection: function(target, e) {\r\n var currentActives = this.getActiveObjects(), group = this._createGroup(target);\r\n this._hoveredTarget = group;\r\n // ISSUE 4115: should we consider subTargets here?\r\n // this._hoveredTargets = [];\r\n // this._hoveredTargets = this.targets.concat();\r\n this._setActiveObject(group, e);\r\n this._fireSelectionEvents(currentActives, e);\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Object} target\r\n */\r\n _createGroup: function(target) {\r\n var objects = this._objects,\r\n isActiveLower = objects.indexOf(this._activeObject) < objects.indexOf(target),\r\n groupObjects = isActiveLower\r\n ? [this._activeObject, target]\r\n : [target, this._activeObject];\r\n this._activeObject.isEditing && this._activeObject.exitEditing();\r\n return new fabric.ActiveSelection(groupObjects, {\r\n canvas: this\r\n });\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Event} e mouse event\r\n */\r\n _groupSelectedObjects: function (e) {\r\n\r\n var group = this._collectObjects(e),\r\n aGroup;\r\n\r\n // do not create group for 1 element only\r\n if (group.length === 1) {\r\n this.setActiveObject(group[0], e);\r\n }\r\n else if (group.length > 1) {\r\n aGroup = new fabric.ActiveSelection(group.reverse(), {\r\n canvas: this\r\n });\r\n this.setActiveObject(aGroup, e);\r\n }\r\n },\r\n\r\n /**\r\n * @private\r\n */\r\n _collectObjects: function(e) {\r\n var group = [],\r\n currentObject,\r\n x1 = this._groupSelector.ex,\r\n y1 = this._groupSelector.ey,\r\n x2 = x1 + this._groupSelector.left,\r\n y2 = y1 + this._groupSelector.top,\r\n selectionX1Y1 = new fabric.Point(min(x1, x2), min(y1, y2)),\r\n selectionX2Y2 = new fabric.Point(max(x1, x2), max(y1, y2)),\r\n allowIntersect = !this.selectionFullyContained,\r\n isClick = x1 === x2 && y1 === y2;\r\n // we iterate reverse order to collect top first in case of click.\r\n for (var i = this._objects.length; i--; ) {\r\n currentObject = this._objects[i];\r\n\r\n if (!currentObject || !currentObject.selectable || !currentObject.visible) {\r\n continue;\r\n }\r\n\r\n if ((allowIntersect && currentObject.intersectsWithRect(selectionX1Y1, selectionX2Y2, true)) ||\r\n currentObject.isContainedWithinRect(selectionX1Y1, selectionX2Y2, true) ||\r\n (allowIntersect && currentObject.containsPoint(selectionX1Y1, null, true)) ||\r\n (allowIntersect && currentObject.containsPoint(selectionX2Y2, null, true))\r\n ) {\r\n group.push(currentObject);\r\n // only add one object if it's a click\r\n if (isClick) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (group.length > 1) {\r\n group = group.filter(function(object) {\r\n return !object.onSelect({ e: e });\r\n });\r\n }\r\n\r\n return group;\r\n },\r\n\r\n /**\r\n * @private\r\n */\r\n _maybeGroupObjects: function(e) {\r\n if (this.selection && this._groupSelector) {\r\n this._groupSelectedObjects(e);\r\n }\r\n this.setCursor(this.defaultCursor);\r\n // clear selection and current transformation\r\n this._groupSelector = null;\r\n }\r\n });\r\n\r\n})();\r\n(function () {\r\n fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.StaticCanvas.prototype */ {\r\n\r\n /**\r\n * Exports canvas element to a dataurl image. Note that when multiplier is used, cropping is scaled appropriately\r\n * @param {Object} [options] Options object\r\n * @param {String} [options.format=png] The format of the output image. Either \"jpeg\" or \"png\"\r\n * @param {Number} [options.quality=1] Quality level (0..1). Only used for jpeg.\r\n * @param {Number} [options.multiplier=1] Multiplier to scale by, to have consistent\r\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\r\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\r\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\r\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\r\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 2.0.0\r\n * @return {String} Returns a data: URL containing a representation of the object in the format specified by options.format\r\n * @see {@link http://jsfiddle.net/fabricjs/NfZVb/|jsFiddle demo}\r\n * @example Generate jpeg dataURL with lower quality\r\n * var dataURL = canvas.toDataURL({\r\n * format: 'jpeg',\r\n * quality: 0.8\r\n * });\r\n * @example Generate cropped png dataURL (clipping of canvas)\r\n * var dataURL = canvas.toDataURL({\r\n * format: 'png',\r\n * left: 100,\r\n * top: 100,\r\n * width: 200,\r\n * height: 200\r\n * });\r\n * @example Generate double scaled png dataURL\r\n * var dataURL = canvas.toDataURL({\r\n * format: 'png',\r\n * multiplier: 2\r\n * });\r\n */\r\n toDataURL: function (options) {\r\n options || (options = { });\r\n\r\n var format = options.format || 'png',\r\n quality = options.quality || 1,\r\n multiplier = (options.multiplier || 1) * (options.enableRetinaScaling ? this.getRetinaScaling() : 1),\r\n canvasEl = this.toCanvasElement(multiplier, options);\r\n return fabric.util.toDataURL(canvasEl, format, quality);\r\n },\r\n\r\n /**\r\n * Create a new HTMLCanvas element painted with the current canvas content.\r\n * No need to resize the actual one or repaint it.\r\n * Will transfer object ownership to a new canvas, paint it, and set everything back.\r\n * This is an intermediary step used to get to a dataUrl but also it is useful to\r\n * create quick image copies of a canvas without passing for the dataUrl string\r\n * @param {Number} [multiplier] a zoom factor.\r\n * @param {Object} [cropping] Cropping informations\r\n * @param {Number} [cropping.left] Cropping left offset.\r\n * @param {Number} [cropping.top] Cropping top offset.\r\n * @param {Number} [cropping.width] Cropping width.\r\n * @param {Number} [cropping.height] Cropping height.\r\n */\r\n toCanvasElement: function(multiplier, cropping) {\r\n multiplier = multiplier || 1;\r\n cropping = cropping || { };\r\n var scaledWidth = (cropping.width || this.width) * multiplier,\r\n scaledHeight = (cropping.height || this.height) * multiplier,\r\n zoom = this.getZoom(),\r\n originalWidth = this.width,\r\n originalHeight = this.height,\r\n newZoom = zoom * multiplier,\r\n vp = this.viewportTransform,\r\n translateX = (vp[4] - (cropping.left || 0)) * multiplier,\r\n translateY = (vp[5] - (cropping.top || 0)) * multiplier,\r\n originalInteractive = this.interactive,\r\n newVp = [newZoom, 0, 0, newZoom, translateX, translateY],\r\n originalRetina = this.enableRetinaScaling,\r\n canvasEl = fabric.util.createCanvasElement(),\r\n originalContextTop = this.contextTop;\r\n canvasEl.width = scaledWidth;\r\n canvasEl.height = scaledHeight;\r\n this.contextTop = null;\r\n this.enableRetinaScaling = false;\r\n this.interactive = false;\r\n this.viewportTransform = newVp;\r\n this.width = scaledWidth;\r\n this.height = scaledHeight;\r\n this.calcViewportBoundaries();\r\n this.renderCanvas(canvasEl.getContext('2d'), this._objects);\r\n this.viewportTransform = vp;\r\n this.width = originalWidth;\r\n this.height = originalHeight;\r\n this.calcViewportBoundaries();\r\n this.interactive = originalInteractive;\r\n this.enableRetinaScaling = originalRetina;\r\n this.contextTop = originalContextTop;\r\n return canvasEl;\r\n },\r\n });\r\n\r\n})();\r\nfabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.StaticCanvas.prototype */ {\r\n /**\r\n * Populates canvas with data from the specified JSON.\r\n * JSON format must conform to the one of {@link fabric.Canvas#toJSON}\r\n * @param {String|Object} json JSON string or object\r\n * @param {Function} callback Callback, invoked when json is parsed\r\n * and corresponding objects (e.g: {@link fabric.Image})\r\n * are initialized\r\n * @param {Function} [reviver] Method for further parsing of JSON elements, called after each fabric object created.\r\n * @return {fabric.Canvas} instance\r\n * @chainable\r\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#deserialization}\r\n * @see {@link http://jsfiddle.net/fabricjs/fmgXt/|jsFiddle demo}\r\n * @example loadFromJSON\r\n * canvas.loadFromJSON(json, canvas.renderAll.bind(canvas));\r\n * @example loadFromJSON with reviver\r\n * canvas.loadFromJSON(json, canvas.renderAll.bind(canvas), function(o, object) {\r\n * // `o` = json object\r\n * // `object` = fabric.Object instance\r\n * // ... do some stuff ...\r\n * });\r\n */\r\n loadFromJSON: function (json, callback, reviver) {\r\n if (!json) {\r\n return;\r\n }\r\n\r\n // serialize if it wasn't already\r\n var serialized = (typeof json === 'string')\r\n ? JSON.parse(json)\r\n : fabric.util.object.clone(json);\r\n\r\n var _this = this,\r\n clipPath = serialized.clipPath,\r\n renderOnAddRemove = this.renderOnAddRemove;\r\n\r\n this.renderOnAddRemove = false;\r\n\r\n delete serialized.clipPath;\r\n\r\n this._enlivenObjects(serialized.objects, function (enlivenedObjects) {\r\n _this.clear();\r\n _this._setBgOverlay(serialized, function () {\r\n if (clipPath) {\r\n _this._enlivenObjects([clipPath], function (enlivenedCanvasClip) {\r\n _this.clipPath = enlivenedCanvasClip[0];\r\n _this.__setupCanvas.call(_this, serialized, enlivenedObjects, renderOnAddRemove, callback);\r\n });\r\n }\r\n else {\r\n _this.__setupCanvas.call(_this, serialized, enlivenedObjects, renderOnAddRemove, callback);\r\n }\r\n });\r\n }, reviver);\r\n return this;\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Object} serialized Object with background and overlay information\r\n * @param {Array} restored canvas objects\r\n * @param {Function} cached renderOnAddRemove callback\r\n * @param {Function} callback Invoked after all background and overlay images/patterns loaded\r\n */\r\n __setupCanvas: function(serialized, enlivenedObjects, renderOnAddRemove, callback) {\r\n var _this = this;\r\n enlivenedObjects.forEach(function(obj, index) {\r\n // we splice the array just in case some custom classes restored from JSON\r\n // will add more object to canvas at canvas init.\r\n _this.insertAt(obj, index);\r\n });\r\n this.renderOnAddRemove = renderOnAddRemove;\r\n // remove parts i cannot set as options\r\n delete serialized.objects;\r\n delete serialized.backgroundImage;\r\n delete serialized.overlayImage;\r\n delete serialized.background;\r\n delete serialized.overlay;\r\n // this._initOptions does too many things to just\r\n // call it. Normally loading an Object from JSON\r\n // create the Object instance. Here the Canvas is\r\n // already an instance and we are just loading things over it\r\n this._setOptions(serialized);\r\n this.renderAll();\r\n callback && callback();\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Object} serialized Object with background and overlay information\r\n * @param {Function} callback Invoked after all background and overlay images/patterns loaded\r\n */\r\n _setBgOverlay: function(serialized, callback) {\r\n var loaded = {\r\n backgroundColor: false,\r\n overlayColor: false,\r\n backgroundImage: false,\r\n overlayImage: false\r\n };\r\n\r\n if (!serialized.backgroundImage && !serialized.overlayImage && !serialized.background && !serialized.overlay) {\r\n callback && callback();\r\n return;\r\n }\r\n\r\n var cbIfLoaded = function () {\r\n if (loaded.backgroundImage && loaded.overlayImage && loaded.backgroundColor && loaded.overlayColor) {\r\n callback && callback();\r\n }\r\n };\r\n\r\n this.__setBgOverlay('backgroundImage', serialized.backgroundImage, loaded, cbIfLoaded);\r\n this.__setBgOverlay('overlayImage', serialized.overlayImage, loaded, cbIfLoaded);\r\n this.__setBgOverlay('backgroundColor', serialized.background, loaded, cbIfLoaded);\r\n this.__setBgOverlay('overlayColor', serialized.overlay, loaded, cbIfLoaded);\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {String} property Property to set (backgroundImage, overlayImage, backgroundColor, overlayColor)\r\n * @param {(Object|String)} value Value to set\r\n * @param {Object} loaded Set loaded property to true if property is set\r\n * @param {Object} callback Callback function to invoke after property is set\r\n */\r\n __setBgOverlay: function(property, value, loaded, callback) {\r\n var _this = this;\r\n\r\n if (!value) {\r\n loaded[property] = true;\r\n callback && callback();\r\n return;\r\n }\r\n\r\n if (property === 'backgroundImage' || property === 'overlayImage') {\r\n fabric.util.enlivenObjects([value], function(enlivedObject){\r\n _this[property] = enlivedObject[0];\r\n loaded[property] = true;\r\n callback && callback();\r\n });\r\n }\r\n else {\r\n this['set' + fabric.util.string.capitalize(property, true)](value, function() {\r\n loaded[property] = true;\r\n callback && callback();\r\n });\r\n }\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Array} objects\r\n * @param {Function} callback\r\n * @param {Function} [reviver]\r\n */\r\n _enlivenObjects: function (objects, callback, reviver) {\r\n if (!objects || objects.length === 0) {\r\n callback && callback([]);\r\n return;\r\n }\r\n\r\n fabric.util.enlivenObjects(objects, function(enlivenedObjects) {\r\n callback && callback(enlivenedObjects);\r\n }, null, reviver);\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {String} format\r\n * @param {Function} callback\r\n */\r\n _toDataURL: function (format, callback) {\r\n this.clone(function (clone) {\r\n callback(clone.toDataURL(format));\r\n });\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {String} format\r\n * @param {Number} multiplier\r\n * @param {Function} callback\r\n */\r\n _toDataURLWithMultiplier: function (format, multiplier, callback) {\r\n this.clone(function (clone) {\r\n callback(clone.toDataURLWithMultiplier(format, multiplier));\r\n });\r\n },\r\n\r\n /**\r\n * Clones canvas instance\r\n * @param {Object} [callback] Receives cloned instance as a first argument\r\n * @param {Array} [properties] Array of properties to include in the cloned canvas and children\r\n */\r\n clone: function (callback, properties) {\r\n var data = JSON.stringify(this.toJSON(properties));\r\n this.cloneWithoutData(function(clone) {\r\n clone.loadFromJSON(data, function() {\r\n callback && callback(clone);\r\n });\r\n });\r\n },\r\n\r\n /**\r\n * Clones canvas instance without cloning existing data.\r\n * This essentially copies canvas dimensions, clipping properties, etc.\r\n * but leaves data empty (so that you can populate it with your own)\r\n * @param {Object} [callback] Receives cloned instance as a first argument\r\n */\r\n cloneWithoutData: function(callback) {\r\n var el = fabric.util.createCanvasElement();\r\n\r\n el.width = this.width;\r\n el.height = this.height;\r\n\r\n var clone = new fabric.Canvas(el);\r\n if (this.backgroundImage) {\r\n clone.setBackgroundImage(this.backgroundImage.src, function() {\r\n clone.renderAll();\r\n callback && callback(clone);\r\n });\r\n clone.backgroundImageOpacity = this.backgroundImageOpacity;\r\n clone.backgroundImageStretch = this.backgroundImageStretch;\r\n }\r\n else {\r\n callback && callback(clone);\r\n }\r\n }\r\n});\r\n(function(global) {\r\n\r\n 'use strict';\r\n\r\n var fabric = global.fabric || (global.fabric = { }),\r\n extend = fabric.util.object.extend,\r\n clone = fabric.util.object.clone,\r\n toFixed = fabric.util.toFixed,\r\n capitalize = fabric.util.string.capitalize,\r\n degreesToRadians = fabric.util.degreesToRadians,\r\n objectCaching = !fabric.isLikelyNode,\r\n ALIASING_LIMIT = 2;\r\n\r\n if (fabric.Object) {\r\n return;\r\n }\r\n\r\n /**\r\n * Root object class from which all 2d shape classes inherit from\r\n * @class fabric.Object\r\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#objects}\r\n * @see {@link fabric.Object#initialize} for constructor definition\r\n *\r\n * @fires added\r\n * @fires removed\r\n *\r\n * @fires selected\r\n * @fires deselected\r\n * @fires modified\r\n * @fires modified\r\n * @fires moved\r\n * @fires scaled\r\n * @fires rotated\r\n * @fires skewed\r\n *\r\n * @fires rotating\r\n * @fires scaling\r\n * @fires moving\r\n * @fires skewing\r\n *\r\n * @fires mousedown\r\n * @fires mouseup\r\n * @fires mouseover\r\n * @fires mouseout\r\n * @fires mousewheel\r\n * @fires mousedblclick\r\n *\r\n * @fires dragover\r\n * @fires dragenter\r\n * @fires dragleave\r\n * @fires drop\r\n */\r\n fabric.Object = fabric.util.createClass(fabric.CommonMethods, /** @lends fabric.Object.prototype */ {\r\n\r\n /**\r\n * Type of an object (rect, circle, path, etc.).\r\n * Note that this property is meant to be read-only and not meant to be modified.\r\n * If you modify, certain parts of Fabric (such as JSON loading) won't work correctly.\r\n * @type String\r\n * @default\r\n */\r\n type: 'object',\r\n\r\n /**\r\n * Horizontal origin of transformation of an object (one of \"left\", \"right\", \"center\")\r\n * See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups\r\n * @type String\r\n * @default\r\n */\r\n originX: 'left',\r\n\r\n /**\r\n * Vertical origin of transformation of an object (one of \"top\", \"bottom\", \"center\")\r\n * See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups\r\n * @type String\r\n * @default\r\n */\r\n originY: 'top',\r\n\r\n /**\r\n * Top position of an object. Note that by default it's relative to object top. You can change this by setting originY={top/center/bottom}\r\n * @type Number\r\n * @default\r\n */\r\n top: 0,\r\n\r\n /**\r\n * Left position of an object. Note that by default it's relative to object left. You can change this by setting originX={left/center/right}\r\n * @type Number\r\n * @default\r\n */\r\n left: 0,\r\n\r\n /**\r\n * Object width\r\n * @type Number\r\n * @default\r\n */\r\n width: 0,\r\n\r\n /**\r\n * Object height\r\n * @type Number\r\n * @default\r\n */\r\n height: 0,\r\n\r\n /**\r\n * Object scale factor (horizontal)\r\n * @type Number\r\n * @default\r\n */\r\n scaleX: 1,\r\n\r\n /**\r\n * Object scale factor (vertical)\r\n * @type Number\r\n * @default\r\n */\r\n scaleY: 1,\r\n\r\n /**\r\n * When true, an object is rendered as flipped horizontally\r\n * @type Boolean\r\n * @default\r\n */\r\n flipX: false,\r\n\r\n /**\r\n * When true, an object is rendered as flipped vertically\r\n * @type Boolean\r\n * @default\r\n */\r\n flipY: false,\r\n\r\n /**\r\n * Opacity of an object\r\n * @type Number\r\n * @default\r\n */\r\n opacity: 1,\r\n\r\n /**\r\n * Angle of rotation of an object (in degrees)\r\n * @type Number\r\n * @default\r\n */\r\n angle: 0,\r\n\r\n /**\r\n * Angle of skew on x axes of an object (in degrees)\r\n * @type Number\r\n * @default\r\n */\r\n skewX: 0,\r\n\r\n /**\r\n * Angle of skew on y axes of an object (in degrees)\r\n * @type Number\r\n * @default\r\n */\r\n skewY: 0,\r\n\r\n /**\r\n * Size of object's controlling corners (in pixels)\r\n * @type Number\r\n * @default\r\n */\r\n cornerSize: 13,\r\n\r\n /**\r\n * Size of object's controlling corners when touch interaction is detected\r\n * @type Number\r\n * @default\r\n */\r\n touchCornerSize: 24,\r\n\r\n /**\r\n * When true, object's controlling corners are rendered as transparent inside (i.e. stroke instead of fill)\r\n * @type Boolean\r\n * @default\r\n */\r\n transparentCorners: true,\r\n\r\n /**\r\n * Default cursor value used when hovering over this object on canvas\r\n * @type String\r\n * @default\r\n */\r\n hoverCursor: null,\r\n\r\n /**\r\n * Default cursor value used when moving this object on canvas\r\n * @type String\r\n * @default\r\n */\r\n moveCursor: null,\r\n\r\n /**\r\n * Padding between object and its controlling borders (in pixels)\r\n * @type Number\r\n * @default\r\n */\r\n padding: 0,\r\n\r\n /**\r\n * Color of controlling borders of an object (when it's active)\r\n * @type String\r\n * @default\r\n */\r\n borderColor: 'rgb(178,204,255)',\r\n\r\n /**\r\n * Array specifying dash pattern of an object's borders (hasBorder must be true)\r\n * @since 1.6.2\r\n * @type Array\r\n */\r\n borderDashArray: null,\r\n\r\n /**\r\n * Color of controlling corners of an object (when it's active)\r\n * @type String\r\n * @default\r\n */\r\n cornerColor: 'rgb(178,204,255)',\r\n\r\n /**\r\n * Color of controlling corners of an object (when it's active and transparentCorners false)\r\n * @since 1.6.2\r\n * @type String\r\n * @default\r\n */\r\n cornerStrokeColor: null,\r\n\r\n /**\r\n * Specify style of control, 'rect' or 'circle'\r\n * @since 1.6.2\r\n * @type String\r\n */\r\n cornerStyle: 'rect',\r\n\r\n /**\r\n * Array specifying dash pattern of an object's control (hasBorder must be true)\r\n * @since 1.6.2\r\n * @type Array\r\n */\r\n cornerDashArray: null,\r\n\r\n /**\r\n * When true, this object will use center point as the origin of transformation\r\n * when being scaled via the controls.\r\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\r\n * @since 1.3.4\r\n * @type Boolean\r\n * @default\r\n */\r\n centeredScaling: false,\r\n\r\n /**\r\n * When true, this object will use center point as the origin of transformation\r\n * when being rotated via the controls.\r\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\r\n * @since 1.3.4\r\n * @type Boolean\r\n * @default\r\n */\r\n centeredRotation: true,\r\n\r\n /**\r\n * Color of object's fill\r\n * takes css colors https://www.w3.org/TR/css-color-3/\r\n * @type String\r\n * @default\r\n */\r\n fill: 'rgb(0,0,0)',\r\n\r\n /**\r\n * Fill rule used to fill an object\r\n * accepted values are nonzero, evenodd\r\n * Backwards incompatibility note: This property was used for setting globalCompositeOperation until v1.4.12 (use `fabric.Object#globalCompositeOperation` instead)\r\n * @type String\r\n * @default\r\n */\r\n fillRule: 'nonzero',\r\n\r\n /**\r\n * Composite rule used for canvas globalCompositeOperation\r\n * @type String\r\n * @default\r\n */\r\n globalCompositeOperation: 'source-over',\r\n\r\n /**\r\n * Background color of an object.\r\n * takes css colors https://www.w3.org/TR/css-color-3/\r\n * @type String\r\n * @default\r\n */\r\n backgroundColor: '',\r\n\r\n /**\r\n * Selection Background color of an object. colored layer behind the object when it is active.\r\n * does not mix good with globalCompositeOperation methods.\r\n * @type String\r\n * @default\r\n */\r\n selectionBackgroundColor: '',\r\n\r\n /**\r\n * When defined, an object is rendered via stroke and this property specifies its color\r\n * takes css colors https://www.w3.org/TR/css-color-3/\r\n * @type String\r\n * @default\r\n */\r\n stroke: null,\r\n\r\n /**\r\n * Width of a stroke used to render this object\r\n * @type Number\r\n * @default\r\n */\r\n strokeWidth: 1,\r\n\r\n /**\r\n * Array specifying dash pattern of an object's stroke (stroke must be defined)\r\n * @type Array\r\n */\r\n strokeDashArray: null,\r\n\r\n /**\r\n * Line offset of an object's stroke\r\n * @type Number\r\n * @default\r\n */\r\n strokeDashOffset: 0,\r\n\r\n /**\r\n * Line endings style of an object's stroke (one of \"butt\", \"round\", \"square\")\r\n * @type String\r\n * @default\r\n */\r\n strokeLineCap: 'butt',\r\n\r\n /**\r\n * Corner style of an object's stroke (one of \"bevel\", \"round\", \"miter\")\r\n * @type String\r\n * @default\r\n */\r\n strokeLineJoin: 'miter',\r\n\r\n /**\r\n * Maximum miter length (used for strokeLineJoin = \"miter\") of an object's stroke\r\n * @type Number\r\n * @default\r\n */\r\n strokeMiterLimit: 4,\r\n\r\n /**\r\n * Shadow object representing shadow of this shape\r\n * @type fabric.Shadow\r\n * @default\r\n */\r\n shadow: null,\r\n\r\n /**\r\n * Opacity of object's controlling borders when object is active and moving\r\n * @type Number\r\n * @default\r\n */\r\n borderOpacityWhenMoving: 0.4,\r\n\r\n /**\r\n * Scale factor of object's controlling borders\r\n * bigger number will make a thicker border\r\n * border is 1, so this is basically a border thickness\r\n * since there is no way to change the border itself.\r\n * @type Number\r\n * @default\r\n */\r\n borderScaleFactor: 1,\r\n\r\n /**\r\n * Minimum allowed scale value of an object\r\n * @type Number\r\n * @default\r\n */\r\n minScaleLimit: 0,\r\n\r\n /**\r\n * When set to `false`, an object can not be selected for modification (using either point-click-based or group-based selection).\r\n * But events still fire on it.\r\n * @type Boolean\r\n * @default\r\n */\r\n selectable: true,\r\n\r\n /**\r\n * When set to `false`, an object can not be a target of events. All events propagate through it. Introduced in v1.3.4\r\n * @type Boolean\r\n * @default\r\n */\r\n evented: true,\r\n\r\n /**\r\n * When set to `false`, an object is not rendered on canvas\r\n * @type Boolean\r\n * @default\r\n */\r\n visible: true,\r\n\r\n /**\r\n * When set to `false`, object's controls are not displayed and can not be used to manipulate object\r\n * @type Boolean\r\n * @default\r\n */\r\n hasControls: true,\r\n\r\n /**\r\n * When set to `false`, object's controlling borders are not rendered\r\n * @type Boolean\r\n * @default\r\n */\r\n hasBorders: true,\r\n\r\n /**\r\n * When set to `true`, objects are \"found\" on canvas on per-pixel basis rather than according to bounding box\r\n * @type Boolean\r\n * @default\r\n */\r\n perPixelTargetFind: false,\r\n\r\n /**\r\n * When `false`, default object's values are not included in its serialization\r\n * @type Boolean\r\n * @default\r\n */\r\n includeDefaultValues: true,\r\n\r\n /**\r\n * When `true`, object horizontal movement is locked\r\n * @type Boolean\r\n * @default\r\n */\r\n lockMovementX: false,\r\n\r\n /**\r\n * When `true`, object vertical movement is locked\r\n * @type Boolean\r\n * @default\r\n */\r\n lockMovementY: false,\r\n\r\n /**\r\n * When `true`, object rotation is locked\r\n * @type Boolean\r\n * @default\r\n */\r\n lockRotation: false,\r\n\r\n /**\r\n * When `true`, object horizontal scaling is locked\r\n * @type Boolean\r\n * @default\r\n */\r\n lockScalingX: false,\r\n\r\n /**\r\n * When `true`, object vertical scaling is locked\r\n * @type Boolean\r\n * @default\r\n */\r\n lockScalingY: false,\r\n\r\n /**\r\n * When `true`, object horizontal skewing is locked\r\n * @type Boolean\r\n * @default\r\n */\r\n lockSkewingX: false,\r\n\r\n /**\r\n * When `true`, object vertical skewing is locked\r\n * @type Boolean\r\n * @default\r\n */\r\n lockSkewingY: false,\r\n\r\n /**\r\n * When `true`, object cannot be flipped by scaling into negative values\r\n * @type Boolean\r\n * @default\r\n */\r\n lockScalingFlip: false,\r\n\r\n /**\r\n * When `true`, object is not exported in OBJECT/JSON\r\n * @since 1.6.3\r\n * @type Boolean\r\n * @default\r\n */\r\n excludeFromExport: false,\r\n\r\n /**\r\n * When `true`, object is cached on an additional canvas.\r\n * When `false`, object is not cached unless necessary ( clipPath )\r\n * default to true\r\n * @since 1.7.0\r\n * @type Boolean\r\n * @default true\r\n */\r\n objectCaching: objectCaching,\r\n\r\n /**\r\n * When `true`, object properties are checked for cache invalidation. In some particular\r\n * situation you may want this to be disabled ( spray brush, very big, groups)\r\n * or if your application does not allow you to modify properties for groups child you want\r\n * to disable it for groups.\r\n * default to false\r\n * since 1.7.0\r\n * @type Boolean\r\n * @default false\r\n */\r\n statefullCache: false,\r\n\r\n /**\r\n * When `true`, cache does not get updated during scaling. The picture will get blocky if scaled\r\n * too much and will be redrawn with correct details at the end of scaling.\r\n * this setting is performance and application dependant.\r\n * default to true\r\n * since 1.7.0\r\n * @type Boolean\r\n * @default true\r\n */\r\n noScaleCache: true,\r\n\r\n /**\r\n * When `false`, the stoke width will scale with the object.\r\n * When `true`, the stroke will always match the exact pixel size entered for stroke width.\r\n * this Property does not work on Text classes or drawing call that uses strokeText,fillText methods\r\n * default to false\r\n * @since 2.6.0\r\n * @type Boolean\r\n * @default false\r\n * @type Boolean\r\n * @default false\r\n */\r\n strokeUniform: false,\r\n\r\n /**\r\n * When set to `true`, object's cache will be rerendered next render call.\r\n * since 1.7.0\r\n * @type Boolean\r\n * @default true\r\n */\r\n dirty: true,\r\n\r\n /**\r\n * keeps the value of the last hovered corner during mouse move.\r\n * 0 is no corner, or 'mt', 'ml', 'mtr' etc..\r\n * It should be private, but there is no harm in using it as\r\n * a read-only property.\r\n * @type number|string|any\r\n * @default 0\r\n */\r\n __corner: 0,\r\n\r\n /**\r\n * Determines if the fill or the stroke is drawn first (one of \"fill\" or \"stroke\")\r\n * @type String\r\n * @default\r\n */\r\n paintFirst: 'fill',\r\n\r\n /**\r\n * When 'down', object is set to active on mousedown/touchstart\r\n * When 'up', object is set to active on mouseup/touchend\r\n * Experimental. Let's see if this breaks anything before supporting officially\r\n * @private\r\n * since 4.4.0\r\n * @type String\r\n * @default 'down'\r\n */\r\n activeOn: 'down',\r\n\r\n /**\r\n * List of properties to consider when checking if state\r\n * of an object is changed (fabric.Object#hasStateChanged)\r\n * as well as for history (undo/redo) purposes\r\n * @type Array\r\n */\r\n stateProperties: (\r\n 'top left width height scaleX scaleY flipX flipY originX originY transformMatrix ' +\r\n 'stroke strokeWidth strokeDashArray strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit ' +\r\n 'angle opacity fill globalCompositeOperation shadow visible backgroundColor ' +\r\n 'skewX skewY fillRule paintFirst clipPath strokeUniform'\r\n ).split(' '),\r\n\r\n /**\r\n * List of properties to consider when checking if cache needs refresh\r\n * Those properties are checked by statefullCache ON ( or lazy mode if we want ) or from single\r\n * calls to Object.set(key, value). If the key is in this list, the object is marked as dirty\r\n * and refreshed at the next render\r\n * @type Array\r\n */\r\n cacheProperties: (\r\n 'fill stroke strokeWidth strokeDashArray width height paintFirst strokeUniform' +\r\n ' strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit backgroundColor clipPath'\r\n ).split(' '),\r\n\r\n /**\r\n * List of properties to consider for animating colors.\r\n * @type Array\r\n */\r\n colorProperties: (\r\n 'fill stroke backgroundColor'\r\n ).split(' '),\r\n\r\n /**\r\n * a fabricObject that, without stroke define a clipping area with their shape. filled in black\r\n * the clipPath object gets used when the object has rendered, and the context is placed in the center\r\n * of the object cacheCanvas.\r\n * If you want 0,0 of a clipPath to align with an object center, use clipPath.originX/Y to 'center'\r\n * @type fabric.Object\r\n */\r\n clipPath: undefined,\r\n\r\n /**\r\n * Meaningful ONLY when the object is used as clipPath.\r\n * if true, the clipPath will make the object clip to the outside of the clipPath\r\n * since 2.4.0\r\n * @type boolean\r\n * @default false\r\n */\r\n inverted: false,\r\n\r\n /**\r\n * Meaningful ONLY when the object is used as clipPath.\r\n * if true, the clipPath will have its top and left relative to canvas, and will\r\n * not be influenced by the object transform. This will make the clipPath relative\r\n * to the canvas, but clipping just a particular object.\r\n * WARNING this is beta, this feature may change or be renamed.\r\n * since 2.4.0\r\n * @type boolean\r\n * @default false\r\n */\r\n absolutePositioned: false,\r\n\r\n /**\r\n * Constructor\r\n * @param {Object} [options] Options object\r\n */\r\n initialize: function(options) {\r\n if (options) {\r\n this.setOptions(options);\r\n }\r\n },\r\n\r\n /**\r\n * Create a the canvas used to keep the cached copy of the object\r\n * @private\r\n */\r\n _createCacheCanvas: function() {\r\n this._cacheProperties = {};\r\n this._cacheCanvas = fabric.util.createCanvasElement();\r\n this._cacheContext = this._cacheCanvas.getContext('2d');\r\n this._updateCacheCanvas();\r\n // if canvas gets created, is empty, so dirty.\r\n this.dirty = true;\r\n },\r\n\r\n /**\r\n * Limit the cache dimensions so that X * Y do not cross fabric.perfLimitSizeTotal\r\n * and each side do not cross fabric.cacheSideLimit\r\n * those numbers are configurable so that you can get as much detail as you want\r\n * making bargain with performances.\r\n * @param {Object} dims\r\n * @param {Object} dims.width width of canvas\r\n * @param {Object} dims.height height of canvas\r\n * @param {Object} dims.zoomX zoomX zoom value to unscale the canvas before drawing cache\r\n * @param {Object} dims.zoomY zoomY zoom value to unscale the canvas before drawing cache\r\n * @return {Object}.width width of canvas\r\n * @return {Object}.height height of canvas\r\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\r\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\r\n */\r\n _limitCacheSize: function(dims) {\r\n var perfLimitSizeTotal = fabric.perfLimitSizeTotal,\r\n width = dims.width, height = dims.height,\r\n max = fabric.maxCacheSideLimit, min = fabric.minCacheSideLimit;\r\n if (width <= max && height <= max && width * height <= perfLimitSizeTotal) {\r\n if (width < min) {\r\n dims.width = min;\r\n }\r\n if (height < min) {\r\n dims.height = min;\r\n }\r\n return dims;\r\n }\r\n var ar = width / height, limitedDims = fabric.util.limitDimsByArea(ar, perfLimitSizeTotal),\r\n capValue = fabric.util.capValue,\r\n x = capValue(min, limitedDims.x, max),\r\n y = capValue(min, limitedDims.y, max);\r\n if (width > x) {\r\n dims.zoomX /= width / x;\r\n dims.width = x;\r\n dims.capped = true;\r\n }\r\n if (height > y) {\r\n dims.zoomY /= height / y;\r\n dims.height = y;\r\n dims.capped = true;\r\n }\r\n return dims;\r\n },\r\n\r\n /**\r\n * Return the dimension and the zoom level needed to create a cache canvas\r\n * big enough to host the object to be cached.\r\n * @private\r\n * @return {Object}.x width of object to be cached\r\n * @return {Object}.y height of object to be cached\r\n * @return {Object}.width width of canvas\r\n * @return {Object}.height height of canvas\r\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\r\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\r\n */\r\n _getCacheCanvasDimensions: function() {\r\n var objectScale = this.getTotalObjectScaling(),\r\n // caculate dimensions without skewing\r\n dim = this._getTransformedDimensions(0, 0),\r\n neededX = dim.x * objectScale.scaleX / this.scaleX,\r\n neededY = dim.y * objectScale.scaleY / this.scaleY;\r\n return {\r\n // for sure this ALIASING_LIMIT is slightly creating problem\r\n // in situation in which the cache canvas gets an upper limit\r\n // also objectScale contains already scaleX and scaleY\r\n width: neededX + ALIASING_LIMIT,\r\n height: neededY + ALIASING_LIMIT,\r\n zoomX: objectScale.scaleX,\r\n zoomY: objectScale.scaleY,\r\n x: neededX,\r\n y: neededY\r\n };\r\n },\r\n\r\n /**\r\n * Update width and height of the canvas for cache\r\n * returns true or false if canvas needed resize.\r\n * @private\r\n * @return {Boolean} true if the canvas has been resized\r\n */\r\n _updateCacheCanvas: function() {\r\n var targetCanvas = this.canvas;\r\n if (this.noScaleCache && targetCanvas && targetCanvas._currentTransform) {\r\n var target = targetCanvas._currentTransform.target,\r\n action = targetCanvas._currentTransform.action;\r\n if (this === target && action.slice && action.slice(0, 5) === 'scale') {\r\n return false;\r\n }\r\n }\r\n var canvas = this._cacheCanvas,\r\n dims = this._limitCacheSize(this._getCacheCanvasDimensions()),\r\n minCacheSize = fabric.minCacheSideLimit,\r\n width = dims.width, height = dims.height, drawingWidth, drawingHeight,\r\n zoomX = dims.zoomX, zoomY = dims.zoomY,\r\n dimensionsChanged = width !== this.cacheWidth || height !== this.cacheHeight,\r\n zoomChanged = this.zoomX !== zoomX || this.zoomY !== zoomY,\r\n shouldRedraw = dimensionsChanged || zoomChanged,\r\n additionalWidth = 0, additionalHeight = 0, shouldResizeCanvas = false;\r\n if (dimensionsChanged) {\r\n var canvasWidth = this._cacheCanvas.width,\r\n canvasHeight = this._cacheCanvas.height,\r\n sizeGrowing = width > canvasWidth || height > canvasHeight,\r\n sizeShrinking = (width < canvasWidth * 0.9 || height < canvasHeight * 0.9) &&\r\n canvasWidth > minCacheSize && canvasHeight > minCacheSize;\r\n shouldResizeCanvas = sizeGrowing || sizeShrinking;\r\n if (sizeGrowing && !dims.capped && (width > minCacheSize || height > minCacheSize)) {\r\n additionalWidth = width * 0.1;\r\n additionalHeight = height * 0.1;\r\n }\r\n }\r\n if (this instanceof fabric.Text && this.path) {\r\n shouldRedraw = true;\r\n shouldResizeCanvas = true;\r\n additionalWidth += this.getHeightOfLine(0) * this.zoomX;\r\n additionalHeight += this.getHeightOfLine(0) * this.zoomY;\r\n }\r\n if (shouldRedraw) {\r\n if (shouldResizeCanvas) {\r\n canvas.width = Math.ceil(width + additionalWidth);\r\n canvas.height = Math.ceil(height + additionalHeight);\r\n }\r\n else {\r\n this._cacheContext.setTransform(1, 0, 0, 1, 0, 0);\r\n this._cacheContext.clearRect(0, 0, canvas.width, canvas.height);\r\n }\r\n drawingWidth = dims.x / 2;\r\n drawingHeight = dims.y / 2;\r\n this.cacheTranslationX = Math.round(canvas.width / 2 - drawingWidth) + drawingWidth;\r\n this.cacheTranslationY = Math.round(canvas.height / 2 - drawingHeight) + drawingHeight;\r\n this.cacheWidth = width;\r\n this.cacheHeight = height;\r\n this._cacheContext.translate(this.cacheTranslationX, this.cacheTranslationY);\r\n this._cacheContext.scale(zoomX, zoomY);\r\n this.zoomX = zoomX;\r\n this.zoomY = zoomY;\r\n return true;\r\n }\r\n return false;\r\n },\r\n\r\n /**\r\n * Sets object's properties from options\r\n * @param {Object} [options] Options object\r\n */\r\n setOptions: function(options) {\r\n this._setOptions(options);\r\n this._initGradient(options.fill, 'fill');\r\n this._initGradient(options.stroke, 'stroke');\r\n this._initPattern(options.fill, 'fill');\r\n this._initPattern(options.stroke, 'stroke');\r\n },\r\n\r\n /**\r\n * Transforms context when rendering an object\r\n * @param {CanvasRenderingContext2D} ctx Context\r\n */\r\n transform: function(ctx) {\r\n var needFullTransform = (this.group && !this.group._transformDone) ||\r\n (this.group && this.canvas && ctx === this.canvas.contextTop);\r\n var m = this.calcTransformMatrix(!needFullTransform);\r\n ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\r\n },\r\n\r\n /**\r\n * Returns an object representation of an instance\r\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\r\n * @return {Object} Object representation of an instance\r\n */\r\n toObject: function(propertiesToInclude) {\r\n var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS,\r\n\r\n object = {\r\n type: this.type,\r\n version: fabric.version,\r\n originX: this.originX,\r\n originY: this.originY,\r\n left: toFixed(this.left, NUM_FRACTION_DIGITS),\r\n top: toFixed(this.top, NUM_FRACTION_DIGITS),\r\n width: toFixed(this.width, NUM_FRACTION_DIGITS),\r\n height: toFixed(this.height, NUM_FRACTION_DIGITS),\r\n fill: (this.fill && this.fill.toObject) ? this.fill.toObject() : this.fill,\r\n stroke: (this.stroke && this.stroke.toObject) ? this.stroke.toObject() : this.stroke,\r\n strokeWidth: toFixed(this.strokeWidth, NUM_FRACTION_DIGITS),\r\n strokeDashArray: this.strokeDashArray ? this.strokeDashArray.concat() : this.strokeDashArray,\r\n strokeLineCap: this.strokeLineCap,\r\n strokeDashOffset: this.strokeDashOffset,\r\n strokeLineJoin: this.strokeLineJoin,\r\n strokeUniform: this.strokeUniform,\r\n strokeMiterLimit: toFixed(this.strokeMiterLimit, NUM_FRACTION_DIGITS),\r\n scaleX: toFixed(this.scaleX, NUM_FRACTION_DIGITS),\r\n scaleY: toFixed(this.scaleY, NUM_FRACTION_DIGITS),\r\n angle: toFixed(this.angle, NUM_FRACTION_DIGITS),\r\n flipX: this.flipX,\r\n flipY: this.flipY,\r\n opacity: toFixed(this.opacity, NUM_FRACTION_DIGITS),\r\n shadow: (this.shadow && this.shadow.toObject) ? this.shadow.toObject() : this.shadow,\r\n visible: this.visible,\r\n backgroundColor: this.backgroundColor,\r\n fillRule: this.fillRule,\r\n paintFirst: this.paintFirst,\r\n globalCompositeOperation: this.globalCompositeOperation,\r\n skewX: toFixed(this.skewX, NUM_FRACTION_DIGITS),\r\n skewY: toFixed(this.skewY, NUM_FRACTION_DIGITS),\r\n };\r\n\r\n if (this.clipPath && !this.clipPath.excludeFromExport) {\r\n object.clipPath = this.clipPath.toObject(propertiesToInclude);\r\n object.clipPath.inverted = this.clipPath.inverted;\r\n object.clipPath.absolutePositioned = this.clipPath.absolutePositioned;\r\n }\r\n\r\n fabric.util.populateWithProperties(this, object, propertiesToInclude);\r\n if (!this.includeDefaultValues) {\r\n object = this._removeDefaultValues(object);\r\n }\r\n\r\n return object;\r\n },\r\n\r\n /**\r\n * Returns (dataless) object representation of an instance\r\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\r\n * @return {Object} Object representation of an instance\r\n */\r\n toDatalessObject: function(propertiesToInclude) {\r\n // will be overwritten by subclasses\r\n return this.toObject(propertiesToInclude);\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {Object} object\r\n */\r\n _removeDefaultValues: function(object) {\r\n var prototype = fabric.util.getKlass(object.type).prototype,\r\n stateProperties = prototype.stateProperties;\r\n stateProperties.forEach(function(prop) {\r\n if (prop === 'left' || prop === 'top') {\r\n return;\r\n }\r\n if (object[prop] === prototype[prop]) {\r\n delete object[prop];\r\n }\r\n // basically a check for [] === []\r\n if (Array.isArray(object[prop]) && Array.isArray(prototype[prop])\r\n && object[prop].length === 0 && prototype[prop].length === 0) {\r\n delete object[prop];\r\n }\r\n });\r\n\r\n return object;\r\n },\r\n\r\n /**\r\n * Returns a string representation of an instance\r\n * @return {String}\r\n */\r\n toString: function() {\r\n return '#';\r\n },\r\n\r\n /**\r\n * Return the object scale factor counting also the group scaling\r\n * @return {Object} object with scaleX and scaleY properties\r\n */\r\n getObjectScaling: function() {\r\n // if the object is a top level one, on the canvas, we go for simple aritmetic\r\n // otherwise the complex method with angles will return approximations and decimals\r\n // and will likely kill the cache when not needed\r\n // https://github.com/fabricjs/fabric.js/issues/7157\r\n if (!this.group) {\r\n return {\r\n scaleX: this.scaleX,\r\n scaleY: this.scaleY,\r\n };\r\n }\r\n // if we are inside a group total zoom calculation is complex, we defer to generic matrices\r\n var options = fabric.util.qrDecompose(this.calcTransformMatrix());\r\n return { scaleX: Math.abs(options.scaleX), scaleY: Math.abs(options.scaleY) };\r\n },\r\n\r\n /**\r\n * Return the object scale factor counting also the group scaling, zoom and retina\r\n * @return {Object} object with scaleX and scaleY properties\r\n */\r\n getTotalObjectScaling: function() {\r\n var scale = this.getObjectScaling(), scaleX = scale.scaleX, scaleY = scale.scaleY;\r\n if (this.canvas) {\r\n var zoom = this.canvas.getZoom();\r\n var retina = this.canvas.getRetinaScaling();\r\n scaleX *= zoom * retina;\r\n scaleY *= zoom * retina;\r\n }\r\n return { scaleX: scaleX, scaleY: scaleY };\r\n },\r\n\r\n /**\r\n * Return the object opacity counting also the group property\r\n * @return {Number}\r\n */\r\n getObjectOpacity: function() {\r\n var opacity = this.opacity;\r\n if (this.group) {\r\n opacity *= this.group.getObjectOpacity();\r\n }\r\n return opacity;\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {String} key\r\n * @param {*} value\r\n * @return {fabric.Object} thisArg\r\n */\r\n _set: function(key, value) {\r\n var shouldConstrainValue = (key === 'scaleX' || key === 'scaleY'),\r\n isChanged = this[key] !== value, groupNeedsUpdate = false;\r\n\r\n if (shouldConstrainValue) {\r\n value = this._constrainScale(value);\r\n }\r\n if (key === 'scaleX' && value < 0) {\r\n this.flipX = !this.flipX;\r\n value *= -1;\r\n }\r\n else if (key === 'scaleY' && value < 0) {\r\n this.flipY = !this.flipY;\r\n value *= -1;\r\n }\r\n else if (key === 'shadow' && value && !(value instanceof fabric.Shadow)) {\r\n value = new fabric.Shadow(value);\r\n }\r\n else if (key === 'dirty' && this.group) {\r\n this.group.set('dirty', value);\r\n }\r\n\r\n this[key] = value;\r\n\r\n if (isChanged) {\r\n groupNeedsUpdate = this.group && this.group.isOnACache();\r\n if (this.cacheProperties.indexOf(key) > -1) {\r\n this.dirty = true;\r\n groupNeedsUpdate && this.group.set('dirty', true);\r\n }\r\n else if (groupNeedsUpdate && this.stateProperties.indexOf(key) > -1) {\r\n this.group.set('dirty', true);\r\n }\r\n }\r\n return this;\r\n },\r\n\r\n /**\r\n * This callback function is called by the parent group of an object every\r\n * time a non-delegated property changes on the group. It is passed the key\r\n * and value as parameters. Not adding in this function's signature to avoid\r\n * Travis build error about unused variables.\r\n */\r\n setOnGroup: function() {\r\n // implemented by sub-classes, as needed.\r\n },\r\n\r\n /**\r\n * Retrieves viewportTransform from Object's canvas if possible\r\n * @method getViewportTransform\r\n * @memberOf fabric.Object.prototype\r\n * @return {Array}\r\n */\r\n getViewportTransform: function() {\r\n if (this.canvas && this.canvas.viewportTransform) {\r\n return this.canvas.viewportTransform;\r\n }\r\n return fabric.iMatrix.concat();\r\n },\r\n\r\n /*\r\n * @private\r\n * return if the object would be visible in rendering\r\n * @memberOf fabric.Object.prototype\r\n * @return {Boolean}\r\n */\r\n isNotVisible: function() {\r\n return this.opacity === 0 ||\r\n (!this.width && !this.height && this.strokeWidth === 0) ||\r\n !this.visible;\r\n },\r\n\r\n /**\r\n * Renders an object on a specified context\r\n * @param {CanvasRenderingContext2D} ctx Context to render on\r\n */\r\n render: function(ctx) {\r\n // do not render if width/height are zeros or object is not visible\r\n if (this.isNotVisible()) {\r\n return;\r\n }\r\n if (this.canvas && this.canvas.skipOffscreen && !this.group && !this.isOnScreen()) {\r\n return;\r\n }\r\n ctx.save();\r\n this._setupCompositeOperation(ctx);\r\n this.drawSelectionBackground(ctx);\r\n this.transform(ctx);\r\n this._setOpacity(ctx);\r\n this._setShadow(ctx, this);\r\n if (this.shouldCache()) {\r\n this.renderCache();\r\n this.drawCacheOnCanvas(ctx);\r\n }\r\n else {\r\n this._removeCacheCanvas();\r\n this.dirty = false;\r\n this.drawObject(ctx);\r\n if (this.objectCaching && this.statefullCache) {\r\n this.saveState({ propertySet: 'cacheProperties' });\r\n }\r\n }\r\n ctx.restore();\r\n },\r\n\r\n renderCache: function(options) {\r\n options = options || {};\r\n if (!this._cacheCanvas || !this._cacheContext) {\r\n this._createCacheCanvas();\r\n }\r\n if (this.isCacheDirty()) {\r\n this.statefullCache && this.saveState({ propertySet: 'cacheProperties' });\r\n this.drawObject(this._cacheContext, options.forClipping);\r\n this.dirty = false;\r\n }\r\n },\r\n\r\n /**\r\n * Remove cacheCanvas and its dimensions from the objects\r\n */\r\n _removeCacheCanvas: function() {\r\n this._cacheCanvas = null;\r\n this._cacheContext = null;\r\n this.cacheWidth = 0;\r\n this.cacheHeight = 0;\r\n },\r\n\r\n /**\r\n * return true if the object will draw a stroke\r\n * Does not consider text styles. This is just a shortcut used at rendering time\r\n * We want it to be an approximation and be fast.\r\n * wrote to avoid extra caching, it has to return true when stroke happens,\r\n * can guess when it will not happen at 100% chance, does not matter if it misses\r\n * some use case where the stroke is invisible.\r\n * @since 3.0.0\r\n * @returns Boolean\r\n */\r\n hasStroke: function() {\r\n return this.stroke && this.stroke !== 'transparent' && this.strokeWidth !== 0;\r\n },\r\n\r\n /**\r\n * return true if the object will draw a fill\r\n * Does not consider text styles. This is just a shortcut used at rendering time\r\n * We want it to be an approximation and be fast.\r\n * wrote to avoid extra caching, it has to return true when fill happens,\r\n * can guess when it will not happen at 100% chance, does not matter if it misses\r\n * some use case where the fill is invisible.\r\n * @since 3.0.0\r\n * @returns Boolean\r\n */\r\n hasFill: function() {\r\n return this.fill && this.fill !== 'transparent';\r\n },\r\n\r\n /**\r\n * When set to `true`, force the object to have its own cache, even if it is inside a group\r\n * it may be needed when your object behave in a particular way on the cache and always needs\r\n * its own isolated canvas to render correctly.\r\n * Created to be overridden\r\n * since 1.7.12\r\n * @returns Boolean\r\n */\r\n needsItsOwnCache: function() {\r\n if (this.paintFirst === 'stroke' &&\r\n this.hasFill() && this.hasStroke() && typeof this.shadow === 'object') {\r\n return true;\r\n }\r\n if (this.clipPath) {\r\n return true;\r\n }\r\n return false;\r\n },\r\n\r\n /**\r\n * Decide if the object should cache or not. Create its own cache level\r\n * objectCaching is a global flag, wins over everything\r\n * needsItsOwnCache should be used when the object drawing method requires\r\n * a cache step. None of the fabric classes requires it.\r\n * Generally you do not cache objects in groups because the group outside is cached.\r\n * Read as: cache if is needed, or if the feature is enabled but we are not already caching.\r\n * @return {Boolean}\r\n */\r\n shouldCache: function() {\r\n this.ownCaching = this.needsItsOwnCache() || (\r\n this.objectCaching &&\r\n (!this.group || !this.group.isOnACache())\r\n );\r\n return this.ownCaching;\r\n },\r\n\r\n /**\r\n * Check if this object or a child object will cast a shadow\r\n * used by Group.shouldCache to know if child has a shadow recursively\r\n * @return {Boolean}\r\n */\r\n willDrawShadow: function() {\r\n return !!this.shadow && (this.shadow.offsetX !== 0 || this.shadow.offsetY !== 0);\r\n },\r\n\r\n /**\r\n * Execute the drawing operation for an object clipPath\r\n * @param {CanvasRenderingContext2D} ctx Context to render on\r\n * @param {fabric.Object} clipPath\r\n */\r\n drawClipPathOnCache: function(ctx, clipPath) {\r\n ctx.save();\r\n // DEBUG: uncomment this line, comment the following\r\n // ctx.globalAlpha = 0.4\r\n if (clipPath.inverted) {\r\n ctx.globalCompositeOperation = 'destination-out';\r\n }\r\n else {\r\n ctx.globalCompositeOperation = 'destination-in';\r\n }\r\n //ctx.scale(1 / 2, 1 / 2);\r\n if (clipPath.absolutePositioned) {\r\n var m = fabric.util.invertTransform(this.calcTransformMatrix());\r\n ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\r\n }\r\n clipPath.transform(ctx);\r\n ctx.scale(1 / clipPath.zoomX, 1 / clipPath.zoomY);\r\n ctx.drawImage(clipPath._cacheCanvas, -clipPath.cacheTranslationX, -clipPath.cacheTranslationY);\r\n ctx.restore();\r\n },\r\n\r\n /**\r\n * Execute the drawing operation for an object on a specified context\r\n * @param {CanvasRenderingContext2D} ctx Context to render on\r\n */\r\n drawObject: function(ctx, forClipping) {\r\n var originalFill = this.fill, originalStroke = this.stroke;\r\n if (forClipping) {\r\n this.fill = 'black';\r\n this.stroke = '';\r\n this._setClippingProperties(ctx);\r\n }\r\n else {\r\n this._renderBackground(ctx);\r\n }\r\n this._render(ctx);\r\n this._drawClipPath(ctx, this.clipPath);\r\n this.fill = originalFill;\r\n this.stroke = originalStroke;\r\n },\r\n\r\n /**\r\n * Prepare clipPath state and cache and draw it on instance's cache\r\n * @param {CanvasRenderingContext2D} ctx\r\n * @param {fabric.Object} clipPath\r\n */\r\n _drawClipPath: function (ctx, clipPath) {\r\n if (!clipPath) { return; }\r\n // needed to setup a couple of variables\r\n // path canvas gets overridden with this one.\r\n // TODO find a better solution?\r\n clipPath.canvas = this.canvas;\r\n clipPath.shouldCache();\r\n clipPath._transformDone = true;\r\n clipPath.renderCache({ forClipping: true });\r\n this.drawClipPathOnCache(ctx, clipPath);\r\n },\r\n\r\n /**\r\n * Paint the cached copy of the object on the target context.\r\n * @param {CanvasRenderingContext2D} ctx Context to render on\r\n */\r\n drawCacheOnCanvas: function(ctx) {\r\n ctx.scale(1 / this.zoomX, 1 / this.zoomY);\r\n ctx.drawImage(this._cacheCanvas, -this.cacheTranslationX, -this.cacheTranslationY);\r\n },\r\n\r\n /**\r\n * Check if cache is dirty\r\n * @param {Boolean} skipCanvas skip canvas checks because this object is painted\r\n * on parent canvas.\r\n */\r\n isCacheDirty: function(skipCanvas) {\r\n if (this.isNotVisible()) {\r\n return false;\r\n }\r\n if (this._cacheCanvas && this._cacheContext && !skipCanvas && this._updateCacheCanvas()) {\r\n // in this case the context is already cleared.\r\n return true;\r\n }\r\n else {\r\n if (this.dirty ||\r\n (this.clipPath && this.clipPath.absolutePositioned) ||\r\n (this.statefullCache && this.hasStateChanged('cacheProperties'))\r\n ) {\r\n if (this._cacheCanvas && this._cacheContext && !skipCanvas) {\r\n var width = this.cacheWidth / this.zoomX;\r\n var height = this.cacheHeight / this.zoomY;\r\n this._cacheContext.clearRect(-width / 2, -height / 2, width, height);\r\n }\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n\r\n /**\r\n * Draws a background for the object big as its untransformed dimensions\r\n * @private\r\n * @param {CanvasRenderingContext2D} ctx Context to render on\r\n */\r\n _renderBackground: function(ctx) {\r\n if (!this.backgroundColor) {\r\n return;\r\n }\r\n var dim = this._getNonTransformedDimensions();\r\n ctx.fillStyle = this.backgroundColor;\r\n\r\n ctx.fillRect(\r\n -dim.x / 2,\r\n -dim.y / 2,\r\n dim.x,\r\n dim.y\r\n );\r\n // if there is background color no other shadows\r\n // should be casted\r\n this._removeShadow(ctx);\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {CanvasRenderingContext2D} ctx Context to render on\r\n */\r\n _setOpacity: function(ctx) {\r\n if (this.group && !this.group._transformDone) {\r\n ctx.globalAlpha = this.getObjectOpacity();\r\n }\r\n else {\r\n ctx.globalAlpha *= this.opacity;\r\n }\r\n },\r\n\r\n _setStrokeStyles: function(ctx, decl) {\r\n var stroke = decl.stroke;\r\n if (stroke) {\r\n ctx.lineWidth = decl.strokeWidth;\r\n ctx.lineCap = decl.strokeLineCap;\r\n ctx.lineDashOffset = decl.strokeDashOffset;\r\n ctx.lineJoin = decl.strokeLineJoin;\r\n ctx.miterLimit = decl.strokeMiterLimit;\r\n if (stroke.toLive) {\r\n if (stroke.gradientUnits === 'percentage' || stroke.gradientTransform || stroke.patternTransform) {\r\n // need to transform gradient in a pattern.\r\n // this is a slow process. If you are hitting this codepath, and the object\r\n // is not using caching, you should consider switching it on.\r\n // we need a canvas as big as the current object caching canvas.\r\n this._applyPatternForTransformedGradient(ctx, stroke);\r\n }\r\n else {\r\n // is a simple gradient or pattern\r\n ctx.strokeStyle = stroke.toLive(ctx, this);\r\n this._applyPatternGradientTransform(ctx, stroke);\r\n }\r\n }\r\n else {\r\n // is a color\r\n ctx.strokeStyle = decl.stroke;\r\n }\r\n }\r\n },\r\n\r\n _setFillStyles: function(ctx, decl) {\r\n var fill = decl.fill;\r\n if (fill) {\r\n if (fill.toLive) {\r\n ctx.fillStyle = fill.toLive(ctx, this);\r\n this._applyPatternGradientTransform(ctx, decl.fill);\r\n }\r\n else {\r\n ctx.fillStyle = fill;\r\n }\r\n }\r\n },\r\n\r\n _setClippingProperties: function(ctx) {\r\n ctx.globalAlpha = 1;\r\n ctx.strokeStyle = 'transparent';\r\n ctx.fillStyle = '#000000';\r\n },\r\n\r\n /**\r\n * @private\r\n * Sets line dash\r\n * @param {CanvasRenderingContext2D} ctx Context to set the dash line on\r\n * @param {Array} dashArray array representing dashes\r\n */\r\n _setLineDash: function(ctx, dashArray) {\r\n if (!dashArray || dashArray.length === 0) {\r\n return;\r\n }\r\n // Spec requires the concatenation of two copies the dash list when the number of elements is odd\r\n if (1 & dashArray.length) {\r\n dashArray.push.apply(dashArray, dashArray);\r\n }\r\n ctx.setLineDash(dashArray);\r\n },\r\n\r\n /**\r\n * Renders controls and borders for the object\r\n * the context here is not transformed\r\n * @param {CanvasRenderingContext2D} ctx Context to render on\r\n * @param {Object} [styleOverride] properties to override the object style\r\n */\r\n _renderControls: function(ctx, styleOverride) {\r\n var vpt = this.getViewportTransform(),\r\n matrix = this.calcTransformMatrix(),\r\n options, drawBorders, drawControls;\r\n styleOverride = styleOverride || { };\r\n drawBorders = typeof styleOverride.hasBorders !== 'undefined' ? styleOverride.hasBorders : this.hasBorders;\r\n drawControls = typeof styleOverride.hasControls !== 'undefined' ? styleOverride.hasControls : this.hasControls;\r\n matrix = fabric.util.multiplyTransformMatrices(vpt, matrix);\r\n options = fabric.util.qrDecompose(matrix);\r\n ctx.save();\r\n ctx.translate(options.translateX, options.translateY);\r\n ctx.lineWidth = 1 * this.borderScaleFactor;\r\n if (!this.group) {\r\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\r\n }\r\n if (this.flipX) {\r\n options.angle -= 180;\r\n }\r\n ctx.rotate(degreesToRadians(this.group ? options.angle : this.angle));\r\n if (styleOverride.forActiveSelection || this.group) {\r\n drawBorders && this.drawBordersInGroup(ctx, options, styleOverride);\r\n }\r\n else {\r\n drawBorders && this.drawBorders(ctx, styleOverride);\r\n }\r\n drawControls && this.drawControls(ctx, styleOverride);\r\n ctx.restore();\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {CanvasRenderingContext2D} ctx Context to render on\r\n */\r\n _setShadow: function(ctx) {\r\n if (!this.shadow) {\r\n return;\r\n }\r\n\r\n var shadow = this.shadow, canvas = this.canvas, scaling,\r\n multX = (canvas && canvas.viewportTransform[0]) || 1,\r\n multY = (canvas && canvas.viewportTransform[3]) || 1;\r\n if (shadow.nonScaling) {\r\n scaling = { scaleX: 1, scaleY: 1 };\r\n }\r\n else {\r\n scaling = this.getObjectScaling();\r\n }\r\n if (canvas && canvas._isRetinaScaling()) {\r\n multX *= fabric.devicePixelRatio;\r\n multY *= fabric.devicePixelRatio;\r\n }\r\n ctx.shadowColor = shadow.color;\r\n ctx.shadowBlur = shadow.blur * fabric.browserShadowBlurConstant *\r\n (multX + multY) * (scaling.scaleX + scaling.scaleY) / 4;\r\n ctx.shadowOffsetX = shadow.offsetX * multX * scaling.scaleX;\r\n ctx.shadowOffsetY = shadow.offsetY * multY * scaling.scaleY;\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {CanvasRenderingContext2D} ctx Context to render on\r\n */\r\n _removeShadow: function(ctx) {\r\n if (!this.shadow) {\r\n return;\r\n }\r\n\r\n ctx.shadowColor = '';\r\n ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0;\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {CanvasRenderingContext2D} ctx Context to render on\r\n * @param {Object} filler fabric.Pattern or fabric.Gradient\r\n * @return {Object} offset.offsetX offset for text rendering\r\n * @return {Object} offset.offsetY offset for text rendering\r\n */\r\n _applyPatternGradientTransform: function(ctx, filler) {\r\n if (!filler || !filler.toLive) {\r\n return { offsetX: 0, offsetY: 0 };\r\n }\r\n var t = filler.gradientTransform || filler.patternTransform;\r\n var offsetX = -this.width / 2 + filler.offsetX || 0,\r\n offsetY = -this.height / 2 + filler.offsetY || 0;\r\n\r\n if (filler.gradientUnits === 'percentage') {\r\n ctx.transform(this.width, 0, 0, this.height, offsetX, offsetY);\r\n }\r\n else {\r\n ctx.transform(1, 0, 0, 1, offsetX, offsetY);\r\n }\r\n if (t) {\r\n ctx.transform(t[0], t[1], t[2], t[3], t[4], t[5]);\r\n }\r\n return { offsetX: offsetX, offsetY: offsetY };\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {CanvasRenderingContext2D} ctx Context to render on\r\n */\r\n _renderPaintInOrder: function(ctx) {\r\n if (this.paintFirst === 'stroke') {\r\n this._renderStroke(ctx);\r\n this._renderFill(ctx);\r\n }\r\n else {\r\n this._renderFill(ctx);\r\n this._renderStroke(ctx);\r\n }\r\n },\r\n\r\n /**\r\n * @private\r\n * function that actually render something on the context.\r\n * empty here to allow Obects to work on tests to benchmark fabric functionalites\r\n * not related to rendering\r\n * @param {CanvasRenderingContext2D} ctx Context to render on\r\n */\r\n _render: function(/* ctx */) {\r\n\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {CanvasRenderingContext2D} ctx Context to render on\r\n */\r\n _renderFill: function(ctx) {\r\n if (!this.fill) {\r\n return;\r\n }\r\n\r\n ctx.save();\r\n this._setFillStyles(ctx, this);\r\n if (this.fillRule === 'evenodd') {\r\n ctx.fill('evenodd');\r\n }\r\n else {\r\n ctx.fill();\r\n }\r\n ctx.restore();\r\n },\r\n\r\n /**\r\n * @private\r\n * @param {CanvasRenderingContext2D} ctx Context to render on\r\n */\r\n _renderStroke: function(ctx) {\r\n if (!this.stroke || this.strokeWidth === 0) {\r\n return;\r\n }\r\n\r\n if (this.shadow && !this.shadow.affectStroke) {\r\n this._removeShadow(ctx);\r\n }\r\n\r\n ctx.save();\r\n if (this.strokeUniform && this.group) {\r\n var scaling = this.getObjectScaling();\r\n ctx.scale(1 / scaling.scaleX, 1 / scaling.scaleY);\r\n }\r\n else if (this.strokeUniform) {\r\n ctx.scale(1 / this.scaleX, 1 / this.scaleY);\r\n }\r\n this._setLineDash(ctx, this.strokeDashArray);\r\n this._setStrokeStyles(ctx, this);\r\n ctx.stroke();\r\n ctx.restore();\r\n },\r\n\r\n /**\r\n * This function try to patch the missing gradientTransform on canvas gradients.\r\n * transforming a context to transform the gradient, is going to transform the stroke too.\r\n * we want to transform the gradient but not the stroke operation, so we create\r\n * a transformed gradient on a pattern and then we use the pattern instead of the gradient.\r\n * this method has drwabacks: is slow, is in low resolution, needs a patch for when the size\r\n * is limited.\r\n * @private\r\n * @param {CanvasRenderingContext2D} ctx Context to render on\r\n * @param {fabric.Gradient} filler a fabric gradient instance\r\n */\r\n _applyPatternForTransformedGradient: function(ctx, filler) {\r\n var dims = this._limitCacheSize(this._getCacheCanvasDimensions()),\r\n pCanvas = fabric.util.createCanvasElement(), pCtx, retinaScaling = this.canvas.getRetinaScaling(),\r\n width = dims.x / this.scaleX / retinaScaling, height = dims.y / this.scaleY / retinaScaling;\r\n pCanvas.width = width;\r\n pCanvas.height = height;\r\n pCtx = pCanvas.getContext('2d');\r\n pCtx.beginPath(); pCtx.moveTo(0, 0); pCtx.lineTo(width, 0); pCtx.lineTo(width, height);\r\n pCtx.lineTo(0, height); pCtx.closePath();\r\n pCtx.translate(width / 2, height / 2);\r\n pCtx.scale(\r\n dims.zoomX / this.scaleX / retinaScaling,\r\n dims.zoomY / this.scaleY / retinaScaling\r\n );\r\n this._applyPatternGradientTransform(pCtx, filler);\r\n pCtx.fillStyle = filler.toLive(ctx);\r\n pCtx.fill();\r\n ctx.translate(-this.width / 2 - this.strokeWidth / 2, -this.height / 2 - this.strokeWidth / 2);\r\n ctx.scale(\r\n retinaScaling * this.scaleX / dims.zoomX,\r\n retinaScaling * this.scaleY / dims.zoomY\r\n );\r\n ctx.strokeStyle = pCtx.createPattern(pCanvas, 'no-repeat');\r\n },\r\n\r\n /**\r\n * This function is an helper for svg import. it returns the center of the object in the svg\r\n * untransformed coordinates\r\n * @private\r\n * @return {Object} center point from element coordinates\r\n */\r\n _findCenterFromElement: function() {\r\n return { x: this.left + this.width / 2, y: this.top + this.height / 2 };\r\n },\r\n\r\n /**\r\n * This function is an helper for svg import. it decompose the transformMatrix\r\n * and assign properties to object.\r\n * untransformed coordinates\r\n * @private\r\n * @chainable\r\n */\r\n _assignTransformMatrixProps: function() {\r\n if (this.transformMatrix) {\r\n var options = fabric.util.qrDecompose(this.transformMatrix);\r\n this.flipX = false;\r\n this.flipY = false;\r\n this.set('scaleX', options.scaleX);\r\n this.set('scaleY', options.scaleY);\r\n this.angle = options.angle;\r\n this.skewX = options.skewX;\r\n this.skewY = 0;\r\n }\r\n },\r\n\r\n /**\r\n * This function is an helper for svg import. it removes the transform matrix\r\n * and set to object properties that fabricjs can handle\r\n * @private\r\n * @param {Object} preserveAspectRatioOptions\r\n * @return {thisArg}\r\n */\r\n _removeTransformMatrix: function(preserveAspectRatioOptions) {\r\n var center = this._findCenterFromElement();\r\n if (this.transformMatrix) {\r\n this._assignTransformMatrixProps();\r\n center = fabric.util.transformPoint(center, this.transformMatrix);\r\n }\r\n this.transformMatrix = null;\r\n if (preserveAspectRatioOptions) {\r\n this.scaleX *= preserveAspectRatioOptions.scaleX;\r\n this.scaleY *= preserveAspectRatioOptions.scaleY;\r\n this.cropX = preserveAspectRatioOptions.cropX;\r\n this.cropY = preserveAspectRatioOptions.cropY;\r\n center.x += preserveAspectRatioOptions.offsetLeft;\r\n center.y += preserveAspectRatioOptions.offsetTop;\r\n this.width = preserveAspectRatioOptions.width;\r\n this.height = preserveAspectRatioOptions.height;\r\n }\r\n this.setPositionByOrigin(center, 'center', 'center');\r\n },\r\n\r\n /**\r\n * Clones an instance, using a callback method will work for every object.\r\n * @param {Function} callback Callback is invoked with a clone as a first argument\r\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\r\n */\r\n clone: function(callback, propertiesToInclude) {\r\n var objectForm = this.toObject(propertiesToInclude);\r\n if (this.constructor.fromObject) {\r\n this.constructor.fromObject(objectForm, callback);\r\n }\r\n else {\r\n fabric.Object._fromObject('Object', objectForm, callback);\r\n }\r\n },\r\n\r\n /**\r\n * Creates an instance of fabric.Image out of an object\r\n * makes use of toCanvasElement.\r\n * Once this method was based on toDataUrl and loadImage, so it also had a quality\r\n * and format option. toCanvasElement is faster and produce no loss of quality.\r\n * If you need to get a real Jpeg or Png from an object, using toDataURL is the right way to do it.\r\n * toCanvasElement and then toBlob from the obtained canvas is also a good option.\r\n * This method is sync now, but still support the callback because we did not want to break.\r\n * When fabricJS 5.0 will be planned, this will probably be changed to not have a callback.\r\n * @param {Function} callback callback, invoked with an instance as a first argument\r\n * @param {Object} [options] for clone as image, passed to toDataURL\r\n * @param {Number} [options.multiplier=1] Multiplier to scale by\r\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\r\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\r\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\r\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\r\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\r\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\r\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\r\n * @return {fabric.Object} thisArg\r\n */\r\n cloneAsImage: function(callback, options) {\r\n var canvasEl = this.toCanvasElement(options);\r\n if (callback) {\r\n callback(new fabric.Image(canvasEl));\r\n }\r\n return this;\r\n },\r\n\r\n /**\r\n * Converts an object into a HTMLCanvas element\r\n * @param {Object} options Options object\r\n * @param {Number} [options.multiplier=1] Multiplier to scale by\r\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\r\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\r\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\r\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\r\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\r\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\r\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\r\n * @return {HTMLCanvasElement} Returns DOM element