{"version":3,"file":"engie-group-ngx-gem-spaas-am5.mjs","sources":["../../../projects/ngx-gem-spaas/am5/src/_models/am5.model.ts","../../../projects/ngx-gem-spaas/am5/src/_services/am5.service.ts","../../../projects/ngx-gem-spaas/am5/src/_services/am5-pie.service.ts","../../../projects/ngx-gem-spaas/am5/src/public-api.ts","../../../projects/ngx-gem-spaas/am5/src/engie-group-ngx-gem-spaas-am5.ts"],"sourcesContent":["import {Root} from \"@amcharts/amcharts5\";\r\nimport {PieChart} from \"@amcharts/amcharts5/percent\";\r\nimport {XYChart} from \"@amcharts/amcharts5/xy\";\r\nimport {DateTime} from \"luxon\";\r\nimport {UtilsService} from '@engie-group/ngx-gem-spaas';\r\n\r\nexport const DEFAULT_DATE_FORMAT = 'yyyy-MM-ddTHH:mm:ssZ';\r\n\r\nexport interface Am5XyContainer {\r\n  root: Root;\r\n  chart: XYChart;\r\n}\r\n\r\nexport interface Am5PieContainer {\r\n  root: Root;\r\n  chart: PieChart;\r\n}\r\n\r\nexport class Am5RootConfig {\r\n  legendWithoutValueLabels?: boolean;\r\n  tooltipContainerBounds?: {\r\n    top: number,\r\n    right: number,\r\n    bottom: number,\r\n    left: number,\r\n  };\r\n  withLegend?: boolean;\r\n\r\n  constructor(\r\n    config: Am5RootConfig,\r\n  ) {\r\n    this.legendWithoutValueLabels = UtilsService.hasProp(config, 'legendWithoutValueLabels') ? config.legendWithoutValueLabels : true;\r\n    if (config.tooltipContainerBounds) {\r\n      this.tooltipContainerBounds = {\r\n        top: config.tooltipContainerBounds.top || 0,\r\n        right: config.tooltipContainerBounds.right || 0,\r\n        bottom: config.tooltipContainerBounds.bottom || 0,\r\n        left: config.tooltipContainerBounds.left || 0,\r\n      }\r\n    }\r\n    this.withLegend = UtilsService.hasProp(config, 'withLegend') ? config.withLegend : true;\r\n  }\r\n\r\n}\r\n\r\nexport class Am5AxisConfig {\r\n  title?: string;\r\n  withGrid?: boolean;\r\n  withLabels?: boolean;\r\n  withTooltip?: boolean;\r\n  xOrY: 'x' | 'y';\r\n\r\n  constructor(\r\n    type: 'date' | 'category' | 'value',\r\n    config: Am5AxisConfig\r\n  ) {\r\n    this.title = config.title || '';\r\n    this.withGrid = UtilsService.hasProp(config, 'withGrid') ? config.withGrid : type === 'value';\r\n    this.withLabels = UtilsService.hasProp(config, 'withLabels') ? config.withLabels : true;\r\n    this.withTooltip = UtilsService.hasProp(config, 'withTooltip') ? config.withTooltip : type === 'date';\r\n    this.xOrY = config.xOrY;\r\n  }\r\n\r\n}\r\n\r\nexport class Am5PieSeriesConfig {\r\n  name?: string;\r\n  tooltipText?: string;\r\n  xValue: string;\r\n  yValue: string;\r\n  withTooltip?: boolean;\r\n\r\n  constructor(config: Am5PieSeriesConfig) {\r\n    this.name = config.name || config.xValue || '';\r\n    this.tooltipText = config.tooltipText || '';\r\n    this.xValue = config.xValue;\r\n    this.yValue = config.yValue;\r\n    this.withTooltip = UtilsService.hasProp(config, 'withTooltip') ? config.withTooltip : true;\r\n  }\r\n\r\n}\r\n\r\nexport class Am5SeriesConfig extends Am5PieSeriesConfig {\r\n  color?: string;\r\n  dateFormat?: string;\r\n  stacked?: boolean;\r\n  strokeWidth?: number;\r\n  type: 'line' | 'bar' | 'stepline';\r\n  yOpenValue?: string;\r\n\r\n  constructor(config: Am5SeriesConfig) {\r\n    super(config);\r\n    this.color = config.color || '';\r\n    this.dateFormat = config.dateFormat || '';\r\n    this.stacked = UtilsService.hasProp(config, 'stacked') ? config.stacked : false;\r\n    this.strokeWidth = config.strokeWidth || 2;\r\n    this.type = config.type;\r\n    this.yOpenValue = config.yOpenValue || '';\r\n  }\r\n\r\n}\r\n\r\nexport class Am5DateRangeConfig {\r\n  beginDt: DateTime;\r\n  endDt: DateTime;\r\n  clearRanges?: boolean;\r\n  strokeColor?: string;\r\n  strokeDasharray?: number | number[];\r\n  strokeWidth?: number;\r\n  fillColor?: string;\r\n  fillOpacity?: number;\r\n\r\n  constructor(\r\n    config: Am5DateRangeConfig\r\n  ) {\r\n    this.beginDt = config.beginDt;\r\n    this.endDt = config.endDt;\r\n    this.clearRanges = UtilsService.hasProp(config, 'clearRanges') ? config.clearRanges : true;\r\n    this.strokeColor = config.strokeColor || '';\r\n    this.strokeDasharray = config.strokeDasharray || 0;\r\n    this.strokeWidth = UtilsService.hasProp(config, 'strokeWidth') ? config.strokeWidth : 1;\r\n    this.fillColor = config.fillColor || '';\r\n    this.fillOpacity = UtilsService.hasProp(config, 'fillOpacity') ? config.fillOpacity : 0.05;\r\n  }\r\n\r\n}\r\n","import * as am5 from '@amcharts/amcharts5';\r\nimport {DataItem, Label, Legend, Root, Tooltip} from '@amcharts/amcharts5';\r\nimport * as am5xy from '@amcharts/amcharts5/xy';\r\nimport {\r\n  AxisRenderer,\r\n  AxisRendererX,\r\n  AxisRendererY,\r\n  CategoryAxis,\r\n  ColumnSeries,\r\n  DateAxis,\r\n  IDateAxisDataItem,\r\n  LineSeries,\r\n  StepLineSeries,\r\n  ValueAxis\r\n} from '@amcharts/amcharts5/xy';\r\nimport {Injectable, OnDestroy} from '@angular/core';\r\nimport {Subject} from 'rxjs';\r\nimport {takeUntil} from 'rxjs/operators';\r\nimport {FONT_FAMILY, ThemeModel, ThemeService, UtilsService} from '@engie-group/ngx-gem-spaas';\r\nimport {\r\n  Am5AxisConfig,\r\n  Am5DateRangeConfig,\r\n  Am5PieContainer,\r\n  Am5RootConfig,\r\n  Am5SeriesConfig,\r\n  Am5XyContainer\r\n} from \"../_models/am5.model\";\r\n\r\nam5.addLicense('AM5C-5327-9399-0224-1489');\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class Am5Service implements OnDestroy {\r\n\r\n  private theme: ThemeModel | null = null;\r\n  private onDestroy$: Subject<void> = new Subject<void>();\r\n\r\n  constructor(\r\n    private themeService: ThemeService,\r\n  ) {\r\n    this.onNewTheme();\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.onDestroy$.next();\r\n    this.onDestroy$.complete();\r\n  }\r\n\r\n  private onNewTheme(): void {\r\n    this.themeService.onNewActiveTheme()\r\n      .pipe(\r\n        takeUntil(this.onDestroy$)\r\n      )\r\n      .subscribe((theme: ThemeModel) => {\r\n          this.theme = theme;\r\n        }\r\n      );\r\n  }\r\n\r\n  getTheme(): ThemeModel | null {\r\n    return this.theme;\r\n  }\r\n\r\n  // ********************************************************************************************************\r\n  // CHART CREATION/DESTRUCTION\r\n  // ********************************************************************************************************\r\n\r\n  // create xy chart\r\n  createXyChart(\r\n    chartDiv: string | HTMLElement,\r\n    config?: Am5RootConfig,\r\n  ): Am5XyContainer {\r\n\r\n    const themeColor: string = this.theme?.getRgb('color') as string;\r\n    const rootConfig = new Am5RootConfig(config || {});\r\n\r\n    const root = am5.Root.new(\r\n      chartDiv,\r\n      {\r\n        tooltipContainerBounds: rootConfig.tooltipContainerBounds,\r\n      },\r\n    );\r\n    let chart = root.container.children.push(\r\n      am5xy.XYChart.new(root, {\r\n        layout: root.verticalLayout,\r\n        // paddingBottom: 5,\r\n        paddingLeft: 18,\r\n        paddingRight: 4,\r\n      })\r\n    );\r\n\r\n    // zoom-out button\r\n    const bg = am5.RoundedRectangle.new(root, {\r\n      cornerRadiusTL: 4,\r\n      cornerRadiusTR: 4,\r\n      cornerRadiusBR: 4,\r\n      cornerRadiusBL: 4,\r\n      fill: am5.color(themeColor),\r\n      strokeWidth: 0,\r\n    });\r\n    bg.states.create('hover', {}).setAll({\r\n      fill: am5.color(this.theme?.getRgb('primary') as string),\r\n    })\r\n    chart.zoomOutButton.setAll({\r\n      background: bg,\r\n      icon: am5.Rectangle.new(root, {\r\n        fill: am5.color(this.theme?.getRgb('bg') as string),\r\n        height: 2,\r\n        width: 12,\r\n      }),\r\n      paddingTop: 7,\r\n      paddingRight: 8,\r\n      paddingBottom: 7,\r\n      paddingLeft: 8,\r\n      dx: 10,\r\n      dy: -18,\r\n    });\r\n\r\n    // cursor\r\n    const cursor = chart.set('cursor', am5xy.XYCursor.new(root, {\r\n      behavior: 'zoomX'\r\n    }));\r\n    cursor.lineX.setAll({\r\n      // fill: am5.color(this.theme?.getRgb('color') as string),\r\n      stroke: am5.color(themeColor),\r\n      strokeWidth: 1,\r\n      strokeDasharray: [4, 4]\r\n    });\r\n\r\n    cursor.lineY.setAll({\r\n      visible: false\r\n    });\r\n\r\n    this.createLegend(\r\n      {root: root, chart: chart},\r\n      rootConfig.withLegend,\r\n      rootConfig.legendWithoutValueLabels,\r\n    );\r\n\r\n    return {root: root, chart: chart};\r\n\r\n  }\r\n\r\n  createLegend(\r\n    am5Container: Am5XyContainer | Am5PieContainer,\r\n    withLegend: boolean | undefined,\r\n    legendWithoutValueLabels: boolean | undefined,\r\n  ): void {\r\n    if (withLegend) {\r\n      const legend = am5Container.chart.children.unshift(\r\n        am5.Legend.new(am5Container.root, {\r\n          centerX: am5.percent(50),\r\n          x: am5.percent(50),\r\n          layout: am5Container.root.gridLayout,\r\n        }));\r\n      legend.labels.template.setAll({\r\n        fill: am5.color(this.theme?.getRgb('color') as string),\r\n        fontFamily: FONT_FAMILY,\r\n        fontSize: '0.85em',\r\n      })\r\n      legend.valueLabels.template.setAll({\r\n        fill: am5.color(this.theme?.getRgb('color') as string),\r\n        fontFamily: FONT_FAMILY,\r\n        fontSize: '0.85em',\r\n      })\r\n      legend.markers.template.setAll({\r\n        height: 10,\r\n        width: 10,\r\n      })\r\n      legend.valueLabels.template.set('forceHidden', legendWithoutValueLabels);\r\n    }\r\n  }\r\n\r\n  destroyChart(\r\n    am5Container: Am5XyContainer | Am5PieContainer | undefined,\r\n  ): void {\r\n    if (am5Container?.root) {\r\n      am5Container.root.dispose();\r\n    }\r\n  }\r\n\r\n  // ********************************************************************************************************\r\n  // AXES\r\n  // ********************************************************************************************************\r\n\r\n  addCategoryAxis(\r\n    am5XyContainer: Am5XyContainer,\r\n    categoryField: string,\r\n    config: Am5AxisConfig,\r\n  ): CategoryAxis<AxisRenderer> {\r\n\r\n    const axisConfig = new Am5AxisConfig('category', config);\r\n    const axes = axisConfig.xOrY === 'x' ? am5XyContainer.chart.xAxes : am5XyContainer.chart.yAxes;\r\n    const renderer = axisConfig.xOrY === 'x' ? am5xy.AxisRendererX.new(am5XyContainer.root, {minGridDistance: 1}) : am5xy.AxisRendererY.new(am5XyContainer.root, {});\r\n    const axis = axes.push(\r\n      am5xy.CategoryAxis.new(am5XyContainer.root, {\r\n        categoryField: categoryField,\r\n        renderer: renderer,\r\n        tooltip: this.createAxisTooltip(\r\n          am5XyContainer.root,\r\n          axisConfig.withTooltip,\r\n        )\r\n      })\r\n    );\r\n\r\n    this.setGenericAxisProps(\r\n      renderer,\r\n      axisConfig.withGrid,\r\n      axisConfig.withLabels,\r\n    );\r\n    this.setAxisTitle(\r\n      am5XyContainer.root,\r\n      axis,\r\n      axisConfig.xOrY,\r\n      axisConfig.title,\r\n    )\r\n\r\n    return axis;\r\n\r\n  }\r\n\r\n  addDateAxis(\r\n    am5XyContainer: Am5XyContainer,\r\n    config: Am5AxisConfig,\r\n    baseInterval: am5.time.ITimeInterval = {timeUnit: 'minute', count: 15},\r\n  ): DateAxis<AxisRenderer> {\r\n\r\n    const axisConfig = new Am5AxisConfig('date', config);\r\n    const axes = axisConfig.xOrY === 'x' ? am5XyContainer.chart.xAxes : am5XyContainer.chart.yAxes;\r\n    const renderer = axisConfig.xOrY === 'x' ? am5xy.AxisRendererX.new(am5XyContainer.root, {minGridDistance: 40}) : am5xy.AxisRendererY.new(am5XyContainer.root, {});\r\n    const axis = axes.push(\r\n      am5xy.DateAxis.new(am5XyContainer.root, {\r\n        baseInterval: baseInterval,\r\n        renderer: renderer,\r\n        tooltip: this.createAxisTooltip(\r\n          am5XyContainer.root,\r\n          axisConfig.withTooltip,\r\n        ),\r\n        tooltipDateFormat: 'HH:mm',\r\n      })\r\n    );\r\n    this.setGenericAxisProps(\r\n      renderer,\r\n      axisConfig.withGrid,\r\n      axisConfig.withLabels,\r\n    );\r\n    this.setAxisTitle(\r\n      am5XyContainer.root,\r\n      axis,\r\n      axisConfig.xOrY,\r\n      axisConfig.title,\r\n    )\r\n\r\n    return axis;\r\n\r\n  }\r\n\r\n  addValueAxis(\r\n    am5XyContainer: Am5XyContainer,\r\n    config: Am5AxisConfig,\r\n  ): ValueAxis<AxisRenderer> {\r\n\r\n    const axisConfig = new Am5AxisConfig('value', config);\r\n    const axes = axisConfig.xOrY === 'x' ? am5XyContainer.chart.xAxes : am5XyContainer.chart.yAxes;\r\n    const renderer = axisConfig.xOrY === 'x' ? am5xy.AxisRendererX.new(am5XyContainer.root, {}) : am5xy.AxisRendererY.new(am5XyContainer.root, {});\r\n\r\n    const axis = axes.push(\r\n      am5xy.ValueAxis.new(am5XyContainer.root, {\r\n        renderer: renderer,\r\n        tooltip: this.createAxisTooltip(\r\n          am5XyContainer.root,\r\n          axisConfig.withTooltip,\r\n        )\r\n      })\r\n    );\r\n\r\n    this.setGenericAxisProps(\r\n      renderer,\r\n      axisConfig.withGrid,\r\n      axisConfig.withLabels,\r\n    );\r\n    this.setAxisTitle(\r\n      am5XyContainer.root,\r\n      axis,\r\n      axisConfig.xOrY,\r\n      axisConfig.title,\r\n    )\r\n\r\n    return axis;\r\n  }\r\n\r\n  private createAxisTooltip(\r\n    root: Root,\r\n    withToolTip: boolean | undefined,\r\n  ): Tooltip | undefined {\r\n    if (!withToolTip) {\r\n      return undefined;\r\n    }\r\n    const tooltip = am5.Tooltip.new(root, {\r\n      background: am5.Rectangle.new(root, {\r\n        fill: am5.color(this.theme?.getRgb('primary') as string),\r\n        strokeWidth: 0,\r\n      }),\r\n      paddingBottom: 2,\r\n      paddingTop: 2,\r\n    });\r\n    tooltip.label.set('fontFamily', FONT_FAMILY);\r\n    return tooltip;\r\n  }\r\n\r\n  private setGenericAxisProps(\r\n    renderer: AxisRendererX | AxisRendererY,\r\n    withGrid: boolean | undefined,\r\n    withLabels: boolean | undefined,\r\n  ): void {\r\n    // grid\r\n    renderer.grid.template.setAll({\r\n      forceHidden: !withGrid,\r\n      location: 1,\r\n      stroke: am5.color(this.theme?.getRgb('color') as string),\r\n    });\r\n    // labels\r\n    renderer.labels.template.setAll({\r\n      forceHidden: !withLabels,\r\n      fontFamily: FONT_FAMILY,\r\n      fontSize: '0.7em',\r\n      fill: am5.color(this.theme?.getRgb('color') as string),\r\n      // minWidth: 10, // impacts space (width) for y-axis labels\r\n      paddingTop: 7,\r\n    });\r\n  }\r\n\r\n  private setAxisTitle(\r\n    root: Root,\r\n    axis: DateAxis<AxisRenderer> | ValueAxis<AxisRenderer> | CategoryAxis<AxisRenderer>,\r\n    xOrY: 'x' | 'y',\r\n    title: string = '',\r\n  ): void {\r\n    if (title) {\r\n      if (xOrY === 'x') {\r\n        axis.children.push(\r\n          am5.Label.new(root, {\r\n            fill: am5.color(this.theme?.getRgb('color') as string),\r\n            fontFamily: FONT_FAMILY,\r\n            fontWeight: '500',\r\n            centerX: am5.p50,\r\n            text: title,\r\n            x: am5.p50,\r\n          })\r\n        );\r\n      } else {\r\n        axis.children.unshift(\r\n          am5.Label.new(root, {\r\n            fill: am5.color(this.theme?.getRgb('color') as string),\r\n            fontFamily: FONT_FAMILY,\r\n            fontWeight: '500',\r\n            centerX: am5.p50,\r\n            rotation: -90,\r\n            text: title,\r\n            y: am5.p50,\r\n          })\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  updateAxisTitle(\r\n    axis: CategoryAxis<AxisRenderer> | DateAxis<AxisRenderer> | ValueAxis<AxisRenderer>,\r\n    newTitle: string,\r\n  ): void {\r\n    // search for label (title)\r\n    let title: Label | undefined;\r\n    for (const child of axis.children) {\r\n      if (child instanceof Label) {\r\n        title = child;\r\n        break;\r\n      }\r\n    }\r\n    if (title) {\r\n      title.set('text', newTitle);\r\n    }\r\n  }\r\n\r\n  // ********************************************************************************************************\r\n  // SERIES\r\n  // ********************************************************************************************************\r\n\r\n  addSeries(\r\n    am5XyContainer: Am5XyContainer,\r\n    xAxis: DateAxis<AxisRenderer> | ValueAxis<AxisRenderer> | CategoryAxis<AxisRenderer>,\r\n    yAxis: DateAxis<AxisRenderer> | ValueAxis<AxisRenderer> | CategoryAxis<AxisRenderer>,\r\n    config: Am5SeriesConfig,\r\n  ): LineSeries | ColumnSeries | StepLineSeries {\r\n\r\n    const seriesConfig = new Am5SeriesConfig(config);\r\n\r\n    const seriesTooltip = am5.Tooltip.new(am5XyContainer.root, {\r\n      autoTextColor: !seriesConfig.color,\r\n      getFillFromSprite: !seriesConfig.color,\r\n      labelText: seriesConfig.tooltipText || '[bold]{name}:[/] {valueY}',\r\n      paddingTop: 4,\r\n      paddingBottom: 4,\r\n    });\r\n    seriesTooltip.label.set('fontFamily', FONT_FAMILY);\r\n    seriesTooltip.get('background')?.setAll({\r\n      stroke: am5.color(this.theme?.getRgb('bg') as string), // the border of the tooltip\r\n    });\r\n\r\n    const commonSeriesSettings: am5xy.IXYSeriesSettings = {\r\n      name: seriesConfig.name,\r\n      stacked: seriesConfig.stacked,\r\n      xAxis: xAxis,\r\n      yAxis: yAxis,\r\n      tooltip: seriesConfig.withTooltip ? seriesTooltip : undefined,\r\n    };\r\n\r\n    // special attributes for category series\r\n    const hasCategoryAxis = xAxis instanceof CategoryAxis ? 'x' : yAxis instanceof CategoryAxis ? 'y' : '';\r\n    if (hasCategoryAxis) {\r\n      if (hasCategoryAxis === 'x') {\r\n        // category is on x-axis\r\n        commonSeriesSettings.categoryXField = seriesConfig.xValue;\r\n        commonSeriesSettings.valueYField = seriesConfig.yValue;\r\n      } else {\r\n        // category is on y-axis\r\n        commonSeriesSettings.valueXField = seriesConfig.xValue;\r\n        commonSeriesSettings.categoryYField = seriesConfig.yValue;\r\n      }\r\n    } else {\r\n      // normal series (not category)\r\n      commonSeriesSettings.valueXField = seriesConfig.xValue;\r\n      commonSeriesSettings.valueYField = seriesConfig.yValue;\r\n      commonSeriesSettings.openValueYField = seriesConfig.yOpenValue;\r\n    }\r\n\r\n    // if color is provided, set it\r\n    if (seriesConfig.color) {\r\n      // first the strokes and fills of the series itself\r\n      commonSeriesSettings.stroke = am5.color(seriesConfig.color);\r\n      if (\r\n        seriesConfig.type === 'bar' || seriesConfig.yOpenValue\r\n      ) {\r\n        commonSeriesSettings.fill = am5.color(seriesConfig.color);\r\n      }\r\n      // then of the tooltip\r\n      seriesTooltip.get('background')?.setAll({\r\n        fill: am5.color(seriesConfig.color),\r\n      });\r\n      seriesTooltip.label.setAll({\r\n        fill: am5.Color.alternative(\r\n          am5.color(seriesConfig.color),\r\n          am5.color('#f4f4f4'),\r\n          am5.color('#121212'),\r\n        ),\r\n      });\r\n    }\r\n\r\n    let series: am5xy.LineSeries | am5xy.ColumnSeries | am5xy.StepLineSeries;\r\n\r\n    switch (seriesConfig.type) {\r\n      case 'line':\r\n        series = am5xy.LineSeries.new(am5XyContainer.root, commonSeriesSettings);\r\n        series.set('connect', false);\r\n        this.setSeriesStrokeAndFill(\r\n          seriesConfig,\r\n          series,\r\n          seriesTooltip,\r\n        );\r\n        break;\r\n      case 'bar':\r\n        series = am5xy.ColumnSeries.new(am5XyContainer.root, commonSeriesSettings);\r\n        series.columns.template.setAll({\r\n          fillOpacity: 0.4,\r\n          strokeWidth: 1,\r\n          width: am5.percent(80),\r\n        });\r\n        break;\r\n      case 'stepline':\r\n        series = am5xy.StepLineSeries.new(am5XyContainer.root, commonSeriesSettings);\r\n        this.setSeriesStrokeAndFill(\r\n          seriesConfig,\r\n          series,\r\n          seriesTooltip,\r\n        );\r\n        break;\r\n    }\r\n\r\n    // if date series, add a data processor\r\n    if (seriesConfig.dateFormat) {\r\n      const dateOnX = xAxis instanceof am5xy.DateAxis;\r\n      series.data.processor = am5.DataProcessor.new(\r\n        am5XyContainer.root,\r\n        {\r\n          numericFields: [dateOnX ? seriesConfig.yValue : seriesConfig.xValue],\r\n          dateFields: [dateOnX ? seriesConfig.xValue : seriesConfig.yValue],\r\n          dateFormat: seriesConfig.dateFormat,\r\n        }\r\n      );\r\n    }\r\n\r\n    am5XyContainer.chart.series.push(series);\r\n    return series;\r\n\r\n  }\r\n\r\n  private setSeriesStrokeAndFill(\r\n    seriesConfig: Am5SeriesConfig,\r\n    series: am5xy.LineSeries | am5xy.StepLineSeries,\r\n    seriesTooltip: am5.Tooltip,\r\n  ): void {\r\n    if (seriesConfig.yOpenValue) {\r\n      // area series\r\n      series.fills.template.setAll({\r\n        fillOpacity: 0.2,\r\n        visible: true\r\n      });\r\n      series.strokes.template.setAll({\r\n        visible: false,\r\n      });\r\n      seriesTooltip.set(\r\n        'labelText',\r\n        seriesConfig.tooltipText || '[bold]{name}:[/] {valueY} to {openValueY}',\r\n      )\r\n    } else {\r\n      // normal line series\r\n      series.strokes.template.setAll({\r\n        strokeWidth: seriesConfig.strokeWidth,\r\n      });\r\n    }\r\n  }\r\n\r\n  // ********************************************************************************************************\r\n  // DATA & RANGES\r\n  // ********************************************************************************************************\r\n\r\n  setDataForAll(\r\n    am5XyContainer: Am5XyContainer,\r\n    data: object[],\r\n    axes: (DateAxis<AxisRenderer> | ValueAxis<AxisRenderer> | CategoryAxis<AxisRenderer>)[] = [],\r\n  ): void {\r\n    // always take a copy in case there are data-processors (will mutate data)\r\n    const chartData = UtilsService.copy(data);\r\n    for (const series of am5XyContainer.chart.series) {\r\n      series.data.setAll(chartData);\r\n    }\r\n    for (const axis of axes) {\r\n      axis.data.setAll(chartData);\r\n    }\r\n    this.setDataForLegend(am5XyContainer);\r\n  }\r\n\r\n  setDataForSeries(\r\n    series: LineSeries | StepLineSeries | ColumnSeries,\r\n    data: object[],\r\n  ): void {\r\n    // always take a copy in case there are data-processors (will mutate data)\r\n    const chartData = UtilsService.copy(data);\r\n    series.data.setAll(chartData);\r\n  }\r\n\r\n  setDataForLegend(\r\n    am5XyContainer: Am5XyContainer,\r\n  ): void {\r\n    // search for legend\r\n    const legend = this.getLegend(am5XyContainer);\r\n    if (legend) {\r\n      legend.data.setAll(am5XyContainer.chart.series.values);\r\n    }\r\n  }\r\n\r\n  getLegend(\r\n    am5XyContainer: Am5XyContainer,\r\n  ): Legend | undefined {\r\n    // search for legend\r\n    let legend: Legend | undefined;\r\n    for (const child of am5XyContainer.chart.children) {\r\n      if (child instanceof Legend) {\r\n        legend = child;\r\n        break;\r\n      }\r\n    }\r\n    return legend;\r\n  }\r\n\r\n  addDateRange(\r\n    dateAxis: DateAxis<AxisRenderer>,\r\n    config: Am5DateRangeConfig,\r\n  ): DataItem<IDateAxisDataItem> {\r\n\r\n    const rangeConfig = new Am5DateRangeConfig(config);\r\n\r\n    if (rangeConfig.clearRanges) {\r\n      dateAxis.axisRanges.clear();\r\n    }\r\n    const dataItem = dateAxis.makeDataItem({\r\n      value: rangeConfig.beginDt.toJSDate().getTime(),\r\n      endValue: rangeConfig.endDt.toJSDate().getTime(),\r\n    });\r\n    const range = dateAxis.createAxisRange(dataItem);\r\n    const defaultColor = this.theme?.getRgb('color', 0.6) || '';\r\n    range.get('axisFill')?.setAll({\r\n      fillOpacity: rangeConfig.fillOpacity,\r\n      fill: am5.color(rangeConfig.fillColor || defaultColor),\r\n      stroke: am5.color(rangeConfig.strokeColor || defaultColor),\r\n      strokeOpacity: 1,\r\n      strokeDasharray: rangeConfig.strokeDasharray,\r\n      strokeWidth: rangeConfig.strokeWidth,\r\n      visible: true\r\n    });\r\n\r\n    return range;\r\n\r\n  }\r\n\r\n}\r\n","import * as am5 from '@amcharts/amcharts5';\r\nimport {Legend} from '@amcharts/amcharts5';\r\nimport * as am5percent from \"@amcharts/amcharts5/percent\";\r\nimport {PieSeries} from \"@amcharts/amcharts5/percent\";\r\nimport {Injectable, OnDestroy} from '@angular/core';\r\nimport {Subject} from 'rxjs';\r\nimport {ThemeModel, FONT_FAMILY} from '@engie-group/ngx-gem-spaas';\r\nimport {Am5PieContainer, Am5PieSeriesConfig, Am5RootConfig} from \"../_models/am5.model\";\r\nimport {Am5Service} from \"./am5.service\";\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class Am5PieService implements OnDestroy {\r\n\r\n  private onDestroy$: Subject<void> = new Subject<void>();\r\n\r\n  constructor(\r\n    private am5Service: Am5Service,\r\n  ) {\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.onDestroy$.next();\r\n    this.onDestroy$.complete();\r\n  }\r\n\r\n  // ********************************************************************************************************\r\n  // CHART CREATION/DESTRUCTION\r\n  // ********************************************************************************************************\r\n\r\n  // create xy chart\r\n  createPieChart(\r\n    chartDiv: string | HTMLElement,\r\n    config?: Am5RootConfig,\r\n    innerRadiusPercent = 0,\r\n  ): Am5PieContainer {\r\n\r\n    const rootConfig = new Am5RootConfig(config || {});\r\n\r\n    const root = am5.Root.new(\r\n      chartDiv,\r\n      {\r\n        tooltipContainerBounds: rootConfig.tooltipContainerBounds,\r\n      },\r\n    );\r\n    let chart = root.container.children.push(\r\n      am5percent.PieChart.new(root, {\r\n        innerRadius: innerRadiusPercent ? am5.percent(innerRadiusPercent) : 0,\r\n        layout: root.verticalLayout,\r\n      })\r\n    );\r\n\r\n    this.am5Service.createLegend(\r\n      {root: root, chart: chart},\r\n      rootConfig.withLegend,\r\n      rootConfig.legendWithoutValueLabels,\r\n    );\r\n\r\n    return {root: root, chart: chart};\r\n\r\n  }\r\n\r\n  // ********************************************************************************************************\r\n  // SERIES\r\n  // ********************************************************************************************************\r\n\r\n  addSeries(\r\n    am5PieContainer: Am5PieContainer,\r\n    config: Am5PieSeriesConfig,\r\n    withLabels: boolean = true,\r\n    withBorders: boolean = true,\r\n  ): PieSeries {\r\n\r\n    const theme: ThemeModel | null = this.am5Service.getTheme();\r\n    const seriesConfig = new Am5PieSeriesConfig(config);\r\n\r\n    const commonSeriesSettings: am5percent.IPieSeriesSettings = {\r\n      name: seriesConfig.name,\r\n      categoryField: seriesConfig.xValue,\r\n      valueField: seriesConfig.yValue,\r\n    };\r\n\r\n    const series: am5percent.PieSeries = am5percent.PieSeries.new(am5PieContainer.root, commonSeriesSettings);\r\n\r\n    // tooltip\r\n    if (seriesConfig.withTooltip) {\r\n      const seriesTooltip = am5.Tooltip.new(am5PieContainer.root, {\r\n        labelText: seriesConfig.tooltipText || '[bold]{category}:[/] {value}',\r\n        paddingTop: 4,\r\n        paddingBottom: 4,\r\n      });\r\n      seriesTooltip.label.set('fontFamily', FONT_FAMILY);\r\n      seriesTooltip.get('background')?.setAll({\r\n        stroke: am5.color(theme?.getRgb('bg') as string), // the border of the tooltip\r\n      });\r\n\r\n      series.slices.template.set('tooltip', seriesTooltip);\r\n    } else {\r\n      series.slices.template.set('tooltipText', '');\r\n    }\r\n\r\n    // configure labels and ticks\r\n    series.labels.template.setAll({\r\n      fill: am5.color(theme?.getRgb('color') as string),\r\n      fontFamily: FONT_FAMILY,\r\n      visible: withLabels,\r\n    });\r\n    series.ticks.template.setAll({\r\n      stroke: am5.color(theme?.getRgb('color') as string),\r\n      strokeWidth: 2,\r\n      visible: withLabels,\r\n    });\r\n\r\n    // and borders if needed\r\n    if (withBorders) {\r\n      series.slices.template.setAll({\r\n        stroke: am5.color(theme?.getRgb('bg') as string),\r\n        strokeWidth: 2,\r\n      })\r\n    }\r\n\r\n    am5PieContainer.chart.series.push(series);\r\n    return series;\r\n\r\n  }\r\n\r\n  // ********************************************************************************************************\r\n  // DATA & RANGES\r\n  // ********************************************************************************************************\r\n\r\n  setData(\r\n    am5PieContainer: Am5PieContainer,\r\n    data: object[],\r\n  ): void {\r\n    for (const series of am5PieContainer.chart.series) {\r\n      series.data.setAll(data);\r\n    }\r\n    this.setDataForLegend(am5PieContainer);\r\n  }\r\n\r\n  setDataForLegend(\r\n    am5Container: Am5PieContainer,\r\n  ): void {\r\n    // search for legend\r\n    let legend: Legend | undefined;\r\n    for (const child of am5Container.chart.children) {\r\n      if (child instanceof Legend) {\r\n        legend = child;\r\n        break;\r\n      }\r\n    }\r\n    if (legend) {\r\n      const series = am5Container.chart.series.getIndex(0);\r\n      if (series) {\r\n        legend.data.setAll(series.dataItems);\r\n      }\r\n    }\r\n  }\r\n\r\n}\r\n","// SERVICES\r\nexport * from './_services/am5.service';\r\nexport * from './_services/am5-pie.service';\r\n\r\n// MODELS AND CONSTANTS\r\nexport * from './_models/am5.model';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.Am5Service"],"mappings":";;;;;;;;;;;;AAMO,MAAM,mBAAmB,GAAG;MAYtB,aAAa,CAAA;AAUxB,IAAA,WAAA,CACE,MAAqB,EAAA;QAErB,IAAI,CAAC,wBAAwB,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,0BAA0B,CAAC,GAAG,MAAM,CAAC,wBAAwB,GAAG,IAAI;AACjI,QAAA,IAAI,MAAM,CAAC,sBAAsB,EAAE;YACjC,IAAI,CAAC,sBAAsB,GAAG;AAC5B,gBAAA,GAAG,EAAE,MAAM,CAAC,sBAAsB,CAAC,GAAG,IAAI,CAAC;AAC3C,gBAAA,KAAK,EAAE,MAAM,CAAC,sBAAsB,CAAC,KAAK,IAAI,CAAC;AAC/C,gBAAA,MAAM,EAAE,MAAM,CAAC,sBAAsB,CAAC,MAAM,IAAI,CAAC;AACjD,gBAAA,IAAI,EAAE,MAAM,CAAC,sBAAsB,CAAC,IAAI,IAAI,CAAC;aAC9C;;QAEH,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,MAAM,CAAC,UAAU,GAAG,IAAI;;AAG1F;MAEY,aAAa,CAAA;IAOxB,WACE,CAAA,IAAmC,EACnC,MAAqB,EAAA;QAErB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE;QAC/B,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,MAAM,CAAC,QAAQ,GAAG,IAAI,KAAK,OAAO;QAC7F,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,MAAM,CAAC,UAAU,GAAG,IAAI;QACvF,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,MAAM,CAAC,WAAW,GAAG,IAAI,KAAK,MAAM;AACrG,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;;AAG1B;MAEY,kBAAkB,CAAA;AAO7B,IAAA,WAAA,CAAY,MAA0B,EAAA;AACpC,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE;QAC9C,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,EAAE;AAC3C,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;AAC3B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;QAC3B,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,MAAM,CAAC,WAAW,GAAG,IAAI;;AAG7F;AAEK,MAAO,eAAgB,SAAQ,kBAAkB,CAAA;AAQrD,IAAA,WAAA,CAAY,MAAuB,EAAA;QACjC,KAAK,CAAC,MAAM,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE;QAC/B,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE;QACzC,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,MAAM,CAAC,OAAO,GAAG,KAAK;QAC/E,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC;AAC1C,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;QACvB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE;;AAG5C;MAEY,kBAAkB,CAAA;AAU7B,IAAA,WAAA,CACE,MAA0B,EAAA;AAE1B,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO;AAC7B,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;QACzB,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,MAAM,CAAC,WAAW,GAAG,IAAI;QAC1F,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,EAAE;QAC3C,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,CAAC;QAClD,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC;QACvF,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE;QACvC,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,MAAM,CAAC,WAAW,GAAG,IAAI;;AAG7F;;ACjGD,GAAG,CAAC,UAAU,CAAC,0BAA0B,CAAC;MAK7B,UAAU,CAAA;AAKrB,IAAA,WAAA,CACU,YAA0B,EAAA;QAA1B,IAAY,CAAA,YAAA,GAAZ,YAAY;QAJd,IAAK,CAAA,KAAA,GAAsB,IAAI;AAC/B,QAAA,IAAA,CAAA,UAAU,GAAkB,IAAI,OAAO,EAAQ;QAKrD,IAAI,CAAC,UAAU,EAAE;;IAGnB,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;;IAGpB,UAAU,GAAA;AAChB,QAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB;AAC/B,aAAA,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;AAE3B,aAAA,SAAS,CAAC,CAAC,KAAiB,KAAI;AAC7B,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AACpB,SAAC,CACF;;IAGL,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,KAAK;;;;;;IAQnB,aAAa,CACX,QAA8B,EAC9B,MAAsB,EAAA;QAGtB,MAAM,UAAU,GAAW,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAW;QAChE,MAAM,UAAU,GAAG,IAAI,aAAa,CAAC,MAAM,IAAI,EAAE,CAAC;QAElD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CACvB,QAAQ,EACR;YACE,sBAAsB,EAAE,UAAU,CAAC,sBAAsB;AAC1D,SAAA,CACF;AACD,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CACtC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE;YACtB,MAAM,EAAE,IAAI,CAAC,cAAc;;AAE3B,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,YAAY,EAAE,CAAC;AAChB,SAAA,CAAC,CACH;;QAGD,MAAM,EAAE,GAAG,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE;AACxC,YAAA,cAAc,EAAE,CAAC;AACjB,YAAA,cAAc,EAAE,CAAC;AACjB,YAAA,cAAc,EAAE,CAAC;AACjB,YAAA,cAAc,EAAE,CAAC;AACjB,YAAA,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;AAC3B,YAAA,WAAW,EAAE,CAAC;AACf,SAAA,CAAC;QACF,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC;AACnC,YAAA,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,CAAW,CAAC;AACzD,SAAA,CAAC;AACF,QAAA,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC;AACzB,YAAA,UAAU,EAAE,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE;AAC5B,gBAAA,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAW,CAAC;AACnD,gBAAA,MAAM,EAAE,CAAC;AACT,gBAAA,KAAK,EAAE,EAAE;aACV,CAAC;AACF,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,aAAa,EAAE,CAAC;AAChB,YAAA,WAAW,EAAE,CAAC;AACd,YAAA,EAAE,EAAE,EAAE;YACN,EAAE,EAAE,CAAC,EAAE;AACR,SAAA,CAAC;;AAGF,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE;AAC1D,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC,CAAC;AACH,QAAA,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;;AAElB,YAAA,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;AAC7B,YAAA,WAAW,EAAE,CAAC;AACd,YAAA,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC;AACvB,SAAA,CAAC;AAEF,QAAA,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;AAClB,YAAA,OAAO,EAAE;AACV,SAAA,CAAC;QAEF,IAAI,CAAC,YAAY,CACf,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAC,EAC1B,UAAU,CAAC,UAAU,EACrB,UAAU,CAAC,wBAAwB,CACpC;QAED,OAAO,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAC;;AAInC,IAAA,YAAY,CACV,YAA8C,EAC9C,UAA+B,EAC/B,wBAA6C,EAAA;QAE7C,IAAI,UAAU,EAAE;AACd,YAAA,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAChD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE;AAChC,gBAAA,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AACxB,gBAAA,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AAClB,gBAAA,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,UAAU;AACrC,aAAA,CAAC,CAAC;AACL,YAAA,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC5B,gBAAA,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAW,CAAC;AACtD,gBAAA,UAAU,EAAE,WAAW;AACvB,gBAAA,QAAQ,EAAE,QAAQ;AACnB,aAAA,CAAC;AACF,YAAA,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;AACjC,gBAAA,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAW,CAAC;AACtD,gBAAA,UAAU,EAAE,WAAW;AACvB,gBAAA,QAAQ,EAAE,QAAQ;AACnB,aAAA,CAAC;AACF,YAAA,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC7B,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,KAAK,EAAE,EAAE;AACV,aAAA,CAAC;YACF,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,EAAE,wBAAwB,CAAC;;;AAI5E,IAAA,YAAY,CACV,YAA0D,EAAA;AAE1D,QAAA,IAAI,YAAY,EAAE,IAAI,EAAE;AACtB,YAAA,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;;;;;;AAQ/B,IAAA,eAAe,CACb,cAA8B,EAC9B,aAAqB,EACrB,MAAqB,EAAA;QAGrB,MAAM,UAAU,GAAG,IAAI,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC;QACxD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,KAAK,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK;AAC9F,QAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,KAAK,GAAG,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,EAAC,eAAe,EAAE,CAAC,EAAC,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC;AAChK,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CACpB,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE;AAC1C,YAAA,aAAa,EAAE,aAAa;AAC5B,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAC7B,cAAc,CAAC,IAAI,EACnB,UAAU,CAAC,WAAW;AAEzB,SAAA,CAAC,CACH;AAED,QAAA,IAAI,CAAC,mBAAmB,CACtB,QAAQ,EACR,UAAU,CAAC,QAAQ,EACnB,UAAU,CAAC,UAAU,CACtB;AACD,QAAA,IAAI,CAAC,YAAY,CACf,cAAc,CAAC,IAAI,EACnB,IAAI,EACJ,UAAU,CAAC,IAAI,EACf,UAAU,CAAC,KAAK,CACjB;AAED,QAAA,OAAO,IAAI;;AAIb,IAAA,WAAW,CACT,cAA8B,EAC9B,MAAqB,EACrB,YAAuC,GAAA,EAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAC,EAAA;QAGtE,MAAM,UAAU,GAAG,IAAI,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC;QACpD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,KAAK,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK;AAC9F,QAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,KAAK,GAAG,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,EAAC,eAAe,EAAE,EAAE,EAAC,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC;AACjK,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CACpB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE;AACtC,YAAA,YAAY,EAAE,YAAY;AAC1B,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAC7B,cAAc,CAAC,IAAI,EACnB,UAAU,CAAC,WAAW,CACvB;AACD,YAAA,iBAAiB,EAAE,OAAO;AAC3B,SAAA,CAAC,CACH;AACD,QAAA,IAAI,CAAC,mBAAmB,CACtB,QAAQ,EACR,UAAU,CAAC,QAAQ,EACnB,UAAU,CAAC,UAAU,CACtB;AACD,QAAA,IAAI,CAAC,YAAY,CACf,cAAc,CAAC,IAAI,EACnB,IAAI,EACJ,UAAU,CAAC,IAAI,EACf,UAAU,CAAC,KAAK,CACjB;AAED,QAAA,OAAO,IAAI;;IAIb,YAAY,CACV,cAA8B,EAC9B,MAAqB,EAAA;QAGrB,MAAM,UAAU,GAAG,IAAI,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC;QACrD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,KAAK,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK;AAC9F,QAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,KAAK,GAAG,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC;AAE9I,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CACpB,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE;AACvC,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAC7B,cAAc,CAAC,IAAI,EACnB,UAAU,CAAC,WAAW;AAEzB,SAAA,CAAC,CACH;AAED,QAAA,IAAI,CAAC,mBAAmB,CACtB,QAAQ,EACR,UAAU,CAAC,QAAQ,EACnB,UAAU,CAAC,UAAU,CACtB;AACD,QAAA,IAAI,CAAC,YAAY,CACf,cAAc,CAAC,IAAI,EACnB,IAAI,EACJ,UAAU,CAAC,IAAI,EACf,UAAU,CAAC,KAAK,CACjB;AAED,QAAA,OAAO,IAAI;;IAGL,iBAAiB,CACvB,IAAU,EACV,WAAgC,EAAA;QAEhC,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,SAAS;;QAElB,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE;YACpC,UAAU,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE;AAClC,gBAAA,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,CAAW,CAAC;AACxD,gBAAA,WAAW,EAAE,CAAC;aACf,CAAC;AACF,YAAA,aAAa,EAAE,CAAC;AAChB,YAAA,UAAU,EAAE,CAAC;AACd,SAAA,CAAC;QACF,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC;AAC5C,QAAA,OAAO,OAAO;;AAGR,IAAA,mBAAmB,CACzB,QAAuC,EACvC,QAA6B,EAC7B,UAA+B,EAAA;;AAG/B,QAAA,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC5B,WAAW,EAAE,CAAC,QAAQ;AACtB,YAAA,QAAQ,EAAE,CAAC;AACX,YAAA,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAW,CAAC;AACzD,SAAA,CAAC;;AAEF,QAAA,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC9B,WAAW,EAAE,CAAC,UAAU;AACxB,YAAA,UAAU,EAAE,WAAW;AACvB,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAW,CAAC;;AAEtD,YAAA,UAAU,EAAE,CAAC;AACd,SAAA,CAAC;;IAGI,YAAY,CAClB,IAAU,EACV,IAAmF,EACnF,IAAe,EACf,QAAgB,EAAE,EAAA;QAElB,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,IAAI,KAAK,GAAG,EAAE;AAChB,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE;AAClB,oBAAA,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAW,CAAC;AACtD,oBAAA,UAAU,EAAE,WAAW;AACvB,oBAAA,UAAU,EAAE,KAAK;oBACjB,OAAO,EAAE,GAAG,CAAC,GAAG;AAChB,oBAAA,IAAI,EAAE,KAAK;oBACX,CAAC,EAAE,GAAG,CAAC,GAAG;AACX,iBAAA,CAAC,CACH;;iBACI;AACL,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CACnB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE;AAClB,oBAAA,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAW,CAAC;AACtD,oBAAA,UAAU,EAAE,WAAW;AACvB,oBAAA,UAAU,EAAE,KAAK;oBACjB,OAAO,EAAE,GAAG,CAAC,GAAG;oBAChB,QAAQ,EAAE,CAAC,EAAE;AACb,oBAAA,IAAI,EAAE,KAAK;oBACX,CAAC,EAAE,GAAG,CAAC,GAAG;AACX,iBAAA,CAAC,CACH;;;;IAKP,eAAe,CACb,IAAmF,EACnF,QAAgB,EAAA;;AAGhB,QAAA,IAAI,KAAwB;AAC5B,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjC,YAAA,IAAI,KAAK,YAAY,KAAK,EAAE;gBAC1B,KAAK,GAAG,KAAK;gBACb;;;QAGJ,IAAI,KAAK,EAAE;AACT,YAAA,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;;;;;;AAQ/B,IAAA,SAAS,CACP,cAA8B,EAC9B,KAAoF,EACpF,KAAoF,EACpF,MAAuB,EAAA;AAGvB,QAAA,MAAM,YAAY,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC;QAEhD,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE;AACzD,YAAA,aAAa,EAAE,CAAC,YAAY,CAAC,KAAK;AAClC,YAAA,iBAAiB,EAAE,CAAC,YAAY,CAAC,KAAK;AACtC,YAAA,SAAS,EAAE,YAAY,CAAC,WAAW,IAAI,2BAA2B;AAClE,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,aAAa,EAAE,CAAC;AACjB,SAAA,CAAC;QACF,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC;AAClD,QAAA,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;AACtC,YAAA,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAW,CAAC;AACtD,SAAA,CAAC;AAEF,QAAA,MAAM,oBAAoB,GAA4B;YACpD,IAAI,EAAE,YAAY,CAAC,IAAI;YACvB,OAAO,EAAE,YAAY,CAAC,OAAO;AAC7B,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,YAAY,CAAC,WAAW,GAAG,aAAa,GAAG,SAAS;SAC9D;;QAGD,MAAM,eAAe,GAAG,KAAK,YAAY,YAAY,GAAG,GAAG,GAAG,KAAK,YAAY,YAAY,GAAG,GAAG,GAAG,EAAE;QACtG,IAAI,eAAe,EAAE;AACnB,YAAA,IAAI,eAAe,KAAK,GAAG,EAAE;;AAE3B,gBAAA,oBAAoB,CAAC,cAAc,GAAG,YAAY,CAAC,MAAM;AACzD,gBAAA,oBAAoB,CAAC,WAAW,GAAG,YAAY,CAAC,MAAM;;iBACjD;;AAEL,gBAAA,oBAAoB,CAAC,WAAW,GAAG,YAAY,CAAC,MAAM;AACtD,gBAAA,oBAAoB,CAAC,cAAc,GAAG,YAAY,CAAC,MAAM;;;aAEtD;;AAEL,YAAA,oBAAoB,CAAC,WAAW,GAAG,YAAY,CAAC,MAAM;AACtD,YAAA,oBAAoB,CAAC,WAAW,GAAG,YAAY,CAAC,MAAM;AACtD,YAAA,oBAAoB,CAAC,eAAe,GAAG,YAAY,CAAC,UAAU;;;AAIhE,QAAA,IAAI,YAAY,CAAC,KAAK,EAAE;;YAEtB,oBAAoB,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC;YAC3D,IACE,YAAY,CAAC,IAAI,KAAK,KAAK,IAAI,YAAY,CAAC,UAAU,EACtD;gBACA,oBAAoB,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC;;;AAG3D,YAAA,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;gBACtC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC;AACpC,aAAA,CAAC;AACF,YAAA,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC;AACzB,gBAAA,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,WAAW,CACzB,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAC7B,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EACpB,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CACrB;AACF,aAAA,CAAC;;AAGJ,QAAA,IAAI,MAAoE;AAExE,QAAA,QAAQ,YAAY,CAAC,IAAI;AACvB,YAAA,KAAK,MAAM;AACT,gBAAA,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,oBAAoB,CAAC;AACxE,gBAAA,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC;gBAC5B,IAAI,CAAC,sBAAsB,CACzB,YAAY,EACZ,MAAM,EACN,aAAa,CACd;gBACD;AACF,YAAA,KAAK,KAAK;AACR,gBAAA,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,oBAAoB,CAAC;AAC1E,gBAAA,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC7B,oBAAA,WAAW,EAAE,GAAG;AAChB,oBAAA,WAAW,EAAE,CAAC;AACd,oBAAA,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AACvB,iBAAA,CAAC;gBACF;AACF,YAAA,KAAK,UAAU;AACb,gBAAA,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,oBAAoB,CAAC;gBAC5E,IAAI,CAAC,sBAAsB,CACzB,YAAY,EACZ,MAAM,EACN,aAAa,CACd;gBACD;;;AAIJ,QAAA,IAAI,YAAY,CAAC,UAAU,EAAE;AAC3B,YAAA,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,QAAQ;AAC/C,YAAA,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,GAAG,CAC3C,cAAc,CAAC,IAAI,EACnB;AACE,gBAAA,aAAa,EAAE,CAAC,OAAO,GAAG,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;AACpE,gBAAA,UAAU,EAAE,CAAC,OAAO,GAAG,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;gBACjE,UAAU,EAAE,YAAY,CAAC,UAAU;AACpC,aAAA,CACF;;QAGH,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AACxC,QAAA,OAAO,MAAM;;AAIP,IAAA,sBAAsB,CAC5B,YAA6B,EAC7B,MAA+C,EAC/C,aAA0B,EAAA;AAE1B,QAAA,IAAI,YAAY,CAAC,UAAU,EAAE;;AAE3B,YAAA,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC3B,gBAAA,WAAW,EAAE,GAAG;AAChB,gBAAA,OAAO,EAAE;AACV,aAAA,CAAC;AACF,YAAA,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC7B,gBAAA,OAAO,EAAE,KAAK;AACf,aAAA,CAAC;YACF,aAAa,CAAC,GAAG,CACf,WAAW,EACX,YAAY,CAAC,WAAW,IAAI,2CAA2C,CACxE;;aACI;;AAEL,YAAA,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC7B,WAAW,EAAE,YAAY,CAAC,WAAW;AACtC,aAAA,CAAC;;;;;;AAQN,IAAA,aAAa,CACX,cAA8B,EAC9B,IAAc,EACd,OAA0F,EAAE,EAAA;;QAG5F,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QACzC,KAAK,MAAM,MAAM,IAAI,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE;AAChD,YAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;;AAE/B,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;AACvB,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;;AAE7B,QAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC;;IAGvC,gBAAgB,CACd,MAAkD,EAClD,IAAc,EAAA;;QAGd,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AACzC,QAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;;AAG/B,IAAA,gBAAgB,CACd,cAA8B,EAAA;;QAG9B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;QAC7C,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;;;AAI1D,IAAA,SAAS,CACP,cAA8B,EAAA;;AAG9B,QAAA,IAAI,MAA0B;QAC9B,KAAK,MAAM,KAAK,IAAI,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE;AACjD,YAAA,IAAI,KAAK,YAAY,MAAM,EAAE;gBAC3B,MAAM,GAAG,KAAK;gBACd;;;AAGJ,QAAA,OAAO,MAAM;;IAGf,YAAY,CACV,QAAgC,EAChC,MAA0B,EAAA;AAG1B,QAAA,MAAM,WAAW,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC;AAElD,QAAA,IAAI,WAAW,CAAC,WAAW,EAAE;AAC3B,YAAA,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE;;AAE7B,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC;YACrC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE;YAC/C,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE;AACjD,SAAA,CAAC;QACF,MAAM,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC;AAChD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE;AAC3D,QAAA,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;YAC5B,WAAW,EAAE,WAAW,CAAC,WAAW;YACpC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,IAAI,YAAY,CAAC;YACtD,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,IAAI,YAAY,CAAC;AAC1D,YAAA,aAAa,EAAE,CAAC;YAChB,eAAe,EAAE,WAAW,CAAC,eAAe;YAC5C,WAAW,EAAE,WAAW,CAAC,WAAW;AACpC,YAAA,OAAO,EAAE;AACV,SAAA,CAAC;AAEF,QAAA,OAAO,KAAK;;8GAlkBH,UAAU,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAV,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cAFT,MAAM,EAAA,CAAA,CAAA;;2FAEP,UAAU,EAAA,UAAA,EAAA,CAAA;kBAHtB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCnBY,aAAa,CAAA;AAIxB,IAAA,WAAA,CACU,UAAsB,EAAA;QAAtB,IAAU,CAAA,UAAA,GAAV,UAAU;AAHZ,QAAA,IAAA,CAAA,UAAU,GAAkB,IAAI,OAAO,EAAQ;;IAOvD,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;;;;;;AAQ5B,IAAA,cAAc,CACZ,QAA8B,EAC9B,MAAsB,EACtB,kBAAkB,GAAG,CAAC,EAAA;QAGtB,MAAM,UAAU,GAAG,IAAI,aAAa,CAAC,MAAM,IAAI,EAAE,CAAC;QAElD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CACvB,QAAQ,EACR;YACE,sBAAsB,EAAE,UAAU,CAAC,sBAAsB;AAC1D,SAAA,CACF;AACD,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CACtC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE;AAC5B,YAAA,WAAW,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC;YACrE,MAAM,EAAE,IAAI,CAAC,cAAc;AAC5B,SAAA,CAAC,CACH;QAED,IAAI,CAAC,UAAU,CAAC,YAAY,CAC1B,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAC,EAC1B,UAAU,CAAC,UAAU,EACrB,UAAU,CAAC,wBAAwB,CACpC;QAED,OAAO,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAC;;;;;IAQnC,SAAS,CACP,eAAgC,EAChC,MAA0B,EAC1B,UAAsB,GAAA,IAAI,EAC1B,WAAA,GAAuB,IAAI,EAAA;QAG3B,MAAM,KAAK,GAAsB,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;AAC3D,QAAA,MAAM,YAAY,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC;AAEnD,QAAA,MAAM,oBAAoB,GAAkC;YAC1D,IAAI,EAAE,YAAY,CAAC,IAAI;YACvB,aAAa,EAAE,YAAY,CAAC,MAAM;YAClC,UAAU,EAAE,YAAY,CAAC,MAAM;SAChC;AAED,QAAA,MAAM,MAAM,GAAyB,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,oBAAoB,CAAC;;AAGzG,QAAA,IAAI,YAAY,CAAC,WAAW,EAAE;YAC5B,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE;AAC1D,gBAAA,SAAS,EAAE,YAAY,CAAC,WAAW,IAAI,8BAA8B;AACrE,gBAAA,UAAU,EAAE,CAAC;AACb,gBAAA,aAAa,EAAE,CAAC;AACjB,aAAA,CAAC;YACF,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC;AAClD,YAAA,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;AACtC,gBAAA,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAW,CAAC;AACjD,aAAA,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC;;aAC/C;YACL,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC;;;AAI/C,QAAA,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC5B,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAW,CAAC;AACjD,YAAA,UAAU,EAAE,WAAW;AACvB,YAAA,OAAO,EAAE,UAAU;AACpB,SAAA,CAAC;AACF,QAAA,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC3B,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAW,CAAC;AACnD,YAAA,WAAW,EAAE,CAAC;AACd,YAAA,OAAO,EAAE,UAAU;AACpB,SAAA,CAAC;;QAGF,IAAI,WAAW,EAAE;AACf,YAAA,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC5B,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAW,CAAC;AAChD,gBAAA,WAAW,EAAE,CAAC;AACf,aAAA,CAAC;;QAGJ,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AACzC,QAAA,OAAO,MAAM;;;;;IAQf,OAAO,CACL,eAAgC,EAChC,IAAc,EAAA;QAEd,KAAK,MAAM,MAAM,IAAI,eAAe,CAAC,KAAK,CAAC,MAAM,EAAE;AACjD,YAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;;AAE1B,QAAA,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC;;AAGxC,IAAA,gBAAgB,CACd,YAA6B,EAAA;;AAG7B,QAAA,IAAI,MAA0B;QAC9B,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE;AAC/C,YAAA,IAAI,KAAK,YAAY,MAAM,EAAE;gBAC3B,MAAM,GAAG,KAAK;gBACd;;;QAGJ,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YACpD,IAAI,MAAM,EAAE;gBACV,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;;;;8GA9I/B,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA,CAAA;;2FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACZD;;ACAA;;AAEG;;;;"}