{"version":3,"file":"gojs-angular.mjs","sources":["../../../projects/gojs-angular/src/lib/ng-diagram-helper.ts","../../../projects/gojs-angular/src/lib/diagram.component.ts","../../../projects/gojs-angular/src/lib/palette.component.ts","../../../projects/gojs-angular/src/lib/overview.component.ts","../../../projects/gojs-angular/src/lib/data-sync.service.ts","../../../projects/gojs-angular/src/public-api.ts","../../../projects/gojs-angular/src/gojs-angular.ts"],"sourcesContent":["import { NgZone, EventEmitter } from \"@angular/core\";\r\nimport * as go from \"gojs\";\r\nimport { DiagramComponent } from \"./diagram.component\";\r\n\r\n/**\r\n * An interface to allow methods defined below to accept Palette or Diagram Components,\r\n * without requiring DiagramComponent or PaletteComponent directly in this file\r\n * (that would create a circular dependency)\r\n */\r\nexport interface IDiagramOrPaletteComponent {\r\n  modelChange: EventEmitter<go.IncrementalData>,\r\n  zone: NgZone,\r\n  nodeDataArray: Array<go.ObjectData>,\r\n  linkDataArray: Array<go.ObjectData>,\r\n  modelData: go.ObjectData\r\n}\r\n\r\n/**\r\n * Defines some shared helper static functions, used in Diagram / Palette / Overview Components\r\n */\r\nexport class NgDiagramHelper{\r\n  constructor() {}\r\n\r\n  /**\r\n   * Ensures mousemove event listeners on a diagram's canvas are run outside NgZone.\r\n   * This way, change detection isn't triggered on each mousemove, improving performance.\r\n   *\r\n   * If some state-alteration must happen on a mousemove event inside the diagram, use zone.run() to make sure the event triggers angular change detection.\r\n   * Used by DiagramComponent, PaletteComponent, and OverviewComponent in their ngAfterViewInit lifecycle hooks\r\n   * @param diagram\r\n   * @param zone\r\n   */\r\n  public static makeMouseMoveRunOutsideAngularZone(diagram: go.Diagram, zone: NgZone) {\r\n    diagram.addEventListener = (DOMElement: Element | Window | Document, name: string, listener: any, capture: boolean) => {\r\n      const superAddEventListener = go.Diagram.prototype.addEventListener;\r\n      if (name === 'mousemove') {\r\n        zone.runOutsideAngular(() => superAddEventListener.call(this, DOMElement, name, listener, capture));\r\n      } else {\r\n        zone.run(() => {\r\n          superAddEventListener.call(this, DOMElement, name, listener, capture);\r\n        });\r\n      }\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Initialize a given diagram's model with given node / link / model data\r\n   * @param diagram\r\n   * @param nodeDataArray\r\n   * @param linkDataArray\r\n   * @param modelData\r\n   */\r\n  public static initializeModel(diagram: go.Diagram | go.Palette, nodeDataArray: Array<go.ObjectData>, linkDataArray: Array<go.ObjectData>, modelData: go.ObjectData) {\r\n    diagram.delayInitialization(() => {\r\n      const model = diagram.model;\r\n      model.commit((m: go.Model) => {\r\n        if (modelData) {\r\n          m.assignAllDataProperties(m.modelData, modelData);\r\n        }\r\n        m.mergeNodeDataArray(m.cloneDeep(nodeDataArray));\r\n        if (linkDataArray && m instanceof go.GraphLinksModel) {\r\n          m.mergeLinkDataArray(m.cloneDeep(linkDataArray));\r\n        }\r\n      }, null);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Initialize the model changed listener for the Palette / Diagram of a given compoennt; ensure it runs inside the component's ngZone.\r\n   * Those changes will be emitted through a the component's modelChange EventEmitter.\r\n   * @param component\r\n   */\r\n  public static initializeModelChangedListener(component: DiagramComponent) {\r\n    var diagram = null;\r\n    if (!(component.hasOwnProperty(\"diagram\")) && !(component.hasOwnProperty(\"palette\"))) return;\r\n    if (component.hasOwnProperty(\"diagram\")) diagram = component[\"diagram\"];\r\n    if (component.hasOwnProperty(\"palette\")) diagram = component[\"palette\"];\r\n    component.modelChangedListener = (e: go.ChangedEvent) => {\r\n      if (e.isTransactionFinished && e.model && !e.model.isReadOnly && component.modelChange) {\r\n        // this must be done within a NgZone.run block, so changes are detected in the parent component\r\n        component.zone.run(() => {\r\n          const dataChanges = e.model!.toIncrementalData(e);\r\n          if (dataChanges !== null) component.modelChange.emit(dataChanges);\r\n        });\r\n      }\r\n    };\r\n    diagram.addModelChangedListener(component.modelChangedListener);\r\n  }\r\n\r\n  /**\r\n   * Merge the app-level node / link / model data of a supplied Diagram|Palette Component with its underlying Diagram|Palette model data\r\n   * @param component\r\n   * @param isInit Whether or not to treat this update as a Diagram initialization\r\n   */\r\n  public static mergeAppDataWithModel(component: IDiagramOrPaletteComponent, isInit?: boolean) {\r\n    var diagram = null;\r\n    if (component.hasOwnProperty(\"diagram\")) diagram = component[\"diagram\"];\r\n    if (component.hasOwnProperty(\"palette\")) diagram = component[\"palette\"];\r\n\r\n    diagram.model.commit((m: go.Model) => {\r\n      if (isInit) diagram.model.modelData = {};\r\n      // update modelData first, in case bindings on nodes / links depend on model data\r\n      diagram.model.assignAllDataProperties(diagram.model.modelData, component.modelData);\r\n      // merge node / link data\r\n      if (isInit) diagram.model.nodeDataArray = [];\r\n      diagram.model.mergeNodeDataArray(component.nodeDataArray);\r\n      if (component.linkDataArray && diagram.model instanceof go.GraphLinksModel) {\r\n        if (isInit) diagram.model.linkDataArray = [];\r\n        diagram.model.mergeLinkDataArray(component.linkDataArray);\r\n      }\r\n    }, isInit ? null : 'update data');\r\n\r\n  }\r\n\r\n}\r\n","import {\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Input,\r\n  NgZone,\r\n  Output,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport * as go from 'gojs';\r\nimport { NgDiagramHelper } from './ng-diagram-helper';\r\n\r\n@Component({\r\n  selector: 'gojs-diagram',\r\n  template: '<div #ngDiagram [className]=divClassName></div>',\r\n  standalone: true,\r\n})\r\nexport class DiagramComponent {\r\n  /**\r\n   * Diagram initialization function. Returns a go.Diagram.\r\n   * Do not initialize model data in this function.\r\n   */\r\n  @Input() public initDiagram: () => go.Diagram;\r\n  /**  Node data for diagram */\r\n  @Input() public nodeDataArray: Array<go.ObjectData>;\r\n  /**  Link data for diagram. Optional. */\r\n  @Input() public linkDataArray: Array<go.ObjectData> = null;\r\n  /** Model data for diagram. Optional. */\r\n  @Input() public modelData: go.ObjectData = null;\r\n  /** Diagram div class name. Use this name to style your diagram in CSS. */\r\n  @Input() public divClassName: string;\r\n  /** Model changed listener function for diagram */\r\n  public modelChangedListener: ((e: go.ChangedEvent) => void) | null = null;\r\n  /** Whether or not to skip merging app data with GoJS model data (set to true if update is coming from GoJS, false if coming from app-level, usually) */\r\n  @Input() public skipsDiagramUpdate: boolean = false;\r\n  /** Event emitter -- fires when diagram model changes. Capture this emitted event in parent component */\r\n  @Output() public modelChange: EventEmitter<go.IncrementalData> =\r\n    new EventEmitter<go.IncrementalData>();\r\n  /** The DIV element holding the Diagram */\r\n  @ViewChild('ngDiagram', { static: true }) public diagramDiv: ElementRef;\r\n  /** The Diagram itself */\r\n  public diagram: go.Diagram = null;\r\n  /** An internal flag used to tell ngOnChanges to treat the next sync operation as a Diagram initialization */\r\n  private wasCleared = false;\r\n\r\n  constructor(public zone: NgZone) {}\r\n\r\n  /**\r\n   * Initializes diagram / model after view init\r\n   */\r\n  public ngAfterViewInit() {\r\n    if (!this.diagramDiv) {\r\n      throw new Error('diagramDiv is not defined');\r\n    }\r\n    this.diagram = this.initDiagram();\r\n    if (!(this.diagram instanceof go.Diagram)) {\r\n      throw new Error('initDiagram function did not return a go.Diagram');\r\n    }\r\n\r\n    // reduces change detection on mouse moves, boosting performance\r\n    NgDiagramHelper.makeMouseMoveRunOutsideAngularZone(this.diagram, this.zone);\r\n\r\n    // assign the Diagram's div, which (among many other things) will attach a bunch of listeners to the canvas,\r\n    // using the overridden addEventListener function defined in makeMouseMoveRunOutsideAngularZone\r\n    const divRef = this.diagramDiv.nativeElement;\r\n    if (divRef === null) return;\r\n    this.diagram.div = divRef;\r\n\r\n    // initialize the diagram model with the provided node / link / model data\r\n    NgDiagramHelper.initializeModel(\r\n      this.diagram,\r\n      this.nodeDataArray,\r\n      this.linkDataArray,\r\n      this.modelData\r\n    );\r\n    // initializer model listener\r\n    NgDiagramHelper.initializeModelChangedListener(this);\r\n  } // end ngAfterViewInit\r\n\r\n  /**\r\n   * If a change has occurred on an @Input property, merge the app-level changes with GoJS\r\n   */\r\n  public ngOnChanges() {\r\n    if (!this.diagram || !this.diagram.model || this.skipsDiagramUpdate) return;\r\n    // if clear was just called, treat this as initial\r\n    if (this.wasCleared) {\r\n      this.diagram.delayInitialization(() => {\r\n        NgDiagramHelper.mergeAppDataWithModel(this, true);\r\n      });\r\n      this.wasCleared = false;\r\n    } else {\r\n      NgDiagramHelper.mergeAppDataWithModel(this);\r\n    }\r\n  } // end ngOnChanges\r\n\r\n  /**\r\n   * Clears the diagram of all nodes, links, and model data.\r\n   * Also clears the UndoManager history and clipboard.\r\n   * The next state update will be treated as diagram initialization.\r\n   */\r\n  public clear(): void {\r\n    const diagram = this.diagram;\r\n    if (diagram !== null) {\r\n      diagram.clear();\r\n      this.wasCleared = true;\r\n    }\r\n  } // end clear function\r\n\r\n  /**\r\n   * Set this.diagram.div to null, removing all event listeners\r\n   */\r\n  public ngOnDestroy() {\r\n    this.diagram.div = null; // removes event listeners\r\n  } // end ngOnDestroy function\r\n}\r\n","import {\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Input,\r\n  NgZone,\r\n  Output,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport * as go from 'gojs';\r\nimport { NgDiagramHelper } from './ng-diagram-helper';\r\n@Component({\r\n  selector: 'gojs-palette',\r\n  template: '<div #ngPalette [className]=divClassName></div>',\r\n  standalone: true,\r\n})\r\nexport class PaletteComponent {\r\n  /**\r\n   * Palette initialization function. Returns a go.Palette.\r\n   * Do not initialize model data in this function.\r\n   */\r\n  @Input() public initPalette: () => go.Palette;\r\n  /** Node data for palette */\r\n  @Input() public nodeDataArray: Array<go.ObjectData>;\r\n  /** Link data for palette. Optional. */\r\n  @Input() public linkDataArray: Array<go.ObjectData> = null;\r\n  /** Model data for palette. Optional. */\r\n  @Input() public modelData: go.ObjectData = null;\r\n  /** Palette div class name. Use this name to style your palette in CSS */\r\n  @Input() public divClassName: string;\r\n\r\n  /** Event emitter -- fires when palette model changes. Capture this emitted event in parent component */\r\n  @Output() public modelChange: EventEmitter<go.IncrementalData> =\r\n    new EventEmitter<go.IncrementalData>();\r\n  /** The DIV element holding the Palette */\r\n  @ViewChild('ngPalette', { static: true }) public paletteDiv: ElementRef;\r\n\r\n  /** The Palette itself */\r\n  public palette: go.Palette | null = null;\r\n\r\n  constructor(public zone: NgZone) {}\r\n\r\n  /**\r\n   * Initialize Palette after view init\r\n   */\r\n  public ngAfterViewInit() {\r\n    if (!this.paletteDiv) {\r\n      throw new Error('paletteDiv is not defined');\r\n    }\r\n    this.palette = this.initPalette();\r\n    if (!(this.palette instanceof go.Palette)) {\r\n      throw new Error('initPalette function did not return a go.Palette');\r\n    }\r\n\r\n    // reduces change detection on mouse moves, boosting performance\r\n    NgDiagramHelper.makeMouseMoveRunOutsideAngularZone(this.palette, this.zone);\r\n\r\n    // assign the Palette's div, which (among many other things) will attach a bunch of listeners to the canvas,\r\n    // using the overridden addEventListener function above\r\n    const divRef = this.paletteDiv.nativeElement;\r\n    if (divRef == null) return;\r\n    this.palette.div = divRef;\r\n\r\n    // initialize palette model\r\n    NgDiagramHelper.initializeModel(\r\n      this.palette,\r\n      this.nodeDataArray,\r\n      this.linkDataArray,\r\n      this.modelData\r\n    );\r\n  }\r\n\r\n  /**\r\n   * If a change has occured on an @Input property, merge the app-level changes with GoJS\r\n   */\r\n  public ngOnChanges() {\r\n    if (!this.palette || !this.palette.model) return;\r\n    NgDiagramHelper.mergeAppDataWithModel(this);\r\n  } // end ngOnChanges\r\n\r\n  public ngOnDestroy() {\r\n    this.palette.div = null; // removes event listeners\r\n  }\r\n}\r\n","import {\r\n  Component,\r\n  ElementRef,\r\n  Input,\r\n  NgZone,\r\n  SimpleChanges,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport * as go from 'gojs';\r\nimport { NgDiagramHelper } from './ng-diagram-helper';\r\n\r\n@Component({\r\n  selector: 'gojs-overview',\r\n  template: '<div #ngOverview [className]=divClassName></div>',\r\n  standalone: true,\r\n})\r\nexport class OverviewComponent {\r\n  /** The function used to initialize and return the Overview */\r\n  @Input() public initOverview: () => go.Overview;\r\n  /** The div class name that holds the Overview. Use this name to style your Overview in CSS. */\r\n  @Input() public divClassName: string;\r\n  /** The Diagram to observe with the Overview */\r\n  @Input() public observedDiagram: go.Diagram = null;\r\n\r\n  @ViewChild('ngOverview', { static: true }) public overviewDiv: ElementRef;\r\n\r\n  /** The Overview itself  */\r\n  public overview: go.Overview | null = null;\r\n\r\n  constructor(public zone: NgZone) {}\r\n\r\n  /**\r\n   * Initialize the overview\r\n   */\r\n  public ngAfterViewInit() {\r\n    if (!this.overviewDiv) {\r\n      throw new Error('overviewDiv is not defined');\r\n    }\r\n    if (this.initOverview) {\r\n      this.overview = this.initOverview();\r\n      if (!(this.overview instanceof go.Overview)) {\r\n        throw new Error('initOverview function did not return a go.Overview');\r\n      }\r\n    } else {\r\n      this.overview = new go.Overview();\r\n      this.overview.contentAlignment = go.Spot.Center;\r\n    }\r\n\r\n    // reduces change detection on mouse moves, boosting performance\r\n    NgDiagramHelper.makeMouseMoveRunOutsideAngularZone(\r\n      this.overview,\r\n      this.zone\r\n    );\r\n\r\n    this.overview.div = this.overviewDiv.nativeElement;\r\n  }\r\n\r\n  /**\r\n   * Only update when the observed diagram changes\r\n   * @param changes\r\n   */\r\n  public ngOnChanges(changes: SimpleChanges) {\r\n    if (!this.overview) return;\r\n    if (\r\n      changes &&\r\n      changes['observedDiagram'] &&\r\n      changes['observedDiagram'].currentValue !==\r\n        changes['observedDiagram'].previousValue\r\n    ) {\r\n      this.overview.observed = changes['observedDiagram'].currentValue;\r\n    }\r\n  }\r\n\r\n  public ngOnDestroy() {\r\n    this.overview.div = null; // removes event listeners\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport * as go from 'gojs';\r\nimport { produce } from 'immer';\r\n\r\n@Injectable()\r\nexport class DataSyncService {\r\n  /**\r\n   * Sync a node data array with a set of changes\r\n   * @param changes The set of changes to the GoJS model\r\n   * @param nodeData The node data array to merge these changes with\r\n   * @param model Required if you have defined your model.nodeKeyProperty to be something other than 'key'\r\n   * @returns A node data array, merged with the changes\r\n   */\r\n  public static syncNodeData(\r\n    changes: go.IncrementalData,\r\n    nodeData: Array<go.ObjectData>,\r\n    model?: go.Model\r\n  ) {\r\n    if (!changes) return nodeData;\r\n    if (\r\n      !changes.modifiedNodeData &&\r\n      !changes.insertedNodeKeys &&\r\n      !changes.removedNodeKeys\r\n    )\r\n      return nodeData;\r\n\r\n    // maintain a map of modified nodes for fast lookup during insertion\r\n    const modifiedNodesMap = new go.Map<go.Key, go.ObjectData>();\r\n    // generate a map of keys -> indices for faster operations\r\n    const keyIdxMap = new Map<go.Key, number>();\r\n    nodeData.forEach((nd, idx) => {\r\n      const key = model ? model.getKeyForNodeData(nd) : nd['key'];\r\n      keyIdxMap.set(key, idx);\r\n    });\r\n\r\n    // nodeData is immutable, modify it using the immer package's \"produce\" function (creates new array)\r\n    var newNodeDataArray = produce(nodeData, (draft) => {\r\n      // account for modified node data\r\n      if (changes.modifiedNodeData) {\r\n        changes.modifiedNodeData.forEach((nd: go.ObjectData) => {\r\n          // Get the value of the node key property checking wether is a function or a string\r\n          const key = model ? model.getKeyForNodeData(nd) : nd['key'];\r\n          modifiedNodesMap.set(key, nd);\r\n          const idx = keyIdxMap.get(key);\r\n          if (idx !== undefined && idx >= 0) {\r\n            draft[idx] = nd;\r\n          }\r\n        });\r\n      }\r\n\r\n      // account for inserted node data\r\n      if (changes.insertedNodeKeys) {\r\n        changes.insertedNodeKeys.forEach((key: go.Key) => {\r\n          const nd = modifiedNodesMap.get(key);\r\n          if (nd && !keyIdxMap.has(key)) {\r\n            draft.push(nd);\r\n          }\r\n        });\r\n      }\r\n\r\n      // account for removed node data\r\n      if (changes.removedNodeKeys) {\r\n        const removals = changes.removedNodeKeys.map((key) =>\r\n          keyIdxMap.get(key)\r\n        ) as number[];\r\n        removals.sort((a, b) => a - b);\r\n        for (let i = removals.length - 1; i >= 0; i--) {\r\n          const idx = removals[i];\r\n          if (idx !== undefined) draft.splice(idx, 1);\r\n        }\r\n      }\r\n    });\r\n\r\n    return newNodeDataArray;\r\n  }\r\n\r\n  /**\r\n   * Sync a link data array with a set of changes\r\n   * @param changes The set of changes to the GoJS model\r\n   * @param linkData The link data array to merge these changes with\r\n   * @param model Required if you have defined your model.linkKeyProperty to be something other than 'key'\r\n   * @returns A link data array, merged with the changes\r\n   */\r\n  public static syncLinkData(\r\n    changes: go.IncrementalData,\r\n    linkData: Array<go.ObjectData>,\r\n    model?: go.GraphLinksModel\r\n  ) {\r\n    if (!changes) return linkData;\r\n    if (\r\n      !changes.modifiedLinkData &&\r\n      !changes.insertedLinkKeys &&\r\n      !changes.removedLinkKeys\r\n    )\r\n      return linkData;\r\n\r\n    // maintain a map of modified nodes for fast lookup during insertion\r\n    const modifiedLinksMap = new go.Map<go.Key, go.ObjectData>();\r\n    // generate a map of keys -> indices for faster operations\r\n    const keyIdxMap = new Map<go.Key, number>();\r\n    linkData.forEach((ld, idx) => {\r\n      const key = model ? model.getKeyForLinkData(ld) : ld['key'];\r\n      keyIdxMap.set(key, idx);\r\n    });\r\n\r\n    // linkData is immutable, modify it using the immer package's \"produce\" function (creates new array)\r\n    linkData = produce(linkData, (draft) => {\r\n      // account for modified link data\r\n      if (changes.modifiedLinkData) {\r\n        changes.modifiedLinkData.forEach((ld: go.ObjectData) => {\r\n          // Get the value of the link key\r\n          const key = model ? model.getKeyForLinkData(ld) : ld['key'];\r\n          modifiedLinksMap.set(key, ld);\r\n          const idx = keyIdxMap.get(key);\r\n          if (idx !== undefined && idx >= 0) {\r\n            draft[idx] = ld;\r\n          }\r\n        });\r\n      }\r\n\r\n      // account for inserted link data\r\n      if (changes.insertedLinkKeys) {\r\n        changes.insertedLinkKeys.forEach((key: go.Key) => {\r\n          const nd = modifiedLinksMap.get(key);\r\n          if (nd && !keyIdxMap.has(key)) {\r\n            draft.push(nd);\r\n          }\r\n        });\r\n      }\r\n\r\n      // account for removed link data\r\n      if (changes.removedLinkKeys) {\r\n        const removals = changes.removedLinkKeys.map((key) =>\r\n          keyIdxMap.get(key)\r\n        ) as number[];\r\n        removals.sort((a, b) => a - b);\r\n        for (let i = removals.length - 1; i >= 0; i--) {\r\n          draft.splice(removals[i], 1);\r\n        }\r\n      }\r\n    });\r\n\r\n    return linkData;\r\n  }\r\n\r\n  /**\r\n   * Sync modelData with a set of changes\r\n   * @param changes The set of changes to the GoJS model\r\n   * @param modelData The modelData to merge these changes with\r\n   * @returns A modelData object, merged with the changes\r\n   */\r\n  public static syncModelData(\r\n    changes: go.IncrementalData,\r\n    modelData: go.ObjectData\r\n  ) {\r\n    if (!changes) return modelData;\r\n    if (!changes.modelData) return modelData;\r\n    if (changes.modelData) {\r\n      return changes.modelData;\r\n    }\r\n    return modelData;\r\n  }\r\n}\r\n","/*\r\n * Public API Surface of gojs-angular\r\n */\r\n\r\nexport * from './lib/diagram.component';\r\nexport * from './lib/palette.component';\r\nexport * from './lib/overview.component';\r\nexport * from './lib/data-sync.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;AAiBA;;AAEG;MACU,eAAe,CAAA;AAC1B,IAAA,WAAA,GAAA,EAAe;AAEf;;;;;;;;AAQG;AACI,IAAA,OAAO,kCAAkC,CAAC,OAAmB,EAAE,IAAY,EAAA;AAChF,QAAA,OAAO,CAAC,gBAAgB,GAAG,CAAC,UAAuC,EAAE,IAAY,EAAE,QAAa,EAAE,OAAgB,KAAI;YACpH,MAAM,qBAAqB,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,gBAAgB;AACnE,YAAA,IAAI,IAAI,KAAK,WAAW,EAAE;gBACxB,IAAI,CAAC,iBAAiB,CAAC,MAAM,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrG;iBAAO;AACL,gBAAA,IAAI,CAAC,GAAG,CAAC,MAAK;AACZ,oBAAA,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC;AACvE,gBAAA,CAAC,CAAC;YACJ;AACF,QAAA,CAAC;IACH;AAEA;;;;;;AAMG;IACI,OAAO,eAAe,CAAC,OAAgC,EAAE,aAAmC,EAAE,aAAmC,EAAE,SAAwB,EAAA;AAChK,QAAA,OAAO,CAAC,mBAAmB,CAAC,MAAK;AAC/B,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK;AAC3B,YAAA,KAAK,CAAC,MAAM,CAAC,CAAC,CAAW,KAAI;gBAC3B,IAAI,SAAS,EAAE;oBACb,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC;gBACnD;gBACA,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;gBAChD,IAAI,aAAa,IAAI,CAAC,YAAY,EAAE,CAAC,eAAe,EAAE;oBACpD,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;gBAClD;YACF,CAAC,EAAE,IAAI,CAAC;AACV,QAAA,CAAC,CAAC;IACJ;AAEA;;;;AAIG;IACI,OAAO,8BAA8B,CAAC,SAA2B,EAAA;QACtE,IAAI,OAAO,GAAG,IAAI;AAClB,QAAA,IAAI,EAAE,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YAAE;AACtF,QAAA,IAAI,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC;AAAE,YAAA,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC;AACvE,QAAA,IAAI,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC;AAAE,YAAA,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC;AACvE,QAAA,SAAS,CAAC,oBAAoB,GAAG,CAAC,CAAkB,KAAI;AACtD,YAAA,IAAI,CAAC,CAAC,qBAAqB,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC,WAAW,EAAE;;AAEtF,gBAAA,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;oBACtB,MAAM,WAAW,GAAG,CAAC,CAAC,KAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;oBACjD,IAAI,WAAW,KAAK,IAAI;AAAE,wBAAA,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;AACnE,gBAAA,CAAC,CAAC;YACJ;AACF,QAAA,CAAC;AACD,QAAA,OAAO,CAAC,uBAAuB,CAAC,SAAS,CAAC,oBAAoB,CAAC;IACjE;AAEA;;;;AAIG;AACI,IAAA,OAAO,qBAAqB,CAAC,SAAqC,EAAE,MAAgB,EAAA;QACzF,IAAI,OAAO,GAAG,IAAI;AAClB,QAAA,IAAI,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC;AAAE,YAAA,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC;AACvE,QAAA,IAAI,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC;AAAE,YAAA,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC;QAEvE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAW,KAAI;AACnC,YAAA,IAAI,MAAM;AAAE,gBAAA,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE;;AAExC,YAAA,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC;;AAEnF,YAAA,IAAI,MAAM;AAAE,gBAAA,OAAO,CAAC,KAAK,CAAC,aAAa,GAAG,EAAE;YAC5C,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,SAAS,CAAC,aAAa,CAAC;AACzD,YAAA,IAAI,SAAS,CAAC,aAAa,IAAI,OAAO,CAAC,KAAK,YAAY,EAAE,CAAC,eAAe,EAAE;AAC1E,gBAAA,IAAI,MAAM;AAAE,oBAAA,OAAO,CAAC,KAAK,CAAC,aAAa,GAAG,EAAE;gBAC5C,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,SAAS,CAAC,aAAa,CAAC;YAC3D;QACF,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,aAAa,CAAC;IAEnC;AAED;;MCjGY,gBAAgB,CAAA;AA4BR,IAAA,IAAA;AA3BnB;;;AAGG;AACa,IAAA,WAAW;;AAEX,IAAA,aAAa;;IAEb,aAAa,GAAyB,IAAI;;IAE1C,SAAS,GAAkB,IAAI;;AAE/B,IAAA,YAAY;;IAErB,oBAAoB,GAA0C,IAAI;;IAEzD,kBAAkB,GAAY,KAAK;;AAElC,IAAA,WAAW,GAC1B,IAAI,YAAY,EAAsB;;AAES,IAAA,UAAU;;IAEpD,OAAO,GAAe,IAAI;;IAEzB,UAAU,GAAG,KAAK;AAE1B,IAAA,WAAA,CAAmB,IAAY,EAAA;QAAZ,IAAA,CAAA,IAAI,GAAJ,IAAI;IAAW;AAElC;;AAEG;IACI,eAAe,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC;QAC9C;AACA,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;QACjC,IAAI,EAAE,IAAI,CAAC,OAAO,YAAY,EAAE,CAAC,OAAO,CAAC,EAAE;AACzC,YAAA,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC;QACrE;;QAGA,eAAe,CAAC,kCAAkC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC;;;AAI3E,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;QAC5C,IAAI,MAAM,KAAK,IAAI;YAAE;AACrB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,MAAM;;AAGzB,QAAA,eAAe,CAAC,eAAe,CAC7B,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,SAAS,CACf;;AAED,QAAA,eAAe,CAAC,8BAA8B,CAAC,IAAI,CAAC;AACtD,IAAA,CAAC;AAED;;AAEG;IACI,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,kBAAkB;YAAE;;AAErE,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAK;AACpC,gBAAA,eAAe,CAAC,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC;AACnD,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;QACzB;aAAO;AACL,YAAA,eAAe,CAAC,qBAAqB,CAAC,IAAI,CAAC;QAC7C;AACF,IAAA,CAAC;AAED;;;;AAIG;IACI,KAAK,GAAA;AACV,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;AAC5B,QAAA,IAAI,OAAO,KAAK,IAAI,EAAE;YACpB,OAAO,CAAC,KAAK,EAAE;AACf,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QACxB;AACF,IAAA,CAAC;AAED;;AAEG;IACI,WAAW,GAAA;QAChB,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;AAC1B,IAAA,CAAC;uGAhGU,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,qcAHjB,iDAAiD,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA;;2FAGhD,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,QAAQ,EAAE,iDAAiD;AAC3D,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;2EAMiB,WAAW,EAAA,CAAA;sBAA1B;gBAEe,aAAa,EAAA,CAAA;sBAA5B;gBAEe,aAAa,EAAA,CAAA;sBAA5B;gBAEe,SAAS,EAAA,CAAA;sBAAxB;gBAEe,YAAY,EAAA,CAAA;sBAA3B;gBAIe,kBAAkB,EAAA,CAAA;sBAAjC;gBAEgB,WAAW,EAAA,CAAA;sBAA3B;gBAGgD,UAAU,EAAA,CAAA;sBAA1D,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;MCvB7B,gBAAgB,CAAA;AAwBR,IAAA,IAAA;AAvBnB;;;AAGG;AACa,IAAA,WAAW;;AAEX,IAAA,aAAa;;IAEb,aAAa,GAAyB,IAAI;;IAE1C,SAAS,GAAkB,IAAI;;AAE/B,IAAA,YAAY;;AAGX,IAAA,WAAW,GAC1B,IAAI,YAAY,EAAsB;;AAES,IAAA,UAAU;;IAGpD,OAAO,GAAsB,IAAI;AAExC,IAAA,WAAA,CAAmB,IAAY,EAAA;QAAZ,IAAA,CAAA,IAAI,GAAJ,IAAI;IAAW;AAElC;;AAEG;IACI,eAAe,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC;QAC9C;AACA,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;QACjC,IAAI,EAAE,IAAI,CAAC,OAAO,YAAY,EAAE,CAAC,OAAO,CAAC,EAAE;AACzC,YAAA,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC;QACrE;;QAGA,eAAe,CAAC,kCAAkC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC;;;AAI3E,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;QAC5C,IAAI,MAAM,IAAI,IAAI;YAAE;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,MAAM;;AAGzB,QAAA,eAAe,CAAC,eAAe,CAC7B,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,SAAS,CACf;IACH;AAEA;;AAEG;IACI,WAAW,GAAA;QAChB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK;YAAE;AAC1C,QAAA,eAAe,CAAC,qBAAqB,CAAC,IAAI,CAAC;AAC7C,IAAA,CAAC;IAEM,WAAW,GAAA;QAChB,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAC1B;uGAlEW,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,2ZAHjB,iDAAiD,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA;;2FAGhD,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,QAAQ,EAAE,iDAAiD;AAC3D,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;2EAMiB,WAAW,EAAA,CAAA;sBAA1B;gBAEe,aAAa,EAAA,CAAA;sBAA5B;gBAEe,aAAa,EAAA,CAAA;sBAA5B;gBAEe,SAAS,EAAA,CAAA;sBAAxB;gBAEe,YAAY,EAAA,CAAA;sBAA3B;gBAGgB,WAAW,EAAA,CAAA;sBAA3B;gBAGgD,UAAU,EAAA,CAAA;sBAA1D,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;MCnB7B,iBAAiB,CAAA;AAaT,IAAA,IAAA;;AAXH,IAAA,YAAY;;AAEZ,IAAA,YAAY;;IAEZ,eAAe,GAAe,IAAI;AAEA,IAAA,WAAW;;IAGtD,QAAQ,GAAuB,IAAI;AAE1C,IAAA,WAAA,CAAmB,IAAY,EAAA;QAAZ,IAAA,CAAA,IAAI,GAAJ,IAAI;IAAW;AAElC;;AAEG;IACI,eAAe,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC;QAC/C;AACA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE;YACnC,IAAI,EAAE,IAAI,CAAC,QAAQ,YAAY,EAAE,CAAC,QAAQ,CAAC,EAAE;AAC3C,gBAAA,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC;YACvE;QACF;aAAO;YACL,IAAI,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAC,QAAQ,EAAE;YACjC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM;QACjD;;QAGA,eAAe,CAAC,kCAAkC,CAChD,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,IAAI,CACV;QAED,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa;IACpD;AAEA;;;AAGG;AACI,IAAA,WAAW,CAAC,OAAsB,EAAA;QACvC,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;AACpB,QAAA,IACE,OAAO;YACP,OAAO,CAAC,iBAAiB,CAAC;AAC1B,YAAA,OAAO,CAAC,iBAAiB,CAAC,CAAC,YAAY;AACrC,gBAAA,OAAO,CAAC,iBAAiB,CAAC,CAAC,aAAa,EAC1C;YACA,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,YAAY;QAClE;IACF;IAEO,WAAW,GAAA;QAChB,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC;IAC3B;uGA3DW,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,mUAHlB,kDAAkD,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA;;2FAGjD,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE,kDAAkD;AAC5D,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;2EAGiB,YAAY,EAAA,CAAA;sBAA3B;gBAEe,YAAY,EAAA,CAAA;sBAA3B;gBAEe,eAAe,EAAA,CAAA;sBAA9B;gBAEiD,WAAW,EAAA,CAAA;sBAA5D,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;MCnB9B,eAAe,CAAA;AAC1B;;;;;;AAMG;AACI,IAAA,OAAO,YAAY,CACxB,OAA2B,EAC3B,QAA8B,EAC9B,KAAgB,EAAA;AAEhB,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,QAAQ;QAC7B,IACE,CAAC,OAAO,CAAC,gBAAgB;YACzB,CAAC,OAAO,CAAC,gBAAgB;YACzB,CAAC,OAAO,CAAC,eAAe;AAExB,YAAA,OAAO,QAAQ;;AAGjB,QAAA,MAAM,gBAAgB,GAAG,IAAI,EAAE,CAAC,GAAG,EAAyB;;AAE5D,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB;QAC3C,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,GAAG,KAAI;AAC3B,YAAA,MAAM,GAAG,GAAG,KAAK,GAAG,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;AAC3D,YAAA,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;AACzB,QAAA,CAAC,CAAC;;QAGF,IAAI,gBAAgB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,KAAI;;AAEjD,YAAA,IAAI,OAAO,CAAC,gBAAgB,EAAE;gBAC5B,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAAiB,KAAI;;AAErD,oBAAA,MAAM,GAAG,GAAG,KAAK,GAAG,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;AAC3D,oBAAA,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;oBAC7B,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;oBAC9B,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,IAAI,CAAC,EAAE;AACjC,wBAAA,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;oBACjB;AACF,gBAAA,CAAC,CAAC;YACJ;;AAGA,YAAA,IAAI,OAAO,CAAC,gBAAgB,EAAE;gBAC5B,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAW,KAAI;oBAC/C,MAAM,EAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC;oBACpC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAC7B,wBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBAChB;AACF,gBAAA,CAAC,CAAC;YACJ;;AAGA,YAAA,IAAI,OAAO,CAAC,eAAe,EAAE;gBAC3B,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,KAC/C,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CACP;AACb,gBAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC9B,gBAAA,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC7C,oBAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC;oBACvB,IAAI,GAAG,KAAK,SAAS;AAAE,wBAAA,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC7C;YACF;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,gBAAgB;IACzB;AAEA;;;;;;AAMG;AACI,IAAA,OAAO,YAAY,CACxB,OAA2B,EAC3B,QAA8B,EAC9B,KAA0B,EAAA;AAE1B,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,QAAQ;QAC7B,IACE,CAAC,OAAO,CAAC,gBAAgB;YACzB,CAAC,OAAO,CAAC,gBAAgB;YACzB,CAAC,OAAO,CAAC,eAAe;AAExB,YAAA,OAAO,QAAQ;;AAGjB,QAAA,MAAM,gBAAgB,GAAG,IAAI,EAAE,CAAC,GAAG,EAAyB;;AAE5D,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB;QAC3C,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,GAAG,KAAI;AAC3B,YAAA,MAAM,GAAG,GAAG,KAAK,GAAG,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;AAC3D,YAAA,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;AACzB,QAAA,CAAC,CAAC;;QAGF,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,KAAI;;AAErC,YAAA,IAAI,OAAO,CAAC,gBAAgB,EAAE;gBAC5B,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAAiB,KAAI;;AAErD,oBAAA,MAAM,GAAG,GAAG,KAAK,GAAG,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;AAC3D,oBAAA,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;oBAC7B,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;oBAC9B,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,IAAI,CAAC,EAAE;AACjC,wBAAA,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;oBACjB;AACF,gBAAA,CAAC,CAAC;YACJ;;AAGA,YAAA,IAAI,OAAO,CAAC,gBAAgB,EAAE;gBAC5B,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAW,KAAI;oBAC/C,MAAM,EAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC;oBACpC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAC7B,wBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBAChB;AACF,gBAAA,CAAC,CAAC;YACJ;;AAGA,YAAA,IAAI,OAAO,CAAC,eAAe,EAAE;gBAC3B,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,KAC/C,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CACP;AACb,gBAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC9B,gBAAA,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC7C,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC9B;YACF;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,QAAQ;IACjB;AAEA;;;;;AAKG;AACI,IAAA,OAAO,aAAa,CACzB,OAA2B,EAC3B,SAAwB,EAAA;AAExB,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,SAAS;QAC9B,IAAI,CAAC,OAAO,CAAC,SAAS;AAAE,YAAA,OAAO,SAAS;AACxC,QAAA,IAAI,OAAO,CAAC,SAAS,EAAE;YACrB,OAAO,OAAO,CAAC,SAAS;QAC1B;AACA,QAAA,OAAO,SAAS;IAClB;uGA5JW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAf,eAAe,EAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B;;;ACJD;;AAEG;;ACFH;;AAEG;;;;"}