{"version":3,"file":"X_URL.mjs","sources":["../../../../src/shapes/canvasx/X_URL.ts"],"sourcesContent":["import { TClassProperties } from '../../typedefs';\nimport { classRegistry } from '../../ClassRegistry';\nimport { Shadow } from '../../Shadow';\nimport { Rect } from '../../shapes/Rect';\nimport { FabricImage } from '../Image';\nimport { createFileDefaultControls } from '../../controls/commonControls';\nimport type { FabricObjectProps, SerializedObjectProps } from '../Object/types';\nimport { getFabricDocument } from '../../env';\n\nimport { LoadImageOptions, loadImage } from '../../util/misc/objectEnlive';\n\nimport type { TOptions } from '../../typedefs';\n\nexport type ImageSource =\n  | string\n  | HTMLImageElement\n  | HTMLVideoElement\n  | HTMLCanvasElement;\n\ninterface UniqueImageProps {\n  srcFromAttribute: boolean;\n  minimumScaleTrigger: number;\n  cropX: number;\n  cropY: number;\n  imageSmoothing: boolean;\n  crossOrigin: string | null;\n  url: string;\n}\n\nexport const UrlImageDefaultValues: Partial<TClassProperties<X_URL>> = {\n  minWidth: 20,\n  dynamicMinWidth: 2,\n  lockScalingFlip: true,\n  noScaleCache: false,\n  splitByGrapheme: true,\n  objType: 'X_URL',\n  height: 200,\n  maxHeight: 200,\n  width: 230,\n  maxWidth: 230,\n};\n\nexport interface SerializedImageProps extends SerializedObjectProps {\n  src: string;\n  crossOrigin: string | null;\n  filters: any[];\n  resizeFilter?: any;\n  cropX: number;\n  cropY: number;\n  url: string;\n}\nexport interface UrlImageProps extends FabricObjectProps, UniqueImageProps {}\n\nexport class X_URL<\n  Props extends TOptions<UrlImageProps> = Partial<UrlImageProps>\n> extends FabricImage<Props> {\n  declare minWidth: number;\n\n  /* boardx cusotm function */\n  declare id: string;\n  declare maxHeight: number;\n\n  declare objType: string;\n\n  declare locked: boolean;\n\n  declare whiteboardId: string;\n\n  declare userId: string;\n\n  declare timestamp: Date;\n\n  declare verticalAlign: string;\n\n  declare zIndex: number;\n\n  declare url: string | undefined;\n\n  declare lines: object[];\n\n  declare title: string;\n\n  declare relationship: object[];\n\n  declare description: string;\n\n  public extendPropeties = [\n    'objType',\n    'whiteboardId',\n    'userId',\n    'timestamp',\n    'zIndex',\n    'locked',\n    'verticalAlign',\n    'lines',\n    'id',\n    'zIndex',\n    'relationship',\n    'url',\n    'title',\n  ];\n\n  declare dynamicMinWidth: number;\n\n  /**\n   * Use this boolean property in order to split strings that have no white space concept.\n   * this is a cheap way to help with chinese/japanese\n   * @type Boolean\n   * @since 2.6.0\n   */\n  declare splitByGrapheme: boolean;\n\n  static ownDefaults: Record<string, any> = UrlImageDefaultValues;\n\n  static getDefaults() {\n    return {\n      ...super.getDefaults(),\n      controls: createFileDefaultControls(),\n      ...X_URL.ownDefaults,\n    };\n  }\n\n  //@ts-ignore\n  constructor(element: ImageSource, options: Props) {\n    super(element.toString(), options);\n    this.filters = [];\n\n    this.url = options.url;\n    this.title = options.title;\n    this.description = options.description;\n\n    this.shadow = new Shadow({\n      color: 'rgba(217, 161, 177, 0.54)',\n      offsetX: 1,\n      offsetY: 2,\n      blur: 4,\n      id: 310,\n    });\n\n    (this.clipPath = new Rect({\n      left: 0,\n      top: 0,\n      rx: 8,\n      ry: 8,\n      width: 230,\n      height: 248,\n      fill: '#000000',\n    })),\n      // double click\n      this.InitializeEvent();\n    // this.initDoubleClickSimulation();\n    this.width = 230;\n    this.height = 248;\n  }\n  //   setElement(element: ImageSource, size: Partial<TSize> = {}) {\n  //     this.removeTexture(this.cacheKey);\n  //     this.removeTexture(`${this.cacheKey}_filtered`);\n  //     this._element = element as ImageSource;\n  //     this._originalElement = element as ImageSource;\n  //     this._setWidthHeight(size);\n  //     // element.classList.add(X_URL.CSS_CANVAS);\n  //     if (this.filters.length !== 0) {\n  //         this.applyFilters();\n  //     }\n  //     // resizeFilters work on the already filtered copy.\n  //     // we need to apply resizeFilters AFTER normal filters.\n  //     // applyResizeFilters is run more often than normal filters\n  //     // and is triggered by user interactions rather than dev code\n  //     if (this.resizeFilter) {\n  //       this.applyResizeFilters();\n  //     }\n  //   }\n\n  //   toObject(propertiesToInclude: Array<any>): object {\n  //     return super.toObject(\n  //       [...this.extendPropeties, 'minWidth', 'splitByGrapheme'].concat(\n  //         propertiesToInclude\n  //       )\n  //     );\n  //   }\n  getWidgetMenuList() {\n    if (this.locked) {\n      return ['objectLock'];\n    }\n    return ['more', 'objectLock', 'delete'];\n  }\n  getWidgetMenuLength() {\n    if (this.locked) return 50;\n    return 60;\n  }\n  getContextMenuList() {\n    let menuList;\n    if (this.locked) {\n      menuList = [\n        'Bring forward',\n        'Bring to front',\n        'Send backward',\n        'Send to back',\n      ];\n    } else {\n      menuList = [\n        'Bring forward',\n        'Bring to front',\n        'Send backward',\n        'Send to back',\n        'Duplicate',\n        'Copy',\n        'Paste',\n        'Cut',\n        'Delete',\n      ];\n    }\n\n    if (this.locked) {\n      menuList.push('Unlock');\n    } else {\n      menuList.push('Lock');\n    }\n    return menuList;\n  }\n\n  InitializeEvent = () => {\n    const zoom = this.canvas?.getZoom() || 1;\n    // this.on('mousedblclick', (memo) => {\n    //   const offsetX =\n    //     (memo.e as MouseEvent).offsetX - (this.left - this.width / 2);\n    //   const offsetY =\n    //     (memo.e as MouseEvent).offsetY - (this.top - this.height / 2);\n\n    //   if (\n    //     offsetX < 20 ||\n    //     offsetX > 480 ||\n    //     offsetY < 20 ||\n    //     offsetY > 480 ||\n    //     (offsetY > 64 && offsetY < 446)\n    //   ) {\n    //     getWindow()?.open(this.url, '_blank').focus();\n    //   } else {\n    //     let text = this.title;\n    //     const textarea = document.getElementById('urlTextarea');\n    //     const cvsPosition = document\n    //       .getElementById('canvasContainer')\n    //       ?.getBoundingClientRect();\n    //     let fontSize = 20 * this.scaleX * zoom;\n    //     const left = `${\n    //       cvsPosition.left +\n    //       (this.left - (this.width / 2 - 22) * this.scaleX) * zoom\n    //     }px`;\n    //     let top = `${\n    //       cvsPosition?.top +\n    //       (this.top - (this.height / 2 - 22) * this.scaleY) * zoom\n    //     }px`;\n    //     const newWidth = (this.width - 44) * this.scaleX * zoom;\n    //     const width = `${newWidth}px`;\n    //     let height = `${40 * this.scaleY * zoom}px`;\n    //     const paddingLeft = `${10 * this.scaleY * zoom}px`;\n    //     let lineHeight = '40px';\n    //     textarea.data('type', 'title');\n    //     if (offsetY >= 446) {\n    //       text = this.description;\n    //       fontSize = 15 * this.scaleX * zoom;\n    //       top = `${\n    //         cvsPosition.top +\n    //         (this.top + (this.height / 2 - 52) * this.scaleY) * zoom\n    //       }px`;\n    //       height = `${30 * this.scaleY * zoom}px`;\n    //       lineHeight = '30px';\n    //       textarea.data('type', 'description');\n    //     }\n    //     textarea\n    //       .data('widget', this)\n    //       .css('left', left)\n    //       .css('top', top)\n    //       .css('padding-left', paddingLeft)\n    //       .css('width', width)\n    //       .css('height', height)\n    //       .css('background-color', 'white')\n    //       .css('font-size', `${fontSize}px`)\n    //       .css('font-family', 'Arial')\n    //       .css('line-height', lineHeight)\n    //       .val(text)\n    //       .show()\n    //       .focus();\n    //   }\n    // });\n    // this.on('removed', this.removedListener);\n  };\n  //   removedListener() {\n  //     if (this.loading) {\n  //       this.loading.remove();\n  //       this.loading = null;\n  //     }\n  //   }\n  //   initDoubleClickSimulation() {\n  //     this.__lastClickTime = +new Date();\n  //     this.on('touchstart', this.onMouseDown.bind(this));\n  //     this.on('mousedown', this.onMouseDown.bind(this));\n  //   }\n  //   onMouseDown(options) {\n  //     this.__newClickTime = +new Date();\n  //     if (this.__newClickTime - this.__lastClickTime < 500) {\n  //       this.lockMovementX = true;\n  //       this.lockMovementY = true;\n  //       this.fire('dblclick', options);\n  //       this._stopEvent(options.e);\n  //     } else {\n  //       this.lockMovementX = false;\n  //       this.lockMovementY = false;\n  //     }\n\n  //     this.__lastClickTime = this.__newClickTime;\n  //   }\n  _stopEvent(e: any) {\n    e.preventDefault();\n    e.stopPropagation();\n  }\n\n  drawObject(ctx: CanvasRenderingContext2D) {\n    let elementToDraw = null;\n\n    // draw border\n    ctx.beginPath();\n    ctx.fillStyle = 'rgba(255,255,255,0)';\n    ctx.fillRect(-this.width / 2, -this.height / 2, this.width, this.height);\n    ctx.lineWidth = 0;\n    ctx.strokeStyle = '#ffffff';\n    ctx.moveTo(-this.width / 2, -this.height / 2);\n    ctx.stroke();\n\n    if (\n      this.isMoving === false &&\n      //   this.resizeFilters.length &&\n      this._needsResize()\n    ) {\n      this._lastScaleX = this.scaleX;\n      this._lastScaleY = this.scaleY;\n      //   elementToDraw = this.applyFilters(\n      //     null,\n      //     this.resizeFilters,\n      //     this._filteredEl || this._originalElement,\n      //     true\n      //   );\n    } else {\n      elementToDraw = this._element;\n    }\n\n    if (elementToDraw) {\n      ctx.drawImage(elementToDraw, -this.width / 2, -this.height / 2, 230, 160);\n    }\n\n    this.renderTitle(ctx, this.title);\n\n    this._renderStroke(ctx);\n  }\n  renderDescription(ctx: any) {\n    const maxWidth = this.width;\n\n    ctx.font = '10px Arial';\n    ctx.fillStyle = 'rgba(255, 255, 255, 0.5)';\n    const x = -this.width / 2;\n    const y = this.height / 2;\n\n    ctx.font = '18px Arial';\n    ctx.fillStyle = 'rgba(0, 0, 0)';\n    this.splitByGrapheme = true;\n    this.wrapText(ctx, this.description, x, y, maxWidth, 18);\n  }\n  renderTitle(ctx: any, title: any) {\n    const maxWidth = this.width;\n    const x = -this.width / 2;\n    const y = this.height / 2 - 60;\n\n    ctx.font = '16px Arial';\n    ctx.fillStyle = 'rgba(255, 255, 255, 1)';\n\n    // white board behind the title\n    ctx.fillRect(x, y - 29, maxWidth, 90);\n    ctx.fillStyle = '#190FA1';\n\n    // helper function to convert string\n    const GB2312UnicodeConverter = {\n      ToUnicode(str: string) {\n        return escape(str).toLocaleLowerCase().replace(/%u/gi, '\\\\u');\n      },\n      ToGB2312(str: string) {\n        return unescape(str.replace(/\\\\u/gi, '%u'));\n      },\n    };\n    // Handle non-unicode or non-utf8 coding string\n    const unicodeTitle = GB2312UnicodeConverter.ToUnicode(title);\n    if (!this.url && this.src) {\n      this.url = this.src;\n    }\n    // handle the situation that the website's title is null\n    if (\n      (title === null || unicodeTitle.indexOf('\\\\ufffd') !== -1 || !title) &&\n      this.url\n    ) {\n      const firstChar = this.url.indexOf('.');\n      const lastChar = this.url.indexOf('.', firstChar + 1);\n      this.title = this.url.substring(firstChar + 1, lastChar);\n    }\n\n    // title setting\n    this.wrapText(ctx, title, x + 15, y - 5, maxWidth - 20, 23);\n\n    // url setting\n    const newurl = `${this.url?.split('/')[0]}/${this.url?.split('/')[1]}/${\n      this.url?.split('/')[2]\n    }`;\n    ctx.font = '12px Arial';\n    ctx.fillStyle = 'rgba(35, 41, 48, 0.65)';\n    // gray square in front of website\n    this.wrapText(ctx, newurl, x + 15, y + 45, maxWidth - 20, 25);\n  }\n  renderPublishDate(ctx: any) {\n    const maxWidth = this.width;\n\n    ctx.font = '10px Arial';\n    ctx.fillStyle = 'rgba(255, 255, 255, 0.5)';\n    const x = -this.width / 2 + 20;\n    const y = this.height / 2 - 10;\n    ctx.fillStyle = 'rgba(0, 0, 0, 0.5)';\n\n    ctx.fillRect(-this.width / 2, y - 20, maxWidth, 30);\n\n    ctx.font = '18px Arial';\n    ctx.fillStyle = 'rgba(255, 255, 255, 1)';\n    // this.wrapText(\n    //   ctx,\n    //   `${this.publisher}:${new Date(this.publishedDate).toDateString()}`,\n    //   x,\n    //   y,\n    //   maxWidth,\n    //   18\n    // );\n  }\n  wrapText(\n    context: any,\n    text: any,\n    x: any,\n    y: any,\n    maxWidth: number,\n    lineHeight: number\n  ) {\n    let words = '';\n    if (text) words = text.split(' ');\n\n    let line = '';\n    let lineCount = 1;\n    let tempLine = '';\n    let _y = y;\n\n    // handle non-English char\n    if (escape(text).indexOf('%u') < 0) {\n      // only the English char\n      for (let n = 0; n < words.length; n++) {\n        if (lineCount === 3) return;\n        if (n !== 0) tempLine = `${line.slice(0, -3)}...`;\n        const testLine = `${line + words[n]} `;\n        const metrics = context.measureText(testLine);\n        const testWidth = metrics.width;\n        if (testWidth > maxWidth && n > 0) {\n          if (lineCount === 2) {\n            line = tempLine;\n          }\n          context.fillText(line, x, _y);\n          line = `${words[n]} `;\n          _y += lineHeight;\n          lineCount++;\n        } else {\n          line = testLine;\n        }\n      }\n    } else {\n      for (let n = 0; n < text.length; n++) {\n        if (lineCount === 3) return;\n        if (n !== 0) tempLine = `${line.slice(0, -2)}...`;\n        const testLine = `${line + text[n]}`;\n        const metrics = context.measureText(testLine);\n        const testWidth = metrics.width;\n        if (testWidth > maxWidth && n > 0) {\n          if (lineCount === 2) {\n            line = tempLine;\n          }\n          context.fillText(line, x, _y);\n          line = `${text[n]}`;\n          _y += lineHeight;\n          lineCount++;\n        } else {\n          line = testLine;\n        }\n      }\n    }\n    if (lineCount < 3) context.fillText(line, x, _y);\n  }\n\n  fromURL<T extends TOptions<SerializedImageProps>>(\n    url: string,\n    options: any\n  ): Promise<X_URL> {\n    return new Promise((resolve, reject) => {\n      const img = new Image();\n      const cvs = getFabricDocument().createElement('canvas');\n      const ctx = cvs.getContext('2d');\n      //   img.crossOrigin = '';\n      //@ts-ignore\n      img.onload = async function () {\n        // fix size version\n        cvs.width = 230;\n        cvs.height = 160; // 230 / img.width * img.height;\n        ctx?.drawImage(img, 0, 0, 230, 160);\n\n        const imgOptions: LoadImageOptions = {\n          crossOrigin: 'anonymous',\n          ...options,\n        };\n\n        try {\n          const loadedImg = await loadImage(cvs.toDataURL(), imgOptions);\n          resolve(new X_URL(loadedImg, options));\n        } catch (error) {\n          reject(error);\n        }\n      };\n\n      img.onerror = function (error: any) {\n        reject(error);\n      };\n\n      img.src = url;\n    });\n  }\n}\n\nclassRegistry.setClass(X_URL);\n"],"names":["UrlImageDefaultValues","minWidth","dynamicMinWidth","lockScalingFlip","noScaleCache","splitByGrapheme","objType","height","maxHeight","width","maxWidth","X_URL","FabricImage","getDefaults","_objectSpread","controls","createFileDefaultControls","ownDefaults","constructor","element","options","toString","_defineProperty","_this$canvas","canvas","getZoom","filters","url","title","description","shadow","Shadow","color","offsetX","offsetY","blur","id","clipPath","Rect","left","top","rx","ry","fill","InitializeEvent","getWidgetMenuList","locked","getWidgetMenuLength","getContextMenuList","menuList","push","_stopEvent","e","preventDefault","stopPropagation","drawObject","ctx","elementToDraw","beginPath","fillStyle","fillRect","lineWidth","strokeStyle","moveTo","stroke","isMoving","_needsResize","_lastScaleX","scaleX","_lastScaleY","scaleY","_element","drawImage","renderTitle","_renderStroke","renderDescription","font","x","y","wrapText","_this$url","_this$url2","_this$url3","GB2312UnicodeConverter","ToUnicode","str","escape","toLocaleLowerCase","replace","ToGB2312","unescape","unicodeTitle","src","indexOf","firstChar","lastChar","substring","newurl","concat","split","renderPublishDate","context","text","lineHeight","words","line","lineCount","tempLine","_y","n","length","slice","testLine","metrics","measureText","testWidth","fillText","fromURL","Promise","resolve","reject","img","Image","cvs","getFabricDocument","createElement","getContext","onload","imgOptions","crossOrigin","loadedImg","loadImage","toDataURL","error","onerror","classRegistry","setClass"],"mappings":";;;;;;;;;AA6BO,MAAMA,qBAAuD,GAAG;AACrEC,EAAAA,QAAQ,EAAE,EAAE;AACZC,EAAAA,eAAe,EAAE,CAAC;AAClBC,EAAAA,eAAe,EAAE,IAAI;AACrBC,EAAAA,YAAY,EAAE,KAAK;AACnBC,EAAAA,eAAe,EAAE,IAAI;AACrBC,EAAAA,OAAO,EAAE,OAAO;AAChBC,EAAAA,MAAM,EAAE,GAAG;AACXC,EAAAA,SAAS,EAAE,GAAG;AACdC,EAAAA,KAAK,EAAE,GAAG;AACVC,EAAAA,QAAQ,EAAE,GAAA;AACZ,EAAC;AAaM,MAAMC,KAAK,SAERC,WAAW,CAAQ;EA2D3B,OAAOC,WAAWA,GAAG;IACnB,OAAAC,cAAA,CAAAA,cAAA,CAAA,EAAA,EACK,KAAK,CAACD,WAAW,EAAE,CAAA,EAAA,EAAA,EAAA;MACtBE,QAAQ,EAAEC,yBAAyB,EAAC;KACjCL,EAAAA,KAAK,CAACM,WAAW,CAAA,CAAA;AAExB,GAAA;;AAEA;AACAC,EAAAA,WAAWA,CAACC,OAAoB,EAAEC,OAAc,EAAE;IAChD,KAAK,CAACD,OAAO,CAACE,QAAQ,EAAE,EAAED,OAAO,CAAC,CAAA;AAlEpC;IAAAE,eAAA,CAAA,IAAA,EAAA,iBAAA,EA4ByB,CACvB,SAAS,EACT,cAAc,EACd,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,cAAc,EACd,KAAK,EACL,OAAO,CACR,CAAA,CAAA;AAAAA,IAAAA,eAAA,0BAyHiB,MAAM;AAAA,MAAA,IAAAC,YAAA,CAAA;AACtB,MAAa,CAAA,CAAAA,YAAA,GAAA,IAAI,CAACC,MAAM,MAAA,IAAA,IAAAD,YAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAXA,YAAA,CAAaE,OAAO,EAAE,KAAI,EAAC;AACxC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;KACD,CAAA,CAAA;IAjKC,IAAI,CAACC,OAAO,GAAG,EAAE,CAAA;AAEjB,IAAA,IAAI,CAACC,GAAG,GAAGP,OAAO,CAACO,GAAG,CAAA;AACtB,IAAA,IAAI,CAACC,KAAK,GAAGR,OAAO,CAACQ,KAAK,CAAA;AAC1B,IAAA,IAAI,CAACC,WAAW,GAAGT,OAAO,CAACS,WAAW,CAAA;AAEtC,IAAA,IAAI,CAACC,MAAM,GAAG,IAAIC,MAAM,CAAC;AACvBC,MAAAA,KAAK,EAAE,2BAA2B;AAClCC,MAAAA,OAAO,EAAE,CAAC;AACVC,MAAAA,OAAO,EAAE,CAAC;AACVC,MAAAA,IAAI,EAAE,CAAC;AACPC,MAAAA,EAAE,EAAE,GAAA;AACN,KAAC,CAAC,CAAA;AAED,IAAA,IAAI,CAACC,QAAQ,GAAG,IAAIC,IAAI,CAAC;AACxBC,MAAAA,IAAI,EAAE,CAAC;AACPC,MAAAA,GAAG,EAAE,CAAC;AACNC,MAAAA,EAAE,EAAE,CAAC;AACLC,MAAAA,EAAE,EAAE,CAAC;AACLjC,MAAAA,KAAK,EAAE,GAAG;AACVF,MAAAA,MAAM,EAAE,GAAG;AACXoC,MAAAA,IAAI,EAAE,SAAA;AACR,KAAC,CAAC;AACA;IACA,IAAI,CAACC,eAAe,EAAE,CAAA;AACxB;IACA,IAAI,CAACnC,KAAK,GAAG,GAAG,CAAA;IAChB,IAAI,CAACF,MAAM,GAAG,GAAG,CAAA;AACnB,GAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACAsC,EAAAA,iBAAiBA,GAAG;IAClB,IAAI,IAAI,CAACC,MAAM,EAAE;MACf,OAAO,CAAC,YAAY,CAAC,CAAA;AACvB,KAAA;AACA,IAAA,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAA;AACzC,GAAA;AACAC,EAAAA,mBAAmBA,GAAG;AACpB,IAAA,IAAI,IAAI,CAACD,MAAM,EAAE,OAAO,EAAE,CAAA;AAC1B,IAAA,OAAO,EAAE,CAAA;AACX,GAAA;AACAE,EAAAA,kBAAkBA,GAAG;AACnB,IAAA,IAAIC,QAAQ,CAAA;IACZ,IAAI,IAAI,CAACH,MAAM,EAAE;MACfG,QAAQ,GAAG,CACT,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,cAAc,CACf,CAAA;AACH,KAAC,MAAM;AACLA,MAAAA,QAAQ,GAAG,CACT,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,WAAW,EACX,MAAM,EACN,OAAO,EACP,KAAK,EACL,QAAQ,CACT,CAAA;AACH,KAAA;IAEA,IAAI,IAAI,CAACH,MAAM,EAAE;AACfG,MAAAA,QAAQ,CAACC,IAAI,CAAC,QAAQ,CAAC,CAAA;AACzB,KAAC,MAAM;AACLD,MAAAA,QAAQ,CAACC,IAAI,CAAC,MAAM,CAAC,CAAA;AACvB,KAAA;AACA,IAAA,OAAOD,QAAQ,CAAA;AACjB,GAAA;AAoEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;EACAE,UAAUA,CAACC,CAAM,EAAE;IACjBA,CAAC,CAACC,cAAc,EAAE,CAAA;IAClBD,CAAC,CAACE,eAAe,EAAE,CAAA;AACrB,GAAA;EAEAC,UAAUA,CAACC,GAA6B,EAAE;IACxC,IAAIC,aAAa,GAAG,IAAI,CAAA;;AAExB;IACAD,GAAG,CAACE,SAAS,EAAE,CAAA;IACfF,GAAG,CAACG,SAAS,GAAG,qBAAqB,CAAA;IACrCH,GAAG,CAACI,QAAQ,CAAC,CAAC,IAAI,CAACnD,KAAK,GAAG,CAAC,EAAE,CAAC,IAAI,CAACF,MAAM,GAAG,CAAC,EAAE,IAAI,CAACE,KAAK,EAAE,IAAI,CAACF,MAAM,CAAC,CAAA;IACxEiD,GAAG,CAACK,SAAS,GAAG,CAAC,CAAA;IACjBL,GAAG,CAACM,WAAW,GAAG,SAAS,CAAA;AAC3BN,IAAAA,GAAG,CAACO,MAAM,CAAC,CAAC,IAAI,CAACtD,KAAK,GAAG,CAAC,EAAE,CAAC,IAAI,CAACF,MAAM,GAAG,CAAC,CAAC,CAAA;IAC7CiD,GAAG,CAACQ,MAAM,EAAE,CAAA;AAEZ,IAAA,IACE,IAAI,CAACC,QAAQ,KAAK,KAAK;AACvB;AACA,IAAA,IAAI,CAACC,YAAY,EAAE,EACnB;AACA,MAAA,IAAI,CAACC,WAAW,GAAG,IAAI,CAACC,MAAM,CAAA;AAC9B,MAAA,IAAI,CAACC,WAAW,GAAG,IAAI,CAACC,MAAM,CAAA;AAC9B;AACA;AACA;AACA;AACA;AACA;AACF,KAAC,MAAM;MACLb,aAAa,GAAG,IAAI,CAACc,QAAQ,CAAA;AAC/B,KAAA;AAEA,IAAA,IAAId,aAAa,EAAE;MACjBD,GAAG,CAACgB,SAAS,CAACf,aAAa,EAAE,CAAC,IAAI,CAAChD,KAAK,GAAG,CAAC,EAAE,CAAC,IAAI,CAACF,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AAC3E,KAAA;IAEA,IAAI,CAACkE,WAAW,CAACjB,GAAG,EAAE,IAAI,CAAC5B,KAAK,CAAC,CAAA;AAEjC,IAAA,IAAI,CAAC8C,aAAa,CAAClB,GAAG,CAAC,CAAA;AACzB,GAAA;EACAmB,iBAAiBA,CAACnB,GAAQ,EAAE;AAC1B,IAAA,MAAM9C,QAAQ,GAAG,IAAI,CAACD,KAAK,CAAA;IAE3B+C,GAAG,CAACoB,IAAI,GAAG,YAAY,CAAA;IACvBpB,GAAG,CAACG,SAAS,GAAG,0BAA0B,CAAA;AAC1C,IAAA,MAAMkB,CAAC,GAAG,CAAC,IAAI,CAACpE,KAAK,GAAG,CAAC,CAAA;AACzB,IAAA,MAAMqE,CAAC,GAAG,IAAI,CAACvE,MAAM,GAAG,CAAC,CAAA;IAEzBiD,GAAG,CAACoB,IAAI,GAAG,YAAY,CAAA;IACvBpB,GAAG,CAACG,SAAS,GAAG,eAAe,CAAA;IAC/B,IAAI,CAACtD,eAAe,GAAG,IAAI,CAAA;AAC3B,IAAA,IAAI,CAAC0E,QAAQ,CAACvB,GAAG,EAAE,IAAI,CAAC3B,WAAW,EAAEgD,CAAC,EAAEC,CAAC,EAAEpE,QAAQ,EAAE,EAAE,CAAC,CAAA;AAC1D,GAAA;AACA+D,EAAAA,WAAWA,CAACjB,GAAQ,EAAE5B,KAAU,EAAE;AAAA,IAAA,IAAAoD,SAAA,EAAAC,UAAA,EAAAC,UAAA,CAAA;AAChC,IAAA,MAAMxE,QAAQ,GAAG,IAAI,CAACD,KAAK,CAAA;AAC3B,IAAA,MAAMoE,CAAC,GAAG,CAAC,IAAI,CAACpE,KAAK,GAAG,CAAC,CAAA;IACzB,MAAMqE,CAAC,GAAG,IAAI,CAACvE,MAAM,GAAG,CAAC,GAAG,EAAE,CAAA;IAE9BiD,GAAG,CAACoB,IAAI,GAAG,YAAY,CAAA;IACvBpB,GAAG,CAACG,SAAS,GAAG,wBAAwB,CAAA;;AAExC;AACAH,IAAAA,GAAG,CAACI,QAAQ,CAACiB,CAAC,EAAEC,CAAC,GAAG,EAAE,EAAEpE,QAAQ,EAAE,EAAE,CAAC,CAAA;IACrC8C,GAAG,CAACG,SAAS,GAAG,SAAS,CAAA;;AAEzB;AACA,IAAA,MAAMwB,sBAAsB,GAAG;MAC7BC,SAASA,CAACC,GAAW,EAAE;AACrB,QAAA,OAAOC,MAAM,CAACD,GAAG,CAAC,CAACE,iBAAiB,EAAE,CAACC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;OAC9D;MACDC,QAAQA,CAACJ,GAAW,EAAE;QACpB,OAAOK,QAAQ,CAACL,GAAG,CAACG,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;AAC7C,OAAA;KACD,CAAA;AACD;AACA,IAAA,MAAMG,YAAY,GAAGR,sBAAsB,CAACC,SAAS,CAACxD,KAAK,CAAC,CAAA;IAC5D,IAAI,CAAC,IAAI,CAACD,GAAG,IAAI,IAAI,CAACiE,GAAG,EAAE;AACzB,MAAA,IAAI,CAACjE,GAAG,GAAG,IAAI,CAACiE,GAAG,CAAA;AACrB,KAAA;AACA;IACA,IACE,CAAChE,KAAK,KAAK,IAAI,IAAI+D,YAAY,CAACE,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAACjE,KAAK,KACnE,IAAI,CAACD,GAAG,EACR;MACA,MAAMmE,SAAS,GAAG,IAAI,CAACnE,GAAG,CAACkE,OAAO,CAAC,GAAG,CAAC,CAAA;AACvC,MAAA,MAAME,QAAQ,GAAG,IAAI,CAACpE,GAAG,CAACkE,OAAO,CAAC,GAAG,EAAEC,SAAS,GAAG,CAAC,CAAC,CAAA;AACrD,MAAA,IAAI,CAAClE,KAAK,GAAG,IAAI,CAACD,GAAG,CAACqE,SAAS,CAACF,SAAS,GAAG,CAAC,EAAEC,QAAQ,CAAC,CAAA;AAC1D,KAAA;;AAEA;IACA,IAAI,CAAChB,QAAQ,CAACvB,GAAG,EAAE5B,KAAK,EAAEiD,CAAC,GAAG,EAAE,EAAEC,CAAC,GAAG,CAAC,EAAEpE,QAAQ,GAAG,EAAE,EAAE,EAAE,CAAC,CAAA;;AAE3D;AACA,IAAA,MAAMuF,MAAM,GAAA,EAAA,CAAAC,MAAA,CAAA,CAAAlB,SAAA,GAAM,IAAI,CAACrD,GAAG,MAAA,IAAA,IAAAqD,SAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAARA,SAAA,CAAUmB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAA,GAAA,CAAA,CAAAD,MAAA,CAAA,CAAAjB,UAAA,GAAI,IAAI,CAACtD,GAAG,MAAA,IAAA,IAAAsD,UAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAARA,UAAA,CAAUkB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAA,GAAA,CAAA,CAAAD,MAAA,CAAA,CAAAhB,UAAA,GAClE,IAAI,CAACvD,GAAG,MAAA,IAAA,IAAAuD,UAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAARA,UAAA,CAAUiB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACvB,CAAA;IACF3C,GAAG,CAACoB,IAAI,GAAG,YAAY,CAAA;IACvBpB,GAAG,CAACG,SAAS,GAAG,wBAAwB,CAAA;AACxC;IACA,IAAI,CAACoB,QAAQ,CAACvB,GAAG,EAAEyC,MAAM,EAAEpB,CAAC,GAAG,EAAE,EAAEC,CAAC,GAAG,EAAE,EAAEpE,QAAQ,GAAG,EAAE,EAAE,EAAE,CAAC,CAAA;AAC/D,GAAA;EACA0F,iBAAiBA,CAAC5C,GAAQ,EAAE;AAC1B,IAAA,MAAM9C,QAAQ,GAAG,IAAI,CAACD,KAAK,CAAA;IAE3B+C,GAAG,CAACoB,IAAI,GAAG,YAAY,CAAA;IACvBpB,GAAG,CAACG,SAAS,GAAG,0BAA0B,CAAA;IAChC,CAAC,IAAI,CAAClD,KAAK,GAAG,CAAC,GAAG,GAAE;IAC9B,MAAMqE,CAAC,GAAG,IAAI,CAACvE,MAAM,GAAG,CAAC,GAAG,EAAE,CAAA;IAC9BiD,GAAG,CAACG,SAAS,GAAG,oBAAoB,CAAA;AAEpCH,IAAAA,GAAG,CAACI,QAAQ,CAAC,CAAC,IAAI,CAACnD,KAAK,GAAG,CAAC,EAAEqE,CAAC,GAAG,EAAE,EAAEpE,QAAQ,EAAE,EAAE,CAAC,CAAA;IAEnD8C,GAAG,CAACoB,IAAI,GAAG,YAAY,CAAA;IACvBpB,GAAG,CAACG,SAAS,GAAG,wBAAwB,CAAA;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,GAAA;;AACAoB,EAAAA,QAAQA,CACNsB,OAAY,EACZC,IAAS,EACTzB,CAAM,EACNC,CAAM,EACNpE,QAAgB,EAChB6F,UAAkB,EAClB;IACA,IAAIC,KAAK,GAAG,EAAE,CAAA;IACd,IAAIF,IAAI,EAAEE,KAAK,GAAGF,IAAI,CAACH,KAAK,CAAC,GAAG,CAAC,CAAA;IAEjC,IAAIM,IAAI,GAAG,EAAE,CAAA;IACb,IAAIC,SAAS,GAAG,CAAC,CAAA;IACjB,IAAIC,QAAQ,GAAG,EAAE,CAAA;IACjB,IAAIC,EAAE,GAAG9B,CAAC,CAAA;;AAEV;IACA,IAAIQ,MAAM,CAACgB,IAAI,CAAC,CAACT,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAClC;AACA,MAAA,KAAK,IAAIgB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGL,KAAK,CAACM,MAAM,EAAED,CAAC,EAAE,EAAE;QACrC,IAAIH,SAAS,KAAK,CAAC,EAAE,OAAA;AACrB,QAAA,IAAIG,CAAC,KAAK,CAAC,EAAEF,QAAQ,MAAAT,MAAA,CAAMO,IAAI,CAACM,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAK,KAAA,CAAA,CAAA;QACjD,MAAMC,QAAQ,GAAAd,EAAAA,CAAAA,MAAA,CAAMO,IAAI,GAAGD,KAAK,CAACK,CAAC,CAAC,EAAG,GAAA,CAAA,CAAA;AACtC,QAAA,MAAMI,OAAO,GAAGZ,OAAO,CAACa,WAAW,CAACF,QAAQ,CAAC,CAAA;AAC7C,QAAA,MAAMG,SAAS,GAAGF,OAAO,CAACxG,KAAK,CAAA;AAC/B,QAAA,IAAI0G,SAAS,GAAGzG,QAAQ,IAAImG,CAAC,GAAG,CAAC,EAAE;UACjC,IAAIH,SAAS,KAAK,CAAC,EAAE;AACnBD,YAAAA,IAAI,GAAGE,QAAQ,CAAA;AACjB,WAAA;UACAN,OAAO,CAACe,QAAQ,CAACX,IAAI,EAAE5B,CAAC,EAAE+B,EAAE,CAAC,CAAA;AAC7BH,UAAAA,IAAI,MAAAP,MAAA,CAAMM,KAAK,CAACK,CAAC,CAAC,EAAG,GAAA,CAAA,CAAA;AACrBD,UAAAA,EAAE,IAAIL,UAAU,CAAA;AAChBG,UAAAA,SAAS,EAAE,CAAA;AACb,SAAC,MAAM;AACLD,UAAAA,IAAI,GAAGO,QAAQ,CAAA;AACjB,SAAA;AACF,OAAA;AACF,KAAC,MAAM;AACL,MAAA,KAAK,IAAIH,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGP,IAAI,CAACQ,MAAM,EAAED,CAAC,EAAE,EAAE;QACpC,IAAIH,SAAS,KAAK,CAAC,EAAE,OAAA;AACrB,QAAA,IAAIG,CAAC,KAAK,CAAC,EAAEF,QAAQ,MAAAT,MAAA,CAAMO,IAAI,CAACM,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAK,KAAA,CAAA,CAAA;QACjD,MAAMC,QAAQ,GAAAd,EAAAA,CAAAA,MAAA,CAAMO,IAAI,GAAGH,IAAI,CAACO,CAAC,CAAC,CAAE,CAAA;AACpC,QAAA,MAAMI,OAAO,GAAGZ,OAAO,CAACa,WAAW,CAACF,QAAQ,CAAC,CAAA;AAC7C,QAAA,MAAMG,SAAS,GAAGF,OAAO,CAACxG,KAAK,CAAA;AAC/B,QAAA,IAAI0G,SAAS,GAAGzG,QAAQ,IAAImG,CAAC,GAAG,CAAC,EAAE;UACjC,IAAIH,SAAS,KAAK,CAAC,EAAE;AACnBD,YAAAA,IAAI,GAAGE,QAAQ,CAAA;AACjB,WAAA;UACAN,OAAO,CAACe,QAAQ,CAACX,IAAI,EAAE5B,CAAC,EAAE+B,EAAE,CAAC,CAAA;AAC7BH,UAAAA,IAAI,MAAAP,MAAA,CAAMI,IAAI,CAACO,CAAC,CAAC,CAAE,CAAA;AACnBD,UAAAA,EAAE,IAAIL,UAAU,CAAA;AAChBG,UAAAA,SAAS,EAAE,CAAA;AACb,SAAC,MAAM;AACLD,UAAAA,IAAI,GAAGO,QAAQ,CAAA;AACjB,SAAA;AACF,OAAA;AACF,KAAA;AACA,IAAA,IAAIN,SAAS,GAAG,CAAC,EAAEL,OAAO,CAACe,QAAQ,CAACX,IAAI,EAAE5B,CAAC,EAAE+B,EAAE,CAAC,CAAA;AAClD,GAAA;AAEAS,EAAAA,OAAOA,CACL1F,GAAW,EACXP,OAAY,EACI;AAChB,IAAA,OAAO,IAAIkG,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;AACtC,MAAA,MAAMC,GAAG,GAAG,IAAIC,KAAK,EAAE,CAAA;MACvB,MAAMC,GAAG,GAAGC,iBAAiB,EAAE,CAACC,aAAa,CAAC,QAAQ,CAAC,CAAA;AACvD,MAAA,MAAMrE,GAAG,GAAGmE,GAAG,CAACG,UAAU,CAAC,IAAI,CAAC,CAAA;AAChC;AACA;MACAL,GAAG,CAACM,MAAM,GAAG,kBAAkB;AAC7B;QACAJ,GAAG,CAAClH,KAAK,GAAG,GAAG,CAAA;AACfkH,QAAAA,GAAG,CAACpH,MAAM,GAAG,GAAG,CAAC;AACjBiD,QAAAA,GAAG,aAAHA,GAAG,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAHA,GAAG,CAAEgB,SAAS,CAACiD,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;QAEnC,MAAMO,UAA4B,GAAAlH,cAAA,CAAA;AAChCmH,UAAAA,WAAW,EAAE,WAAA;AAAW,SAAA,EACrB7G,OAAO,CACX,CAAA;QAED,IAAI;AACF,UAAA,MAAM8G,SAAS,GAAG,MAAMC,SAAS,CAACR,GAAG,CAACS,SAAS,EAAE,EAAEJ,UAAU,CAAC,CAAA;UAC9DT,OAAO,CAAC,IAAI5G,KAAK,CAACuH,SAAS,EAAE9G,OAAO,CAAC,CAAC,CAAA;SACvC,CAAC,OAAOiH,KAAK,EAAE;UACdb,MAAM,CAACa,KAAK,CAAC,CAAA;AACf,SAAA;OACD,CAAA;AAEDZ,MAAAA,GAAG,CAACa,OAAO,GAAG,UAAUD,KAAU,EAAE;QAClCb,MAAM,CAACa,KAAK,CAAC,CAAA;OACd,CAAA;MAEDZ,GAAG,CAAC7B,GAAG,GAAGjE,GAAG,CAAA;AACf,KAAC,CAAC,CAAA;AACJ,GAAA;AACF,CAAA;AAACL,eAAA,CAheYX,KAAK,EAAA,aAAA,EA2D0BX,qBAAqB,CAAA,CAAA;AAuajEuI,aAAa,CAACC,QAAQ,CAAC7H,KAAK,CAAC;;;;"}