{"version":3,"file":"index.umd.cjs","sources":["../src/common/utils/bigint.ts","../src/common/utils/dimensions.ts","../src/common/utils/domains.ts","../src/common/utils/formatting.ts","../src/common/utils/interpolation.ts","../src/common/utils/position.ts","../src/common/utils/selection.ts","../src/common/utils/stroke.ts","../src/common/utils/ticks.ts","../src/common/utils/math.ts","../src/common/utils/functions.ts","../src/common/utils/array.ts","../src/common/utils/size.ts","../src/common/utils/wrapText.tsx","../src/common/utils/useHoverIntent.ts","../src/common/utils/useResizeObserver.ts","../src/common/utils/merge.ts","../src/common/Axis/LinearAxis/LinearAxisLine.tsx","../src/common/Axis/LinearAxis/LinearAxisTickLine.tsx","../src/common/Axis/LinearAxis/LinearAxisTickLabel.tsx","../src/common/Axis/LinearAxis/LinearAxisTickSeries.tsx","../src/common/Axis/LinearAxis/LinearAxis.tsx","../src/common/Axis/LinearAxis/LinearXAxis.tsx","../src/common/Axis/LinearAxis/LinearYAxis.tsx","../src/common/Axis/LinearAxis/helpers.ts","../src/common/Axis/RadialAxis/RadialAxisTickSeries/RadialAxisTickLine.tsx","../src/common/Axis/RadialAxis/RadialAxisTickSeries/RadialAxisTickLabel.tsx","../src/common/Axis/RadialAxis/RadialAxisTickSeries/RadialAxisTick.tsx","../src/common/Axis/RadialAxis/RadialAxisTickSeries/RadialAxisTickSeries.tsx","../src/common/Axis/RadialAxis/RadialAxisArcSeries/RadialAxisArc.tsx","../src/common/Axis/RadialAxis/RadialAxisArcSeries/utils.ts","../src/common/Axis/RadialAxis/RadialAxisArcSeries/RadialAxisArcSeries.tsx","../src/common/Axis/RadialAxis/RadialAxisArcSeries/RadialAxisArcLine.tsx","../src/common/Axis/RadialAxis/RadialAxis.tsx","../src/common/Gestures/Move.tsx","../src/common/Brush/BrushHandle.tsx","../src/common/Brush/BrushSlice.tsx","../src/common/Brush/Brush.tsx","../src/common/Brush/ChartBrush.tsx","../src/common/containers/ChartContext.ts","../src/common/containers/ChartContainer.tsx","../src/common/data/bigInteger.ts","../src/common/data/builder.ts","../src/common/data/histogram.ts","../src/common/data/barStack.ts","../src/common/data/marimekko.ts","../src/common/data/areaStack.ts","../src/common/data/waterfall.ts","../src/common/Gestures/Pan.tsx","../src/common/Gestures/pinchUtils.ts","../src/common/Gestures/Zoom.tsx","../src/common/legends/DiscreteLegend/DiscreteLegend.tsx","../src/common/legends/DiscreteLegend/DiscreteLegendSymbol.tsx","../src/common/legends/DiscreteLegend/DiscreteLegendEntry.tsx","../src/common/legends/SequentialLegend/SequentialLegend.tsx","../src/common/Gridline/Gridline.tsx","../src/common/Gridline/GridStripe.tsx","../src/common/Gridline/GridlineSeries.tsx","../src/common/MarkLine/MarkLine.tsx","../src/common/Gradient/GradientStop.tsx","../src/common/Gradient/Gradient.tsx","../src/common/Gradient/RadialGradient.tsx","../src/common/Mask/Mask.tsx","../src/common/Mask/Stripes.tsx","../src/common/Tooltip/TooltipTemplate.tsx","../src/common/Tooltip/TooltipTheme.ts","../src/common/Tooltip/ChartTooltip.tsx","../src/common/Tooltip/TooltipArea.tsx","../src/common/ZoomPan/ZoomPan.tsx","../src/common/scales/basic.ts","../src/common/scales/marimekko.ts","../src/common/scales/multiSeries.ts","../src/common/scales/radial.ts","../src/common/ZoomPan/ChartZoomPan.tsx","../src/common/Motion/config.ts","../src/common/Motion/MotionPath.tsx","../src/common/color/schemes.ts","../src/common/color/helper.ts","../src/common/Count/useCount.tsx","../src/common/Count/Count.tsx","../src/common/ValueMarker/LinearValueMarker.tsx","../src/common/ValueMarker/RadialValueMarker.tsx","../src/common/Glow/utils.ts","../src/ScatterPlot/ScatterSeries/ScatterPoint.tsx","../src/ScatterPlot/ScatterSeries/ScatterSeries.tsx","../src/ScatterPlot/ScatterPlot.tsx","../src/AreaChart/AreaSeries/PointSeries.tsx","../src/AreaChart/AreaSeries/Area.tsx","../src/AreaChart/AreaSeries/Line.tsx","../src/AreaChart/AreaSeries/AreaSeries.tsx","../src/AreaChart/AreaSeries/StackedNormalizedAreaSeries.tsx","../src/AreaChart/AreaSeries/StackedAreaSeries.tsx","../src/AreaChart/AreaChart.tsx","../src/AreaChart/StackedAreaChart.tsx","../src/AreaChart/StackedNormalizedAreaChart.tsx","../src/BarChart/BarSeries/BarLabel.tsx","../src/BarChart/BarSeries/Bar.tsx","../src/BarChart/BarSeries/BarSeries.tsx","../src/BarChart/BarSeries/RangeLines.tsx","../src/BarChart/BarSeries/StackedBarSeries.tsx","../src/BarChart/BarSeries/StackedNormalizedBarSeries.tsx","../src/BarChart/BarSeries/MarimekkoBarSeries.tsx","../src/BarChart/BarSeries/HistogramBarSeries.tsx","../src/BarChart/BarSeries/GuideBar.tsx","../src/BarChart/BarChart.tsx","../src/BarChart/MarimekkoChart.tsx","../src/BarChart/StackedBarChart.tsx","../src/BarChart/StackedNormalizedBarChart.tsx","../src/BarChart/HistogramBarChart.tsx","../src/LineChart/LineSeries.tsx","../src/LineChart/LineChart.tsx","../src/Map/Map.tsx","../src/Map/MapMarker.tsx","../src/PieChart/PieArcSeries/useInterpolate.ts","../src/PieChart/PieArcSeries/PieArc.tsx","../src/PieChart/PieArcSeries/findBreakPoint.ts","../src/PieChart/PieArcSeries/PieArcLabel.tsx","../src/PieChart/PieArcSeries/radiusUtils.ts","../src/PieChart/PieArcSeries/PieArcSeries.tsx","../src/PieChart/PieChart.tsx","../src/Sankey/utils.ts","../src/Sankey/Sankey.tsx","../src/Sankey/SankeyLabel/SankeyLabel.tsx","../src/Sankey/SankeyLink/SankeyLink.tsx","../src/Sankey/SankeyNode/SankeyNode.tsx","../src/Sparkline/SparklineChart.tsx","../src/Sparkline/AreaSparklineChart.tsx","../src/Sparkline/BarSparklineChart.tsx","../src/Sparkline/SonarChart.tsx","../src/RadialAreaChart/RadialAreaSeries/RadialArea.tsx","../src/RadialAreaChart/RadialAreaSeries/RadialLine.tsx","../src/RadialScatterPlot/RadialScatterPlot.tsx","../src/RadialScatterPlot/RadialScatterSeries/RadialScatterPoint.tsx","../src/RadialScatterPlot/RadialScatterSeries/RadialScatterSeries.tsx","../src/RadialAreaChart/RadialAreaSeries/RadialPointSeries.tsx","../src/RadialAreaChart/RadialAreaSeries/RadialAreaSeries.tsx","../src/RadialAreaChart/RadialAreaChart.tsx","../node_modules/d3-path/src/path.js","../src/RadialBarChart/RadialBarSeries/MotionBar.tsx","../src/RadialBarChart/RadialBarSeries/RadialGuideBar.tsx","../src/RadialBarChart/RadialBarSeries/RadialBar.tsx","../src/RadialBarChart/RadialBarSeries/RadialBarSeries.tsx","../src/RadialBarChart/RadialBarChart.tsx","../src/RadialGauge/RadialGaugeSeries/RadialGaugeArc.tsx","../src/RadialGauge/RadialGaugeSeries/RadialGaugeLabel/RadialGaugeLabel.tsx","../src/RadialGauge/RadialGaugeSeries/RadialGaugeValueLabel/RadialGaugeValueLabel.tsx","../src/RadialGauge/RadialGaugeSeries/RadialGaugeOuterArc.tsx","../src/RadialGauge/RadialGaugeSeries/RadialGaugeSeries.tsx","../src/RadialGauge/RadialGaugeSeries/RadialGaugeStackedArc.tsx","../src/RadialGauge/RadialGaugeSeries/StackedRadialGaugeValueLabel/StackedRadialGaugeValueLabel.tsx","../src/RadialGauge/RadialGaugeSeries/StackedRadialGaugeSeries.tsx","../src/RadialGauge/RadialGaugeSeries/StackedRadialGaugeDescriptionLabel/StackedRadialGaugeDescriptionLabel.tsx","../src/RadialGauge/RadialGauge.tsx","../src/Heatmap/HeatmapSeries/HeatmapCell.tsx","../src/Heatmap/HeatmapSeries/HeatmapSeries.tsx","../src/Heatmap/Heatmap.tsx","../node_modules/date-fns/toDate.mjs","../node_modules/date-fns/constructFrom.mjs","../node_modules/date-fns/addDays.mjs","../node_modules/date-fns/subDays.mjs","../src/Heatmap/calendarUtils.ts","../src/Heatmap/CalendarHeatmap.tsx","../src/LinearGauge/LinearGaugeBar.tsx","../src/LinearGauge/LinearGaugeOuterBar.tsx","../src/LinearGauge/LinearGaugeSeries.tsx","../src/LinearGauge/LinearGauge.tsx","../src/VennDiagram/useInterpolate.ts","../src/VennDiagram/VennArc.tsx","../src/VennDiagram/VennLabel.tsx","../src/VennDiagram/VennOuterLabel.tsx","../src/VennDiagram/VennSeries.tsx","../src/VennDiagram/starEuler/starEuler.ts","../src/VennDiagram/VennDiagram.tsx","../src/BubbleChart/Bubble.tsx","../src/BubbleChart/BubbleLabel.tsx","../src/BubbleChart/BubbleSeries.tsx","../src/BubbleChart/BubbleChart.tsx","../src/TreeMap/TreeMapLabel.tsx","../src/TreeMap/TreeMapRect.tsx","../src/TreeMap/TreeMapSeries.tsx","../src/TreeMap/TreeMap.tsx","../src/BarList/BarListSeries.tsx","../src/BarList/BarList.tsx","../src/Meter/MeterColumn.tsx","../src/Meter/Meter.tsx","../src/RadarChart/RadarChartSeries.tsx","../src/RadarChart/RadarChart.tsx","../src/FunnelChart/FunnelSeries/FunnelArc.tsx","../src/FunnelChart/FunnelSeries/FunnelAxis/FunnelAxisLabel.tsx","../src/FunnelChart/FunnelSeries/FunnelAxis/FunnelAxisLine.tsx","../src/FunnelChart/FunnelSeries/FunnelAxis/FunnelAxis.tsx","../src/FunnelChart/FunnelSeries/FunnelSeries.tsx","../src/FunnelChart/FunnelChart.tsx","../src/SunburstChart/useInterpolate.ts","../src/SunburstChart/SunburstArc.tsx","../src/SunburstChart/SunburstArcLabel.tsx","../src/SunburstChart/SunburstSeries.tsx","../src/SunburstChart/SunburstChart.tsx","../src/WordCloud/WordCloudLabel.tsx","../src/WordCloud/WordCloud.tsx"],"sourcesContent":["import humanFormat from 'human-format';\n\nconst humanFormatScale = new humanFormat.Scale({\n  k: 1000,\n  M: 1000000,\n  B: 1000000000\n});\n\nconst humanFormatMillionScale = new humanFormat.Scale({\n  M: 1,\n  B: 1000,\n  T: 1000000\n});\n\nconst ONE_MILLION = 1000000;\nconst ONE_BILLION = 1000000000;\n\nexport const humanFormatBigInteger = (bigInteger) => {\n  if (bigInteger.greater(ONE_BILLION)) {\n    return humanFormat(bigInteger.divide(ONE_MILLION).toJSNumber(), {\n      scale: humanFormatMillionScale\n    });\n  }\n  return humanFormat(bigInteger.toJSNumber(), { scale: humanFormatScale });\n};\n\nexport const bigIntegerToLocaleString = (bigInteger) => {\n  let i = 0;\n  let formattedString = '';\n  for (const c of bigInteger.toString().split('').reverse()) {\n    if (i > 0 && i % 3 === 0) {\n      formattedString = ',' + formattedString;\n    }\n    formattedString = c + formattedString;\n    i++;\n  }\n  return formattedString;\n};\n","export interface Dimensions {\n  xOffset: number;\n  yOffset: number;\n  height: number;\n  width: number;\n  chartWidth: number;\n  chartHeight: number;\n  xMargin: number;\n  yMargin: number;\n}\n\nexport interface DimensionParameter {\n  xOffset: number;\n  yOffset: number;\n  yAxis: any;\n  xAxis: any;\n  height: number;\n  width: number;\n  margins: Margins;\n}\n\nexport type Margins =\n  | [number, number]\n  | [number, number, number, number]\n  | number;\n\n/**\n * Given a margins object, returns the top/left/right/bottom positions.\n */\nfunction parseMargins(margins?: Margins) {\n  let top = 0;\n  let right = 0;\n  let bottom = 0;\n  let left = 0;\n\n  if (Array.isArray(margins)) {\n    if (margins.length === 2) {\n      top = margins[0];\n      bottom = margins[0];\n      left = margins[1];\n      right = margins[1];\n    } else if (margins.length === 4) {\n      top = margins[0];\n      right = margins[1];\n      bottom = margins[2];\n      left = margins[3];\n    }\n  } else if (margins !== undefined) {\n    top = margins;\n    right = margins;\n    bottom = margins;\n    left = margins;\n  }\n\n  return {\n    top,\n    right,\n    bottom,\n    left\n  };\n}\n\n/**\n * Calculates the margins for the chart.\n */\nfunction calculateMarginOffsets(\n  height: number,\n  width: number,\n  margins: { left: number; right: number; bottom: number; top: number }\n) {\n  const { left, right, bottom, top } = margins;\n  const newHeight = height - top - bottom;\n  const newWidth = width - left - right;\n\n  return {\n    height: newHeight,\n    width: newWidth\n  };\n}\n\n/**\n * Calculates the dimensions for the chart.\n */\nexport function getDimension({\n  xOffset,\n  yOffset,\n  height,\n  width,\n  margins\n}: DimensionParameter | any): Dimensions {\n  const parsedMargins = parseMargins(margins);\n  const marginDims = calculateMarginOffsets(height, width, parsedMargins);\n  const chartWidth = marginDims.width - xOffset;\n  const chartHeight = marginDims.height - yOffset;\n\n  return {\n    xOffset,\n    yOffset,\n    height,\n    width,\n    chartWidth,\n    chartHeight,\n    xMargin: xOffset + parsedMargins.left,\n    yMargin: parsedMargins.top\n  };\n}\n","import { min, max } from 'd3-array';\n\n/**\n * Gets the min/max values handling nested arrays.\n */\nexport function extent(data: any[], attr: string): number[] {\n  const accessor = (val, fn) => {\n    if (Array.isArray(val.data)) {\n      return fn(val.data, (vv) => vv[attr]);\n    }\n    return val[attr];\n  };\n\n  const minVal = min(data, (d) => accessor(d, min));\n  const maxVal = max(data, (d) => accessor(d, max));\n\n  return [minVal, maxVal];\n}\n\n/**\n * Get the domain for the Y Axis.\n */\nexport function getYDomain({\n  data,\n  scaled = false,\n  isDiverging = false\n}): number[] {\n  const [startY, endY] = extent(data, 'y');\n  const [startY1, endY1] = extent(data, 'y1');\n\n  // If dealing w/ negative numbers, we should\n  // normalize the top and bottom values\n  if (startY < 0 || isDiverging) {\n    const posStart = -startY;\n    const maxNum = Math.max(posStart, endY);\n\n    return [-maxNum, maxNum];\n  }\n\n  // Scaled start scale at non-zero\n  if (scaled) {\n    return [startY1, endY1];\n  }\n\n  // Start at 0 based\n  return [0, endY1];\n}\n\n/**\n * Get the domain for the X Axis.\n */\nexport function getXDomain({\n  data,\n  scaled = false,\n  isDiverging = false\n}): number[] {\n  const startX0 = extent(data, 'x0')[0];\n  const endX1 = extent(data, 'x1')[1];\n\n  // Histograms use dates for start/end\n  if (typeof startX0 === 'number' && typeof endX1 === 'number') {\n    // If dealing w/ negative numbers, we should\n    // normalize the top and bottom values\n    if (startX0 < 0 || isDiverging) {\n      const posStart = -startX0;\n      const maxNum = Math.max(posStart, endX1);\n\n      return [-maxNum, maxNum];\n    }\n\n    // If not scaled, return 0/max domains\n    if (!scaled) {\n      return [0, endX1];\n    }\n  }\n\n  // Scaled start scale at non-zero\n  return [startX0, endX1];\n}\n","import { ChartInternalDataTypes } from '@/common/data';\n\n// https://stackoverflow.com/questions/673905/best-way-to-determine-users-locale-within-browser\nconst getNavigatorLanguage = () => {\n  if (typeof window === 'undefined') {\n    return 'en';\n  }\n\n  if (navigator.languages && navigator.languages.length) {\n    return navigator.languages[0];\n  }\n\n  if (\n    (navigator as any).userLanguage ||\n    navigator.language ||\n    (navigator as any).browserLanguage\n  ) {\n    return 'en';\n  }\n};\n\nconst locale = getNavigatorLanguage();\n\nconst options = {\n  year: 'numeric',\n  month: 'numeric',\n  day: 'numeric',\n  hour12: true,\n  formatMatcher: 'best fit'\n};\n\n/**\n * Format a value based on type.\n */\nexport function formatValue(value: ChartInternalDataTypes): string {\n  if (value !== undefined) {\n    if (value instanceof Date) {\n      return (value as Date).toLocaleDateString(locale, options as any);\n    } else if (typeof value === 'number') {\n      return value.toLocaleString();\n    }\n\n    return value as string;\n  }\n\n  return 'No value';\n}\n\n/**\n * Generate aria label text for the given data point(s)\n * @param datapoint\n * @returns Aria Label\n */\nexport function getAriaLabel(datapoint) {\n  const isArray = Array.isArray(datapoint);\n  if (isArray) {\n    return datapoint?.map((row) => getAriaLabel(row)).join(', ');\n  } else {\n    const key = datapoint?.key || datapoint?.x;\n    // 'data' or 'y' will not be an array as the label is unique for each element\n    const value = datapoint?.data || datapoint?.y;\n    return `${key}: ${formatValue(value)}`;\n  }\n}\n","import { curveLinear, curveMonotoneX, curveStep } from 'd3-shape';\n\nexport type InterpolationTypes = 'linear' | 'smooth' | 'step';\nexport type RadialInterpolationTypes = 'linear' | 'smooth';\n\n/**\n * Helper function for interpolation.\n */\nexport function interpolate(\n  type: InterpolationTypes | RadialInterpolationTypes\n) {\n  if (type === 'smooth') {\n    return curveMonotoneX;\n  } else if (type === 'step') {\n    return curveStep;\n  } else {\n    return curveLinear;\n  }\n}\n","import { bisector } from 'd3-array';\nimport { applyToPoint, applyToPoints, inverse } from 'transformation-matrix';\n\ntype PointObjectNotation = { x: number; y: number };\n\n/**\n * Add ability to calculate scale band position.\n * Reference: https://stackoverflow.com/questions/38633082/d3-getting-invert-value-of-band-scales\n */\nconst scaleBandInvert = (scale, round = false) => {\n  const domain = scale.domain();\n  const paddingOuter = scale(domain[0]);\n  const eachBand = scale.step();\n  const [, end] = scale.range();\n\n  return (offset) => {\n    // Keep the band from going outside the domain length\n    let band = Math.min(\n      (offset - paddingOuter) / eachBand,\n      domain.length - 0.01\n    );\n\n    // Catch negative band values from horizontal charts exceeding domain length\n    if (band < 0 && Math.abs(band) > domain.length - 1) {\n      band = Math.floor(Math.abs(band)) * -1;\n    }\n\n    // Round to the closest index OR take the floor value\n    let index = round\n      ? Math.round(band) % domain.length\n      : Math.floor(band) % domain.length;\n\n    // Handle horizontal charts...\n    if (end === 0) {\n      index = index * -1;\n    }\n\n    return domain[Math.max(0, Math.min(index, domain.length - 1))];\n  };\n};\n\n/**\n * Get the data point closest to a given position on a continuous scale.\n *\n * @param {Object} params - The parameters for the function.\n * @param {number} params.pos - The position to find the closest point to.\n * @param {Object} params.scale - The scale object.\n * @param {Array} params.data - The data array.\n * @param {string} [params.attr='x'] - The attribute to use for comparison.\n * @param {boolean} [params.roundDown=false] - Whether to round down to the nearest point.\n *\n * @returns {Object} The closest point to the specified position.\n */\nexport const getClosestContinousScalePoint = ({\n  pos,\n  scale,\n  data,\n  attr = 'x',\n  roundDown = false\n}: {\n  pos: number;\n  scale: any;\n  data: any[];\n  attr?: string;\n  roundDown?: boolean;\n}) => {\n  const domain = scale.invert(pos);\n\n  // Select the index\n  const bisect = bisector((d: any) => {\n    // add 1 to an index so it's the upper limit of a domain\n    return attr === 'i' ? d[attr] + 1 : d[attr];\n  }).right;\n  const index = bisect(data, domain);\n\n  // Determine min index\n  const minIndex = Math.max(0, index - 1);\n  const before = data[minIndex];\n\n  if (roundDown) {\n    return before;\n  }\n\n  // Determine max index\n  const maxIndex = Math.min(data.length - 1, index);\n  const after = data[maxIndex];\n\n  // Determine which is closest to the point\n  let beforeVal = before[attr];\n  let afterVal = after[attr];\n  beforeVal = domain - beforeVal;\n  afterVal = afterVal - domain;\n\n  return beforeVal < afterVal ? before : after;\n};\n\n/**\n * Get the data point closest to a given position on a band scale. This rounds down by default.\n *\n * @param {Object} params - The parameters for the function.\n * @param {number} params.pos - The position to find the closest point to.\n * @param {Object} params.scale - The scale object.\n * @param {Array} params.data - The data array.\n * @param {boolean} [params.roundClosest=false] - Whether to round to the closest point instead of down.\n *\n * @returns {Object} The closest point to the specified position.\n */\nexport const getClosestBandScalePoint = ({\n  pos,\n  scale,\n  data,\n  roundClosest = false\n}: {\n  pos: number;\n  scale: any;\n  data: any[];\n  roundClosest?: boolean;\n}) => {\n  const domain = scale.domain();\n  let prop;\n\n  // Of course the Marimekko is a pain...\n  if (scale.mariemkoInvert) {\n    prop = scale.mariemkoInvert(pos);\n  } else {\n    prop = scaleBandInvert(scale, roundClosest)(pos);\n  }\n\n  const idx = domain.indexOf(prop);\n  return data[idx];\n};\n\n/**\n * Given an event, get the parent svg element;\n */\nexport const getParentSVG = (event) => {\n  // set node to targets owner svg\n  let node = event.target.ownerSVGElement;\n\n  // find the outermost svg\n  if (node) {\n    while (node.ownerSVGElement) {\n      node = node.ownerSVGElement;\n    }\n  }\n\n  return node;\n};\n\n/**\n * Given an event, get the relative X/Y position for a target.\n */\nexport const getPositionForTarget = ({ target, clientX, clientY }) => {\n  const rect = target.getBoundingClientRect();\n  return {\n    x: clientX - (rect?.left || 0) - target.clientLeft,\n    y: clientY - (rect?.top || 0) - target.clientTop\n  };\n};\n\n/**\n * Gets the point from q given matrix.\n */\nexport const getPointFromMatrix = (event, matrix): PointObjectNotation => {\n  const parent = getParentSVG(event);\n\n  if (!parent) {\n    return null;\n  }\n\n  // Determines client coordinates relative to the editor component\n  const { top, left } = parent.getBoundingClientRect();\n  const x = event.clientX - left;\n  const y = event.clientY - top;\n\n  // Transforms the coordinate to world coordinate (in the SVG/DIV world)\n  return applyToPoint(inverse(matrix), { x, y });\n};\n\n/**\n * Get the start/end matrix.\n */\nexport const getLimitMatrix = (\n  height: number,\n  width: number,\n  matrix\n): PointObjectNotation[] =>\n  applyToPoints(matrix, [\n    { x: 0, y: 0 },\n    { x: width, y: height }\n  ]);\n\n/**\n * Constrain the matrix.\n */\nexport const constrainMatrix = (height: number, width: number, matrix) => {\n  const [min, max] = getLimitMatrix(height, width, matrix) as {\n    x: number;\n    y: number;\n  }[];\n\n  if (max.x < width || max.y < height) {\n    return true;\n  }\n\n  if (min.x > 0 || min.y > 0) {\n    return true;\n  }\n\n  return false;\n};\n\n/**\n * Determine if scale factor is less than allowed.\n */\nconst lessThanScaleFactorMin = (value, scaleFactor: number) =>\n  value.scaleFactorMin && value.d * scaleFactor <= value.scaleFactorMin;\n\n/**\n * Determine if scale factor is larger than allowed.\n */\nconst moreThanScaleFactorMax = (value, scaleFactor: number) =>\n  value.scaleFactorMax && value.d * scaleFactor >= value.scaleFactorMax;\n\n/**\n * Determine if both min and max scale fctors are going out of bounds.\n */\nexport const isZoomLevelGoingOutOfBounds = (value, scaleFactor: number) => {\n  const a = lessThanScaleFactorMin(value, scaleFactor) && scaleFactor < 1;\n  const b = moreThanScaleFactorMax(value, scaleFactor) && scaleFactor > 1;\n  return a || b;\n};\n","/**\n * Toggle the text selection of the body.\n */\nexport function toggleTextSelection(allowSelection: boolean) {\n  const style = allowSelection ? '' : 'none';\n  [\n    '-webkit-touch-callout',\n    '-webkit-user-select',\n    '-khtml-user-select',\n    '-moz-user-select',\n    '-ms-user-select',\n    'user-select'\n  ].forEach((prop) => (document.body.style[prop] = style));\n}\n","import { ChartInternalShallowDataShape } from '@/common/data';\n\n/**\n * Calculates whether the stroke should be shown.\n */\nexport function calculateShowStroke(\n  current: ChartInternalShallowDataShape,\n  data: ChartInternalShallowDataShape[]\n) {\n  const i = data.indexOf(current);\n  let showLine = false;\n\n  const prev = data[i - 1];\n  if (i > 0 && prev.y) {\n    showLine = true;\n  }\n\n  const cur = data[i];\n  if (cur.y) {\n    showLine = true;\n  }\n\n  const next = data[i + 1];\n  if (i < data.length - 1 && next.y) {\n    showLine = true;\n  }\n\n  return showLine;\n}\n","import { TimeInterval } from 'd3-time';\n\nconst ONE_DAY = 60 * 60 * 24;\nconst DURATION_TICK_STEPS = [\n  0.001, // 1 ms\n  0.005, // 5 ms\n  0.01, // 10 ms\n  0.05, // 50 ms\n  0.1, // 100 ms\n  0.5, // 500 ms\n  1, // 1 s\n  5, // 5 s\n  10, // 10 s\n  15, // 15 s\n  60, // 1 m\n  60 * 15, // 15 m\n  60 * 30, // 30 m\n  60 * 60, // 1 h\n  60 * 60 * 2, // 2 h\n  60 * 60 * 4, // 4 h\n  60 * 60 * 6, // 6 h\n  60 * 60 * 8, // 8 h\n  60 * 60 * 12, // 12 h\n  ONE_DAY // 24 h\n];\n\n/**\n * Reduce the ticks to the max number of ticks.\n */\nexport function reduceTicks<T>(ticks: T[], maxTicks: number) {\n  if (ticks.length > maxTicks) {\n    const reduced: T[] = [];\n    const modulus = Math.floor(ticks.length / maxTicks);\n\n    for (let i = 0; i < ticks.length; i++) {\n      if (i % modulus === 0) {\n        reduced.push(ticks[i]);\n      }\n    }\n    ticks = reduced;\n  }\n\n  return ticks;\n}\n\n/**\n * Determine the max ticks for the available width.\n */\nexport function getMaxTicks(size: number, dimension: number) {\n  const tickWidth = Math.max(size, 0);\n  return Math.floor(dimension / tickWidth);\n}\n\n/**\n * Formats the ticks in a duration format.\n */\nexport function getDurationTicks(domain, maxTicks) {\n  const domainWidth = domain[1] - domain[0];\n  let tickStep: number | null = null;\n  for (const s of DURATION_TICK_STEPS) {\n    if (domainWidth / s < maxTicks) {\n      tickStep = s;\n      break;\n    }\n  }\n\n  if (tickStep === null) {\n    const numDayTicks = domainWidth / ONE_DAY;\n    const dayStep = Math.ceil(numDayTicks / maxTicks);\n    tickStep = ONE_DAY * dayStep;\n  }\n\n  const ticks = [domain[0]];\n  while (ticks[ticks.length - 1] + tickStep <= domain[1]) {\n    ticks.push(ticks[ticks.length - 1] + tickStep);\n  }\n\n  return ticks;\n}\n\n/**\n * Get the tick values from the scale.\n */\nexport function getTicks(\n  scale: any,\n  tickValues: any[],\n  type: 'value' | 'category' | 'time' | 'duration',\n  maxTicks = 100,\n  interval?: number | TimeInterval\n) {\n  let result;\n\n  if (tickValues) {\n    result = tickValues;\n  } else {\n    if (scale.ticks) {\n      if (type === 'duration') {\n        result = getDurationTicks(scale.domain(), maxTicks);\n      } else if (interval) {\n        result = scale.ticks(interval);\n      } else {\n        if (type === 'time') {\n          // If its time, we need to handle the time count\n          // manually because d3 does this odd rounding\n          result = scale.ticks();\n          result = reduceTicks(result, maxTicks);\n        } else {\n          result = scale.ticks(maxTicks);\n        }\n      }\n    } else {\n      tickValues = scale.domain();\n      result = reduceTicks(tickValues, maxTicks);\n    }\n  }\n\n  return result;\n}\n","/**\n * Get the angle from a radian.\n */\nexport const getDegrees = (radians: number) => (radians / Math.PI) * 180 - 90;\n\nexport const roundDecimals = (value: number, decimals: number = 5): number =>\n  parseFloat(value.toFixed(decimals));\n","import classNames from 'classnames';\n\nexport interface PropFunctionTypes {\n  /**\n   * Classnames to apply to the element.\n   */\n  className?: any;\n\n  /**\n   * CSS styles to apply to the element.\n   */\n  style?: any;\n}\n\nexport const functionProps = (prop: string, val: any, data: any) => {\n  if (typeof val === 'function') {\n    return val(data);\n  } else if (prop === 'className') {\n    return classNames(val);\n  } else if (val !== undefined || val !== null) {\n    return val;\n  }\n\n  return {};\n};\n\nexport const constructFunctionProps = (\n  props: PropFunctionTypes,\n  data: any\n) => ({\n  className: functionProps('className', props.className, data),\n  style: functionProps('style', props.style, data)\n});\n","type AccessorCallback = (data: any) => any;\n\n/**\n * Given a dataset and a list of accessors, returns a unique collection.\n */\nexport function uniqueBy<T = any>(data: T[], ...accessors: AccessorCallback[]) {\n  const result: any[] = [];\n\n  const ittr = (arr: T[], depth: number) => {\n    for (const a of arr) {\n      const acc = accessors[depth];\n      if (acc === undefined) {\n        throw new Error(`Accessor not found for depth: ${depth}`);\n      }\n\n      const val = acc(a);\n      if (Array.isArray(val)) {\n        ittr(val, depth + 1);\n      } else if (!result.includes(val)) {\n        result.push(val);\n      }\n    }\n  };\n\n  ittr(data, 0);\n\n  return result;\n}\n","export interface TextDimensions {\n  height: number;\n  width: number;\n}\n\nconst cache: { [key: string]: TextDimensions } = {};\n\nexport const calculateDimensions = (\n  text: string,\n  fontFamily: string,\n  fontSize: string | number\n): TextDimensions => {\n  const key = `${text}_${fontFamily}_${fontSize}`;\n\n  // Check if we have a cache hit\n  if (cache[key]) {\n    return cache[key];\n  }\n\n  // If we are in a Node.js environment\n  if (typeof window === 'undefined' || typeof document === 'undefined') {\n    const height = parseInt(typeof fontSize === 'string' ? fontSize : fontSize.toString(), 10);\n    const dimensions = {\n      height,\n      // 8 is an approximation of the width of a character\n      width: text.length * 8\n    };\n\n    cache[key] = dimensions;\n\n    return dimensions;\n  }\n\n  // Create a temporary div element\n  const element = document.createElement('div');\n\n  // Set up the style so the size can be measured\n  element.style.fontFamily = fontFamily;\n  element.style.fontSize = typeof fontSize === 'string' ? fontSize : `${fontSize}px`;\n  element.style.position = 'absolute';\n  element.style.left = '-9999px';\n  element.style.whiteSpace = 'nowrap';\n  element.style.height = 'auto';\n  element.style.fontWeight = 'normal';\n  element.style.lineHeight = 'normal';\n  element.style.width = 'auto';\n  element.style.wordBreak = 'normal';\n\n  // Add the text to the div\n  element.textContent = text;\n\n  // Add the div to the body\n  document.body.appendChild(element);\n\n  // Measure the div\n  const dimensions = {\n    height: element.offsetHeight,\n    width: element.offsetWidth\n  };\n\n  // Remove the div from the body\n  document.body.removeChild(element);\n\n  // Store the result in the cache for future calls\n  cache[key] = dimensions;\n\n  return dimensions;\n};\n","import React, { ReactElement } from 'react';\nimport { calculateDimensions } from './size';\n\nexport interface WrapTextInputs {\n  key: string;\n  x?: any;\n  paddingY?: number;\n  paddingX?: number;\n  width: number;\n  height?: number;\n  fontFamily: string;\n  fontSize: number;\n  wrap?: boolean;\n  size?: {\n    width: number;\n    height: number;\n  };\n  visibility?: 'auto' | 'always';\n}\n\nexport function wrapText({\n  key,\n  x = 0,\n  size,\n  paddingY,\n  wrap = true,\n  paddingX,\n  width,\n  height,\n  fontFamily,\n  fontSize,\n  visibility = 'auto'\n}: WrapTextInputs): ReactElement | ReactElement[] | null {\n  size = size || calculateDimensions(key, fontFamily, fontSize);\n  const words = key.toString().split(/\\s+/);\n\n  if (words.length > 1 && size.width > width) {\n    let rows = [];\n    let maxWidth = 0;\n    let maxHeight = 0;\n    let curText = '';\n    let currWidth = 0;\n    let nextText = '';\n    let nextWidth = 0;\n\n    for (const word of words) {\n      nextText = curText === '' ? word : `${curText} ${word}`;\n      nextWidth = calculateDimensions(nextText, fontFamily, fontSize).width;\n\n      if (nextWidth <= width - (paddingX ? 2 * paddingX : 0)) {\n        curText = nextText;\n        currWidth = nextWidth;\n      } else {\n        rows.push(curText);\n        maxWidth = Math.max(maxWidth, currWidth);\n        curText = word;\n        currWidth = calculateDimensions(curText, fontFamily, fontSize).width;\n      }\n    }\n    rows.push(curText);\n    maxHeight = rows.length * size.height;\n\n    if (visibility !== 'always') {\n      if (height && maxHeight >= height - (paddingY ? 2 * paddingY : 0)) {\n        return null;\n      }\n\n      if (width && maxWidth >= width - (paddingX ? 2 * paddingX : 0)) {\n        return null;\n      }\n    }\n\n    if (!wrap && rows.length > 1) {\n      return rows[0];\n    }\n\n    return rows.map((r, i) => (\n      <tspan\n        key={i}\n        dominantBaseline=\"alphabetic\"\n        style={{ baselineShift: '0%' }}\n        dy={\n          i > 0\n            ? size.height\n            : height\n              ? size.height / 2 - 5\n              : -maxHeight / 2 + size.height\n        }\n        x={x}\n      >\n        {r}\n      </tspan>\n    ));\n  }\n\n  if (visibility !== 'always') {\n    if (height && size.height + paddingY >= height) {\n      return null;\n    }\n\n    if (width && size.width + paddingX >= width) {\n      return null;\n    }\n  }\n\n  // NOTE: 5px seems to magic number for making it center\n  return (\n    <tspan\n      dominantBaseline=\"alphabetic\"\n      style={{ baselineShift: '0%' }}\n      dy={size.height / 2 - 5}\n      x={x}\n    >\n      {key}\n    </tspan>\n  );\n}\n","import { PointerEvent, useCallback, useRef } from 'react';\n\nexport interface HoverIntentOptions {\n  interval?: number;\n  sensitivity?: number;\n  timeout?: number;\n  disabled?: boolean;\n  onPointerOver: (event: PointerEvent<SVGElement>) => void;\n  onPointerOut: (event: PointerEvent<SVGElement>) => void;\n}\n\nexport interface HoverIntentResult {\n  pointerOut: (event: PointerEvent<SVGElement>) => void;\n  pointerOver: (event: PointerEvent<SVGElement>) => void;\n}\n\n/**\n * Hover intent identifies if the user actually is\n * intending to over by measuring the position of the mouse\n * once a pointer enters and determining if in a duration if\n * the mouse moved inside a certain threshold and fires the events.\n */\nexport const useHoverIntent = ({\n  sensitivity = 7,\n  interval = 50,\n  timeout = 10,\n  disabled,\n  onPointerOver,\n  onPointerOut\n}: HoverIntentOptions | undefined): HoverIntentResult => {\n  const mouseOver = useRef<boolean>(false);\n  const timer = useRef<any | null>(null);\n  const state = useRef<number>(0);\n  const coords = useRef({\n    x: null,\n    y: null,\n    px: null,\n    py: null\n  });\n\n  const onMouseMove = useCallback((event: MouseEvent) => {\n    coords.current.x = event.clientX;\n    coords.current.y = event.clientY;\n  }, []);\n\n  const comparePosition = useCallback(\n    (event: PointerEvent<SVGElement>) => {\n      timer.current = clearTimeout(timer.current);\n      const { px, x, py, y } = coords.current;\n\n      if (Math.abs(px - x) + Math.abs(py - y) < sensitivity) {\n        state.current = 1;\n        onPointerOver(event);\n      } else {\n        coords.current.px = x;\n        coords.current.py = y;\n        timer.current = setTimeout(() => comparePosition(event), interval);\n      }\n    },\n    [interval, onPointerOver, sensitivity]\n  );\n\n  const cleanup = useCallback(() => {\n    clearTimeout(timer.current);\n    document.removeEventListener('mousemove', onMouseMove, false);\n  }, [onMouseMove]);\n\n  const pointerOver = useCallback(\n    (event: PointerEvent<SVGElement>) => {\n      if (!disabled) {\n        mouseOver.current = true;\n        cleanup();\n\n        if (state.current !== 1) {\n          coords.current.px = event.nativeEvent.x;\n          coords.current.py = event.nativeEvent.y;\n          document.addEventListener('mousemove', onMouseMove, false);\n          timer.current = setTimeout(() => comparePosition(event), timeout);\n        }\n      }\n    },\n    [cleanup, comparePosition, disabled, onMouseMove, timeout]\n  );\n\n  const delay = useCallback(\n    (event: PointerEvent<SVGElement>) => {\n      timer.current = clearTimeout(timer.current);\n      state.current = 0;\n      onPointerOut(event);\n    },\n    [onPointerOut]\n  );\n\n  const pointerOut = useCallback(\n    (event: PointerEvent<SVGElement>) => {\n      mouseOver.current = false;\n      cleanup();\n\n      if (state.current === 1) {\n        timer.current = setTimeout(() => delay(event), timeout);\n      }\n    },\n    [cleanup, delay, timeout]\n  );\n\n  return {\n    pointerOver,\n    pointerOut\n  };\n};\n","import { useEffect, useRef, useState, RefObject } from 'react';\n\ntype Size = {\n  width: number | undefined;\n  height: number | undefined;\n};\n\nexport const useResizeObserver = <T extends HTMLElement>(): [\n  RefObject<T>,\n  Size\n] => {\n  const ref = useRef<T>(null);\n  const [size, setSize] = useState<Size>({\n    width: undefined,\n    height: undefined\n  });\n\n  useEffect(() => {\n    const element = ref.current;\n    if (!element) return;\n\n    const resizeObserver = new ResizeObserver((entries) => {\n      if (entries.length === 0) return;\n      const entry = entries[0];\n      setSize({\n        width: entry.contentRect.width,\n        height: entry.contentRect.height\n      });\n    });\n\n    resizeObserver.observe(element);\n\n    return () => {\n      resizeObserver.unobserve(element);\n    };\n  }, []);\n\n  return [ref, size];\n};\n","/**\n * Merges default props with props and returns a new object, filtering out undefined values to keep original behavior.\n * @param defaultProps - The default props to merge.\n * @param props - The props to merge.\n * @returns The merged props.\n */\n\nexport const mergeDefaultProps = <T>(\n  defaultProps: Partial<T>,\n  props: Partial<T> = {}\n): T => {\n  const filteredProps = Object.fromEntries(\n    Object.entries(props).filter(([_, value]) => value !== undefined)\n  );\n  return { ...defaultProps, ...filteredProps } as T;\n};\n","import React, { Fragment, FC, ReactElement } from 'react';\nimport { GradientProps, Gradient } from '@/common/Gradient';\nimport { CloneElement, useId } from 'reablocks';\nimport { mergeDefaultProps } from '@/common/utils';\n\nexport interface LinearAxisLineProps {\n  height: number;\n  width: number;\n  strokeColor?: string;\n  strokeWidth: number;\n  strokeGradient: ReactElement<GradientProps, typeof Gradient> | null;\n  scale: any;\n  orientation: 'horizontal' | 'vertical';\n  className?: string;\n}\n\nexport const LinearAxisLine: FC<Partial<LinearAxisLineProps>> = (props) => {\n  const {\n    strokeColor,\n    strokeWidth,\n    strokeGradient,\n    scale,\n    orientation,\n    className\n  } = mergeDefaultProps(linearAxisLineDefaultProps, props);\n  const id = useId();\n  const [range0, range1] = scale.range();\n\n  return (\n    <Fragment>\n      <line\n        className={className}\n        x1={orientation === 'vertical' ? 0 : range0}\n        // Workaround for a Chrome/Firefox bug where it won't render gradients for straight lines\n        x2={orientation === 'vertical' ? 0.00001 : range1}\n        y1={orientation === 'vertical' ? range0 : 0}\n        y2={orientation === 'vertical' ? range1 : 0.00001}\n        strokeWidth={strokeWidth}\n        stroke={strokeGradient ? `url(#axis-gradient-${id})` : strokeColor}\n      />\n      {strokeGradient && (\n        <CloneElement<GradientProps>\n          element={strokeGradient}\n          id={`axis-gradient-${id}`}\n        />\n      )}\n    </Fragment>\n  );\n};\n\nexport const linearAxisLineDefaultProps = {\n  strokeColor: '#8F979F',\n  strokeWidth: 1\n};\n","import React, { FC, useMemo } from 'react';\n\nexport interface LinearAxisTickLineProps {\n  height: number;\n  width: number;\n  orientation: 'horizontal' | 'vertical';\n  size: number;\n  strokeColor?: string;\n  strokeWidth: number;\n  position: 'start' | 'end' | 'center';\n  className?: string;\n}\n\nexport const LinearAxisTickLine: FC<Partial<LinearAxisTickLineProps>> = (\n  props\n) => {\n  const { size, position, orientation, strokeColor, strokeWidth, className } = {\n    ...LINEAR_AXIS_TICK_LINE_DEFAULT_PROPS,\n    ...props\n  };\n\n  const path = useMemo(() => {\n    const isVertical = orientation === 'vertical';\n    const tickSize = size || 0;\n    const start =\n      position === 'start'\n        ? tickSize * -1\n        : position === 'center'\n          ? tickSize * -0.5\n          : 0;\n    const end = start + tickSize;\n\n    return {\n      x1: isVertical ? end : 0,\n      x2: isVertical ? start : 0,\n      y1: isVertical ? 0 : start,\n      y2: isVertical ? 0 : end\n    };\n  }, [orientation, position, size]);\n\n  return (\n    <line\n      className={className}\n      strokeWidth={strokeWidth}\n      stroke={strokeColor}\n      {...path}\n    />\n  );\n};\n\nexport const LINEAR_AXIS_TICK_LINE_DEFAULT_PROPS = {\n  strokeColor: '#8F979F',\n  strokeWidth: 1,\n  size: 5\n};\n","import React, { FC, ReactElement } from 'react';\nimport {\n  LINEAR_AXIS_TICK_LINE_DEFAULT_PROPS,\n  LinearAxisTickLine,\n  LinearAxisTickLineProps\n} from './LinearAxisTickLine';\nimport { mergeDefaultProps } from '@/common/utils';\n\nexport interface LinearAxisTickLabelProps {\n  text: string;\n  fullText: string;\n  angle: number;\n  orientation: 'horizontal' | 'vertical';\n  half: 'start' | 'end' | 'center';\n  line: ReactElement<LinearAxisTickLineProps, typeof LinearAxisTickLine>;\n  format?: (v) => any;\n  /**\n   * Format tooltip title on hover label.\n   */\n  formatTooltip?: (value: any) => any | string;\n  fill: string;\n  fontSize: number;\n  fontFamily: string;\n  rotation: boolean | number;\n  padding: number | { fromAxis: number; alongAxis: number };\n  textAnchor?: 'start' | 'end' | 'middle';\n  position: 'start' | 'end' | 'center';\n  align: 'start' | 'end' | 'center' | 'inside' | 'outside';\n  className?: string;\n}\n\nexport const LinearAxisTickLabel: FC<Partial<LinearAxisTickLabelProps>> = (\n  props\n) => {\n  const {\n    text,\n    fullText,\n    angle,\n    orientation,\n    half,\n    line,\n    textAnchor,\n    position,\n    className,\n    fill,\n    fontSize,\n    fontFamily,\n    rotation,\n    padding,\n    formatTooltip,\n    align\n  } = mergeDefaultProps(LINEAR_AXIS_TICK_LABEL_DEFAULT_PROPS, props);\n\n  function getAlign() {\n    if ((align === 'inside' || align === 'outside') && half === 'center') {\n      return 'center';\n    }\n\n    if (align === 'inside') {\n      return half === 'start' ? 'end' : 'start';\n    }\n\n    if (align === 'outside') {\n      return half === 'start' ? 'start' : 'end';\n    }\n\n    return align;\n  }\n\n  // bug in this function - spacing is NA\n  function getTickLineSpacing() {\n    if (!line) {\n      return [0, 0];\n    }\n\n    const lineProps = { ...LINEAR_AXIS_TICK_LINE_DEFAULT_PROPS, ...line.props };\n    const size = lineProps.size ?? 3;\n    const position = lineProps.position ?? 'center';\n\n    if (position === 'start') {\n      return [size * -1, 0];\n    } else if (position === 'end') {\n      return [0, size];\n    } else {\n      return [size * -0.5, size * 0.5];\n    }\n  }\n\n  function getOffset() {\n    const adjustedPadding =\n      typeof padding === 'number'\n        ? { fromAxis: padding, alongAxis: padding }\n        : padding;\n\n    const spacing = getTickLineSpacing();\n    const offset1 =\n      position === 'start'\n        ? spacing[0] - adjustedPadding.fromAxis\n        : position === 'end'\n          ? spacing[1] + adjustedPadding.fromAxis\n          : 0;\n\n    const align = getAlign();\n    let offset2 = 0;\n    offset2 +=\n      align === 'center'\n        ? 0\n        : align === 'start'\n          ? -adjustedPadding.alongAxis\n          : adjustedPadding.alongAxis;\n\n    const horz = orientation === 'horizontal';\n\n    return {\n      [horz ? 'x' : 'y']: offset2,\n      [horz ? 'y' : 'x']: offset1\n    };\n  }\n\n  function getTextPosition() {\n    let transform = '';\n    let newtextAnchor = '';\n    let alignmentBaseline = 'middle' as 'middle' | 'baseline' | 'hanging';\n\n    if (angle !== 0) {\n      transform = `rotate(${angle})`;\n      newtextAnchor = 'end';\n    } else {\n      const align = getAlign();\n      if (orientation === 'horizontal') {\n        newtextAnchor =\n          align === 'center' ? 'middle' : align === 'start' ? 'end' : 'start';\n        if (position === 'start') {\n          alignmentBaseline = 'baseline';\n        } else if (position === 'end') {\n          alignmentBaseline = 'hanging';\n        }\n      } else {\n        alignmentBaseline =\n          align === 'center'\n            ? 'middle'\n            : align === 'start'\n              ? 'baseline'\n              : 'hanging';\n        if (position === 'start') {\n          newtextAnchor = 'end';\n        } else if (position === 'end') {\n          newtextAnchor = 'start';\n        } else {\n          newtextAnchor = 'middle';\n        }\n      }\n    }\n\n    return {\n      transform,\n      textAnchor: textAnchor || newtextAnchor,\n      alignmentBaseline\n    };\n  }\n\n  const { x, y } = getOffset();\n  const textPosition = getTextPosition();\n  const titleHover =\n    typeof formatTooltip === 'function' ? formatTooltip(fullText) : fullText;\n\n  return (\n    <g\n      transform={`translate(${x}, ${y})`}\n      fontSize={fontSize}\n      fontFamily={fontFamily}\n    >\n      <title>{titleHover}</title>\n      <text {...textPosition} fill={fill} className={className}>\n        {text}\n      </text>\n    </g>\n  );\n};\n\nexport const LINEAR_AXIS_TICK_LABEL_DEFAULT_PROPS: Partial<LinearAxisTickLabelProps> =\n  {\n    fill: '#8F979F',\n    fontSize: 11,\n    fontFamily: 'sans-serif',\n    rotation: true,\n    padding: 5,\n    align: 'center'\n  };\n","import React, { FC, Fragment, ReactElement, useCallback, useMemo } from 'react';\nimport {\n  LINEAR_AXIS_TICK_LABEL_DEFAULT_PROPS,\n  LinearAxisTickLabel,\n  LinearAxisTickLabelProps\n} from './LinearAxisTickLabel';\nimport {\n  LINEAR_AXIS_TICK_LINE_DEFAULT_PROPS,\n  LinearAxisTickLine,\n  LinearAxisTickLineProps\n} from './LinearAxisTickLine';\nimport { formatValue } from '@/common/utils/formatting';\nimport { getTicks, getMaxTicks } from '@/common/utils/ticks';\nimport { TimeInterval } from 'd3-time';\nimport { CloneElement } from 'reablocks';\nimport { LinearAxisProps } from './LinearAxis';\nimport ellipsize from 'ellipsize';\nimport { max } from 'd3-array';\nimport { calculateDimensions } from '@/common/utils/size';\nimport { mergeDefaultProps } from '@/common/utils';\n\nexport interface LinearAxisTickSeriesProps {\n  height: number;\n  width: number;\n  scale: any;\n  interval?: number | TimeInterval;\n  tickSize: number;\n  tickValues: any[];\n  orientation: 'horizontal' | 'vertical';\n  label: ReactElement<\n    LinearAxisTickLabelProps,\n    typeof LinearAxisTickLabel\n  > | null;\n  line: ReactElement<LinearAxisTickLineProps, typeof LinearAxisTickLine> | null;\n  axis: LinearAxisProps;\n}\n\ninterface ProcessedTick {\n  text: string;\n  fullText: string;\n  x: number;\n  y: number;\n  height: number;\n  width: number;\n  half: 'start' | 'end' | 'center';\n}\n\nexport const LinearAxisTickSeries: FC<Partial<LinearAxisTickSeriesProps>> = (\n  props\n) => {\n  const {\n    scale,\n    orientation,\n    height,\n    width,\n    label,\n    tickSize,\n    tickValues,\n    interval,\n    line,\n    axis\n  } = mergeDefaultProps(LINEAR_AXIS_TICK_SERIES_DEFAULT_PROPS, props);\n\n  const labelProps = useMemo(\n    () => ({\n      ...LINEAR_AXIS_TICK_LABEL_DEFAULT_PROPS,\n      ...(label?.props ?? {})\n    }),\n    [label?.props]\n  );\n\n  /**\n   * Gets the adjusted scale given offsets.\n   */\n  const getAdjustedScale = useCallback(() => {\n    if (scale.bandwidth) {\n      let offset = scale.bandwidth() / 2;\n      if (scale.round()) {\n        offset = Math.round(offset);\n      }\n\n      return (d) => +scale(d) + offset;\n    } else {\n      return (d) => +scale(d);\n    }\n  }, [scale]);\n\n  /**\n   * Gets the x/y position for a given tick.\n   */\n  const getPosition = useCallback(\n    (scaledTick: number) => {\n      if (orientation === 'horizontal') {\n        return { x: scaledTick, y: 0 };\n      } else {\n        return { x: 0, y: scaledTick };\n      }\n    },\n    [orientation]\n  );\n\n  /**\n   * Gets the dimension (height/width) this axis is calculating on.\n   */\n  const getDimension = useCallback(() => {\n    return orientation === 'vertical' ? height : width;\n  }, [height, orientation, width]);\n\n  /**\n   * Gets the formatted label of the tick.\n   */\n  const labelFormatFn = useMemo((): any => {\n    if (labelProps.format) {\n      return labelProps.format;\n    } else if (scale.tickFormat) {\n      return scale.tickFormat.apply(scale, [5]);\n    } else {\n      return (v) => formatValue(v);\n    }\n  }, [labelProps.format, scale]);\n\n  /**\n   * Gets the ticks given the dimensions and scales and returns\n   * the text and position.\n   */\n  const ticks = useMemo((): ProcessedTick[] => {\n    const dimension = getDimension();\n    const maxTicks = getMaxTicks(tickSize, dimension);\n    const ticks = getTicks(scale, tickValues, axis.type, maxTicks, interval);\n    const adjustedScale = getAdjustedScale();\n    const format = labelFormatFn;\n    const midpoint = dimension / 2;\n\n    return ticks.map((tick) => {\n      const fullText = format(tick);\n      const scaledTick = adjustedScale(tick);\n      const position = getPosition(scaledTick);\n      const text = ellipsize(fullText, 18);\n      const size = label\n        ? calculateDimensions(\n          text,\n          labelProps.fontFamily,\n          labelProps.fontSize?.toString()\n        )\n        : {};\n\n      return {\n        ...position,\n        ...size,\n        text,\n        fullText,\n        half:\n          scaledTick === midpoint\n            ? 'center'\n            : scaledTick < midpoint\n              ? 'start'\n              : 'end'\n      };\n    });\n  }, [\n    axis.type,\n    getAdjustedScale,\n    getDimension,\n    getPosition,\n    interval,\n    label,\n    labelProps,\n    labelFormatFn,\n    scale,\n    tickSize,\n    tickValues\n  ]);\n\n  /**\n   * Calculates the rotation angle that the ticks need to be shifted to.\n   * This equation will measure the length of the text in a external canvas\n   * object and determine what the longest label is and rotate until they fit.\n   */\n  const angle = useMemo((): number => {\n    if (!label) {\n      return 0;\n    }\n\n    const dimension = getDimension();\n    const maxTicksLength = max(ticks, (tick) => tick.width);\n    let angle = 0;\n\n    if (labelProps.rotation) {\n      if (labelProps.rotation === true) {\n        let baseWidth = maxTicksLength;\n        const maxBaseWidth = Math.floor(dimension / ticks.length);\n\n        while (baseWidth > maxBaseWidth && angle > -90) {\n          angle -= 30;\n          baseWidth = Math.cos(angle * (Math.PI / 180)) * maxTicksLength;\n        }\n      } else {\n        angle = labelProps.rotation;\n      }\n    }\n\n    return angle;\n  }, [getDimension, label, labelProps, ticks]);\n\n  return (\n    <Fragment>\n      {ticks.map((tick, i) => (\n        <g key={i} transform={`translate(${tick.x}, ${tick.y})`}>\n          {line && (\n            <CloneElement<LinearAxisTickLineProps>\n              element={line}\n              height={height}\n              width={width}\n              orientation={orientation}\n            />\n          )}\n          {label && (\n            <CloneElement<LinearAxisTickLabelProps>\n              element={label}\n              text={tick.text}\n              fullText={tick.fullText}\n              half={tick.half}\n              angle={angle}\n              orientation={orientation}\n              line={line!}\n            />\n          )}\n        </g>\n      ))}\n    </Fragment>\n  );\n};\n\nexport const LINEAR_AXIS_TICK_SERIES_DEFAULT_PROPS = {\n  line: (\n    <LinearAxisTickLine\n      {...LINEAR_AXIS_TICK_LINE_DEFAULT_PROPS}\n      height={10}\n      width={10}\n      orientation=\"horizontal\"\n      position=\"center\"\n    />\n  ),\n  label: (\n    <LinearAxisTickLabel\n      line={\n        <LinearAxisTickLine\n          {...LINEAR_AXIS_TICK_LINE_DEFAULT_PROPS}\n          orientation=\"horizontal\"\n          position=\"center\"\n          height={5}\n          width={5}\n        />\n      }\n      text=\"\"\n      fullText=\"\"\n      angle={0}\n      orientation=\"horizontal\"\n      half=\"start\"\n      position=\"center\"\n    />\n  ),\n  tickSize: 30\n};\n","import { CloneElement } from 'reablocks';\nimport React, {\n  FC,\n  ReactElement,\n  createRef,\n  useCallback,\n  useEffect,\n  useMemo,\n  useState\n} from 'react';\nimport { ChartDataTypes } from '@/common/data';\nimport { LinearAxisLine, LinearAxisLineProps } from './LinearAxisLine';\nimport {\n  LINEAR_AXIS_TICK_SERIES_DEFAULT_PROPS,\n  LinearAxisTickSeries,\n  LinearAxisTickSeriesProps\n} from './LinearAxisTickSeries';\nimport { mergeDefaultProps } from '@/common/utils';\n\nexport interface LinearAxisDimensionChanged {\n  height?: number;\n  width?: number;\n}\n\nexport interface LinearAxisProps {\n  height?: number;\n  width?: number;\n  domain?: ChartDataTypes[];\n  scaled?: boolean;\n  roundDomains?: boolean;\n  type?: 'value' | 'time' | 'category' | 'duration';\n  position?: 'start' | 'end' | 'center';\n  tickSeries?: ReactElement<\n    LinearAxisTickSeriesProps,\n    typeof LinearAxisTickSeries\n  >;\n  axisLine?: ReactElement<LinearAxisLineProps, typeof LinearAxisLine> | null;\n  scale?: any;\n  visibility?: 'visible' | 'hidden';\n  orientation?: 'horizontal' | 'vertical';\n  onDimensionsChange?: (event: LinearAxisDimensionChanged) => void;\n}\n\ninterface LinearAxisState {\n  height?: number;\n  width?: number;\n}\n\nexport const LinearAxis: FC<Partial<LinearAxisProps>> = (props) => {\n  const {\n    position,\n    tickSeries,\n    axisLine,\n    height,\n    width,\n    scale,\n    orientation,\n    visibility = 'visible',\n    onDimensionsChange\n  } = mergeDefaultProps(LINEAR_AXIS_DEFAULT_PROPS, props);\n  const tickSeriesProps = useMemo(\n    () =>\n      mergeDefaultProps(\n        LINEAR_AXIS_TICK_SERIES_DEFAULT_PROPS,\n        tickSeries?.props\n      ),\n    [tickSeries?.props]\n  );\n\n  const containerRef = createRef<SVGGElement>();\n  const [dimensions, setDimensions] = useState<LinearAxisState>({\n    height: height,\n    width: width\n  });\n\n  const updateDimensions = useCallback(() => {\n    const shouldOffset = position !== 'center';\n\n    let height;\n    let width;\n    if (shouldOffset) {\n      const dims = containerRef.current!.getBoundingClientRect();\n      width = Math.floor(dims.width);\n      height = Math.floor(dims.height);\n    }\n\n    if (orientation === 'vertical') {\n      if (dimensions.width !== width) {\n        setDimensions({ ...dimensions, width: width });\n        onDimensionsChange({ width });\n      }\n    } else {\n      if (dimensions.height !== height) {\n        setDimensions({ ...dimensions, height: height });\n        onDimensionsChange({ height });\n      }\n    }\n  }, [containerRef, dimensions, onDimensionsChange, orientation, position]);\n\n  useEffect(() => {\n    updateDimensions();\n  }, [updateDimensions, height, width, scale]);\n\n  function getPosition() {\n    let translateY = 0;\n    let translateX = 0;\n\n    if (position === 'end' && orientation === 'horizontal') {\n      translateY = height;\n    } else if (position === 'center' && orientation === 'horizontal') {\n      translateY = height / 2;\n    } else if (position === 'end' && orientation === 'vertical') {\n      translateX = width;\n    } else if (position === 'center' && orientation === 'vertical') {\n      translateX = width / 2;\n    }\n\n    return { translateX, translateY };\n  }\n\n  const { translateX, translateY } = getPosition();\n\n  return (\n    <g\n      transform={`translate(${translateX}, ${translateY})`}\n      ref={containerRef}\n      visibility={visibility}\n    >\n      {axisLine && (\n        <CloneElement<LinearAxisLineProps>\n          element={axisLine}\n          height={height}\n          width={width}\n          scale={scale}\n          orientation={orientation}\n        />\n      )}\n      {(tickSeriesProps.line || tickSeriesProps.label) && (\n        <CloneElement<LinearAxisTickSeriesProps>\n          element={tickSeries}\n          height={height}\n          width={width}\n          scale={scale}\n          orientation={orientation}\n          axis={props}\n        />\n      )}\n    </g>\n  );\n};\n\nexport const LINEAR_AXIS_DEFAULT_PROPS = {\n  scaled: false,\n  roundDomains: false,\n  axisLine: <LinearAxisLine />,\n  onDimensionsChange: () => undefined\n};\n","import React, { FC, useMemo } from 'react';\nimport {\n  LinearAxisTickLabelProps,\n  LinearAxisTickLabel,\n  LINEAR_AXIS_TICK_LABEL_DEFAULT_PROPS\n} from './LinearAxisTickLabel';\nimport {\n  LinearAxisTickLineProps,\n  LinearAxisTickLine,\n  LINEAR_AXIS_TICK_LINE_DEFAULT_PROPS\n} from './LinearAxisTickLine';\nimport {\n  LinearAxisTickSeriesProps,\n  LinearAxisTickSeries,\n  LINEAR_AXIS_TICK_SERIES_DEFAULT_PROPS\n} from './LinearAxisTickSeries';\nimport {\n  LinearAxisProps,\n  LinearAxis,\n  LINEAR_AXIS_DEFAULT_PROPS\n} from './LinearAxis';\nimport { mergeDefaultProps } from '@/common/utils';\n\nexport const LinearXAxisTickLabel: FC<Partial<LinearAxisTickLabelProps>> = (\n  props\n) => (\n  <LinearAxisTickLabel\n    {...mergeDefaultProps(LINEAR_X_AXIS_TICK_LABEL_DEFAULT_PROPS, props)}\n  />\n);\nexport const LINEAR_X_AXIS_TICK_LABEL_DEFAULT_PROPS = {\n  ...LINEAR_AXIS_TICK_LABEL_DEFAULT_PROPS,\n  rotation: true,\n  position: 'end',\n  align: 'center'\n} as Partial<LinearAxisTickLabelProps>;\n\nexport const LinearXAxisTickLine: FC<Partial<LinearAxisTickLineProps>> = (\n  props\n) => (\n  <LinearAxisTickLine\n    {...mergeDefaultProps(LINEAR_X_AXIS_TICK_LINE_DEFAULT_PROPS, props)}\n  />\n);\nexport const LINEAR_X_AXIS_TICK_LINE_DEFAULT_PROPS = {\n  ...LINEAR_AXIS_TICK_LINE_DEFAULT_PROPS,\n  position: 'end'\n} as Partial<LinearAxisTickLineProps>;\n\nexport const LinearXAxisTickSeries: FC<Partial<LinearAxisTickSeriesProps>> = (\n  props\n) => {\n  const xTickSeriesProps = mergeDefaultProps(\n    LINEAR_X_AXIS_TICK_SERIES_DEFAULT_PROPS,\n    props\n  );\n\n  return (\n    <LinearAxisTickSeries\n      {...xTickSeriesProps}\n      line={\n        xTickSeriesProps?.line ? (\n          <LinearXAxisTickLine\n            {...mergeDefaultProps(\n              LINEAR_X_AXIS_TICK_LINE_DEFAULT_PROPS,\n              props?.line?.props\n            )}\n          />\n        ) : null\n      }\n      label={\n        xTickSeriesProps?.label ? (\n          <LinearXAxisTickLabel\n            {...mergeDefaultProps(\n              LINEAR_X_AXIS_TICK_LABEL_DEFAULT_PROPS,\n              props?.label?.props\n            )}\n          />\n        ) : null\n      }\n    />\n  );\n};\nexport const LINEAR_X_AXIS_TICK_SERIES_DEFAULT_PROPS = {\n  ...LINEAR_AXIS_TICK_SERIES_DEFAULT_PROPS,\n  tickSize: 75,\n  line: <LinearXAxisTickLine {...LINEAR_X_AXIS_TICK_LINE_DEFAULT_PROPS} />,\n  label: <LinearXAxisTickLabel {...LINEAR_X_AXIS_TICK_LABEL_DEFAULT_PROPS} />\n};\n\nexport const LinearXAxis: FC<Partial<LinearAxisProps>> = (props) => {\n  const xAxisProps = useMemo(\n    () => mergeDefaultProps(LINEAR_X_AXIS_DEFAULT_PROPS, props),\n    [props]\n  );\n\n  return (\n    <LinearAxis\n      {...xAxisProps}\n      tickSeries={\n        xAxisProps.tickSeries && (\n          <LinearXAxisTickSeries\n            {...mergeDefaultProps(\n              LINEAR_X_AXIS_TICK_SERIES_DEFAULT_PROPS,\n              xAxisProps?.tickSeries?.props\n            )}\n          />\n        )\n      }\n    />\n  );\n};\nexport const LINEAR_X_AXIS_DEFAULT_PROPS = {\n  ...LINEAR_AXIS_DEFAULT_PROPS,\n  position: 'end',\n  roundDomains: false,\n  scaled: false,\n  type: 'value',\n  orientation: 'horizontal',\n  tickSeries: <LinearXAxisTickSeries />\n} as Partial<LinearAxisProps>;\n","import React, { FC, useMemo } from 'react';\nimport {\n  LinearAxisTickLabelProps,\n  LinearAxisTickLabel,\n  LINEAR_AXIS_TICK_LABEL_DEFAULT_PROPS\n} from './LinearAxisTickLabel';\nimport {\n  LinearAxisTickLineProps,\n  LinearAxisTickLine,\n  LINEAR_AXIS_TICK_LINE_DEFAULT_PROPS\n} from './LinearAxisTickLine';\nimport {\n  LinearAxisTickSeriesProps,\n  LinearAxisTickSeries,\n  LINEAR_AXIS_TICK_SERIES_DEFAULT_PROPS\n} from './LinearAxisTickSeries';\nimport {\n  LinearAxisProps,\n  LinearAxis,\n  LINEAR_AXIS_DEFAULT_PROPS\n} from './LinearAxis';\nimport { mergeDefaultProps } from '@/common/utils';\n\nexport const LinearYAxisTickLabel: FC<Partial<LinearAxisTickLabelProps>> = (\n  props\n) => (\n  <LinearAxisTickLabel\n    {...mergeDefaultProps(LINEAR_Y_AXIS_TICK_LABEL_DEFAULT_PROPS, props)}\n  />\n);\nexport const LINEAR_Y_AXIS_TICK_LABEL_DEFAULT_PROPS = {\n  ...LINEAR_AXIS_TICK_LABEL_DEFAULT_PROPS,\n  rotation: false,\n  position: 'start',\n  align: 'center'\n} as Partial<LinearAxisTickLabelProps>;\n\nexport const LinearYAxisTickLine: FC<Partial<LinearAxisTickLineProps>> = (\n  props\n) => (\n  <LinearAxisTickLine\n    {...mergeDefaultProps(LINEAR_Y_AXIS_TICK_LINE_DEFAULT_PROPS, props)}\n  />\n);\nexport const LINEAR_Y_AXIS_TICK_LINE_DEFAULT_PROPS = {\n  ...LINEAR_AXIS_TICK_LINE_DEFAULT_PROPS,\n  position: 'start'\n} as Partial<LinearAxisTickLineProps>;\n\nexport const LinearYAxisTickSeries: FC<Partial<LinearAxisTickSeriesProps>> = (\n  props\n) => {\n  const yTickSeriesProps = mergeDefaultProps(\n    LINEAR_Y_AXIS_TICK_SERIES_DEFAULT_PROPS,\n    props\n  );\n\n  return (\n    <LinearAxisTickSeries\n      {...yTickSeriesProps}\n      line={\n        yTickSeriesProps?.line ? (\n          <LinearYAxisTickLine\n            {...mergeDefaultProps(\n              LINEAR_Y_AXIS_TICK_LINE_DEFAULT_PROPS,\n              props?.line?.props\n            )}\n          />\n        ) : null\n      }\n      label={\n        yTickSeriesProps?.label ? (\n          <LinearYAxisTickLabel\n            {...mergeDefaultProps(\n              LINEAR_Y_AXIS_TICK_LABEL_DEFAULT_PROPS,\n              props?.label?.props\n            )}\n          />\n        ) : null\n      }\n    />\n  );\n};\nexport const LINEAR_Y_AXIS_TICK_SERIES_DEFAULT_PROPS = {\n  ...LINEAR_AXIS_TICK_SERIES_DEFAULT_PROPS,\n  tickSize: 30,\n  line: <LinearYAxisTickLine {...LINEAR_Y_AXIS_TICK_LINE_DEFAULT_PROPS} />,\n  label: <LinearYAxisTickLabel {...LINEAR_Y_AXIS_TICK_LABEL_DEFAULT_PROPS} />\n};\n\nexport const LinearYAxis: FC<Partial<LinearAxisProps>> = (props) => {\n  const yAxisProps = useMemo(\n    () => mergeDefaultProps(LINEAR_Y_AXIS_DEFAULT_PROPS, props),\n    [props]\n  );\n\n  return (\n    <LinearAxis\n      {...yAxisProps}\n      tickSeries={\n        yAxisProps.tickSeries && (\n          <LinearYAxisTickSeries\n            {...mergeDefaultProps(\n              LINEAR_Y_AXIS_TICK_SERIES_DEFAULT_PROPS,\n              yAxisProps?.tickSeries?.props\n            )}\n          />\n        )\n      }\n    />\n  );\n};\nexport const LINEAR_Y_AXIS_DEFAULT_PROPS = {\n  ...LINEAR_AXIS_DEFAULT_PROPS,\n  orientation: 'vertical',\n  scaled: false,\n  roundDomains: false,\n  type: 'value',\n  position: 'start',\n  tickSeries: <LinearYAxisTickSeries />\n} as Partial<LinearAxisProps>;\n","import { LinearAxisProps } from './LinearAxis';\n\n/**\n * Returns whether the axis has a visual element or not.\n */\nexport const isAxisVisible = (axis: LinearAxisProps) =>\n  !!axis.tickSeries.props.label || !!axis.tickSeries.props.line;\n","import React, { FC } from 'react';\n\nexport interface RadialAxisTickLineProps {\n  /**\n   * Size of the tick line.\n   */\n  size?: number;\n\n  /**\n   * Stroke color of the tick line.\n   */\n  stroke: string;\n\n  /**\n   * Inner radius of the arc.\n   */\n  innerRadius: number;\n\n  /**\n   * Outer radius of the arc.\n   */\n  outerRadius: number;\n\n  /**\n   * Position of the tick line.\n   */\n  position: 'inside' | 'outside';\n}\n\nexport const RadialAxisTickLine: FC<Partial<RadialAxisTickLineProps>> = (\n  props\n) => {\n  const { stroke, size, position, innerRadius, outerRadius } = {\n    ...RADIAL_AXIS_TICK_LINE_DEFAULT_PROPS,\n    ...props\n  };\n\n  const x1 = position === 'outside' ? size : -(outerRadius - innerRadius);\n\n  return (\n    <line x1={x1} x2={0} stroke={stroke} style={{ pointerEvents: 'none' }} />\n  );\n};\n\nexport const RADIAL_AXIS_TICK_LINE_DEFAULT_PROPS = {\n  stroke: 'rgba(113, 128, 141, .5)',\n  size: 10,\n  position: 'inside'\n};\n","import React, { FC, SVGTextElementAttributes, useMemo } from 'react';\nimport { formatValue } from '@/common/utils/formatting';\n\nconst rad2deg = (angle: number) => (angle * 180) / Math.PI;\n\nexport interface RadialAxisTickLabelProps\n  extends Omit<SVGTextElementAttributes<SVGTextElement>, 'format'> {\n  /**\n   * Data to render.\n   */\n  data: any;\n\n  /**\n   * Size of the line.\n   */\n  lineSize: number;\n\n  /**\n   * Color of the text.\n   */\n  fill: string;\n\n  /**\n   * Font size of the text.\n   */\n  fontSize: number;\n\n  /**\n   * Rotation of the text.\n   */\n  rotation: number;\n\n  /**\n   * Font family of the text.\n   */\n  fontFamily: string;\n\n  /**\n   * Index of the tick.\n   */\n  index: number;\n\n  /**\n   * Padding of the tick.\n   */\n  padding: number;\n\n  /**\n   * Point of the tick.\n   */\n  point: any;\n\n  /**\n   * Auto rotate the text.\n   */\n  autoRotate: boolean;\n\n  /**\n   * Format of the label.\n   */\n  format?: (value: any, index: number) => any | string;\n\n  /**\n   * Format tooltip title on hover label.\n   */\n  formatTooltip?: (value: any, index: number) => any | string;\n}\n\nexport const RadialAxisTickLabel: FC<Partial<RadialAxisTickLabelProps>> = ({\n  point,\n  autoRotate = true,\n  rotation,\n  padding = 15,\n  data,\n  fill = '#71808d',\n  fontFamily = 'sans-serif',\n  fontSize = 11,\n  format,\n  lineSize,\n  index,\n  formatTooltip,\n  ...rest\n}) => {\n  const { transform, textAnchor } = useMemo(() => {\n    let textAnchor;\n    let transform;\n\n    if (autoRotate) {\n      // TODO: This centers the text, determine better way later\n      if (\n        (rotation >= 85 && rotation <= 95) ||\n        (rotation <= -85 && rotation >= -95) ||\n        (rotation >= 265 && rotation <= 275) ||\n        (rotation <= -265 && rotation >= -275)\n      ) {\n        textAnchor = 'middle';\n      } else if (\n        (rotation < -85 && rotation > -265) ||\n        (rotation > 95 && rotation < 265)\n      ) {\n        textAnchor = 'end';\n      } else {\n        textAnchor = 'start';\n      }\n\n      transform = `rotate(${90 - rad2deg(point)}, ${padding}, 0)`;\n    } else {\n      const shouldRotate = rotation && (rotation > 100 || rotation < -100);\n      const rotate = shouldRotate ? 180 : 0;\n      const translate = shouldRotate ? -30 : 0;\n      textAnchor = shouldRotate ? 'end' : 'start';\n      transform = `rotate(${rotate}) translate(${translate})`;\n    }\n\n    return {\n      transform,\n      textAnchor\n    };\n  }, [autoRotate, padding, point, rotation]);\n\n  const text = format ? format(data, index) : formatValue(data);\n  const titleHover =\n    typeof formatTooltip === 'function' ? formatTooltip(data, index) : text;\n\n  return (\n    <g transform={transform}>\n      <title>{titleHover}</title>\n      <text\n        dy=\"0.35em\"\n        x={lineSize + 5}\n        textAnchor={textAnchor}\n        fill={fill}\n        fontFamily={fontFamily}\n        fontSize={fontSize}\n        {...rest}\n      >\n        {text}\n      </text>\n    </g>\n  );\n};\n","import React, { FC, ReactElement, useMemo } from 'react';\nimport {\n  RadialAxisTickLineProps,\n  RadialAxisTickLine,\n  RADIAL_AXIS_TICK_LINE_DEFAULT_PROPS\n} from './RadialAxisTickLine';\nimport {\n  RadialAxisTickLabelProps,\n  RadialAxisTickLabel\n} from './RadialAxisTickLabel';\nimport { CloneElement } from 'reablocks';\n\nexport interface RadialAxisTickProps {\n  /**\n   * Scale to use for the tick.\n   */\n  scale: any;\n\n  /**\n   * Outer radius of the arc.\n   */\n  outerRadius: number;\n\n  /**\n   * Inner radius of the arc.\n   */\n  innerRadius: number;\n\n  /**\n   * Padding between the tick and the label.\n   */\n  padding: number;\n\n  /**\n   * Data to render.\n   */\n  data: any;\n\n  /**\n   * Index of the tick.\n   */\n  index: number;\n\n  /**\n   * Line element to render.\n   */\n  line: ReactElement<RadialAxisTickLineProps, typeof RadialAxisTickLine> | null;\n\n  /**\n   * Label element to render.\n   */\n  label: ReactElement<\n    RadialAxisTickLabelProps,\n    typeof RadialAxisTickLabel\n  > | null;\n\n  /**\n   * Start angle for the first value.\n   */\n  startAngle?: number;\n\n  /**\n   * End angle for the last value.\n   */\n  endAngle?: number;\n}\n\nexport const RadialAxisTick: FC<Partial<RadialAxisTickProps>> = ({\n  line = <RadialAxisTickLine />,\n  label = <RadialAxisTickLabel />,\n  scale,\n  outerRadius = 0,\n  data,\n  index,\n  padding = 0,\n  innerRadius,\n  startAngle = 0,\n  endAngle = 2 * Math.PI\n}) => {\n  const lineProps = useMemo(\n    () => ({ ...RADIAL_AXIS_TICK_LINE_DEFAULT_PROPS, ...(line?.props ?? {}) }),\n    [line?.props]\n  );\n  const point = scale(data);\n  const rotation = (point * 180) / Math.PI - 90;\n  const transform = `rotate(${rotation}) translate(${outerRadius + padding},0)`;\n  const lineSize = line ? lineProps.size : 0;\n\n  return (\n    <g transform={transform}>\n      {line && (\n        <CloneElement<RadialAxisTickLineProps>\n          element={line}\n          innerRadius={innerRadius}\n          outerRadius={outerRadius}\n        />\n      )}\n      {label && (\n        <CloneElement<RadialAxisTickLabelProps>\n          element={label}\n          index={index}\n          point={point}\n          rotation={rotation}\n          lineSize={lineSize}\n          data={data}\n          startAngle={startAngle}\n          endAngle={endAngle}\n        />\n      )}\n    </g>\n  );\n};\n","import React, { FC, Fragment, ReactElement } from 'react';\nimport { RadialAxisTick, RadialAxisTickProps } from './RadialAxisTick';\nimport { CloneElement } from 'reablocks';\nimport { getTicks } from '@/common/utils/ticks';\nimport { TimeInterval } from 'd3-time';\n\nexport interface TickCallback {\n  index?: number;\n}\n\nexport interface RadialAxisTickSeriesProps {\n  /**\n   * Scale to use for the tick.\n   */\n  scale: any;\n\n  /**\n   * Number of ticks to render.\n   */\n  count?: number;\n\n  /**\n   * Interval between ticks.\n   */\n  interval?: number | TimeInterval;\n\n  /**\n   * Tick values to render.\n   */\n  tickValues: any[];\n\n  /**\n   * Outer radius of the arc.\n   */\n  outerRadius: number;\n\n  /**\n   * Type of the axis.\n   */\n  type: 'value' | 'category' | 'time' | 'duration';\n\n  /**\n   * Inner radius of the arc.\n   */\n  innerRadius: number;\n\n  /**\n   * Tick element to render.\n   */\n  tick:\n    | ((\n        tick: TickCallback\n      ) => ReactElement<RadialAxisTickProps, typeof RadialAxisTick>)\n    | ReactElement<RadialAxisTickProps, typeof RadialAxisTick>;\n\n  /**\n   * Start angle for the first value.\n   */\n  startAngle?: number;\n\n  /**\n   * End angle for the last value.\n   */\n  endAngle?: number;\n}\n\nexport const RadialAxisTickSeries: FC<Partial<RadialAxisTickSeriesProps>> = ({\n  scale,\n  count = 12,\n  outerRadius,\n  tick = <RadialAxisTick />,\n  tickValues,\n  innerRadius,\n  interval,\n  type = 'time',\n  startAngle = 0,\n  endAngle = 2 * Math.PI\n}) => {\n  const ticks = getTicks(scale, tickValues, type, count, interval || count);\n\n  return (\n    <Fragment>\n      {ticks.map((data, i) => {\n        const tickElement =\n          typeof tick === 'function' ? tick({ index: i }) : tick;\n        return (\n          <CloneElement<RadialAxisTickProps>\n            element={tickElement}\n            key={i}\n            index={i}\n            scale={scale}\n            data={data}\n            innerRadius={innerRadius}\n            outerRadius={outerRadius}\n            startAngle={startAngle}\n            endAngle={endAngle}\n          />\n        );\n      })}\n    </Fragment>\n  );\n};\n","import { arc } from 'd3-shape';\nimport React, { FC } from 'react';\n\nexport interface RadialAxisArcProps {\n  /**\n   * Index of the arc.\n   */\n  index: number;\n\n  /**\n   * Scale to use for the arc.\n   */\n  scale: any;\n\n  /**\n   * Stroke color of the arc.\n   */\n  stroke: ((index: number) => string) | string;\n\n  /**\n   * Stroke dash array of the arc.\n   */\n  strokeDasharray: ((index: number) => string) | string;\n\n  /**\n   * Start angle for the first value.\n   */\n  startAngle?: number;\n\n  /**\n   * End angle for the last value.\n   */\n  endAngle?: number;\n}\n\nexport const RadialAxisArc: FC<Partial<RadialAxisArcProps>> = (props) => {\n  const { index, stroke, strokeDasharray, scale, startAngle, endAngle } = {\n    ...RADIAL_AXIS_ARC_DEFAULT_PROPS,\n    ...props\n  };\n\n  const r = scale(index);\n  const strokeColor = typeof stroke === 'string' ? stroke : stroke(index);\n  const strokeDash =\n    typeof strokeDasharray === 'string'\n      ? strokeDasharray\n      : strokeDasharray(index);\n\n  const isFullCircle = Math.abs(endAngle - startAngle) >= 2 * Math.PI;\n\n  const x = arc()({\n    innerRadius: r,\n    outerRadius: r,\n    startAngle: startAngle,\n    endAngle: endAngle\n  });\n\n  // Path calculation for intermediate angles\n  const REGEX = /(-?\\d+\\.?\\d*,-?\\d+\\.?\\d*A-?\\d+\\.?\\d*,-?\\d+\\.?\\d*)/gm;\n  const matches = x.match(REGEX);\n  const start = matches?.[0]?.split('A', 2)?.[0];\n  const end = matches?.[1]?.split('A', 2)?.[0];\n  const d = x + ` M ${start} L 0,0 M ${end} L 0,0`;\n\n  return (\n    <>\n      {isFullCircle ? (\n        <circle\n          fill=\"none\"\n          strokeDasharray={strokeDash}\n          stroke={strokeColor}\n          style={{ pointerEvents: 'none' }}\n          cx=\"0\"\n          cy=\"0\"\n          r={r}\n        />\n      ) : (\n        <path\n          d={d}\n          fill=\"none\"\n          strokeDasharray={strokeDash}\n          stroke={strokeColor}\n          style={{ pointerEvents: 'none' }}\n        />\n      )}\n    </>\n  );\n};\n\nexport const RADIAL_AXIS_ARC_DEFAULT_PROPS = {\n  stroke: '#71808d',\n  strokeDasharray: '1,4',\n  startAngle: 0,\n  endAngle: 2 * Math.PI\n};\n","/**\n * Given a set of arcs, return an array of points for each arc.\n */\nexport const getPointsForLevels = ({ count, outerRadius, ticks, arcs }) => {\n  const levels: Array<Array<{ x: number; y: number }>> = [];\n  const polyangle = (Math.PI * 2) / ticks;\n\n  for (const level of arcs) {\n    const hyp = (level / count) * outerRadius;\n\n    const points: Array<{ x: number; y: number }> = [];\n    for (let vertex = 0; vertex < ticks; vertex++) {\n      const theta = vertex * polyangle;\n      points.push({\n        x: hyp * Math.sin(Math.PI - theta),\n        y: hyp * Math.cos(Math.PI - theta)\n      });\n    }\n\n    levels.push([...points, points[0]]);\n  }\n\n  return levels;\n};\n","import React, { FC, ReactElement } from 'react';\nimport {\n  RADIAL_AXIS_ARC_DEFAULT_PROPS,\n  RadialAxisArc,\n  RadialAxisArcProps\n} from './RadialAxisArc';\nimport { CloneElement } from 'reablocks';\nimport { scaleLinear } from 'd3-scale';\nimport { getPointsForLevels } from './utils';\nimport { RadialAxisArcLine, RadialAxisArcLineProps } from './RadialAxisArcLine';\nimport { mergeDefaultProps } from '@/common/utils';\n\nexport interface RadialAxisArcSeriesProps {\n  /**\n   * Arc element to render.\n   */\n  arc: ReactElement<RadialAxisArcProps, typeof RadialAxisArc>;\n\n  /**\n   * Line element to render.\n   */\n  line: ReactElement<RadialAxisArcLineProps, typeof RadialAxisArcLine>;\n\n  /**\n   * Number of arcs to render.\n   */\n  count: number;\n\n  /**\n   * Inner radius of the arc.\n   */\n  innerRadius: number;\n\n  /**\n   * Outer radius of the arc.\n   */\n  outerRadius: number;\n\n  /**\n   * Calculated tick values by the Radial Axis.\n   */\n  tickValues?: any[];\n\n  /**\n   * Start angle for the first value.\n   */\n  startAngle?: number;\n\n  /**\n   * End angle for the last value.\n   */\n  endAngle?: number;\n}\n\nexport const RadialAxisArcSeries: FC<Partial<RadialAxisArcSeriesProps>> = (\n  props\n) => {\n  const {\n    count,\n    innerRadius,\n    outerRadius,\n    line,\n    arc,\n    tickValues,\n    startAngle,\n    endAngle\n  } = mergeDefaultProps(RADIAL_AXIS_ARC_SERIES_DEFAULT_PROPS, props);\n\n  const scale = scaleLinear()\n    .domain([0, count])\n    .range([innerRadius, outerRadius]);\n\n  const arcs = scale.ticks(count);\n\n  const points = getPointsForLevels({\n    count,\n    outerRadius,\n    ticks: tickValues.length,\n    arcs\n  });\n\n  return (\n    <>\n      {line && (\n        <>\n          {points.map((d, i) => (\n            <CloneElement<RadialAxisArcLineProps>\n              element={line}\n              key={i}\n              data={d}\n              index={i}\n            />\n          ))}\n        </>\n      )}\n      {arc && (\n        <>\n          {arcs.map((d) => (\n            <CloneElement<RadialAxisArcProps>\n              element={arc}\n              key={d}\n              index={d}\n              scale={scale}\n              startAngle={startAngle}\n              endAngle={endAngle}\n            />\n          ))}\n        </>\n      )}\n    </>\n  );\n};\n\nexport const RADIAL_AXIS_ARC_SERIES_DEFAULT_PROPS = {\n  count: 12,\n  arc: <RadialAxisArc />,\n  startAngle: 0,\n  endAngle: 2 * Math.PI\n};\n","import { line } from 'd3-shape';\nimport React, { FC } from 'react';\n\nexport interface RadialAxisArcLineProps {\n  /**\n   * Stroke color of the arc.\n   */\n  stroke: ((index: number) => string) | string;\n\n  /**\n   * Data to render the line.\n   */\n  data: Array<{ x: number; y: number }>;\n\n  /**\n   * Index of the arc.\n   */\n  index: number;\n}\n\nexport const RadialAxisArcLine: FC<Partial<RadialAxisArcLineProps>> = (\n  props\n) => {\n  const { data, stroke, index } = {\n    ...RADIAL_AXIS_ARC_LINE_DEFAULT_PROPS,\n    ...props\n  };\n\n  const lineGenerator = line<{ x: number; y: number }>()\n    .x((d: any) => d.x)\n    .y((d: any) => d.y);\n\n  const d = lineGenerator(data);\n  const strokeColor = typeof stroke === 'string' ? stroke : stroke(index);\n\n  return (\n    <path\n      d={d}\n      stroke={strokeColor}\n      fill=\"none\"\n      style={{ pointerEvents: 'none' }}\n    />\n  );\n};\n\nexport const RADIAL_AXIS_ARC_LINE_DEFAULT_PROPS = {\n  stroke: '#71808d'\n};\n","import React, { FC, Fragment, ReactElement } from 'react';\nimport {\n  RadialAxisTickSeries,\n  RadialAxisTickSeriesProps\n} from './RadialAxisTickSeries';\nimport {\n  RADIAL_AXIS_ARC_SERIES_DEFAULT_PROPS,\n  RadialAxisArcSeries,\n  RadialAxisArcSeriesProps\n} from './RadialAxisArcSeries';\nimport { CloneElement } from 'reablocks';\nimport { getTicks, mergeDefaultProps } from '@/common/utils';\n\ntype RadialAxisType = 'value' | 'time' | 'category';\n\nexport interface RadialAxisProps {\n  /**\n   * Height of the axis.\n   */\n  height: number;\n\n  /**\n   * Width of the axis.\n   */\n  width: number;\n\n  /**\n   * Scale to use for the axis.\n   */\n  xScale: any;\n\n  /**\n   * Inner radius of the axis.\n   */\n  innerRadius: number;\n\n  /**\n   * Type of the axis.\n   */\n  type: 'value' | 'time' | 'category';\n\n  /**\n   * Arc element to render.\n   */\n  arcs: ReactElement<\n    RadialAxisArcSeriesProps,\n    typeof RadialAxisArcSeries\n  > | null;\n\n  /**\n   * Tick element to render.\n   */\n  ticks: ReactElement<\n    RadialAxisTickSeriesProps,\n    typeof RadialAxisTickSeries\n  > | null;\n\n  /**\n   * Start angle for the first value.\n   */\n  startAngle?: number;\n\n  /**\n   * End angle for the last value.\n   */\n  endAngle?: number;\n}\n\nexport const RadialAxis: FC<Partial<RadialAxisProps>> = (props) => {\n  const {\n    arcs,\n    ticks,\n    xScale,\n    height,\n    width,\n    innerRadius,\n    type,\n    startAngle,\n    endAngle\n  } = mergeDefaultProps(RADIAL_AXIS_DEFAULT_PROPS, props);\n\n  const outerRadius = Math.min(height, width) / 2;\n\n  // TODO: This is a hack to get the ticks in the parent\n  // component. This is because the ticks are needed\n  // for the arcs's lines.\n  const tickValues = getTicks(\n    xScale,\n    ticks.props.tickValues,\n    type as RadialAxisType,\n    ticks.props.count,\n    ticks.props.interval || ticks.props.count\n  );\n\n  return (\n    <Fragment>\n      {arcs && (\n        <CloneElement<RadialAxisArcSeriesProps>\n          element={arcs}\n          outerRadius={outerRadius}\n          innerRadius={innerRadius}\n          tickValues={tickValues}\n          startAngle={startAngle}\n          endAngle={endAngle}\n        />\n      )}\n      {ticks && (\n        <CloneElement<RadialAxisTickSeriesProps>\n          element={ticks}\n          scale={xScale}\n          type={type as RadialAxisType}\n          innerRadius={innerRadius}\n          outerRadius={outerRadius}\n          startAngle={startAngle}\n          endAngle={endAngle}\n        />\n      )}\n    </Fragment>\n  );\n};\n\nexport const RADIAL_AXIS_DEFAULT_PROPS: Partial<RadialAxisProps> = {\n  innerRadius: 10,\n  type: 'value',\n  arcs: <RadialAxisArcSeries />,\n  ticks: <RadialAxisTickSeries />,\n  startAngle: 0,\n  endAngle: 2 * Math.PI\n};\n","import React, {\n  Children,\n  cloneElement,\n  PropsWithChildren,\n  FC,\n  useEffect,\n  useRef\n} from 'react';\nimport { toggleTextSelection } from '@/common/utils/selection';\n\ninterface MoveProps extends PropsWithChildren {\n  cursor?: string;\n  disabled?: boolean;\n  preventRightClick: boolean;\n  disableText: boolean;\n  threshold: number;\n  onMoveStart: (event) => void;\n  onMove: (event) => void;\n  onMoveCancel: (event) => void;\n  onMoveEnd: (event) => void;\n}\n\nexport const Move: FC<Partial<MoveProps>> = ({\n  cursor,\n  disabled = false,\n  preventRightClick = true,\n  disableText = true,\n  threshold = 0,\n  onMoveStart = () => undefined,\n  onMove = () => undefined,\n  onMoveCancel = () => undefined,\n  onMoveEnd = () => undefined,\n  children\n}) => {\n  let started = false;\n  let deltaX = 0;\n  let deltaY = 0;\n  let prevXPosition = 0;\n  let prevYPosition = 0;\n  const rqf = useRef<number>();\n\n  useEffect(() => {\n    return () => {\n      cancelAnimationFrame(rqf.current);\n      disposeHandlers();\n    };\n  }, []);\n\n  const disposeHandlers = () => {\n    window.removeEventListener('mousemove', onMouseMove);\n    window.removeEventListener('mouseup', onMouseUp);\n    window.removeEventListener('touchmove', onTouchMove);\n    window.removeEventListener('touchend', onTouchEnd);\n\n    setCursor(false);\n    disableTextSelection(true);\n  };\n\n  const disableTextSelection = (shouldDisable: boolean) => {\n    if (disableText) {\n      toggleTextSelection(shouldDisable);\n    }\n  };\n\n  const setCursor = (set: boolean) => {\n    if (cursor) {\n      document.body.style.cursor = set ? cursor : 'inherit';\n    }\n  };\n\n  const checkThreshold = () => {\n    return (\n      !started && (Math.abs(deltaX) > threshold || Math.abs(deltaY) > threshold)\n    );\n  };\n\n  const getTouchCoords = (event) => {\n    const { clientX, clientY } = event.touches[0];\n    return {\n      clientX,\n      clientY\n    };\n  };\n\n  const onMouseDown = (event: React.MouseEvent) => {\n    const shouldCancel = event.nativeEvent.which === 3 && preventRightClick;\n    if (shouldCancel || disabled) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    started = false;\n\n    // Always bind event so we cancel movement even if no action was taken\n    window.addEventListener('mousemove', onMouseMove);\n    window.addEventListener('mouseup', onMouseUp);\n  };\n\n  const onMouseMove = (event) => {\n    event.preventDefault();\n    event.stopPropagation();\n\n    const { movementX, movementY } = event;\n    let localDeltaX = deltaX + movementX;\n    let localDeltaY = deltaY + movementY;\n\n    if (checkThreshold()) {\n      disableTextSelection(true);\n      setCursor(true);\n\n      localDeltaX = 0;\n      localDeltaY = 0;\n      started = true;\n\n      onMoveStart({\n        nativeEvent: event,\n        type: 'mouse'\n      });\n    } else {\n      rqf.current = requestAnimationFrame(() => {\n        onMove({\n          nativeEvent: event,\n          type: 'mouse',\n          x: localDeltaX,\n          y: localDeltaY\n        });\n      });\n    }\n\n    deltaX = localDeltaX;\n    deltaY = localDeltaY;\n  };\n\n  const onMouseUp = (event) => {\n    event.preventDefault();\n    event.stopPropagation();\n\n    disposeHandlers();\n\n    if (started) {\n      onMoveEnd({\n        nativeEvent: event,\n        type: 'mouse'\n      });\n    } else {\n      onMoveCancel({\n        nativeEvent: event,\n        type: 'mouse'\n      });\n    }\n  };\n\n  const onTouchStart = (event: React.TouchEvent) => {\n    if (disabled || event.touches.length !== 1) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    started = false;\n    prevXPosition = event.touches[0].clientX;\n    prevYPosition = event.touches[0].clientY;\n\n    // Always bind event so we cancel movement even if no action was taken\n    window.addEventListener('touchmove', onTouchMove);\n    window.addEventListener('touchend', onTouchEnd);\n  };\n\n  const onTouchMove = (event: TouchEvent) => {\n    event.preventDefault();\n    event.stopPropagation();\n\n    // Calculate delta from previous position and current\n    const { clientX, clientY } = getTouchCoords(event);\n    let localDeltaX = clientX - prevXPosition;\n    let localDeltaY = clientY - prevYPosition;\n\n    // Track the delta\n    localDeltaX = localDeltaX + localDeltaX;\n    localDeltaY = localDeltaY + localDeltaY;\n\n    if (checkThreshold()) {\n      disableTextSelection(true);\n      setCursor(true);\n\n      localDeltaX = 0;\n      localDeltaY = 0;\n      started = true;\n\n      onMoveStart({\n        nativeEvent: { ...event, clientX, clientY },\n        type: 'touch'\n      });\n    } else {\n      rqf.current = requestAnimationFrame(() => {\n        onMove({\n          // TODO: Come back and clean this up...\n          nativeEvent: {\n            ...event,\n            clientX,\n            clientY\n          },\n          type: 'touch',\n          x: localDeltaX,\n          y: localDeltaY\n        });\n      });\n    }\n\n    prevXPosition = clientX;\n    prevYPosition = clientY;\n  };\n\n  const onTouchEnd = (event: TouchEvent) => {\n    event.preventDefault();\n    event.stopPropagation();\n    disposeHandlers();\n\n    if (started) {\n      onMoveEnd({\n        nativeEvent: event,\n        type: 'touch'\n      });\n    } else {\n      onMoveCancel({\n        nativeEvent: event,\n        type: 'touch'\n      });\n    }\n  };\n\n  return Children.map(children, (child: any) =>\n    cloneElement(child, {\n      ...child.props,\n      onMouseDown: (e) => {\n        onMouseDown(e);\n        if (child.props.onMouseDown) {\n          child.props.onMouseDown(e);\n        }\n      },\n      onTouchStart: (e) => {\n        onTouchStart(e);\n        if (child.props.onTouchStart) {\n          child.props.onTouchStart(e);\n        }\n      }\n    })\n  );\n};\n","import React, { FC, useState } from 'react';\nimport classNames from 'classnames';\nimport { range } from 'd3-array';\nimport { Move } from '@/common/Gestures/Move';\nimport css from './BrushHandle.module.css';\n\nexport interface BrushHandleProps {\n  height: number;\n  onHandleDrag: (deltaX: number) => void;\n}\n\nexport const BrushHandle: FC<BrushHandleProps> = (props) => {\n  const { height, onHandleDrag } = props;\n  const [isDragging, setIsDragging] = useState(false);\n\n  return (\n    <Move\n      cursor=\"ew-resize\"\n      onMoveStart={() => setIsDragging(true)}\n      onMove={({ x }) => onHandleDrag(x)}\n      onMoveEnd={() => setIsDragging(false)}\n    >\n      <g>\n        <line className={css.line} y1=\"0\" y2={height} x1=\"5\" x2=\"5\" />\n        <rect\n          className={classNames(css.handle, { [css.dragging]: isDragging })}\n          height={height - 10}\n          style={{ cursor: 'ew-resize' }}\n          width={8}\n          y=\"5\"\n          y1={height - 5}\n        />\n        <g\n          transform={`translate(-1, ${height / 2 - 10})`}\n          style={{ pointerEvents: 'none' }}\n        >\n          {range(5).map((i) => (\n            <circle cy={i * 5} cx=\"5\" r=\".5\" key={i} className={css.dot} />\n          ))}\n        </g>\n      </g>\n    </Move>\n  );\n};\n","import React, { Fragment, useState, FC, useCallback } from 'react';\nimport { BrushHandle } from './BrushHandle';\nimport { Move } from '@/common/Gestures/Move';\nimport css from './BrushSlice.module.css';\n\nexport interface BrushChangeEvent {\n  start?: number;\n  end?: number;\n}\n\ninterface BrushSliceProps {\n  height: number;\n  width: number;\n  start: number;\n  end: number;\n  onBrushChange: (event: BrushChangeEvent) => void;\n}\n\nexport const BrushSlice: FC<BrushSliceProps> = (props) => {\n  const { height, start, end, width, onBrushChange } = props;\n  const [isDragging, setIsDragging] = useState(false);\n  const sliceWidth = Math.max(end - start, 0);\n  const endSliceWidth = Math.max(width - end, 0);\n  const hasNoSlice = start === 0 && end === width;\n\n  const onMoveStart = useCallback(() => {\n    const hasNoSlice = start === 0 && end === width;\n\n    if (!hasNoSlice) {\n      setIsDragging(true);\n    }\n  }, [end, start, width]);\n\n  const onMove = useCallback(\n    ({ x }) => {\n      const startUpdated = start + x;\n      const endUpdated = end + x;\n\n      if (startUpdated >= 0 && endUpdated <= width) {\n        onBrushChange({\n          start: startUpdated,\n          end: endUpdated\n        });\n      }\n    },\n    [start, end, width, onBrushChange]\n  );\n\n  const onHandleDrag = useCallback(\n    (direction: 'start' | 'end', deltaX: number) => {\n      const startUpdated = direction === 'start' ? start + deltaX : start;\n      const endUpdated = direction !== 'start' ? end + deltaX : end;\n\n      onBrushChange({\n        start: startUpdated,\n        end: endUpdated\n      });\n    },\n    [end, onBrushChange, start]\n  );\n\n  return (\n    <Fragment>\n      <rect className={css.unsliced} height={height} width={start} />\n      <rect\n        transform={`translate(${end}, 0)`}\n        className={css.unsliced}\n        height={height}\n        width={endSliceWidth}\n      />\n      <g transform={`translate(${start}, 0)`}>\n        <Move\n          cursor=\"grabbing\"\n          onMoveStart={onMoveStart}\n          onMove={onMove}\n          onMoveEnd={() => setIsDragging(false)}\n        >\n          <rect\n            className={css.slice}\n            height={height}\n            width={sliceWidth}\n            style={{\n              cursor: isDragging ? 'grabbing' : 'grab',\n              opacity: hasNoSlice ? 0 : 0.1,\n              pointerEvents: !hasNoSlice ? 'initial' : 'none'\n            }}\n          />\n        </Move>\n        <g transform={'translate(-4, 0)'}>\n          <BrushHandle\n            height={height}\n            onHandleDrag={(deltaX) => onHandleDrag('start', deltaX)}\n          />\n        </g>\n        <g transform={`translate(${sliceWidth - 5}, 0)`}>\n          <BrushHandle\n            height={height}\n            onHandleDrag={(deltaX) => onHandleDrag('end', deltaX)}\n          />\n        </g>\n      </g>\n    </Fragment>\n  );\n};\n","import React, {\n  useState,\n  useEffect,\n  useRef,\n  FC,\n  PropsWithChildren,\n  useCallback\n} from 'react';\nimport { getPositionForTarget } from '@/common/utils/position';\nimport { BrushSlice, BrushChangeEvent } from './BrushSlice';\nimport { ChartDataTypes } from '@/common/data';\nimport { Move } from '@/common/Gestures/Move';\n\nexport interface BrushConfiguration {\n  disabled?: boolean;\n  fill?: string;\n  domain?: [ChartDataTypes, ChartDataTypes];\n  onBrushChange?: (e) => void;\n}\n\ninterface BrushProps extends PropsWithChildren {\n  height: number;\n  width: number;\n  disabled?: boolean;\n  start?: number;\n  end?: number;\n  onBrushChange?: (e: BrushChangeEvent) => void;\n}\n\ninterface BrushState {\n  start?: number;\n  end?: number;\n}\n\nexport const Brush: FC<Partial<BrushProps>> = (props) => {\n  const {\n    children,\n    disabled,\n    height,\n    width,\n    start: startProp,\n    end: endProp,\n    onBrushChange\n  } = props;\n  const [isSlicing, setIsSlicing] = useState(false);\n  const [initial, setInitial] = useState<number>();\n  const [range, setRange] = useState<BrushState>({\n    start: props.start || 0,\n    end: props.end || props.width\n  });\n  const { start, end } = range;\n\n  const ref = useRef<any>();\n\n  const ensurePositionInBounds = useCallback(\n    (newStart?: number, newEnd?: number) => {\n      let startUpdated = newStart;\n      let endUpdated = newEnd;\n\n      if (startUpdated === undefined || startUpdated <= 0) {\n        startUpdated = 0;\n      }\n\n      if (end === undefined) {\n        endUpdated = width;\n      }\n\n      if (startUpdated > endUpdated) {\n        startUpdated = start;\n      }\n\n      if (endUpdated < startUpdated) {\n        endUpdated = end;\n      }\n\n      if (endUpdated >= width) {\n        endUpdated = width;\n      }\n\n      return { start: startUpdated, end: endUpdated };\n    },\n    [end, start, width]\n  );\n\n  const getPositionsForPanEvent = useCallback((event: any) => {\n    const eventObj = {\n      target: ref.current,\n      clientX: event.clientX,\n      clientY: event.clientY\n    };\n\n    return getPositionForTarget(eventObj);\n  }, []);\n\n  const getStartEnd = useCallback(\n    (event: any) => {\n      const { x } = getPositionsForPanEvent(event);\n\n      if (x < initial) {\n        return ensurePositionInBounds(x, initial);\n      } else {\n        return ensurePositionInBounds(initial, x);\n      }\n    },\n    [ensurePositionInBounds, getPositionsForPanEvent, initial]\n  );\n\n  const onMoveStart = useCallback(\n    (event: any) => {\n      if (!disabled) {\n        const positions = getPositionsForPanEvent(event.nativeEvent);\n\n        setIsSlicing(true);\n        setInitial(positions.x);\n      }\n    },\n    [disabled, getPositionsForPanEvent]\n  );\n\n  const onMove = useCallback(\n    (event: any) => {\n      if (!disabled) {\n        const { start, end } = getStartEnd(event.nativeEvent);\n\n        if (onBrushChange) {\n          onBrushChange({\n            start,\n            end\n          });\n        }\n\n        setRange({ start, end });\n      }\n    },\n    [disabled, getStartEnd, onBrushChange]\n  );\n\n  const onMoveEnd = useCallback(() => {\n    setIsSlicing(false);\n  }, []);\n\n  const onMoveCancel = useCallback(() => {\n    const val = {\n      start: 0,\n      end: width\n    };\n\n    setRange(val);\n\n    if (onBrushChange) {\n      onBrushChange(val);\n    }\n  }, [onBrushChange, width]);\n\n  const onSliceChange = useCallback(\n    (event: BrushChangeEvent) => {\n      const val = ensurePositionInBounds(event.start, event.end);\n\n      setRange((state) => ({ ...state, ...val }));\n\n      if (onBrushChange) {\n        onBrushChange(val);\n      }\n    },\n    [ensurePositionInBounds, onBrushChange]\n  );\n\n  useEffect(() => {\n    if (end === width) {\n      setRange((prev) => ({\n        ...prev,\n        end: width\n      }));\n    }\n  }, [end, width]);\n\n  useEffect(() => {\n    // Don't update if we are doing the slicing\n    if (!isSlicing) {\n      const startUpdated = startProp !== start;\n      const endUpdated = endProp !== end;\n\n      if (startUpdated || endUpdated) {\n        setRange(ensurePositionInBounds(start, end));\n      }\n    }\n  }, [end, endProp, ensurePositionInBounds, isSlicing, start, startProp]);\n\n  return (\n    <Move\n      cursor=\"crosshair\"\n      onMoveStart={onMoveStart}\n      onMove={onMove}\n      onMoveEnd={onMoveEnd}\n      onMoveCancel={onMoveCancel}\n    >\n      <g\n        style={{\n          pointerEvents: isSlicing ? 'none' : 'auto',\n          cursor: disabled ? '' : 'crosshair'\n        }}\n      >\n        {children}\n        {!disabled && (\n          <>\n            <rect ref={ref} height={height} width={width} opacity={0} />\n            {start !== undefined && end !== undefined && (\n              <BrushSlice\n                start={start}\n                end={end}\n                height={height}\n                width={width}\n                onBrushChange={onSliceChange}\n              />\n            )}\n          </>\n        )}\n      </g>\n    </Move>\n  );\n};\n","import React, { FC, PropsWithChildren, useCallback } from 'react';\nimport { BrushConfiguration, Brush } from './Brush';\nimport { BrushChangeEvent } from './BrushSlice';\n\nexport interface ChartBrushProps extends BrushConfiguration, PropsWithChildren {\n  scale: any;\n  height: number;\n  width: number;\n  children: any;\n}\n\nexport const ChartBrush: FC<Partial<ChartBrushProps>> = (props) => {\n  const { disabled, domain, scale, onBrushChange, width, children } = props;\n\n  const getBrushOffset = useCallback(() => {\n    let start;\n    let end;\n\n    if (!disabled && domain) {\n      start = scale(domain[0]);\n      end = scale(domain[1]);\n    }\n\n    return { start, end };\n  }, [disabled, domain, scale]);\n\n  const onBrushChangeHandler = useCallback(\n    (event: BrushChangeEvent) => {\n      if (onBrushChange) {\n        let domain;\n\n        if (\n          event.start !== undefined &&\n          event.end !== undefined &&\n          (event.start !== 0 || event.end !== width)\n        ) {\n          if (scale.invert) {\n            const start = scale.invert(event.start);\n            const end = scale.invert(event.end);\n            domain = [start, end];\n          } else {\n            // invert scaleBend\n            const band = scale.step();\n            const start = Math.ceil((event.start - band / 2) / band);\n            const end = Math.ceil((event.end - band / 2) / band);\n\n            domain = [scale.domain()[start], scale.domain()[end]];\n          }\n        }\n\n        onBrushChange({\n          domain\n        });\n      }\n    },\n    [onBrushChange, scale, width]\n  );\n\n  return (\n    <Brush\n      {...props}\n      {...getBrushOffset()}\n      onBrushChange={onBrushChangeHandler}\n    >\n      {children}\n    </Brush>\n  );\n};\n","import { createContext, useContext } from 'react';\nimport { Dimensions } from '@/common/utils';\nimport { LinearAxisDimensionChanged } from '@/common/Axis';\n\nexport interface ChartContextProps extends Dimensions {\n  id: string;\n  chartSized?: boolean;\n  yAxisSized?: boolean;\n  xAxisSized?: boolean;\n  updateAxes: (\n    orientation: 'horizontal' | 'vertical',\n    event: LinearAxisDimensionChanged\n  ) => void;\n}\n\nexport const ChartContext = createContext<Partial<ChartContextProps>>({});\n\nexport const { Provider: ChartProvider, Consumer: ChartConsumer } =\n  ChartContext;\n\nexport const useChart = () => {\n  const context = useContext(ChartContext);\n\n  if (context === undefined) {\n    throw new Error('`useChart` hook must be used within a `ChartProvider`');\n  }\n\n  return context;\n};\n","import React, { FC, useCallback, useState, useMemo } from 'react';\nimport { Margins, getDimension } from '@/common/utils/dimensions';\nimport { useResizeObserver } from '@/common/utils/useResizeObserver';\nimport { useId } from 'reablocks';\nimport { LinearAxisDimensionChanged } from '@/common/Axis';\nimport classNames from 'classnames';\nimport { ChartContextProps, ChartProvider } from './ChartContext';\nimport css from './ChartContainer.module.css';\n\nexport interface ChartProps {\n  /**\n   * Id of the chart.\n   */\n  id?: string;\n\n  /**\n   * Width of the chart. If not provided will autosize.\n   */\n  width?: number;\n\n  /**\n   * Height of the chart. If not provided will autosize.\n   */\n  height?: number;\n\n  /**\n   * Margins for the chart.\n   */\n  margins?: Margins;\n\n  /**\n   * Classnames for the chart.\n   */\n  className?: string;\n\n  /**\n   * Classnames for the chart.\n   */\n  containerClassName?: string;\n\n  /**\n   * Additional css styles.\n   */\n  style?: React.StyleHTMLAttributes<SVGSVGElement>;\n\n  /**\n   * Center the chart. Used mainly internally.\n   */\n  center?: boolean;\n\n  /**\n   * Center chart on X Axis only. Used mainly internally.\n   */\n  centerX?: boolean;\n\n  /**\n   * Center chart on Y Axis only. Used mainly internally.\n   */\n  centerY?: boolean;\n}\n\nexport interface ChartContainerProps extends ChartProps {\n  /**\n   * Internal property to identify if the xAxis is visible.\n   */\n  xAxisVisible?: boolean;\n\n  /**\n   * Internal property to identify if the xAxis is visible.\n   */\n  yAxisVisible?: boolean;\n\n  /**\n   * Children elements to recieve the calculated props.\n   */\n  children: (props: ChartContainerChildProps) => any;\n}\n\nexport type ChartContainerChildProps = ChartContextProps;\n\nexport const ChartContainer: FC<ChartContainerProps> = ({\n  className,\n  children,\n  center,\n  centerX,\n  centerY,\n  style,\n  margins,\n  containerClassName,\n  xAxisVisible,\n  yAxisVisible,\n  id,\n  ...rest\n}) => {\n  const curId = useId(id);\n  const [xAxisSized, setXAxisSized] = useState<boolean>(false);\n  const [yAxisSized, setYAxisSized] = useState<boolean>(false);\n  const [xOffset, setXOffset] = useState<number>(0);\n  const [yOffset, setYOffset] = useState<number>(0);\n  const [ref, { width, height }] = useResizeObserver<HTMLDivElement>();\n\n  const chartSized = useMemo(() => {\n    if (!height || !width) {\n      return false;\n    }\n\n    // TODO: @amcdnl refactor this to account for 0-2 axises on x/y\n    if (xAxisVisible && !xAxisSized) {\n      return false;\n    }\n\n    if (yAxisVisible && !yAxisSized) {\n      return false;\n    }\n\n    return true;\n  }, [height, width, xAxisSized, xAxisVisible, yAxisVisible, yAxisSized]);\n\n  const onUpdateAxes = useCallback(\n    (\n      orientation: 'horizontal' | 'vertical',\n      event: LinearAxisDimensionChanged\n    ) => {\n      if (orientation === 'horizontal') {\n        setXAxisSized(true);\n      } else {\n        setYAxisSized(true);\n      }\n\n      if (event.height) {\n        setYOffset(event.height);\n      }\n\n      if (event.width) {\n        setXOffset(event.width);\n      }\n    },\n    []\n  );\n\n  const childProps: ChartContainerChildProps = useMemo(\n    () => ({\n      chartSized,\n      id: curId,\n      updateAxes: onUpdateAxes,\n      yAxisSized,\n      xAxisSized,\n      ...getDimension({\n        margins,\n        height,\n        width,\n        yOffset,\n        xOffset\n      })\n    }),\n    [\n      chartSized,\n      curId,\n      onUpdateAxes,\n      yAxisSized,\n      xAxisSized,\n      margins,\n      height,\n      width,\n      yOffset,\n      xOffset\n    ]\n  );\n\n  const translateX = center || centerX ? width / 2 : childProps.xMargin;\n  const translateY = center || centerY ? height / 2 : childProps.yMargin;\n\n  const styleHeight =\n    rest.height !== undefined && rest.height !== null ? rest.height : '100%';\n  const styleWidth =\n    rest.width !== undefined && rest.width !== null ? rest.width : '100%';\n\n  return (\n    <div\n      ref={ref}\n      style={{ height: styleHeight, width: styleWidth }}\n      className={classNames(containerClassName, css.container)}\n      {...rest}\n    >\n      <ChartProvider value={childProps}>\n        {height > 0 && width > 0 && (\n          <svg\n            width={width}\n            height={height}\n            className={classNames(css.svg, className)}\n            style={style}\n            tabIndex={0}\n          >\n            <g transform={`translate(${translateX}, ${translateY})`}>\n              {children(childProps)}\n            </g>\n          </svg>\n        )}\n      </ChartProvider>\n    </div>\n  );\n};\n","import bigInt from 'big-integer';\nimport { bigIntegerToLocaleString } from '@/common/utils/bigint';\nimport {\n  ChartDataTypes,\n  ChartInternalDataTypes,\n  ChartNestedDataShape,\n  ChartShallowDataShape\n} from './types';\n\nexport function normalizeValue(\n  value: ChartDataTypes,\n  maxBigInt: bigInt.BigInteger\n): ChartInternalDataTypes {\n  if (bigInt.isInstance(value)) {\n    if (maxBigInt.greater(1000000)) {\n      const divideBy = maxBigInt.divide(1000000);\n      return (value as bigInt.BigInteger).divide(divideBy).toJSNumber();\n    } else {\n      return (value as bigInt.BigInteger).toJSNumber();\n    }\n  } else {\n    return value as ChartInternalDataTypes;\n  }\n}\n\nexport function normalizeValueForFormatting(\n  value: ChartDataTypes\n): ChartInternalDataTypes {\n  if (bigInt.isInstance(value)) {\n    return bigIntegerToLocaleString(value as bigInt.BigInteger);\n  }\n  return value as ChartInternalDataTypes;\n}\n\nexport function getMaxBigIntegerForNested(series: ChartNestedDataShape[]) {\n  let maxBigInteger = bigInt.one;\n  for (const group of series) {\n    const maxBigIntegerForGroup = getMaxBigIntegerForShallow(group.data as any);\n    if (maxBigIntegerForGroup.greater(maxBigInteger)) {\n      maxBigInteger = maxBigIntegerForGroup;\n    }\n  }\n  return maxBigInteger;\n}\n\nexport function getMaxBigIntegerForShallow(series: ChartShallowDataShape[]) {\n  let maxBigInteger = bigInt.one;\n  for (const point of series) {\n    if (bigInt.isInstance(point.data)) {\n      const bigInteger = point.data as bigInt.BigInteger;\n      if (bigInteger.greater(maxBigInteger)) {\n        maxBigInteger = bigInteger;\n      }\n    }\n  }\n  return maxBigInteger;\n}\n","import { median } from 'd3-array';\nimport {\n  ChartInternalNestedDataShape,\n  ChartShallowDataShape,\n  ChartNestedDataShape,\n  ChartInternalShallowDataShape,\n  ChartDataTypes\n} from './types';\nimport {\n  getMaxBigIntegerForNested,\n  getMaxBigIntegerForShallow,\n  normalizeValue,\n  normalizeValueForFormatting\n} from './bigInteger';\nimport bigInt from 'big-integer';\n\nexport type Direction = 'vertical' | 'horizontal';\n\n/**\n * Accepts a `ChartDataShape` and transforms it to a chart readable data shape.\n *\n * Example:\n *\n *   [{\n *    key: 'Threat Intel',\n *    data: [{ key:'2011', data: 25 }]\n *   }]\n *\n * will be transformed to:\n *\n *  [{\n *    key: 'Threat Intel',\n *    data: [\n *      key: 'Threat Intel',\n *      x: '2011',\n *      y: 25\n *    ]\n *  }]\n */\nexport function buildNestedChartData(\n  series: ChartNestedDataShape[],\n  sort = false,\n  direction: Direction = 'vertical'\n): ChartInternalNestedDataShape[] {\n  let result: ChartInternalNestedDataShape[] = [];\n  const maxBigInteger = getMaxBigIntegerForNested(series);\n  const isVertical = direction === 'vertical';\n\n  for (const point of series) {\n    for (const nestedPoint of point.data) {\n      const key = normalizeValueForFormatting(point.key);\n      let idx = result.findIndex((r) => {\n        const left = r.key;\n        if (left instanceof Date && key instanceof Date) {\n          return left.getTime() === key.getTime();\n        }\n        return left === key;\n      });\n\n      if (idx === -1) {\n        result.push({\n          key,\n          metadata: point.metadata,\n          data: []\n        });\n\n        idx = result.length - 1;\n      }\n\n      const x = normalizeValue(\n        isVertical ? nestedPoint.key : (nestedPoint.data as any),\n        maxBigInteger\n      );\n\n      const y = normalizeValue(\n        isVertical ? nestedPoint.data : (nestedPoint.key as any),\n        maxBigInteger\n      );\n\n      result[idx].data.push({\n        key,\n        value: normalizeValueForFormatting(nestedPoint.data as any),\n        metadata: nestedPoint.metadata,\n        id: point.id,\n        x,\n        x0: isVertical ? x : 0,\n        x1: x,\n        y,\n        y0: isVertical ? 0 : y,\n        y1: y\n      });\n    }\n  }\n\n  // Sort the series data based on the median value\n  if (sort) {\n    result = result.sort((a, b) => {\n      const aMax = median(a.data, (d: any) => d.y)!;\n      const bMax = median(b.data, (d: any) => d.y)!;\n      return aMax < bMax ? 1 : -1;\n    });\n  }\n\n  return result;\n}\n\nfunction addToChartType(\n  a: ChartDataTypes,\n  b: number | bigInt.BigInteger\n): ChartDataTypes {\n  if (bigInt.isInstance(a) && bigInt.isInstance(b)) {\n    return (a as bigInt.BigInteger).add(b as bigInt.BigInteger);\n  } else if (a instanceof Date && typeof b === 'number') {\n    return new Date(a.valueOf() + b);\n  } else if (typeof a === 'number' && typeof b === 'number') {\n    return a + b;\n  } else {\n    throw new Error('Invalid types to addToChartTypes');\n  }\n}\n\n/**\n * Accepts a shallow shape and normalizes it to a chart readable format.\n */\nexport function buildShallowChartData(\n  series: ChartShallowDataShape[],\n  direction: Direction = 'vertical',\n  binSize: number | undefined = undefined\n): ChartInternalShallowDataShape[] {\n  const result: ChartInternalShallowDataShape[] = [];\n  const maxBigInteger = getMaxBigIntegerForShallow(series);\n  const isVertical = direction === 'vertical';\n\n  for (const point of series) {\n    const isTuple = Array.isArray(point.data);\n    let k1 = point.key;\n    if (binSize) {\n      k1 = addToChartType(point.key, binSize);\n    }\n\n    const props = {\n      k0: normalizeValue(point.key, maxBigInteger),\n      k1: normalizeValue(k1, maxBigInteger),\n      v0: normalizeValue(isTuple ? point.data[0] : 0, maxBigInteger),\n      v1: normalizeValue(isTuple ? point.data[1] : point.data, maxBigInteger)\n    };\n\n    const xProp = isVertical ? 'k' : 'v';\n    const yProp = isVertical ? 'v' : 'k';\n\n    result.push({\n      key: normalizeValueForFormatting(props.k0),\n      value: normalizeValueForFormatting(props.v1),\n      metadata: point.metadata,\n      id: point.id,\n      x: props[`${xProp}1`],\n      x0: props[`${xProp}0`],\n      x1: props[`${xProp}1`],\n      y: props[`${yProp}1`],\n      y0: props[`${yProp}0`],\n      y1: props[`${yProp}1`]\n    });\n  }\n\n  return result;\n}\n","import { histogram } from 'd3-array';\nimport { ChartInternalShallowDataShape, ChartInternalDataTypes } from './types';\n\n/**\n * Build a histogram given data set.\n */\nexport function buildBins(\n  xScale,\n  thresholds,\n  data: any[]\n): ChartInternalShallowDataShape[] {\n  const layout = histogram()\n    .value((d: any) => d.x)\n    .domain(xScale.domain())\n    .thresholds(xScale.ticks(thresholds));\n\n  const bins = layout(data as any);\n\n  return bins.map((bin) => ({\n    x0: bin.x0 as ChartInternalDataTypes,\n    x1: bin.x1 as ChartInternalDataTypes,\n    y: bin.length,\n    y0: 0,\n    y1: bin.length\n  }));\n}\n","import { stack, stackOffsetExpand, stackOffsetDiverging } from 'd3-shape';\nimport { ChartNestedDataShape, ChartInternalNestedDataShape } from './types';\nimport {\n  getMaxBigIntegerForNested,\n  normalizeValue,\n  normalizeValueForFormatting\n} from './bigInteger';\nimport { uniqueBy } from '@/common/utils/array';\n\nexport type StackTypes = 'default' | 'expand' | 'diverging';\n\n/**\n * Given a dataset like:\n *\n *   [{\n *    key: 'Threat Intel',\n *    data: [{ key:'2011', data: 25 }]\n *   }]\n *\n * it will transform it to:\n *\n *  [\n *    { x: 'Theat Intel', '2011': 25 }\n *  ]\n */\nfunction transformDataToStack(data: ChartNestedDataShape[]) {\n  const result: any[] = [];\n  const maxBigInteger = getMaxBigIntegerForNested(data);\n\n  for (const category of data) {\n    for (const value of category.data) {\n      let idx = result.findIndex((r) => {\n        if (r.x instanceof Date && category.key instanceof Date) {\n          return r.x.getTime() === category.key.getTime();\n        }\n        return r.x === category.key;\n      });\n\n      if (idx === -1) {\n        result.push({\n          metadata: category.metadata,\n          x: category.key,\n          formattedValues: {}\n        });\n\n        idx = result.length - 1;\n      }\n\n      result[idx].metadata = value.metadata;\n\n      result[idx][value.key as string] = normalizeValue(\n        value.data as any,\n        maxBigInteger\n      );\n\n      result[idx].formattedValues[value.key as string] =\n        normalizeValueForFormatting(value.data as any);\n    }\n  }\n\n  return result;\n}\n\n/**\n * Translates the stack data to a chart standard dataset.\n */\nfunction transformStackToData(\n  stackData,\n  direction = 'vertical'\n): ChartInternalNestedDataShape[] {\n  const result: ChartInternalNestedDataShape[] = [];\n  const isVertical = direction === 'vertical';\n\n  // Transform the data from the d3 stack format to our internal format\n  for (const category of stackData) {\n    for (const point of category) {\n      const key = point.data.x;\n\n      let idx = result.findIndex((r) => {\n        if (r.key instanceof Date && key instanceof Date) {\n          return r.key.getTime() === key.getTime();\n        }\n        return r.key === key;\n      });\n\n      if (idx === -1) {\n        result.push({\n          key,\n          data: []\n        });\n\n        idx = result.length - 1;\n      }\n\n      const categoryKey = category.key;\n      const y = point.data[categoryKey];\n      const [y0, y1] = point;\n\n      result[idx].data.push({\n        metadata: point.data.metadata,\n        key,\n        x: isVertical ? categoryKey : y1,\n        x0: isVertical ? categoryKey : y0,\n        x1: isVertical ? categoryKey : y1,\n        y: isVertical ? y : categoryKey,\n        y0: isVertical ? y0 : categoryKey,\n        y1: isVertical ? y1 : categoryKey,\n        value: point.data.formattedValues[categoryKey]\n      });\n    }\n  }\n\n  return result;\n}\n\n/**\n * Builds a stack dataset from the standard data format.\n */\nexport function buildBarStackData(\n  data: ChartNestedDataShape[] = [],\n  offset: StackTypes = 'default',\n  direction = 'vertical'\n) {\n  const keys = uniqueBy<ChartNestedDataShape>(\n    data,\n    (d) => d.data,\n    (d) => d.key\n  );\n  const stackData = transformDataToStack(data);\n\n  let stackFn = stack();\n  if (offset === 'expand') {\n    stackFn = stackFn.offset(stackOffsetExpand);\n  } else if (offset === 'diverging') {\n    stackFn = stackFn.offset(stackOffsetDiverging);\n  }\n\n  const result = stackFn.keys(keys)(stackData);\n\n  return transformStackToData(result, direction);\n}\n","import { ChartNestedDataShape, ChartInternalNestedDataShape } from './types';\nimport { buildBarStackData } from './barStack';\n\n/**\n * Builds a stack dataset from the standard data format.\n */\nexport function buildMarimekkoData(\n  data: ChartNestedDataShape[] = []\n): ChartInternalNestedDataShape[] {\n  const result = buildBarStackData(data, 'expand');\n  const sums = {};\n\n  // Calculate the sum for each series and the total sum\n  let totalSum = 0;\n  for (const series of result) {\n    const sum = series.data.reduce((acc, cur) => acc + (cur.y as number), 0);\n\n    sums[series.key as string] = sum;\n    totalSum += sum;\n  }\n\n  // Calculate the x0/x1 for each series\n  let prev = 0;\n  for (const series of result) {\n    const x0 = prev;\n    const x1 = prev + sums[series.key as string] / totalSum;\n    prev = x1;\n\n    for (const point of series.data) {\n      point.x0 = x0;\n      point.x1 = x1;\n    }\n  }\n\n  return result;\n}\n","import { stack, stackOffsetExpand } from 'd3-shape';\nimport {\n  ChartNestedDataShape,\n  ChartInternalDataShape,\n  ChartInternalNestedDataShape,\n  ChartInternalShallowDataShape\n} from './types';\nimport {\n  getMaxBigIntegerForNested,\n  normalizeValue,\n  normalizeValueForFormatting\n} from './bigInteger';\nimport { uniqueBy } from '@/common/utils/array';\n\n/**\n * Given a dataset like:\n *\n *   [{\n *    key: 'Threat Intel',\n *    data: [{ key:'2011', data: 25 }]\n *   }]\n *\n * it will transform it to:\n *\n *  [\n *    { x: '2011', 'Theat Intel': 25 }\n *  ]\n */\nfunction transformDataToStack(data) {\n  const result: any[] = [];\n  const maxBigInteger = getMaxBigIntegerForNested(data);\n\n  for (const category of data) {\n    for (const value of category.data) {\n      let idx = result.findIndex((r) => {\n        if (r.x instanceof Date && value.key instanceof Date) {\n          return r.x.getTime() === value.key.getTime();\n        }\n        return r.x === value.key;\n      });\n\n      if (idx === -1) {\n        result.push({\n          x: value.key,\n          formattedValues: {}\n        });\n\n        idx = result.length - 1;\n      }\n\n      result[idx][category.key as string] = normalizeValue(\n        value.data,\n        maxBigInteger\n      );\n      result[idx].formattedValues[category.key as string] =\n        normalizeValueForFormatting(value.data);\n    }\n  }\n\n  return result;\n}\n\n/**\n * Translates the stack data to a chart standard dataset.\n */\nfunction transformStackToData(stackData): ChartInternalNestedDataShape[] {\n  const result: ChartInternalNestedDataShape[] = [];\n\n  for (const category of stackData) {\n    const series: ChartInternalShallowDataShape[] = [];\n\n    for (const point of category) {\n      const [y0, y1] = point;\n      const x = point.data.x;\n      series.push({\n        key: category.key,\n        x,\n        x0: x,\n        x1: x,\n        y: y1 - y0,\n        y0,\n        y1,\n        value: point.data.formattedValues[category.key]\n      });\n    }\n\n    result.push({\n      key: category.key,\n      data: series\n    });\n  }\n\n  return result;\n}\n\n/**\n * Builds a stack dataset from the standard data format.\n */\nexport function buildStackData(\n  data: ChartNestedDataShape[],\n  normalized = false\n): ChartInternalDataShape[] {\n  const keys = uniqueBy<ChartNestedDataShape>(data, (d) => d.key);\n  const stackData = transformDataToStack(data);\n  const stackFn = !normalized ? stack() : stack().offset(stackOffsetExpand);\n\n  const result = stackFn.keys(keys)(stackData);\n\n  return transformStackToData(result);\n}\n","import { ChartShallowDataShape } from './types';\nimport { Direction, buildShallowChartData } from './builder';\n\nexport const buildWaterfall = (\n  series: ChartShallowDataShape[],\n  direction: Direction = 'vertical',\n  binSize: number | undefined = undefined\n) => {\n  const data = buildShallowChartData(series, direction, binSize);\n  const isVertical = direction === 'vertical';\n  const v = isVertical ? 'y' : 'x';\n\n  let cumulative = 0;\n  for (const point of data) {\n    point[`${v}0`] = cumulative;\n    cumulative += point[v] as number;\n    point[`${v}1`] = cumulative;\n    point[v] = cumulative;\n  }\n\n  return data;\n};\n","import React, { Component, PropsWithChildren, createRef } from 'react';\nimport { toggleTextSelection } from '@/common/utils/selection';\nimport { smoothMatrix, transform, translate } from 'transformation-matrix';\nimport { constrainMatrix } from '@/common/utils/position';\n\ninterface PanProps extends PropsWithChildren {\n  disabled: boolean;\n  threshold: number;\n  cursor?: string;\n  x: number;\n  y: number;\n  scale: number;\n  matrix: any;\n  width: number;\n  height: number;\n  constrain: boolean;\n  globalPanning: boolean;\n  onPanStart: (event: PanStartEvent) => void;\n  onPanMove: (event: PanMoveEvent) => void;\n  onPanEnd: (event: PanEndEvent) => void;\n  onPanCancel: (event: PanCancelEvent) => void;\n}\n\nexport interface PanStartEvent {\n  source: 'mouse' | 'touch';\n  nativeEvent: MouseEvent | TouchEvent;\n}\n\nexport interface PanMoveEvent {\n  source: 'mouse' | 'touch';\n  x: number;\n  y: number;\n  nativeEvent: MouseEvent | TouchEvent;\n}\n\nexport interface PanEndEvent {\n  source: 'mouse' | 'touch';\n  nativeEvent: MouseEvent | TouchEvent;\n}\n\nexport interface PanCancelEvent {\n  source: 'mouse' | 'touch';\n  nativeEvent: MouseEvent | TouchEvent;\n}\n\nexport class Pan extends Component<PanProps> {\n  static defaultProps: Partial<PanProps> = {\n    x: 0,\n    y: 0,\n    disabled: false,\n    scale: 1,\n    threshold: 10,\n    globalPanning: true,\n    onPanStart: () => undefined,\n    onPanMove: () => undefined,\n    onPanEnd: () => undefined,\n    onPanCancel: () => undefined\n  };\n\n  prevXPosition: number = 0;\n  prevYPosition: number = 0;\n  started: boolean = false;\n  deltaX: number = 0;\n  deltaY: number = 0;\n  childRef = createRef<SVGGElement>();\n\n  componentDidMount() {\n    if (this.childRef.current) {\n      this.childRef.current.addEventListener('mousedown', this.onMouseDown, {\n        passive: false\n      });\n      this.childRef.current.addEventListener('touchstart', this.onTouchStart, {\n        passive: false\n      });\n    }\n  }\n\n  componentWillUnmount() {\n    this.disposeHandlers();\n\n    if (this.childRef.current) {\n      this.childRef.current.removeEventListener('mousedown', this.onMouseDown);\n      this.childRef.current.removeEventListener(\n        'touchstart',\n        this.onTouchStart\n      );\n    }\n  }\n\n  disposeHandlers() {\n    window.removeEventListener('mousemove', this.onMouseMove);\n    window.removeEventListener('mouseup', this.onMouseUp);\n    window.removeEventListener('touchmove', this.onTouchMove);\n    window.removeEventListener('touchend', this.onTouchEnd);\n\n    // Reset cursor on body back to original\n    document.body.style['cursor'] = 'inherit';\n    toggleTextSelection(true);\n  }\n\n  checkThreshold() {\n    const { threshold } = this.props;\n    return (\n      !this.started &&\n      (Math.abs(this.deltaX) > threshold || Math.abs(this.deltaY) > threshold)\n    );\n  }\n\n  onPanStart(nativeEvent, source: 'mouse' | 'touch') {\n    this.props.onPanStart({\n      nativeEvent,\n      source\n    });\n  }\n\n  onPanMove(x: number, y: number, source: 'mouse' | 'touch', nativeEvent) {\n    this.props.onPanMove({\n      source,\n      nativeEvent,\n      x,\n      y\n    });\n  }\n\n  onPanEnd(nativeEvent, source: 'mouse' | 'touch') {\n    const { onPanEnd } = this.props;\n\n    onPanEnd({\n      nativeEvent,\n      source\n    });\n  }\n\n  pan(x: number, y: number, nativeEvent, source: 'mouse' | 'touch') {\n    const { scale, constrain, width, height, matrix } = this.props;\n\n    const newMatrix = smoothMatrix(\n      transform(matrix, translate(x / scale, y / scale)),\n      100\n    );\n\n    const shouldConstrain =\n      constrain && constrainMatrix(height, width, newMatrix);\n    if (!shouldConstrain) {\n      this.onPanMove(newMatrix.e, newMatrix.f, source, nativeEvent);\n    }\n\n    return shouldConstrain;\n  }\n\n  onMouseDown = (event: MouseEvent) => {\n    // Stop at disabled\n    if (this.props.disabled) {\n      return;\n    }\n\n    // Ignore right click\n    if (event.which === 3) {\n      return;\n    }\n\n    // If global panning is turned off, it will only pan on the container\n    if (\n      !this.props.globalPanning &&\n      event.target &&\n      !(event.target as HTMLElement).classList.contains('pan-container')\n    ) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    toggleTextSelection(false);\n    this.started = false;\n\n    // Always bind event so we cancel movement even if no action was taken\n    window.addEventListener('mousemove', this.onMouseMove);\n    window.addEventListener('mouseup', this.onMouseUp);\n  };\n\n  onMouseMove = (event: MouseEvent) => {\n    event.preventDefault();\n    event.stopPropagation();\n\n    this.deltaX = this.deltaX + event.movementX;\n    this.deltaY = this.deltaY + event.movementY;\n\n    if (this.checkThreshold()) {\n      if (this.props.cursor) {\n        document.body.style['cursor'] = this.props.cursor;\n      }\n\n      this.deltaX = 0;\n      this.deltaY = 0;\n      this.started = true;\n\n      this.onPanStart(event, 'mouse');\n    } else {\n      this.pan(event.movementX, event.movementY, event, 'mouse');\n    }\n  };\n\n  onMouseUp = (event: MouseEvent) => {\n    event.preventDefault();\n    event.stopPropagation();\n\n    this.disposeHandlers();\n    toggleTextSelection(true);\n\n    if (this.started) {\n      this.onPanEnd(event, 'mouse');\n    } else {\n      this.props.onPanCancel({\n        nativeEvent: event,\n        source: 'mouse'\n      });\n    }\n  };\n\n  onTouchStart = (event: TouchEvent) => {\n    // Stop at disabled\n    if (this.props.disabled) {\n      return;\n    }\n\n    // Reqquire more than one touch\n    if (event.touches.length !== 1) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    toggleTextSelection(false);\n    this.started = false;\n\n    this.prevXPosition = event.touches[0].clientX;\n    this.prevYPosition = event.touches[0].clientY;\n\n    // Always bind event so we cancel movement even if no action was taken\n    window.addEventListener('touchmove', this.onTouchMove);\n    window.addEventListener('touchend', this.onTouchEnd);\n  };\n\n  onTouchMove = (event: TouchEvent) => {\n    event.preventDefault();\n    event.stopPropagation();\n\n    // Calculate delta from previous position and current\n    const x = event.touches[0].clientX;\n    const y = event.touches[0].clientY;\n\n    const deltaX = x - this.prevXPosition;\n    const deltaY = y - this.prevYPosition;\n\n    this.deltaX = this.deltaX + deltaX;\n    this.deltaY = this.deltaY + deltaY;\n\n    if (this.checkThreshold()) {\n      this.deltaX = 0;\n      this.deltaY = 0;\n      this.started = true;\n\n      this.onPanStart(event, 'touch');\n    } else {\n      const contrained = this.pan(deltaX, deltaY, event, 'touch');\n\n      if (!contrained) {\n        this.prevXPosition = x;\n        this.prevYPosition = y;\n      }\n    }\n  };\n\n  onTouchEnd = (event: TouchEvent) => {\n    event.preventDefault();\n    event.stopPropagation();\n\n    this.disposeHandlers();\n    toggleTextSelection(true);\n\n    if (this.started) {\n      this.onPanEnd(event, 'touch');\n    } else {\n      this.props.onPanCancel({\n        nativeEvent: event,\n        source: 'touch'\n      });\n    }\n  };\n\n  render() {\n    return <g ref={this.childRef}>{this.props.children}</g>;\n  }\n}\n","/**\n * Gets the position between a given set of points.\n */\nexport const getMidpoint = (pointA, pointB) => ({\n  x: (pointA.x + pointB.x) / 2,\n  y: (pointA.y + pointB.y) / 2\n});\n\n/**\n * Gets the distance between a given set of points.\n */\nexport const getDistanceBetweenPoints = (pointA, pointB) =>\n  Math.sqrt(\n    Math.pow(pointB.y - pointA.y, 2) + Math.pow(pointB.x - pointA.x, 2)\n  );\n\n/**\n * Get touch points.\n */\nexport function getTouchPoints(event, node) {\n  const { left, top } = node.getBoundingClientRect();\n\n  const [pointA, pointB] = [...event.touches].map((touch) => ({\n    x: touch.clientX - Math.round(left),\n    y: touch.clientY - Math.round(top)\n  }));\n\n  const distance = getDistanceBetweenPoints(pointA, pointB);\n  const midpoint = getMidpoint(pointA, pointB);\n\n  return {\n    pointA,\n    pointB,\n    distance,\n    midpoint\n  };\n}\n","import React, { Component, PropsWithChildren, createRef } from 'react';\nimport { toggleTextSelection } from '@/common/utils/selection';\nimport {\n  getPointFromMatrix,\n  isZoomLevelGoingOutOfBounds\n} from '@/common/utils/position';\nimport { getTouchPoints } from './pinchUtils';\nimport {\n  scale,\n  smoothMatrix,\n  transform,\n  translate,\n  applyToPoint,\n  inverse\n} from 'transformation-matrix';\n\ninterface ZoomGestureProps extends PropsWithChildren {\n  disabled?: boolean;\n  maxZoom: number;\n  minZoom: number;\n  scaleFactor: number;\n  scale: number;\n  matrix: any;\n  x: number;\n  y: number;\n  style?: any;\n  disableMouseWheel?: boolean;\n  requireZoomModifier?: boolean;\n  onZoom: (event: ZoomEvent) => void;\n  onZoomEnd: () => void;\n}\n\nexport interface ZoomEvent {\n  scale: number;\n  x: number;\n  y: number;\n  nativeEvent: any;\n}\n\nexport class Zoom extends Component<ZoomGestureProps> {\n  static defaultProps: Partial<ZoomGestureProps> = {\n    x: 0,\n    y: 0,\n    scale: 1,\n    scaleFactor: 0.1,\n    minZoom: 1,\n    maxZoom: 10\n  };\n\n  firstTouch: any;\n  lastDistance: any;\n  timeout: any;\n  childRef = createRef<SVGGElement>();\n  rqf: any;\n\n  componentDidMount() {\n    const { disabled, disableMouseWheel } = this.props;\n\n    const ref = this.childRef.current;\n    if (!disabled && ref) {\n      if (!disableMouseWheel) {\n        ref.addEventListener('mousewheel', this.onMouseWheel, {\n          passive: false\n        });\n      }\n\n      ref.addEventListener('touchstart', this.onTouchStart, { passive: false });\n    }\n  }\n\n  componentWillUnmount() {\n    window.removeEventListener('touchmove', this.onTouchMove);\n    window.removeEventListener('touchend', this.onTouchEnd);\n    cancelAnimationFrame(this.rqf);\n    clearTimeout(this.timeout);\n\n    const ref = this.childRef.current;\n    if (ref) {\n      ref.removeEventListener('mousewheel', this.onMouseWheel);\n      ref.removeEventListener('touchstart', this.onTouchStart);\n    }\n\n    toggleTextSelection(true);\n  }\n\n  getStep(delta: number) {\n    const { scaleFactor } = this.props;\n    return -delta > 0 ? scaleFactor + 1 : 1 - scaleFactor;\n  }\n\n  scale(x: number, y: number, step: number, nativeEvent) {\n    const { minZoom, maxZoom, onZoom, matrix } = this.props;\n\n    const outside = isZoomLevelGoingOutOfBounds(\n      {\n        d: matrix.a,\n        scaleFactorMin: minZoom,\n        scaleFactorMax: maxZoom\n      },\n      step\n    );\n\n    if (!outside) {\n      const newMatrix = smoothMatrix(\n        transform(\n          matrix,\n          translate(x, y),\n          scale(step, step),\n          translate(-x, -y)\n        ),\n        100\n      );\n\n      this.rqf = requestAnimationFrame(() => {\n        onZoom({\n          scale: newMatrix.a,\n          x: newMatrix.e,\n          y: newMatrix.f,\n          nativeEvent\n        });\n      });\n    }\n\n    return outside;\n  }\n\n  onMouseWheel = (event) => {\n    const { disableMouseWheel, requireZoomModifier, matrix, onZoomEnd } =\n      this.props;\n\n    if (disableMouseWheel) {\n      return false;\n    }\n\n    const hasModifier = event.metaKey || event.ctrlKey;\n    if (requireZoomModifier && !hasModifier) {\n      return false;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    const point = getPointFromMatrix(event, matrix);\n    if (point) {\n      const { x, y } = point as { x: number; y: number };\n      const step = this.getStep(event.deltaY);\n\n      this.scale(x, y, step, event);\n\n      // Do small timeout to 'guess' when its done zooming\n      clearTimeout(this.timeout);\n      this.timeout = setTimeout(() => onZoomEnd(), 500);\n    }\n  };\n\n  onTouchStart = (event: TouchEvent) => {\n    if (event.touches.length === 2) {\n      event.preventDefault();\n      event.stopPropagation();\n      toggleTextSelection(false);\n\n      this.firstTouch = getTouchPoints(event, this.childRef.current);\n      this.lastDistance = this.firstTouch.distance;\n\n      window.addEventListener('touchmove', this.onTouchMove);\n      window.addEventListener('touchend', this.onTouchEnd);\n    }\n  };\n\n  onTouchMove = (event: TouchEvent) => {\n    if (event.touches.length === 2) {\n      event.preventDefault();\n      event.stopPropagation();\n\n      const { distance } = getTouchPoints(event, this.childRef.current);\n      const distanceFactor = distance / this.lastDistance;\n\n      const point = applyToPoint(inverse(this.props.matrix), {\n        x: this.firstTouch.midpoint.x,\n        y: this.firstTouch.midpoint.y\n      }) as { x: number; y: number };\n\n      if (point.x && point.y) {\n        const outside = this.scale(point.x, point.y, distanceFactor, event);\n\n        if (!outside) {\n          this.lastDistance = distance;\n        }\n      }\n    }\n  };\n\n  onTouchEnd = (event: TouchEvent) => {\n    event.preventDefault();\n    event.stopPropagation();\n\n    window.removeEventListener('touchmove', this.onTouchMove);\n    window.removeEventListener('touchend', this.onTouchEnd);\n\n    toggleTextSelection(true);\n    this.props.onZoomEnd();\n  };\n\n  render() {\n    const { style, children } = this.props;\n    return (\n      <g ref={this.childRef} style={style}>\n        {children}\n      </g>\n    );\n  }\n}\n","import React, { FC, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport { CloneElement } from 'reablocks';\nimport {\n  DiscreteLegendEntryProps,\n  DiscreteLegendEntry\n} from './DiscreteLegendEntry';\nimport css from './DiscreteLegend.module.css';\n\nexport interface DiscreteLegendProps {\n  /**\n   * CSS Class name.\n   */\n  className?: string;\n\n  /**\n   * CSS Styles.\n   */\n  style?: React.CSSProperties;\n\n  /**\n   * Orientation of the legend.\n   */\n  orientation?: 'horizontal' | 'vertical';\n\n  /**\n   * Entry components to show in the legend.\n   */\n  entries: ReactElement<DiscreteLegendEntryProps, typeof DiscreteLegendEntry>[];\n}\n\nexport const DiscreteLegend: FC<Partial<DiscreteLegendProps>> = ({\n  entries,\n  orientation = 'vertical',\n  style,\n  className\n}) => (\n  <div\n    className={classNames(css.container, className, {\n      [css.horizontal]: orientation === 'horizontal',\n      [css.vertical]: orientation === 'vertical'\n    })}\n    style={style}\n  >\n    {entries.map((entry, index) => (\n      <CloneElement<DiscreteLegendEntryProps>\n        element={entry}\n        key={`dle-${index}`}\n        orientation={orientation}\n      />\n    ))}\n  </div>\n);\n","import React, { FC } from 'react';\nimport classNames from 'classnames';\nimport css from './DiscreteLegendSymbol.module.css';\n\nexport interface DiscreteLegendSymbolProps {\n  /**\n   * Color for the symbol set by the `DiscreteLegendEntry`.\n   */\n  color: string;\n\n  /**\n   * CSS Class names.\n   */\n  className?: string;\n}\n\nexport const DiscreteLegendSymbol: FC<Partial<DiscreteLegendSymbolProps>> = ({\n  className,\n  color\n}) => (\n  <div\n    className={classNames(css.symbol, className)}\n    style={{ background: color }}\n  />\n);\n","import React, { ReactNode, ReactElement, FC } from 'react';\nimport classNames from 'classnames';\nimport {\n  DiscreteLegendSymbol,\n  DiscreteLegendSymbolProps\n} from './DiscreteLegendSymbol';\nimport { CloneElement } from 'reablocks';\nimport css from './DiscreteLegendEntry.module.css';\n\nexport interface DiscreteLegendEntryProps {\n  /**\n   * Label for the entry.\n   */\n  label: string;\n\n  /**\n   * Color for the entry.\n   */\n  color: string;\n\n  /**\n   * Symbol for the entry.\n   */\n  symbol:\n    | ReactElement<DiscreteLegendSymbolProps, typeof DiscreteLegendSymbol>\n    | ReactNode;\n\n  /**\n   * CSS Styles.\n   */\n  style?: React.CSSProperties;\n\n  /**\n   * CSS Class names.\n   */\n  className?: string;\n\n  /**\n   * HTML Title Attribute.\n   */\n  title?: string;\n\n  /**\n   * Orientation of the entry set internally by `DiscreteLegend`.\n   */\n  orientation: 'horizontal' | 'vertical';\n\n  /**\n   * Mouse enter event.\n   */\n  onMouseEnter: (event: React.MouseEvent<HTMLDivElement>) => void;\n\n  /**\n   * Mouse leave event.\n   */\n  onMouseLeave: (event: React.MouseEvent<HTMLDivElement>) => void;\n\n  /**\n   * On click event.\n   */\n  onClick: (event: React.MouseEvent<HTMLDivElement>) => void;\n}\n\nexport const DiscreteLegendEntry: FC<Partial<DiscreteLegendEntryProps>> = ({\n  label,\n  symbol = <DiscreteLegendSymbol />,\n  title,\n  className,\n  color,\n  style,\n  orientation = 'horizontal',\n  onMouseEnter,\n  onMouseLeave,\n  onClick\n}) => (\n  <div\n    title={title}\n    className={classNames(css.entry, className, {\n      [css.vertical]: orientation === 'vertical',\n      [css.horizontal]: orientation === 'horizontal'\n    })}\n    onClick={onClick}\n    onMouseEnter={onMouseEnter}\n    onMouseLeave={onMouseLeave}\n    style={style}\n  >\n    <CloneElement<DiscreteLegendSymbolProps> element={symbol} color={color} />\n    <span className={css.label}>{label}</span>\n  </div>\n);\n","import React, { FC, useMemo } from 'react';\nimport classNames from 'classnames';\nimport { ChartDataShape } from '@/common/data';\nimport chroma from 'chroma-js';\nimport { uniqueBy } from '@/common/utils/array';\nimport { extent } from 'd3-array';\nimport { formatValue } from '@/common/utils/formatting';\n\nimport css from './SequentialLegend.module.css';\n\nexport interface SequentialLegendProps {\n  /**\n   * CSS Class name.\n   */\n  className?: any;\n\n  /**\n   * CSS Class name for the gradient element.\n   */\n  gradientClassName?: string;\n\n  /**\n   * CSS Styles.\n   */\n  style?: any;\n\n  /**\n   * Orientation of the legend.\n   */\n  orientation?: 'horizontal' | 'vertical';\n\n  /**\n   * Data to use to render the scale.\n   */\n  data: ChartDataShape[];\n\n  /**\n   * Color scheme for the scale.\n   */\n  colorScheme?: string[];\n}\n\nexport const SequentialLegend: FC<SequentialLegendProps> = ({\n  className,\n  gradientClassName,\n  style,\n  data,\n  colorScheme = ['rgba(28, 107, 86, 0.5)', '#2da283'],\n  orientation = 'vertical'\n}) => {\n  // Generate the color gradient\n  const color = chroma\n    .scale(colorScheme)\n    .colors(10)\n    .reverse()\n    .map((c, i) => `${c} ${i * 10}%`)\n    .join(',');\n\n  // Get the extent from the data passed\n  const [end, start] = useMemo(\n    () =>\n      extent(\n        uniqueBy(\n          data,\n          (d) => d.data,\n          (d) => d.data\n        )\n      ),\n    [data]\n  );\n\n  // Get direction\n  const gradientDir = orientation === 'vertical' ? '' : 'to left,';\n\n  return (\n    <div\n      style={style}\n      className={classNames(css.container, className, {\n        [css.vertical]: orientation === 'vertical',\n        [css.horizontal]: orientation === 'horizontal'\n      })}\n    >\n      <div className={css.start}>{formatValue(start)}</div>\n      <div\n        className={classNames(css.gradient, gradientClassName)}\n        style={{\n          background: `linear-gradient(${gradientDir}${color})`\n        }}\n      />\n      <div className={css.end}>{formatValue(end)}</div>\n    </div>\n  );\n};\n","import classNames from 'classnames';\nimport React, { FC, useMemo } from 'react';\nimport css from './Gridline.module.css';\nimport { mergeDefaultProps } from '../utils';\n\nexport interface GridlineProps {\n  /**\n   * Height of the line set by the `GridlineSeries`.\n   */\n  height: number;\n\n  /**\n   * Width of the line set by the `GridlineSeries`.\n   */\n  width: number;\n\n  /**\n   * CSS Classname to apply.\n   */\n  className?: string;\n\n  /**\n   * Direction set by the `GridlineSeries`.\n   */\n  direction: 'all' | 'x' | 'y';\n\n  /**\n   * D3 Scale set by `GridlineSeries`.\n   */\n  scale: any;\n\n  /**\n   * SVG Stroke Width Property.\n   */\n  strokeWidth: number;\n\n  /**\n   * SVG Stroke Color Property.\n   */\n  strokeColor: string;\n\n  /**\n   * Data point for the position set by the `GridlineSeries`.\n   */\n  data: number;\n\n  /**\n   * Index set by the `GridlineSeries`.\n   */\n  index: number;\n\n  /**\n   * SVG Stroke Dash Array Property.\n   */\n  strokeDasharray: string;\n}\n\nexport const Gridline: FC<Partial<GridlineProps>> = (props) => {\n  const {\n    strokeWidth,\n    direction,\n    className,\n    strokeColor,\n    data,\n    height,\n    width,\n    scale,\n    strokeDasharray\n  } = mergeDefaultProps(GRID_LINE_DEFAULT_PROPS, props);\n\n  const coords = useMemo(() => {\n    const pos = scale(data);\n\n    if (direction === 'x') {\n      return {\n        x1: pos,\n        x2: pos,\n        y1: 0,\n        y2: height\n      };\n    } else {\n      return {\n        y1: pos,\n        y2: pos,\n        x1: 0,\n        x2: width\n      };\n    }\n  }, [direction, data, height, width, scale]);\n\n  return (\n    <line\n      {...coords}\n      className={classNames(css.gridLine, className)}\n      strokeDasharray={strokeDasharray}\n      strokeWidth={strokeWidth}\n      stroke={strokeColor}\n      fill=\"none\"\n    />\n  );\n};\n\nexport const GRID_LINE_DEFAULT_PROPS: Partial<GridlineProps> = {\n  strokeWidth: 1,\n  strokeDasharray: '2 5',\n  direction: 'all',\n  strokeColor: 'rgba(153, 153, 153, 0.5)'\n};\n","import classNames from 'classnames';\nimport React, { FC, useMemo } from 'react';\nimport css from './GridStripe.module.css';\n\nexport interface GridStripeProps {\n  /**\n   * Position set by the `GridlineSeries`.\n   */\n  position: 'horizontal' | 'vertical';\n\n  /**\n   * CSS Classname to apply.\n   */\n  className?: string;\n\n  /**\n   * Stripe fill color.\n   */\n  fill: string;\n\n  /**\n   * Height of the line set by the `GridlineSeries`.\n   */\n  height: number;\n\n  /**\n   * Width of the line set by the `GridlineSeries`.\n   */\n  width: number;\n\n  /**\n   * Direction set by the `GridlineSeries`.\n   */\n  direction: 'all' | 'x' | 'y';\n\n  /**\n   * D3 Scale set by `GridlineSeries`.\n   */\n  scale: any;\n\n  /**\n   * Data point for the position set by the `GridlineSeries`.\n   */\n  data: number;\n\n  /**\n   * Index set by the `GridlineSeries`.\n   */\n  index: number;\n}\n\nexport const GridStripe: FC<Partial<GridStripeProps>> = (props) => {\n  const { fill, className, position, data, height, width, scale, index } = {\n    ...GRID_STRIPE_DEFAULT_PROPS,\n    ...props\n  };\n  const coords = useMemo(() => {\n    const pos = scale(data);\n    const stripeFill = index % 2 ? 'none' : fill;\n    const dim = scale.bandwidth();\n\n    if (position === 'vertical') {\n      return {\n        y: 0,\n        x: pos,\n        height: height,\n        width: dim,\n        fill: stripeFill\n      };\n    } else {\n      return {\n        y: pos,\n        x: 0,\n        height: dim,\n        width,\n        fill: stripeFill\n      };\n    }\n  }, [scale, data, index, height, width, fill, position]);\n\n  return <rect className={classNames(css.gridStripe, className)} {...coords} />;\n};\n\nexport const GRID_STRIPE_DEFAULT_PROPS = {\n  fill: '#393c3e'\n};\n","import React, { Fragment, ReactElement, FC, useMemo, useCallback } from 'react';\nimport { Gridline, GRID_LINE_DEFAULT_PROPS, GridlineProps } from './Gridline';\nimport { getTicks, getMaxTicks } from '@/common/utils/ticks';\nimport { CloneElement } from 'reablocks';\nimport {\n  LINEAR_X_AXIS_TICK_SERIES_DEFAULT_PROPS,\n  LINEAR_Y_AXIS_TICK_SERIES_DEFAULT_PROPS,\n  LinearAxisProps\n} from '../Axis';\nimport {\n  GridStripeProps,\n  GridStripe,\n  GRID_STRIPE_DEFAULT_PROPS\n} from './GridStripe';\n\ntype GridLineElement = ReactElement<GridlineProps, typeof Gridline>;\ntype GridStripeElement = ReactElement<GridStripeProps, typeof GridStripe>;\ntype GridElement = GridLineElement | GridStripeElement;\n\nexport interface GridlineSeriesProps {\n  /**\n   * D3 scale for Y Axis.\n   */\n  yScale: any;\n\n  /**\n   * D3 scale for X Axis.\n   */\n  xScale: any;\n\n  /**\n   * The linear axis component for the Y Axis of the chart.\n   */\n  yAxis: LinearAxisProps;\n\n  /**\n   * The linear axis component for the X Axis of the chart.\n   */\n  xAxis: LinearAxisProps;\n\n  /**\n   * Height of the chart.\n   */\n  height: number;\n\n  /**\n   * Width of the chart.\n   */\n  width: number;\n\n  /**\n   * Gridline that is rendered.\n   */\n  line: GridLineElement | null;\n\n  /**\n   * GridStripe that is rendered.\n   */\n  stripe: GridStripeElement | null;\n}\n\nexport const GridlineSeries: FC<Partial<GridlineSeriesProps>> = ({\n  line = <Gridline direction=\"all\" />,\n  stripe,\n  yScale,\n  xScale,\n  yAxis,\n  xAxis,\n  height,\n  width\n}) => {\n  const lineProps = useMemo(\n    () => ({ ...GRID_LINE_DEFAULT_PROPS, ...line.props }),\n    [line.props]\n  );\n  const stripeProps = useMemo(\n    () => ({ ...GRID_STRIPE_DEFAULT_PROPS, ...(stripe?.props ?? {}) }),\n    [stripe?.props]\n  );\n\n  const shouldRenderY = (direction: 'all' | 'x' | 'y') =>\n    direction === 'all' || direction === 'y';\n  const shouldRenderX = (direction: 'all' | 'x' | 'y') =>\n    direction === 'all' || direction === 'x';\n\n  const { yAxisGrid, xAxisGrid } = useMemo(() => {\n    const xTickSeriesProps = {\n      ...LINEAR_X_AXIS_TICK_SERIES_DEFAULT_PROPS,\n      ...xAxis.tickSeries.props\n    };\n    const yTickSeriesProps = {\n      ...LINEAR_Y_AXIS_TICK_SERIES_DEFAULT_PROPS,\n      ...yAxis.tickSeries.props\n    };\n\n    return {\n      yAxisGrid: getTicks(\n        yScale,\n        yTickSeriesProps.tickValues,\n        yAxis.type,\n        getMaxTicks(yTickSeriesProps.tickSize, height),\n        yTickSeriesProps.interval\n      ),\n      xAxisGrid: getTicks(\n        xScale,\n        xTickSeriesProps.tickValues,\n        xAxis.type,\n        getMaxTicks(xTickSeriesProps.tickSize, width),\n        xTickSeriesProps.interval\n      )\n    };\n  }, [height, width, xAxis, yAxis, yScale, xScale]);\n\n  const renderGroup = useCallback(\n    (\n      element: GridElement,\n      grid,\n      scale,\n      direction: 'x' | 'y',\n      type: 'line' | 'stripe'\n    ) => {\n      return grid.map((point, index) => (\n        <Fragment key={`${type}-${direction}-${index}`}>\n          <CloneElement<GridlineProps | GridStripeProps>\n            element={element}\n            index={index}\n            scale={scale}\n            data={point}\n            height={height}\n            width={width}\n            direction={direction}\n          />\n        </Fragment>\n      ));\n    },\n    [height, width]\n  );\n\n  const renderSeries = useCallback(\n    (\n      yAxisGrid,\n      xAxisGrid,\n      element: GridElement,\n      direction: 'x' | 'y' | 'all',\n      type: 'line' | 'stripe'\n    ) => {\n      return (\n        <Fragment>\n          {shouldRenderY(direction) &&\n            renderGroup(element, yAxisGrid, yScale, 'y', type)}\n          {shouldRenderX(direction) &&\n            renderGroup(element, xAxisGrid, xScale, 'x', type)}\n        </Fragment>\n      );\n    },\n    [renderGroup, xScale, yScale]\n  );\n\n  return (\n    <g style={{ pointerEvents: 'none' }}>\n      {line &&\n        renderSeries(yAxisGrid, xAxisGrid, line, lineProps.direction, 'line')}\n      {stripe &&\n        renderSeries(\n          yAxisGrid,\n          xAxisGrid,\n          stripe,\n          stripeProps.direction,\n          'stripe'\n        )}\n    </g>\n  );\n};\n","import React, { FC } from 'react';\nimport css from './MarkLine.module.css';\n\nexport interface MarkLineProps {\n  height: number;\n  pointX?: number;\n  strokeColor: string;\n  strokeWidth: number;\n}\n\nexport const MarkLine: FC<Partial<MarkLineProps>> = ({\n  pointX,\n  height,\n  strokeWidth = 1,\n  strokeColor = '#eee'\n}) => (\n  <line\n    stroke={strokeColor}\n    strokeWidth={strokeWidth}\n    y1=\"0\"\n    vectorEffect=\"non-scaling-stroke\"\n    y2={height}\n    x1={pointX}\n    x2={pointX}\n    className={css.markLine}\n  />\n);\n","import React, { FC } from 'react';\n\nexport interface GradientStopProps {\n  offset: number | string;\n  stopOpacity: number | string;\n  color?: string;\n}\n\nexport const GradientStop: FC<Partial<GradientStopProps>> = ({\n  color,\n  offset,\n  stopOpacity = 1\n}) => <stop offset={offset} stopOpacity={stopOpacity} stopColor={color} />;\n","import React, { FC, ReactElement } from 'react';\nimport { GradientStop, GradientStopProps } from './GradientStop';\nimport { CloneElement } from 'reablocks';\n\nexport interface GradientProps {\n  id: string;\n  stops: ReactElement<GradientStopProps, typeof GradientStop>[];\n  color?: string;\n  direction: 'vertical' | 'horizontal' | 'radial';\n}\n\nexport const Gradient: FC<Partial<GradientProps>> = ({\n  id,\n  color,\n  direction = 'vertical',\n  stops = [\n    <GradientStop offset=\"0%\" stopOpacity={0.3} key=\"start\" />,\n    <GradientStop offset=\"80%\" stopOpacity={1} key=\"stop\" />\n  ]\n}) => {\n  if (direction === 'radial') {\n    return (\n      <radialGradient id={id}>\n        {stops.map((stop, index) => (\n          <CloneElement<GradientStopProps>\n            element={stop}\n            key={`gradient-${index}`}\n            color={stop.props.color || color}\n          />\n        ))}\n      </radialGradient>\n    );\n  }\n\n  const pos =\n    direction === 'vertical'\n      ? {\n        x1: '10%',\n        x2: '10%',\n        y1: '100%',\n        y2: '0%'\n      }\n      : {\n        y1: '0%',\n        y2: '0%',\n        x1: '0%',\n        x2: '100%'\n      };\n\n  return (\n    <linearGradient spreadMethod=\"pad\" id={id} {...pos}>\n      {stops.map((stop, index) => (\n        <CloneElement<GradientStopProps>\n          element={stop}\n          key={`gradient-${index}`}\n          color={stop.props.color || color}\n        />\n      ))}\n    </linearGradient>\n  );\n};\n","import React, { FC, ReactElement } from 'react';\nimport { GradientStop, GradientStopProps } from './GradientStop';\nimport { CloneElement } from 'reablocks';\n\nexport interface RadialGradientProps {\n  id: string;\n  stops: ReactElement<GradientStopProps, typeof GradientStop>[];\n  color?: string;\n  radius: number | string;\n}\n\nexport const RadialGradient: FC<Partial<RadialGradientProps>> = ({\n  id,\n  color,\n  radius = '30%',\n  stops = [\n    <GradientStop offset=\"0%\" stopOpacity={0.2} key=\"start\" />,\n    <GradientStop offset=\"80%\" stopOpacity={0.7} key=\"stop\" />\n  ]\n}) => (\n  <radialGradient\n    id={id}\n    cx={0}\n    cy={0}\n    r={radius}\n    gradientUnits=\"userSpaceOnUse\"\n  >\n    {stops.map((stop, index) => (\n      <CloneElement<GradientStopProps>\n        element={stop}\n        key={`gradient-${index}`}\n        color={color}\n      />\n    ))}\n  </radialGradient>\n);\n","import React, { FC } from 'react';\n\nexport interface MaskProps {\n  id?: string;\n  fill?: string;\n}\n\nexport const Mask: FC<MaskProps> = ({ id, fill }) => (\n  <mask id={id}>\n    <rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill={fill} />\n  </mask>\n);\n","import React, { FC } from 'react';\nimport { MaskProps } from './Mask';\n\nexport interface StripesProps extends MaskProps {\n  id?: string;\n  fill?: string;\n}\n\nexport const Stripes: FC<StripesProps> = ({ id, fill }) => (\n  <pattern\n    id={id}\n    width=\"4\"\n    height=\"4\"\n    patternUnits=\"userSpaceOnUse\"\n    patternTransform=\"rotate(45)\"\n  >\n    <rect className=\"area-stripe\" width=\"1\" height=\"4\" fill={fill} />\n  </pattern>\n);\n","import React, { Fragment, FC } from 'react';\nimport { formatValue } from '@/common/utils/formatting';\nimport { ChartInternalDataTypes } from '@/common/data';\nimport css from './TooltipTemplate.module.css';\n\ninterface SingleTooltipValue {\n  key?: ChartInternalDataTypes;\n  value?: ChartInternalDataTypes;\n  x: ChartInternalDataTypes;\n  y: ChartInternalDataTypes;\n}\n\ninterface MultipleTooltipValues {\n  x: ChartInternalDataTypes;\n  data: SingleTooltipValue[];\n}\n\ninterface TooltipTemplateProps {\n  /**\n   * Tooltip data value.\n   */\n  value?: SingleTooltipValue | MultipleTooltipValues;\n\n  /**\n   * Color scheme to apply.\n   */\n  color?: any;\n\n  /**\n   * Additional CSS classes to apply.\n   */\n  className?: any;\n}\n\nexport const TooltipTemplate: FC<TooltipTemplateProps> = ({\n  value,\n  color,\n  className\n}) => {\n  if (!value) {\n    return null;\n  }\n\n  const renderValues = (data: SingleTooltipValue, index: number) => {\n    const fill = color(data, index);\n\n    return (\n      <span className={css.subValue}>\n        <span className={css.subValueColor} style={{ backgroundColor: fill }} />\n        <span className={css.subValueName}>\n          {formatValue(data.key || data.x)}:\n        </span>\n        <span>{formatValue(data.value || data.y)}</span>\n      </span>\n    );\n  };\n\n  const renderMultiple = (value: MultipleTooltipValues) => {\n    const excessCount = value.data.length - 15;\n    const pagedValues = value.data.slice(0, 15);\n\n    return (\n      <Fragment>\n        {pagedValues.map((point, i) => (\n          <Fragment key={i}>{renderValues(point, i)}</Fragment>\n        ))}\n        {excessCount > 0 && <div>...{excessCount} more...</div>}\n      </Fragment>\n    );\n  };\n\n  const isMultiple = Array.isArray((value as any).data);\n\n  return (\n    <div className={className} role=\"tooltip\">\n      <div className={css.label}>{formatValue(value!.x)}</div>\n      <div className={css.value}>\n        {isMultiple && renderMultiple(value as MultipleTooltipValues)}\n        {!isMultiple && (\n          <Fragment>\n            {formatValue(\n              (value as SingleTooltipValue).value ||\n                (value as SingleTooltipValue).y\n            )}\n          </Fragment>\n        )}\n      </div>\n    </div>\n  );\n};\n","import { TooltipTheme } from 'reablocks';\n\nimport css from './Tooltip.module.css';\n\nexport const tooltipTheme: TooltipTheme = {\n  base: css.base,\n  disablePointer: css.disablePointer\n};\n","import React, { cloneElement, FC } from 'react';\nimport { Tooltip, TooltipProps } from 'reablocks';\nimport { TooltipTemplate } from './TooltipTemplate';\nimport { tooltipTheme } from './TooltipTheme';\n\nexport interface ChartTooltipProps extends TooltipProps {\n  /**\n   * Content for the tooltip.\n   */\n  content: any;\n\n  /**\n   * Tooltip data value.\n   */\n  value?: any;\n\n  /**\n   * Color scheme to apply.\n   */\n  color?: any;\n\n  /**\n   * Complete dataset.\n   */\n  data: any;\n\n  /**\n   * Whether the tooltip should move with the cursor or not.\n   */\n  followCursor?: boolean;\n}\n\nexport const ChartTooltip: FC<Partial<ChartTooltipProps>> = ({\n  content = <TooltipTemplate />,\n  value,\n  data,\n  color,\n  ...rest\n}) => {\n  return (\n    <Tooltip\n      theme={tooltipTheme}\n      {...rest}\n      content={() => {\n        if (!value && !data) {\n          return null;\n        }\n\n        return typeof content === 'function'\n          ? content(data || value, color)\n          : cloneElement(content, {\n            ...content.props,\n            value,\n            color\n          });\n      }}\n    />\n  );\n};\n","import React, {\n  Fragment,\n  ReactElement,\n  useState,\n  useRef,\n  useCallback,\n  useMemo,\n  forwardRef,\n  useImperativeHandle\n} from 'react';\nimport { flip, offset } from '@floating-ui/dom';\nimport { TooltipAreaEvent } from './TooltipAreaEvent';\nimport {\n  ChartDataTypes,\n  ChartInternalDataShape,\n  ChartInternalShallowDataShape,\n  ChartInternalNestedDataShape\n} from '@/common/data';\nimport {\n  getPositionForTarget,\n  getClosestContinousScalePoint,\n  getClosestBandScalePoint\n} from '@/common/utils/position';\nimport { CloneElement, Placement } from 'reablocks';\nimport { ChartTooltip, ChartTooltipProps } from './ChartTooltip';\nimport { arc } from 'd3-shape';\nimport isEqual from 'react-fast-compare';\nimport { scaleLinear } from 'd3-scale';\n\nexport interface TooltipAreaProps {\n  /**\n   * Popperjs placement.\n   */\n  placement: Placement;\n\n  /**\n   * Chart height. Set internally.\n   */\n  height: number;\n\n  /**\n   * Chart width. Set internally.\n   */\n  width: number;\n\n  /**\n   * Chart D3 XScale. Set internally.\n   */\n  xScale: any;\n\n  /**\n   * Chart D3 YScale. Set internally.\n   */\n  yScale: any;\n\n  /**\n   * Whether the tooltip is disabled or not.\n   */\n  disabled: boolean;\n\n  /**\n   * Color setter.\n   */\n  color: any;\n\n  /**\n   * Chart internal data type.\n   */\n  data: ChartInternalDataShape[];\n\n  /**\n   * Child elements to be contained by.\n   */\n  children?: any;\n\n  /**\n   * Whether the area is radial or not.\n   */\n  isRadial?: boolean;\n\n  /**\n   * Whether the area is continous or not (e.g. line and area charts are continous, bar charts are not).\n   */\n  isContinous?: boolean;\n\n  /**\n   * Inner-radius to set the positioning by. Set internally.\n   */\n  innerRadius?: number;\n\n  /**\n   * Outer-radius to set the positioning by. Set internally.\n   */\n  outerRadius?: number;\n\n  /**\n   * Tooltip element.\n   */\n  tooltip: ReactElement<ChartTooltipProps, typeof ChartTooltip>;\n\n  /**\n   * Whether to inverse the data or not.\n   */\n  inverse: boolean;\n\n  /**\n   * When pointer entered mouse area.\n   */\n  onValueEnter: (event: TooltipAreaEvent) => void;\n\n  /**\n   * When pointer left mouse area.\n   */\n  onValueLeave: () => void;\n\n  /**\n   * Whether the layout is horizontal or not.\n   */\n  isHorizontal: boolean;\n\n  /**\n   * Start angle for the first value.\n   */\n  startAngle?: number;\n\n  /**\n   * End angle for the last value.\n   */\n  endAngle?: number;\n}\n\ninterface TooltipDataShape {\n  x?: ChartDataTypes;\n  y?: ChartDataTypes;\n  data?: ChartDataTypes | Array<ChartDataTypes | ChartInternalShallowDataShape>;\n  i?: number;\n}\n\n// eslint-disable-next-line react/display-name\nexport const TooltipArea = forwardRef<any, Partial<TooltipAreaProps>>(\n  (\n    {\n      children,\n      inverse = true,\n      tooltip = <ChartTooltip />,\n      disabled,\n      color,\n      isRadial = false,\n      isContinous = true,\n      width,\n      height,\n      xScale,\n      yScale,\n      onValueEnter = () => undefined,\n      data,\n      isHorizontal,\n      innerRadius,\n      outerRadius,\n      placement: placementProp,\n      onValueLeave = () => undefined,\n      startAngle = 0,\n      endAngle = 2 * Math.PI\n    },\n    childRef\n  ) => {\n    const [visible, setVisible] = useState<boolean>();\n    const [placement, setPlacement] = useState<Placement>();\n    const [value, setValue] = useState<any>();\n    const [offsetX, setOffsetX] = useState<any>();\n    const [offsetY, setOffsetY] = useState<any>();\n    const [prevX, setPrevX] = useState<number>();\n    const [prevY, setPrevY] = useState<number>();\n    const ref = useRef<SVGRectElement | SVGPathElement | any>();\n    const fullCircleref = useRef<SVGRectElement | SVGPathElement | any>(null);\n    const isFullCircle = Math.abs(endAngle - startAngle) >= 2 * Math.PI;\n\n    const range = Math.abs(endAngle - startAngle);\n\n    const rotationFactor = 0.5;\n\n    const getXCoord = useCallback(\n      (x: number, y: number) => {\n        // If the shape is radial, we need to convert the X coords to a radial format.\n        if (isRadial) {\n          const outerRadiusNew = outerRadius || Math.min(width, height) / 2;\n          let rad =\n            Math.atan2(y - outerRadiusNew, x - outerRadiusNew) +\n            rotationFactor * Math.PI;\n\n          // Align it with the expected start angle\n          rad = (rad - startAngle) % (2 * Math.PI);\n\n          // TODO: Figure out what the 'correct' way to do this is...\n          if (rad < 0) {\n            rad += Math.PI * 2;\n          }\n\n          // convert to given range\n          const scale = scaleLinear()\n            .domain([0, range])\n            .range([startAngle, endAngle]);\n          rad = scale(rad);\n\n          return rad;\n        }\n\n        return x;\n      },\n      [endAngle, height, isRadial, outerRadius, range, startAngle, width]\n    );\n\n    const transformData = useCallback(\n      (series: ChartInternalDataShape[]) => {\n        const result: TooltipDataShape[] = [];\n\n        if (inverse) {\n          for (const point of series) {\n            const seriesPoint = point as ChartInternalNestedDataShape;\n            if (Array.isArray(seriesPoint.data)) {\n              for (const nestedPoint of seriesPoint.data) {\n                const right = nestedPoint.x;\n                let idx = result.findIndex((r) => {\n                  const left = r.x;\n                  if (left instanceof Date && right instanceof Date) {\n                    return left.getTime() === right.getTime();\n                  }\n                  return left === right;\n                });\n\n                if (idx === -1) {\n                  result.push({\n                    x: nestedPoint.x,\n                    data: []\n                  });\n\n                  idx = result.length - 1;\n                }\n\n                const data = result[idx].data;\n\n                if (Array.isArray(data)) {\n                  data.push(nestedPoint);\n                }\n              }\n            } else {\n              result.push(point);\n            }\n          }\n        } else {\n          for (const point of series) {\n            const nestedPoint = point as ChartInternalNestedDataShape;\n            if (Array.isArray(nestedPoint.data)) {\n              result.push({\n                ...nestedPoint,\n                x: nestedPoint.key,\n                data: nestedPoint.data.map((d) => ({\n                  ...d,\n                  key: !isHorizontal ? d.x : d.y,\n                  value: !isHorizontal ? d.y : d.x\n                }))\n              });\n            } else {\n              const shallowPoint = point as ChartInternalShallowDataShape;\n              result.push({\n                ...shallowPoint,\n                // Histograms special logic...\n                x: shallowPoint.key === undefined ? shallowPoint.x0 : point.key,\n                y:\n                  shallowPoint.value === undefined\n                    ? shallowPoint.y\n                    : shallowPoint.value\n              });\n            }\n          }\n        }\n\n        return result;\n      },\n      [inverse, isHorizontal]\n    );\n\n    const onMouseMove = useCallback(\n      (event: React.MouseEvent) => {\n        const transformed = transformData(data);\n\n        // Get our default placement\n        let newPlacement = placementProp;\n        if (!placementProp) {\n          if (isHorizontal) {\n            newPlacement = 'right';\n          } else {\n            newPlacement = 'top';\n          }\n        }\n\n        // Get the path container element\n        // Note that we are using the dummy 'full' circle for alignment\n        let target = fullCircleref.current || ref.current;\n\n        const { y, x } = getPositionForTarget({\n          target: target,\n          // Manually pass the x/y from the event\n          clientX: event.clientX,\n          clientY: event.clientY\n        });\n\n        // Need to flip scales/coords if we are a horz layout\n        let keyScale;\n        let valueScale;\n        let coord;\n        let attr = 'x';\n        if (isHorizontal) {\n          keyScale = yScale;\n          valueScale = xScale;\n          coord = y;\n        } else {\n          coord = getXCoord(x, y);\n          keyScale = xScale;\n          valueScale = yScale;\n        }\n\n        // If an index value exists in the data, use that to grab closest point\n        if (typeof transformed[0].i === 'number') {\n          attr = 'i';\n        }\n\n        // Get the closest point to the mouse\n        // Consider invertable scales to be continous\n        // Round non-continous charts with a continous scale down\n        // Round band scales to the closest point for radial charts\n        const newValue = keyScale.invert\n          ? getClosestContinousScalePoint({\n            pos: coord,\n            scale: keyScale,\n            data: transformed,\n            attr,\n            roundDown: !isContinous\n          })\n          : getClosestBandScalePoint({\n            pos: coord,\n            scale: keyScale,\n            data: transformed,\n            attr,\n            roundClosest: isRadial\n          });\n\n        if (!isEqual(newValue, value) && newValue) {\n          const pointX = keyScale(newValue.x);\n          let pointY = valueScale(newValue.y);\n          let marginX = 0;\n          let marginY = 0;\n\n          if (isNaN(pointY)) {\n            pointY = height / 2;\n            marginX = 10;\n            if (!placement) {\n              newPlacement = 'right';\n            }\n          } else {\n            marginY = -10;\n          }\n\n          // If the points didn't change, don't trigger an update\n          if (pointX === prevX && pointY === prevY) {\n            return;\n          }\n\n          setPrevX(pointX);\n          setPrevY(pointY);\n\n          const target = event.target as SVGRectElement;\n          const { top, left } = target.getBoundingClientRect();\n\n          let offsetX = 0;\n          let offsetY = 0;\n\n          if (isRadial) {\n            // If its radial, we need to convert the coords to radial format\n            const outerRadius = Math.min(width, height) / 2;\n            offsetX =\n              pointY * Math.cos(pointX - rotationFactor * Math.PI) +\n              outerRadius;\n            offsetY =\n              pointY * Math.sin(pointX - rotationFactor * Math.PI) +\n              outerRadius;\n          } else {\n            offsetX = pointX;\n            offsetY = pointY;\n          }\n\n          offsetX += left + marginX;\n          offsetY += top + marginY;\n\n          setPlacement(newPlacement);\n          setVisible(true);\n          setValue(newValue);\n          setOffsetX(offsetX);\n          setOffsetY(offsetY);\n\n          onValueEnter({\n            visible: true,\n            value: newValue,\n            pointY,\n            pointX,\n            offsetX,\n            offsetY,\n            nativeEvent: event\n          });\n        }\n      },\n      [\n        data,\n        getXCoord,\n        height,\n        isContinous,\n        isHorizontal,\n        isRadial,\n        onValueEnter,\n        placement,\n        placementProp,\n        prevX,\n        prevY,\n        transformData,\n        value,\n        width,\n        xScale,\n        yScale\n      ]\n    );\n\n    const onMouseLeave = useCallback(() => {\n      setPrevX(undefined);\n      setPrevY(undefined);\n\n      setValue(undefined);\n      setVisible(false);\n\n      onValueLeave();\n    }, [onValueLeave]);\n\n    useImperativeHandle(childRef, () => ({\n      triggerMouseMove(e: React.MouseEvent) {\n        onMouseMove(e);\n      }\n    }));\n\n    const tooltipReference = useMemo(\n      () => ({\n        width: 4,\n        height: 4,\n        top: offsetY,\n        left: offsetX\n      }),\n      [offsetX, offsetY]\n    );\n\n    const renderRadial = useCallback(() => {\n      const innerRadiusNew = innerRadius || 0;\n      const outerRadiusNew = outerRadius || Math.min(width, height) / 2;\n\n      const d = arc()({\n        innerRadius: innerRadiusNew,\n        outerRadius: outerRadiusNew,\n        startAngle: isFullCircle ? 0 : startAngle,\n        endAngle: isFullCircle ? 2 * Math.PI : endAngle\n      });\n\n      // This is a dummuy full circle in the background as we need the\n      // full circle to get the coordinates right from getBoundingClientRect().\n      // If we don't use a full circle, then the bounding rectangle could be of any dimension and\n      // the logic in getPositionForTarget() wouldn't work\n      const fullCircle = arc()({\n        innerRadius: innerRadiusNew,\n        outerRadius: outerRadiusNew,\n        startAngle: 0,\n        endAngle: 2 * Math.PI\n      });\n\n      return (\n        <>\n          <path d={fullCircle!} opacity=\"0\" cursor=\"auto\" ref={fullCircleref} />\n          <path\n            d={d!}\n            opacity=\"0\"\n            cursor=\"auto\"\n            ref={ref}\n            onMouseMove={onMouseMove}\n          />\n        </>\n      );\n    }, [\n      endAngle,\n      height,\n      innerRadius,\n      isFullCircle,\n      onMouseMove,\n      outerRadius,\n      startAngle,\n      width\n    ]);\n\n    const renderLinear = useCallback(() => {\n      return (\n        <rect\n          height={height}\n          ref={ref}\n          width={width}\n          opacity={0}\n          cursor=\"auto\"\n          onMouseMove={onMouseMove}\n        />\n      );\n    }, [height, onMouseMove, width]);\n\n    return (\n      <Fragment>\n        {disabled && children}\n        {!disabled && (\n          <g onMouseLeave={onMouseLeave} ref={childRef}>\n            {isRadial && renderRadial()}\n            {!isRadial && renderLinear()}\n            <CloneElement<ChartTooltipProps>\n              element={tooltip}\n              visible={visible}\n              placement={placement}\n              modifiers={[offset({ mainAxis: 15 }), flip()]}\n              reference={tooltipReference}\n              color={color}\n              value={value}\n            />\n            {children}\n          </g>\n        )}\n      </Fragment>\n    );\n  }\n);\n","import React, {\n  PropsWithChildren,\n  FC,\n  useRef,\n  useState,\n  useEffect,\n  useCallback\n} from 'react';\nimport {\n  Pan,\n  PanMoveEvent,\n  PanStartEvent,\n  PanEndEvent,\n  PanCancelEvent\n} from '@/common/Gestures/Pan';\nimport { Zoom, ZoomEvent } from '@/common/Gestures/Zoom';\nimport {\n  identity,\n  fromObject,\n  fromDefinition,\n  transform\n} from 'transformation-matrix';\nimport isEqual from 'react-fast-compare';\n\nexport interface ZoomPanEvent {\n  scale: number;\n  x: number;\n  y: number;\n  type: 'zoom' | 'pan';\n  nativeEvent: any;\n}\n\nexport interface ZoomPanProps extends PropsWithChildren {\n  height: number;\n  width: number;\n  scale: number;\n  x: number;\n  y: number;\n  pannable: boolean;\n  zoomable: boolean;\n  disabled?: boolean;\n  maxZoom: number;\n  minZoom: number;\n  zoomStep: number;\n  constrain: boolean;\n  globalPanning: boolean;\n  disableMouseWheel?: boolean;\n  requireZoomModifier?: boolean;\n  onZoomPan: (event: ZoomPanEvent) => void;\n  onZoom: (event: ZoomEvent) => void;\n  onZoomEnd: () => void;\n  onPanStart: (event: PanStartEvent) => void;\n  onPanMove: (event: PanMoveEvent) => void;\n  onPanEnd: (event: PanEndEvent) => void;\n  onPanCancel: (event: PanCancelEvent) => void;\n}\n\nexport const ZoomPan: FC<Partial<ZoomPanProps>> = ({\n  height = 0,\n  width = 0,\n  children,\n  disabled,\n  pannable = true,\n  maxZoom = 10,\n  minZoom = 0,\n  zoomable = true,\n  scale = 1,\n  x = 0,\n  y = 0,\n  disableMouseWheel,\n  constrain = true,\n  zoomStep = 0.1,\n  onPanCancel = () => undefined,\n  requireZoomModifier,\n  globalPanning = true,\n  onPanStart = () => undefined,\n  onZoomPan = () => undefined,\n  onPanMove = () => undefined,\n  onPanEnd = () => undefined,\n  onZoom = () => undefined,\n  onZoomEnd = () => undefined\n}) => {\n  const zoomRef = useRef<Zoom>();\n  const panRef = useRef<Pan>();\n  const [isZooming, setIsZooming] = useState<boolean>();\n  const [isPanning, setIsPanning] = useState<boolean>();\n  const [matrix, setMatrix] = useState<any>(identity());\n\n  useEffect(() => {\n    const newMatrix = transform(\n      fromDefinition([\n        { type: 'translate', tx: x, ty: y },\n        { type: 'scale', sx: scale, sy: scale }\n      ])\n    );\n\n    if (!isEqual(newMatrix, matrix)) {\n      setMatrix(newMatrix);\n    }\n  }, [x, y, scale, matrix]);\n\n  const onPanStartHandler = useCallback(\n    (event: PanStartEvent) => {\n      setIsPanning(true);\n      onPanStart(event);\n    },\n    [onPanStart]\n  );\n\n  const onPanMoveHandler = useCallback(\n    (event: PanMoveEvent) => {\n      onZoomPan({\n        scale: scale,\n        x: event.x,\n        y: event.y,\n        type: 'pan',\n        nativeEvent: event.nativeEvent\n      });\n\n      onPanMove(event);\n    },\n    [onPanMove, onZoomPan, scale]\n  );\n\n  const onPanEndHandler = useCallback(\n    (event: PanEndEvent) => {\n      setIsPanning(false);\n      onPanEnd(event);\n    },\n    [onPanEnd]\n  );\n\n  const onZoomHandler = useCallback(\n    (event: ZoomEvent) => {\n      onZoomPan({\n        x: event.x,\n        y: event.y,\n        scale: event.scale,\n        nativeEvent: event.nativeEvent,\n        type: 'zoom'\n      });\n      onZoom(event);\n    },\n    [onZoom, onZoomPan]\n  );\n\n  const onZoomEndHandler = useCallback(() => {\n    setIsZooming(false);\n    onZoomEnd();\n  }, [onZoomEnd]);\n\n  const cursor = pannable ? 'move' : 'auto';\n  const selection = isZooming || isPanning ? 'none' : 'auto';\n  const matrixObj = fromObject(matrix);\n\n  return (\n    <Pan\n      x={x}\n      y={y}\n      scale={scale}\n      matrix={matrixObj}\n      constrain={constrain}\n      height={height}\n      width={width}\n      disabled={!pannable || disabled}\n      ref={panRef}\n      globalPanning={globalPanning}\n      onPanStart={onPanStartHandler}\n      onPanMove={onPanMoveHandler}\n      onPanEnd={onPanEndHandler}\n      onPanCancel={onPanCancel}\n    >\n      <Zoom\n        ref={zoomRef}\n        disabled={!zoomable || disabled}\n        scaleFactor={zoomStep}\n        disableMouseWheel={disableMouseWheel}\n        maxZoom={maxZoom}\n        minZoom={minZoom}\n        scale={scale}\n        x={x}\n        y={y}\n        style={{ cursor }}\n        requireZoomModifier={requireZoomModifier}\n        matrix={matrix}\n        onZoom={onZoomHandler}\n        onZoomEnd={onZoomEndHandler}\n      >\n        {!disabled && (\n          <rect\n            height={height}\n            width={width}\n            opacity={0}\n            className=\"pan-container\"\n          />\n        )}\n        <g\n          style={{\n            pointerEvents: selection,\n            userSelect: selection\n          }}\n        >\n          {children}\n        </g>\n      </Zoom>\n    </Pan>\n  );\n};\n","import { scaleLinear, scaleTime, scaleBand } from 'd3-scale';\nimport { getXDomain, getYDomain } from '@/common/utils/domains';\nimport {\n  ChartInternalShallowDataShape,\n  ChartInternalNestedDataShape\n} from '../data';\nimport { uniqueBy } from '@/common/utils/array';\n\ninterface ScaleConfig {\n  type: 'category' | 'value' | 'time' | 'duration';\n  roundDomains?: boolean;\n  data: any[];\n  domain?: any[];\n  padding?: number;\n  scaled?: boolean;\n  width?: number;\n  height?: number;\n  isMultiSeries?: boolean;\n  isDiverging?: boolean;\n}\n\n/**\n * Gets the X Scale function.\n */\nexport function getXScale({\n  type,\n  roundDomains,\n  data,\n  width,\n  domain,\n  padding,\n  scaled,\n  isMultiSeries = false,\n  isDiverging = false\n}: ScaleConfig) {\n  let scale;\n\n  if (type === 'time' || type === 'duration' || type === 'value') {\n    if (type === 'time') {\n      scale = scaleTime().rangeRound([0, width!]);\n    } else {\n      scale = scaleLinear().rangeRound([0, width!]);\n    }\n\n    scale = scale.domain(domain || getXDomain({ data, scaled, isDiverging }));\n  } else {\n    if (!domain) {\n      if (isMultiSeries) {\n        domain = uniqueBy<ChartInternalShallowDataShape>(data, (d) => d.key);\n      } else {\n        domain = uniqueBy<ChartInternalShallowDataShape>(data, (d) => d.x);\n      }\n    }\n\n    scale = scaleBand()\n      .rangeRound([0, width!])\n      .padding(padding || 0)\n      .domain(domain as ReadonlyArray<any>);\n  }\n\n  return roundDomains ? scale.nice() : scale;\n}\n\n/**\n * Gets the Y Scale function.\n */\nexport function getYScale({\n  type,\n  height,\n  data,\n  domain,\n  roundDomains = false,\n  scaled = false,\n  padding = 0,\n  isMultiSeries = false,\n  isDiverging = false\n}: ScaleConfig) {\n  let scale;\n\n  if (type === 'time' || type === 'value' || type === 'duration') {\n    scale = scaleLinear()\n      .range([height!, 0])\n      .domain(domain || getYDomain({ data, scaled, isDiverging }));\n  } else {\n    if (!domain) {\n      if (isMultiSeries) {\n        domain = uniqueBy<ChartInternalNestedDataShape>(\n          data as [],\n          (d) => d.key\n        );\n      } else {\n        domain = uniqueBy<ChartInternalShallowDataShape>(data, (d) => d.y);\n      }\n    }\n\n    scale = scaleBand()\n      .rangeRound([height!, 0])\n      .padding(padding)\n      .domain(domain as ReadonlyArray<any>);\n  }\n\n  return roundDomains ? scale.nice() : scale;\n}\n","import { scaleLinear } from 'd3-scale';\nimport { ChartInternalNestedDataShape } from '@/common/data';\nimport { uniqueBy } from '@/common/utils/array';\n\ninterface MariemkoScaleData {\n  data: ChartInternalNestedDataShape[];\n  width: number;\n  valueScale: any;\n  padding: number;\n}\n\n/**\n * Get a linear scale for the mariemko chart.\n */\nexport const getMarimekkoScale = (width: number, roundDomains: boolean) => {\n  const scale = scaleLinear().rangeRound([0, width]);\n  return roundDomains ? scale.nice() : scale;\n};\n\n/**\n * Builds a fake scale function to get a group scale for a marimekko value scale.\n */\nexport const getMarimekkoGroupScale = ({\n  data,\n  width,\n  valueScale,\n  padding\n}: MariemkoScaleData) => {\n  const domain = uniqueBy<ChartInternalNestedDataShape>(data, (d) => d.key);\n  const barCount = data.length;\n  const widthMinusPadding = width - padding * (barCount - 1);\n  const xMultiplier = widthMinusPadding / width;\n\n  // Given a data series, find the x0/x1 for it.\n  const getXRange = (series) => {\n    const [val] = series.data;\n    const x0 = valueScale(val.x0);\n    const x1 = valueScale(val.x1);\n    return { x0, x1 };\n  };\n\n  const scale: any = (arg) => {\n    let result = 0;\n    const index = data.findIndex((d) => d.key === arg);\n    const series = data[index];\n\n    if (series && series.data && series.data.length) {\n      const { x1, x0 } = getXRange(series);\n      result = (x1 - x0) / 2 + x0;\n\n      if (padding) {\n        result = result * xMultiplier + index * padding;\n      }\n    }\n\n    return result;\n  };\n\n  scale.range = () => [0, width];\n  scale.domain = () => domain;\n\n  // Special invert function for marimekko\n  scale.mariemkoInvert = (offset: number) => {\n    let found;\n\n    for (let i = 0; i < domain.length; i++) {\n      const attr = domain[i];\n      const series = data[i];\n      const { x1, x0 } = getXRange(series);\n\n      if (offset >= x0 - padding / 2 && offset <= x1 - padding / 2) {\n        found = attr;\n        break;\n      }\n    }\n\n    return found;\n  };\n\n  return scale;\n};\n","import { scaleBand } from 'd3-scale';\nimport { uniqueBy } from '@/common/utils/array';\n\n/**\n * Get the group scale aka x0.\n */\nexport function getGroupScale({\n  dimension,\n  padding,\n  data,\n  direction = 'vertical'\n}) {\n  const domain = uniqueBy(data, (d) => d.key);\n  const spacing = domain.length / (dimension / padding + 1);\n  const range = direction === 'vertical' ? [0, dimension] : [dimension, 0];\n\n  return scaleBand()\n    .rangeRound(range as any)\n    .paddingInner(spacing)\n    .paddingOuter(spacing / 2)\n    .domain(domain as string[]);\n}\n\n/**\n * Get the inner scale aka x1.\n */\nexport function getInnerScale({ groupScale, padding, data, prop = 'x' }) {\n  const dimension = groupScale.bandwidth();\n  const domain = uniqueBy(\n    data,\n    (d) => d.data,\n    (d) => d[prop]\n  );\n  const spacing = domain.length / (dimension / padding + 1);\n\n  return scaleBand()\n    .rangeRound([0, dimension])\n    .paddingInner(spacing)\n    .domain(domain as string[]);\n}\n","import { scaleLinear } from 'd3-scale';\n\n/**\n * Get the Y Scale for a given set of radiuses.\n * Reference: https://github.com/d3/d3-scale/issues/90\n */\nexport const getRadialYScale = (\n  innerRadius: number,\n  outerRadius: number,\n  domain: any[]\n) => {\n  if (domain[0] === 0 && domain[1] === 0) {\n    // If all values are 0, set the domain to [0, 1], so the zero values are\n    // all at the bottom of the chart, not the middle.\n    domain = [0, 1];\n  }\n  const y = scaleLinear()\n    .range([innerRadius * innerRadius, outerRadius * outerRadius])\n    .domain(domain);\n\n  const yScale = Object.assign((d) => Math.sqrt(y(d)), y);\n\n  return yScale;\n};\n","import React, { FC, PropsWithChildren, useCallback, useMemo } from 'react';\nimport { ZoomPan, ZoomPanEvent } from './ZoomPan';\nimport { ChartInternalDataShape, ChartDataTypes } from '@/common/data';\nimport { getXScale } from '../scales';\n\nexport interface ZoomPanChangeEvent {\n  domain: [ChartDataTypes, ChartDataTypes];\n  isZoomed: boolean;\n}\n\nexport interface ChartZoomPanProps extends PropsWithChildren {\n  data: ChartInternalDataShape[];\n  domain?: [ChartDataTypes, ChartDataTypes];\n  axisType: 'value' | 'time' | 'category' | 'duration';\n  roundDomains: boolean;\n  height: number;\n  width: number;\n  scale: number;\n  offset: number;\n  pannable: boolean;\n  zoomable: boolean;\n  disabled?: boolean;\n  maxZoom: number;\n  zoomStep: number;\n  disableMouseWheel?: boolean;\n  requireZoomModifier?: boolean;\n  onZoomPan?: (event: ZoomPanChangeEvent) => void;\n}\n\nexport const ChartZoomPan: FC<Partial<ChartZoomPanProps>> = ({\n  data,\n  height,\n  children,\n  disabled,\n  domain,\n  width,\n  axisType,\n  roundDomains,\n  onZoomPan = () => undefined,\n  ...rest\n}) => {\n  const onZoomPanHandler = useCallback(\n    (event: ZoomPanEvent) => {\n      const can =\n        event.type === 'zoom' || (event.type === 'pan' && event.scale > 1);\n\n      if (can) {\n        const scale: any = getXScale({\n          width: width,\n          type: axisType,\n          roundDomains,\n          data\n        });\n\n        const newScale = scale.copy().domain(\n          scale\n            .range()\n            .map((x) => (x - event.x) / event.scale)\n            .map(scale.clamp(true).invert, event.x)\n        );\n\n        onZoomPan!({\n          domain: newScale.domain(),\n          isZoomed: event.scale !== 1\n        });\n      }\n    },\n    [axisType, data, onZoomPan, roundDomains, width]\n  );\n\n  const zoomOffset = useMemo(() => {\n    let zoomOffset = {\n      scale: undefined,\n      x: undefined\n    } as any;\n\n    if (!disabled && domain) {\n      const xScale: any = getXScale({\n        width,\n        type: axisType,\n        roundDomains,\n        data\n      });\n\n      let offset = xScale(domain[0]);\n      const endOffset = xScale(domain[1]);\n      const scale = width / (endOffset - offset);\n\n      // Apply the new scale to the offset so its scaled correctly\n      offset = offset * scale;\n\n      zoomOffset = {\n        scale: scale,\n        x: -offset\n      };\n    }\n\n    return zoomOffset;\n  }, [axisType, data, disabled, domain, roundDomains, width]);\n\n  return (\n    <ZoomPan\n      {...rest}\n      scale={zoomOffset.scale}\n      x={zoomOffset.x}\n      height={height}\n      width={width}\n      pannable={zoomOffset.scale > 1}\n      onZoomPan={onZoomPanHandler}\n    >\n      {children}\n    </ZoomPan>\n  );\n};\n","export const DEFAULT_TRANSITION = {\n  type: 'spring',\n  velocity: 5,\n  damping: 20,\n  // https://github.com/framer/motion/issues/1513#issuecomment-1121133717\n  restDelta: 0.01,\n  restSpeed: 0.01\n};\n","import React, { useEffect } from 'react';\nimport { motion, useSpring, useMotionValue } from 'motion/react';\nimport { interpolate } from 'd3-interpolate';\nimport { DEFAULT_TRANSITION } from './config';\n\nexport const MotionPath = ({ custom, transition, ...rest }) => {\n  const d = useMotionValue(custom.exit.d);\n  const spring = useSpring(0, DEFAULT_TRANSITION);\n\n  useEffect(() => {\n    const interpolator = interpolate(d.get(), custom.enter.d);\n    const prevSpring = spring.get();\n    spring.set(prevSpring + 1);\n\n    return spring.on('change', (v) => d.set(interpolator(v - prevSpring)));\n  }, [custom.enter.d, custom.exit.d, d, spring]);\n\n  const { d: enterD, ...enterRest } = custom.enter;\n  const { d: exitD, ...exitRest } = custom.exit;\n\n  return (\n    <motion.path\n      {...rest}\n      initial={{ opacity: 0, ...exitRest }}\n      exit={{ opacity: 0, ...exitRest }}\n      animate={{ opacity: 1, ...enterRest }}\n      transition={transition}\n      d={transition.type !== false ? d : enterD}\n    />\n  );\n};\n","import chroma from 'chroma-js';\n\n/**\n * Color Schemes\n * Credits: https://gka.github.io/chroma.js/#chroma-brewer\n */\nexport const schemes = {\n  unifyviz: [\n    '#4C86FF',\n    '#40D3F4',\n    '#40E5D1',\n    '#9152EE',\n    '#A840E8',\n    '#80CE5B',\n    '#AADC40',\n    '#D740BE',\n    '#EE4094',\n    '#E84045',\n    '#F8A340',\n    '#FFD440'\n  ],\n  unifyvizwarm: ['#FFD440', '#F8A340', '#E84045'],\n  unify8Colors: chroma\n    .scale(['#4C86FF', '#26efb5'])\n    .correctLightness()\n    .colors(8),\n  cybertron: chroma.scale(['#2d60e8', '#26efb5']).correctLightness().colors(8),\n  ...chroma.brewer\n};\n","import { scaleOrdinal, scaleQuantile } from 'd3-scale';\nimport { maxIndex, extent } from 'd3-array';\nimport { schemes } from './schemes';\nimport { uniqueBy } from '../utils';\n\nexport type ColorSchemeType =\n  | ((data, index: number, active?: any[]) => string)\n  | string[]\n  | string;\n\nexport type ColorSchemeStyleArray = Partial<CSSStyleDeclaration>[];\n\ntype ColorHelperProps = {\n  colorScheme: ColorSchemeType;\n  point: any;\n  data: any[];\n  index: number;\n  active: any[];\n  scale?: any;\n  domain?: any[];\n  key?: any;\n  attribute?: string;\n  isMultiSeries?: boolean;\n};\n\ntype ColorSchemeValueScale = (point: any) => string;\n\nfunction isColorSchemeStyleArray(\n  colorScheme: any\n): colorScheme is ColorSchemeStyleArray {\n  return Array.isArray(colorScheme) && typeof colorScheme[0] === 'object';\n}\n\n/**\n * Given a point, get the key attributes for it.\n */\nconst rangeHelper = (point: any, attribute: string) =>\n  point.map((r, i) => {\n    if (r) {\n      if (r[attribute] !== undefined) {\n        return r[attribute];\n      } else if (r.data && r.data[attribute] !== undefined) {\n        return r.data[attribute];\n      }\n    }\n\n    return i;\n  });\n\n/**\n * Get a color given a range.\n */\nexport const getColor = (props: Partial<ColorHelperProps>) => {\n  let {\n    point,\n    colorScheme,\n    attribute,\n    index,\n    data,\n    active,\n    isMultiSeries,\n    domain,\n    key,\n    scale\n  } = {\n    attribute: 'key',\n    isMultiSeries: false,\n    scale: scaleOrdinal,\n    ...props\n  };\n\n  if (typeof colorScheme === 'string' && schemes[colorScheme]) {\n    colorScheme = schemes[colorScheme];\n  }\n\n  if (Array.isArray(colorScheme)) {\n    if (!domain) {\n      if (isMultiSeries && Array.isArray(data)) {\n        const maxIdx = maxIndex(data, (d) => d.data.length);\n        const maxVal = data[maxIdx];\n        data = maxVal.data;\n      }\n\n      domain = rangeHelper(data, attribute);\n    }\n\n    key = key !== undefined ? key : point[attribute];\n\n    return scale(colorScheme).domain(domain)(key);\n  } else if (typeof colorScheme === 'function') {\n    return colorScheme(point, index!, active);\n  } else {\n    return colorScheme;\n  }\n};\n\n/**\n * This function creates a value scale that maps data points to colors or CSS styles.\n *\n * @param {Array} data - The data used to create the scale.\n * @param {ColorSchemeType} colorScheme - The color scheme used to generate the scale.\n * @param {string} emptyColor - The color used for data points with no value.\n * @param {any} selections - Selected values in active state\n *\n * @returns {ColorSchemeValueScale} A function that takes a data point and returns a color or CSS style based on the data point's value.\n */\nconst getValueScale = (\n  data,\n  colorScheme: ColorSchemeType,\n  emptyColor: string,\n  selections: any\n): ColorSchemeValueScale => {\n  const valueDomain = extent(\n    uniqueBy(\n      data,\n      (d) => d.data,\n      (d) => d.value\n    )\n  );\n\n  return (point) => {\n    // For 0 values, lets show a placeholder fill\n    if (point?.value === undefined || point?.value === null) {\n      return emptyColor;\n    }\n\n    // Note: this can return css style values, not just colors\n    return getColor({\n      scale: scaleQuantile,\n      domain: valueDomain,\n      key: point.value,\n      colorScheme,\n      point,\n      active: selections\n    });\n  };\n};\n\n/**\n * This function generates a style object for a given data point based on a map of value scales.\n *\n * @param {any} point - The data point for which to generate the style object.\n * @param {Map<string, ColorSchemeValueScale>} valueScales - A map where each key is a property name and each value is a function that takes a data point and returns a CSS style.\n *\n * @returns {Partial<CSSStyleDeclaration>} A style object where each key is a property name and each value is a color or CSS style based on the value of the data point for that property.\n */\nexport const getColorSchemeStyles = (\n  point,\n  valueScales: Map<string, ColorSchemeValueScale>\n): Partial<CSSStyleDeclaration> =>\n  Array.from(valueScales).reduce((acc, [key, valueScale]) => {\n    return { ...acc, [key]: valueScale(point) };\n  }, {});\n\n/**\n * This function retrieves a color scheme for a specific property from a given color scheme.\n *\n * @param {ColorSchemeStyleArray} colorScheme - The color scheme used to generate the scale.\n * @param {string} colorSchemeProperty - The property for which to retrieve the new color scheme.\n *\n * @returns {ColorSchemeType} A color scheme for the specified property.\n */\nconst getColorSchemeForProperty = (\n  colorScheme: ColorSchemeStyleArray,\n  colorSchemeProperty: string\n): ColorSchemeType =>\n  colorScheme.map(\n    (schemeItem: Partial<CSSStyleDeclaration>) =>\n      schemeItem?.[colorSchemeProperty]\n  );\n\n/**\n * This function creates a map of value scales for different properties based on a provided color scheme.\n * Each value scale is a function that takes a data point and returns a css style value based on that point.\n *\n * @param {Array} data - The data used to create the scales.\n * @param {ColorSchemeType | ColorSchemeStyleArray} colorScheme - The color scheme used to generate the scales. This can be an array of colors or an array of objects where each object contains a set of css styles.\n * @param {string} emptyColor - The color used for data points with no value.\n * @param {any} selections - Selected values in active state\n *\n * @returns {Map<string, ColorSchemeValueScale>} A map where each key is a property name and each value is a function that takes a data point and returns a value for the property.\n *\n * If the color scheme is an array of strings, they will be treated as fill values.\n */\nexport const createColorSchemeValueScales = (\n  data,\n  colorScheme: ColorSchemeType | ColorSchemeStyleArray,\n  emptyColor: string,\n  selections: any\n): Map<string, ColorSchemeValueScale> => {\n  const valueScales = new Map<string, ColorSchemeValueScale>();\n\n  if (isColorSchemeStyleArray(colorScheme)) {\n    const colorSchemeProperties = [\n      ...new Set(colorScheme.flatMap(Object.keys))\n    ];\n\n    colorSchemeProperties.forEach((key) => {\n      const valueScale = getValueScale(\n        data,\n        getColorSchemeForProperty(colorScheme, key),\n        emptyColor,\n        selections\n      );\n      valueScales.set(key, valueScale);\n    });\n  } else {\n    valueScales.set('fill', getValueScale(data, colorScheme, emptyColor, selections));\n  }\n\n  return valueScales;\n};\n","import { animate } from 'motion/react';\nimport { useEffect, useRef } from 'react';\n\nexport interface CountInputs {\n  /**\n   * Number to animate to\n   */\n  to: number;\n\n  /**\n   * Number to animate from. Defaults 0.\n   */\n  from?: number;\n\n  /**\n   * Duration of the animation in seconds. Defaults 1.\n   */\n  duration?: number;\n\n  /**\n   * Delay of the animation. Defaults 0.\n   */\n  delay?: number;\n\n  /**\n   * Localize the number. Defaults true.\n   */\n  format?: boolean;\n\n  /**\n   * Number of decimal places. Defaults 0.\n   */\n  decimalPlaces?: number;\n\n  /**\n   * Prefix the number with a string or number.\n   */\n  prefix?: string | number;\n\n  /**\n   * Suffix the number with a string or number.\n   */\n  suffix?: string | number;\n}\n\nexport const COUNT_DEFAULTS = {\n  from: 0,\n  duration: 1,\n  delay: 0,\n  format: true,\n  decimalPlaces: 0\n};\n\nexport const useCount = ({\n  from,\n  to,\n  duration,\n  delay,\n  prefix,\n  suffix,\n  decimalPlaces,\n  format\n}: CountInputs) => {\n  const nodeRef = useRef<any | null>(null);\n\n  from = from || COUNT_DEFAULTS.from;\n  duration = duration || COUNT_DEFAULTS.duration;\n  delay = delay || COUNT_DEFAULTS.delay;\n  format = format || COUNT_DEFAULTS.format;\n  decimalPlaces = decimalPlaces || COUNT_DEFAULTS.decimalPlaces;\n\n  useEffect(() => {\n    const node = nodeRef.current;\n\n    const controls = animate(from, to, {\n      duration,\n      delay,\n      onUpdate(value) {\n        let formatted: number | string = value;\n        if (decimalPlaces) {\n          formatted = Number(value.toFixed(decimalPlaces));\n        } else {\n          formatted = Number(value.toFixed(0));\n        }\n\n        if (format) {\n          formatted = formatted.toLocaleString();\n        }\n\n        if (node) {\n          if (prefix) {\n            formatted = `${prefix}${formatted}`;\n          }\n          if (suffix) {\n            formatted = `${formatted}${suffix}`;\n          }\n\n          node.textContent = formatted as string;\n        }\n      }\n    });\n\n    return () => controls.stop();\n  }, [from, to, duration, delay, decimalPlaces, format, prefix, suffix]);\n\n  return nodeRef;\n};\n","import React, { FC } from 'react';\nimport { CountInputs, useCount } from './useCount';\n\nexport interface CountProps extends CountInputs {\n  className?: string;\n}\n\nexport const Count: FC<CountProps> = ({ className, ...rest }) => {\n  const ref = useCount(rest);\n  return <span ref={ref} className={className} />;\n};\n","import React, { FC } from 'react';\n\nexport interface LinearValueMarkerProps {\n  color: string;\n  value: any;\n  className?: string;\n  thickness?: number;\n  size?: number;\n  direction?: 'horizontal' | 'vertical';\n}\nexport const LinearValueMarker: FC<LinearValueMarkerProps> = ({\n  color,\n  value,\n  className,\n  thickness = 1,\n  size,\n  direction = 'horizontal'\n}) => {\n  const coordinates =\n    direction === 'horizontal'\n      ? { x1: 0, y1: value, x2: size, y2: value }\n      : { x1: value, y1: 0, x2: value, y2: size };\n\n  return (\n    <line\n      className={className}\n      stroke={color}\n      strokeWidth={thickness}\n      {...coordinates}\n    />\n  );\n};\n","import React, { FC } from 'react';\n\nexport interface RadialValueMarkerProps {\n  color: string;\n  value: number;\n  className?: string;\n  thickness?: number;\n}\nexport const RadialValueMarker: FC<RadialValueMarkerProps> = ({\n  color,\n  value,\n  className,\n  thickness = 1\n}) => (\n  <circle\n    className={className}\n    cx={0}\n    cy={0}\n    r={value}\n    fill=\"none\"\n    stroke={color}\n    strokeWidth={thickness}\n  />\n);\n","import { Glow } from './Glow';\nimport chroma from 'chroma-js';\n\nexport interface generateGlowStylesInput {\n  glow?: Glow;\n  colorSchemeColor?: string;\n}\n\nexport const generateGlowStyles = ({\n  glow,\n  colorSchemeColor\n}: generateGlowStylesInput) => {\n  if (!glow) return {};\n\n  let {\n    x = 0,\n    y = 0,\n    blur = 5,\n    color = colorSchemeColor || 'rgb(255, 255, 255, 0.25)',\n    opacity = 1\n  } = glow;\n\n  color = chroma(color).alpha(opacity).css();\n\n  return blur\n    ? { filter: `drop-shadow(${x}px ${y}px ${blur}px ${color})` }\n    : {};\n};\n","import React, {\n  Fragment,\n  ReactNode,\n  ReactElement,\n  useState,\n  FC,\n  useRef,\n  useMemo\n} from 'react';\nimport { ChartInternalShallowDataShape } from '@/common/data';\nimport { ChartTooltip, ChartTooltipProps } from '@/common/Tooltip';\nimport classNames from 'classnames';\nimport { CloneElement } from 'reablocks';\nimport {\n  constructFunctionProps,\n  PropFunctionTypes\n} from '@/common/utils/functions';\nimport { motion } from 'motion/react';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\nimport { schemes, getColor, ColorSchemeType } from '@/common/color';\nimport { identifier } from 'safe-identifier';\nimport css from './ScatterPoint.module.css';\nimport { Glow } from '@/common/Glow';\nimport { generateGlowStyles } from '@/common/Glow/utils';\nimport { getAriaLabel, mergeDefaultProps } from '@/common';\n\nexport type ScatterPointProps = {\n  /**\n   * Whether the element is active or not. Set internally by `ScatterSeries`.\n   */\n  active?: boolean;\n\n  /**\n   * Size of the circle element.\n   */\n  size?: ((data: ChartInternalShallowDataShape) => number) | number;\n\n  /**\n   * Color of the circle.\n   */\n  color?: ColorSchemeType;\n\n  /**\n   * Cursor for the element.\n   */\n  cursor?: string;\n\n  /**\n   * D3 scale for X Axis. Set internally by `ScatterPlot`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `ScatterPlot`.\n   */\n  yScale: any;\n\n  /**\n   * Height of the chart. Set internally by `ScatterPlot`.\n   */\n  height: number;\n\n  /**\n   * Whether to animate the enter/update/exit. Set internally by `ScatterSeries`.\n   */\n  animated?: boolean;\n\n  /**\n   * Index of the element in the series. Set internally by `ScatterSeries`.\n   */\n  index: number;\n\n  /**\n   * Tooltip element.\n   */\n  tooltip: ReactElement<ChartTooltipProps, typeof ChartTooltip> | null;\n\n  /**\n   * Parsed data shape. Set internally by `ScatterPlot`.\n   */\n  data: ChartInternalShallowDataShape;\n\n  /**\n   * Id set internally by `ScatterPlot`.\n   */\n  id: string;\n\n  /**\n   * Glow styling for the point.\n   */\n  glow?: Glow;\n\n  /**\n   * Symbol element to render.\n   */\n  symbol?: (data: ChartInternalShallowDataShape) => ReactNode;\n\n  /**\n   * Whether the elment is visiblbe or not.\n   */\n  visible?: (data: ChartInternalShallowDataShape, index: number) => boolean;\n\n  /**\n   * Event for when a symbol is clicked.\n   */\n  onClick?: (data: ChartInternalShallowDataShape) => void;\n\n  /**\n   * Event for when the symbol has mouse enter.\n   */\n  onMouseEnter?: (data: ChartInternalShallowDataShape) => void;\n\n  /**\n   * Event for when the symbol has mouse leave.\n   */\n  onMouseLeave?: (data: ChartInternalShallowDataShape) => void;\n} & PropFunctionTypes;\n\nexport const ScatterPoint: FC<Partial<ScatterPointProps>> = (props) => {\n  const {\n    symbol,\n    index,\n    id,\n    data,\n    xScale,\n    yScale,\n    active,\n    tooltip,\n    cursor,\n    size,\n    glow,\n    color,\n    animated,\n    onClick,\n    onMouseEnter,\n    onMouseLeave,\n    visible,\n    ...rest\n  } = mergeDefaultProps(SCATTER_POINT_DEFAULT_PROPS, props);\n\n  const rectRef = useRef<any | null>(null);\n  const [tooltipVisible, setTooltipVisible] = useState<boolean>(false);\n  const extras = useMemo(\n    () => constructFunctionProps(rest, data),\n    [rest, data]\n  );\n  const r = useMemo(\n    () => (typeof size === 'function' ? size(data!) : size),\n    [size, data]\n  );\n  const renderedSymbol = useMemo(\n    () => (symbol ? symbol(data!) : null),\n    [data, symbol]\n  );\n\n  const transitionProps = useMemo(\n    () =>\n      animated\n        ? {\n          ...DEFAULT_TRANSITION,\n          delay: index! * 0.005\n        }\n        : {\n          type: false,\n          delay: 0\n        },\n    [index, animated]\n  );\n\n  const enterProps = useMemo(() => {\n    let cy = yScale(data!.y1);\n    if (yScale.bandwidth) {\n      const width = yScale.bandwidth();\n      cy = cy + width / 2;\n    }\n\n    return {\n      x: xScale(data!.x),\n      y: cy\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [data, yScale]);\n\n  const exitProps = useMemo(() => {\n    const [yStartDomain] = yScale.domain();\n    return {\n      y: yScale(yStartDomain),\n      x: xScale(data!.x)\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [data, yScale]);\n\n  const fill = useMemo(\n    () =>\n      getColor({\n        colorScheme: color,\n        index,\n        point: data\n      }),\n    [data, color, index]\n  );\n\n  const key = `symbol-${id}-${identifier(`${data!.id}`)}`;\n  const ariaLabelData = useMemo(() => getAriaLabel(data), [data]);\n\n  const isVisible = visible ? visible?.(data, index) : active;\n\n  return (\n    <Fragment>\n      <g\n        ref={rectRef}\n        className={classNames({\n          [css.inactive]: !active,\n          [css.hidden]: !isVisible\n        })}\n        onMouseEnter={() => {\n          setTooltipVisible(true);\n          onMouseEnter(data!);\n        }}\n        onMouseLeave={() => {\n          setTooltipVisible(false);\n          onMouseLeave(data!);\n        }}\n        onClick={() => onClick(data!)}\n        tabIndex={0}\n        aria-label={ariaLabelData}\n        role=\"graphics-document\"\n      >\n        {symbol ? (\n          <motion.g\n            key={key}\n            {...extras}\n            initial={{\n              translateX: exitProps.x,\n              translateY: exitProps.y,\n              opacity: 0\n            }}\n            animate={{\n              translateX: enterProps.x,\n              translateY: enterProps.y,\n              opacity: 1\n            }}\n            exit={{\n              translateX: exitProps.x,\n              translateY: exitProps.y,\n              opacity: 0\n            }}\n            transition={transitionProps}\n          >\n            {renderedSymbol}\n          </motion.g>\n        ) : (\n          <motion.circle\n            key={key}\n            className={extras.className}\n            style={{\n              ...extras.style,\n              ...generateGlowStyles({ glow }),\n              cursor\n            }}\n            fill={fill}\n            initial={{\n              cx: exitProps.x,\n              cy: exitProps.y,\n              r,\n              opacity: 0\n            }}\n            animate={{\n              cx: enterProps.x,\n              cy: enterProps.y,\n              opacity: 1,\n              r\n            }}\n            exit={{\n              cx: exitProps.x,\n              cy: exitProps.y,\n              r,\n              opacity: 0\n            }}\n            transition={transitionProps}\n          />\n        )}\n      </g>\n      {tooltip && !tooltip.props.disabled && (\n        <CloneElement<ChartTooltipProps>\n          element={tooltip}\n          visible={tooltipVisible}\n          reference={rectRef}\n          value={data}\n        />\n      )}\n    </Fragment>\n  );\n};\n\nexport const SCATTER_POINT_DEFAULT_PROPS = {\n  active: true,\n  tooltip: <ChartTooltip />,\n  cursor: 'pointer',\n  size: 4,\n  color: schemes.cybertron[0],\n  animated: true,\n  onClick: () => undefined,\n  onMouseEnter: () => undefined,\n  onMouseLeave: () => undefined\n};\n","import React, { useCallback, Fragment, ReactElement, FC } from 'react';\nimport { ChartInternalShallowDataShape } from '@/common/data';\nimport { CloneElement } from 'reablocks';\nimport { ScatterPoint, ScatterPointProps } from './ScatterPoint';\nimport { identifier } from 'safe-identifier';\nimport { LinearValueMarker, LinearValueMarkerProps } from '@/common';\n\nexport interface ScatterSeriesProps {\n  /**\n   * Point that is rendered.\n   */\n  point: ReactElement<ScatterPointProps, typeof ScatterPoint>;\n\n  /**\n   * D3 scale for X Axis. Set internally by `ScatterPlot`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `ScatterPlot`.\n   */\n  yScale: any;\n\n  /**\n   * Parsed data shape. Set internally by `ScatterPlot`.\n   */\n  data: ChartInternalShallowDataShape[];\n\n  /**\n   * Id set internally by `ScatterPlot`.\n   */\n  id: string;\n\n  /**\n   * Height of the chart. Set internally by `ScatterPlot`.\n   */\n  height: number;\n\n  /**\n   * Width of the chart. Set internally by `ScatterPlot`.\n   */\n  width: number;\n\n  /**\n   * Whether the chart has been zoomed or not. Set internally by `ScatterPlot`.\n   */\n  isZoomed: boolean;\n\n  /**\n   * Whether to animate the enter/update/exit.\n   */\n  animated: boolean;\n\n  /**\n   * Active element ids to highlight.\n   */\n  activeIds?: string[];\n\n  /**\n   * Value markers line for the chart.\n   */\n  valueMarkers:\n    | ReactElement<LinearValueMarkerProps, typeof LinearValueMarker>[]\n    | null;\n}\n\n// For bubble charts, often symbols exceed the area\n// and we want to add a little bit of padding to prevent clipping\nconst PADDING = 25;\nconst HALF_PADDING = PADDING / 2;\n\nexport const ScatterSeries: FC<Partial<ScatterSeriesProps>> = ({\n  data,\n  height,\n  width,\n  id,\n  isZoomed,\n  activeIds,\n  point = <ScatterPoint />,\n  valueMarkers,\n  xScale,\n  yScale,\n  ...rest\n}) => {\n  const renderPoint = useCallback(\n    (pointData: ChartInternalShallowDataShape, index: number) => {\n      let pointId;\n      if (pointData.id) {\n        pointId = pointData.id;\n      }\n\n      const key = identifier(`${pointId || index}`);\n      const active =\n        !(activeIds && activeIds.length) || activeIds.includes(pointId);\n\n      return (\n        <CloneElement<ScatterPointProps>\n          element={point}\n          key={key}\n          xScale={xScale}\n          yScale={yScale}\n          {...rest}\n          id={id}\n          data={pointData}\n          index={index}\n          active={active}\n        />\n      );\n    },\n    [activeIds, point, xScale, yScale, rest, id]\n  );\n\n  const renderValueMarkers = useCallback(\n    () => (\n      <>\n        {valueMarkers?.length &&\n          valueMarkers.map((marker) => {\n            const isVertical = marker?.props?.direction === 'vertical';\n            const size = isVertical ? height : width;\n            const value = isVertical\n              ? xScale(marker.props.value)\n              : yScale(marker.props.value);\n            return (\n              <CloneElement<LinearValueMarkerProps>\n                key={marker.key}\n                element={marker}\n                size={size}\n                value={value}\n              />\n            );\n          })}\n      </>\n    ),\n    [height, valueMarkers, width, xScale, yScale]\n  );\n\n  return (\n    <Fragment>\n      <defs>\n        <clipPath id={`${id}-path`}>\n          <rect\n            width={isZoomed ? width : width! + PADDING}\n            height={height! + PADDING}\n            x={isZoomed ? 0 : -HALF_PADDING}\n            y={-HALF_PADDING}\n          />\n        </clipPath>\n      </defs>\n      {renderValueMarkers()}\n      <g clipPath={`url(#${id}-path)`}>{data!.map(renderPoint)}</g>\n    </Fragment>\n  );\n};\n","import React, {\n  FC,\n  Fragment,\n  ReactElement,\n  useState,\n  useRef,\n  useCallback,\n  useMemo\n} from 'react';\nimport classNames from 'classnames';\nimport {\n  ChartShallowDataShape,\n  buildShallowChartData,\n  ChartDataTypes\n} from '@/common/data';\nimport {\n  isAxisVisible,\n  LinearAxisProps,\n  LinearXAxis,\n  LinearYAxis,\n  LinearAxis,\n  LINEAR_X_AXIS_DEFAULT_PROPS,\n  LINEAR_Y_AXIS_DEFAULT_PROPS\n} from '@/common/Axis';\nimport { getYScale, getXScale } from '@/common/scales';\nimport { ScatterSeries, ScatterSeriesProps } from './ScatterSeries';\nimport { GridlineSeries, GridlineSeriesProps } from '@/common/Gridline';\nimport {\n  ZoomPanChangeEvent,\n  ChartZoomPanProps,\n  ChartZoomPan\n} from '@/common/ZoomPan';\nimport { ChartBrushProps, ChartBrush } from '@/common/Brush';\nimport {\n  ChartProps,\n  ChartContainer,\n  ChartContainerChildProps\n} from '@/common/containers/ChartContainer';\nimport { CloneElement } from 'reablocks';\nimport css from './ScatterPlot.module.css';\n\nexport interface ScatterPlotProps extends ChartProps {\n  /**\n   * Data the chart will receive to render.\n   */\n  data: ChartShallowDataShape[];\n\n  /**\n   * The series component that renders the scatter components.\n   */\n  series: ReactElement<ScatterSeriesProps, typeof ScatterSeries>;\n\n  /**\n   * The linear axis component for the Y Axis of the chart.\n   */\n  yAxis: ReactElement<LinearAxisProps, typeof LinearAxis>;\n\n  /**\n   * The linear axis component for the X Axis of the chart.\n   */\n  xAxis: ReactElement<LinearAxisProps, typeof LinearAxis>;\n\n  /**\n   * The chart's background gridlines component.\n   */\n  gridlines: ReactElement<GridlineSeriesProps, typeof GridlineSeries> | null;\n\n  /**\n   * The chart's brush component.\n   */\n  brush: ReactElement<ChartBrushProps, typeof ChartBrush> | null;\n\n  /**\n   * The chart's zoom pan component.\n   */\n  zoomPan: ReactElement<ChartZoomPanProps, typeof ChartZoomPan> | null;\n\n  /**\n   * Any secondary axis components. Useful for multi-axis charts.\n   */\n  secondaryAxis?: ReactElement<LinearAxisProps, typeof LinearAxis>[];\n}\n\nexport const ScatterPlot: FC<Partial<ScatterPlotProps>> = ({\n  id,\n  width,\n  height,\n  margins,\n  className,\n  series = <ScatterSeries />,\n  xAxis = <LinearXAxis type=\"time\" />,\n  yAxis = <LinearYAxis type=\"value\" />,\n  data = [],\n  gridlines = <GridlineSeries />,\n  containerClassName,\n  brush = null,\n  zoomPan = null,\n  secondaryAxis\n}) => {\n  const xAxisProps = useMemo(\n    () => ({ ...LINEAR_X_AXIS_DEFAULT_PROPS, ...xAxis.props }),\n    [xAxis.props]\n  );\n  const yAxisProps = useMemo(\n    () => ({ ...LINEAR_Y_AXIS_DEFAULT_PROPS, ...yAxis.props }),\n    [yAxis.props]\n  );\n  const zoomControlled = useMemo(\n    () =>\n      // eslint-disable-next-line\n      !zoomPan?.props?.domain?.hasOwnProperty('domain'),\n    [zoomPan]\n  );\n\n  const timeout = useRef<any | null>(null);\n  const [preventAnimation, setPreventAnimation] = useState<boolean>(false);\n  const [zoomDomain, setZoomDomain] = useState<\n    [ChartDataTypes, ChartDataTypes] | null\n  >(null);\n  const [isZoomed, setIsZoomed] = useState<boolean>(false);\n  const aggregatedData = useMemo(() => buildShallowChartData(data), [data]);\n\n  const getScales = useCallback(\n    (chartHeight: number, chartWidth: number) => {\n      const yScale = getYScale({\n        roundDomains: yAxisProps.roundDomains,\n        type: yAxisProps.type,\n        height: chartHeight,\n        data: aggregatedData,\n        domain: yAxisProps.domain\n      });\n\n      const xScale = getXScale({\n        width: chartWidth,\n        type: xAxisProps.type,\n        roundDomains: xAxisProps.roundDomains,\n        data: aggregatedData,\n        domain: zoomDomain || xAxisProps.domain\n      });\n\n      return {\n        yScale,\n        xScale\n      };\n    },\n    [yAxisProps, xAxisProps, aggregatedData, zoomDomain]\n  );\n\n  const onZoomPan = useCallback(\n    (event: ZoomPanChangeEvent) => {\n      if (zoomControlled) {\n        setPreventAnimation(true);\n        setZoomDomain(event.domain);\n        setIsZoomed(event.isZoomed);\n\n        clearTimeout(timeout.current);\n        timeout.current = setTimeout(() => setPreventAnimation(true), 500);\n      }\n    },\n    [zoomControlled]\n  );\n\n  const renderChart = useCallback(\n    ({\n      chartHeight,\n      chartWidth,\n      id,\n      updateAxes,\n      chartSized\n    }: ChartContainerChildProps) => {\n      const { yScale, xScale } = getScales(chartHeight, chartWidth);\n      const animated =\n        preventAnimation === true ? false : series.props.animated;\n      const disableBrush = aggregatedData.length <= 1;\n\n      return (\n        <Fragment>\n          {chartSized && gridlines && (\n            <CloneElement<GridlineSeriesProps>\n              element={gridlines}\n              height={chartHeight}\n              width={chartWidth}\n              yScale={yScale}\n              xScale={xScale}\n              yAxis={yAxisProps}\n              xAxis={xAxisProps}\n            />\n          )}\n          <CloneElement<LinearAxisProps>\n            element={xAxis}\n            height={chartHeight}\n            width={chartWidth}\n            scale={xScale}\n            visibility={chartSized ? 'visible' : 'hidden'}\n            onDimensionsChange={(e) => updateAxes('horizontal', e)}\n          />\n          <CloneElement<LinearAxisProps>\n            element={yAxis}\n            height={chartHeight}\n            width={chartWidth}\n            scale={yScale}\n            visibility={chartSized ? 'visible' : 'hidden'}\n            onDimensionsChange={(e) => updateAxes('vertical', e)}\n          />\n          {secondaryAxis &&\n            secondaryAxis.map((axis, i) => (\n              <CloneElement<LinearAxisProps>\n                key={i}\n                element={axis}\n                height={chartHeight}\n                width={chartWidth}\n                visibility={chartSized ? 'visible' : 'hidden'}\n                onDimensionsChange={(e) => updateAxes('horizontal', e)}\n              />\n            ))}\n          {chartSized && (\n            <CloneElement<ChartBrushProps>\n              disabled={disableBrush}\n              element={brush}\n              height={chartHeight}\n              width={chartWidth}\n              scale={xScale}\n            >\n              <CloneElement<ChartZoomPanProps>\n                element={zoomPan}\n                onZoomPan={onZoomPan}\n                height={chartHeight}\n                width={chartWidth}\n                axisType={xAxis.props.type}\n                roundDomains={xAxis.props.roundDomains}\n                data={aggregatedData}\n                domain={zoomDomain}\n              >\n                <CloneElement<ScatterSeriesProps>\n                  element={series}\n                  id={`area-series-${id}`}\n                  data={aggregatedData}\n                  height={chartHeight}\n                  width={chartWidth}\n                  yScale={yScale}\n                  xScale={xScale}\n                  isZoomed={isZoomed}\n                  animated={animated}\n                />\n              </CloneElement>\n            </CloneElement>\n          )}\n        </Fragment>\n      );\n    },\n    [\n      getScales,\n      preventAnimation,\n      series,\n      gridlines,\n      yAxis,\n      xAxis,\n      xAxisProps,\n      yAxisProps,\n      secondaryAxis,\n      brush,\n      zoomPan,\n      onZoomPan,\n      aggregatedData,\n      zoomDomain,\n      isZoomed\n    ]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      height={height}\n      containerClassName={containerClassName}\n      margins={margins}\n      xAxisVisible={isAxisVisible(xAxisProps)}\n      yAxisVisible={isAxisVisible(yAxisProps)}\n      className={classNames(css.scatterPlot, className)}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n","import React, { FC, ReactElement, useCallback } from 'react';\nimport { ChartInternalShallowDataShape } from '@/common/data';\nimport { CloneElement } from 'reablocks';\nimport { ScatterPoint, ScatterSeries, ScatterPointProps } from '@/ScatterPlot';\nimport css from './PointSeries.module.css';\nimport isEqual from 'react-fast-compare';\nimport { mergeDefaultProps } from '@/common';\n\nexport interface PointSeriesProps {\n  /**\n   * Determines if the points should be animated or not.\n   */\n  animated: boolean;\n\n  /**\n   * The color of the points.\n   */\n  color: any;\n\n  /**\n   * The active values for the points.\n   */\n  activeValues?: any;\n\n  /**\n   * The data for the points.\n   */\n  data: ChartInternalShallowDataShape[];\n\n  /**\n   * The y-scale for the points.\n   */\n  yScale: any;\n\n  /**\n   * The x-scale for the points.\n   */\n  xScale: any;\n\n  /**\n   * The unique identifier for the points.\n   */\n  id: string;\n\n  /**\n   * The height of the points.\n   */\n  height: number;\n\n  /**\n   * The width of the points.\n   */\n  width: number;\n\n  /**\n   * Determines when the points should be shown. Can be a boolean or one of the following strings: 'hover', 'first', 'last'.\n   */\n  show: boolean | 'hover' | 'first' | 'last';\n\n  /**\n   * The point element.\n   */\n  point: ReactElement<ScatterPointProps, typeof ScatterPoint>;\n\n  /**\n   * The index of the points.\n   */\n  index: number;\n}\n\nexport const PointSeries: FC<Partial<PointSeriesProps>> = (props) => {\n  const {\n    data,\n    xScale,\n    yScale,\n    animated,\n    point,\n    color,\n    height,\n    width,\n    id,\n    activeValues,\n    show\n  } = mergeDefaultProps(POINT_SERIES_DEFAULT_PROPS, props);\n\n  const getIsVisible = useCallback(\n    (point: ChartInternalShallowDataShape, index: number): boolean => {\n      const isActive =\n        activeValues && point && isEqual(activeValues.x, point.x);\n\n      if (show === 'hover') {\n        return isActive;\n      } else if (show === 'first') {\n        if (activeValues) {\n          return isActive;\n        } else {\n          return index === 0;\n        }\n      } else if (show === 'last') {\n        if (activeValues) {\n          return isActive;\n        } else {\n          return index === data.length - 1;\n        }\n      }\n\n      return Boolean(show);\n    },\n    [activeValues, data.length, show]\n  );\n\n  return (\n    <ScatterSeries\n      height={height}\n      width={width}\n      id={id}\n      animated={animated}\n      data={data}\n      xScale={xScale}\n      yScale={yScale}\n      point={\n        <CloneElement<ScatterPointProps>\n          element={point}\n          color={color}\n          className={css.point}\n          size={4}\n          tooltip={null}\n          visible={getIsVisible}\n        />\n      }\n    />\n  );\n};\n\nexport const POINT_SERIES_DEFAULT_PROPS: Partial<PointSeriesProps> = {\n  show: 'hover',\n  point: <ScatterPoint />\n};\n","import React, { Fragment, useMemo, ReactElement, FC, useCallback } from 'react';\nimport { area } from 'd3-shape';\nimport { Gradient, GradientProps } from '@/common/Gradient';\nimport { Mask, MaskProps } from '@/common/Mask';\nimport { interpolate, InterpolationTypes } from '@/common/utils/interpolation';\nimport {\n  ChartInternalDataShape,\n  ChartInternalShallowDataShape\n} from '@/common/data';\nimport { CloneElement } from 'reablocks';\nimport {\n  constructFunctionProps,\n  PropFunctionTypes\n} from '@/common/utils/functions';\nimport { MotionPath, DEFAULT_TRANSITION } from '@/common/Motion';\nimport { generateGlowStyles } from '@/common/Glow/utils';\nimport { Glow, mergeDefaultProps, roundDecimals } from '@/common';\n\nexport interface AreaProps extends PropFunctionTypes {\n  /**\n   * Id set internally by `AreaSeries`.\n   */\n  id: string;\n\n  /**\n   * Parsed data shape. Set internally by `AreaChart`.\n   */\n  data: ChartInternalDataShape[];\n\n  /**\n   * Interpolation for the area. Set internally by `AreaSeries`.\n   */\n  interpolation: InterpolationTypes;\n\n  /**\n   * Color for the area. Set internally by `AreaSeries`.\n   */\n  color: any;\n\n  /**\n   * D3 scale for X Axis. Set internally by `AreaChart`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `AreaChart`.\n   */\n  yScale: any;\n\n  /**\n   * Index of the area in the series. Set internally by `AreaSeries`.\n   */\n  index: number;\n\n  /**\n   * Total number of areas in the series. Set internally by `AreaSeries`.\n   */\n  total: number;\n\n  /**\n   * Whether to animate the enter/update/exit. Set internally by `AreaSeries`.\n   */\n  animated: boolean;\n\n  /**\n   * Mask to apply to the area.\n   */\n  mask: ReactElement<MaskProps, typeof Mask> | null;\n\n  /**\n   * Gradient to apply to the area.\n   */\n  gradient: ReactElement<GradientProps, typeof Gradient> | null;\n\n  /**\n   * Glow to apply to the area.\n   */\n  glow?: Glow;\n\n  /**\n   * Pointer events to manage the area events.\n   * @default 'none'\n   */\n  pointerEvents: string;\n}\n\nexport const Area: FC<Partial<AreaProps>> = (props) => {\n  const {\n    id,\n    gradient,\n    glow,\n    mask,\n    data,\n    color,\n    index,\n    total,\n    xScale,\n    yScale,\n    animated,\n    interpolation,\n    pointerEvents = 'none',\n    ...rest\n  } = mergeDefaultProps(AREA_DEFAULT_PROPS, props);\n\n  const stroke = color(data, index);\n\n  const coords = useMemo(() => {\n    return data.map((item: any) => ({\n      x: xScale(item.x),\n      x1: xScale(item.x) - xScale(item.x1),\n      y: yScale(item.y),\n      y0: yScale(item.y0),\n      y1: yScale(item.y1)\n    })) as ChartInternalShallowDataShape[];\n  }, [data, xScale, yScale]);\n\n  const getAreaPath = useCallback(\n    (d: ChartInternalShallowDataShape[]) => {\n      // If the input data is a single value and this is the only\n      // area in a series, fill the available space with an area:\n      if (d.length === 1 && total === 1) {\n        const [point] = d;\n        // Assume the single data point's `x` value\n        // is the middle of the graph:\n        const midpoint = roundDecimals(point.x as number);\n        d = [{ ...point }, { ...point }];\n        const [start, end] = d;\n        start.x = 0;\n        end.x = midpoint * 2;\n      }\n\n      const fn = area()\n        .x((d: any) => roundDecimals(d.x))\n        .y0((d: any) => roundDecimals(d.y0))\n        .y1((d: any) => roundDecimals(d.y1))\n        .curve(interpolate(interpolation as InterpolationTypes));\n\n      return fn(d as any);\n    },\n    [interpolation, total]\n  );\n\n  const enter = useMemo(() => {\n    const areaPath = getAreaPath(coords);\n\n    return {\n      d: areaPath === null ? undefined : areaPath\n    };\n  }, [coords, getAreaPath]);\n\n  const exit = useMemo(() => {\n    const maxY = Math.max(...yScale.range());\n    const coords = data.map((item: any) => ({\n      x: xScale(item.x),\n      x1: 0,\n      y: 0,\n      y1: maxY,\n      y0: maxY\n    })) as ChartInternalShallowDataShape[];\n\n    const areaPath = getAreaPath(coords);\n\n    return {\n      d: areaPath === null ? undefined : areaPath\n    };\n  }, [data, getAreaPath, xScale, yScale]);\n\n  const fill = useMemo(() => {\n    if (mask) {\n      return `url(#mask-pattern-${id})`;\n    } else {\n      if (gradient) {\n        return `url(#gradient-${id})`;\n      }\n\n      return '';\n    }\n  }, [gradient, id, mask]);\n\n  const transition = useMemo(() => {\n    if (animated) {\n      return {\n        ...DEFAULT_TRANSITION,\n        delay: index * 0.05\n      };\n    } else {\n      return {\n        type: false,\n        delay: 0\n      };\n    }\n  }, [animated, index]);\n\n  const renderArea = useCallback(() => {\n    const maskPath = mask ? `url(#mask-${id})` : '';\n    const extras = constructFunctionProps(rest, data);\n\n    return (\n      <MotionPath\n        {...extras}\n        pointerEvents={pointerEvents}\n        mask={maskPath}\n        fill={fill}\n        transition={transition}\n        custom={{\n          enter,\n          exit\n        }}\n        style={{\n          ...extras.style,\n          ...generateGlowStyles({ glow, colorSchemeColor: stroke })\n        }}\n      />\n    );\n  }, [\n    data,\n    enter,\n    exit,\n    fill,\n    glow,\n    id,\n    mask,\n    rest,\n    stroke,\n    transition,\n    pointerEvents\n  ]);\n\n  return (\n    <Fragment>\n      {renderArea()}\n      {mask && (\n        <Fragment>\n          <Mask id={`mask-${id}`} fill={`url(#gradient-${id})`} />\n          <CloneElement<MaskProps>\n            element={mask}\n            id={`mask-pattern-${id}`}\n            fill={stroke}\n          />\n        </Fragment>\n      )}\n      {gradient && (\n        <CloneElement<GradientProps>\n          element={gradient}\n          id={`gradient-${id}`}\n          color={stroke}\n        />\n      )}\n    </Fragment>\n  );\n};\n\nexport const AREA_DEFAULT_PROPS: Partial<AreaProps> = {\n  gradient: <Gradient />,\n  interpolation: 'linear'\n};\n","import React, {\n  FC,\n  Fragment,\n  ReactElement,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState\n} from 'react';\nimport { line } from 'd3-shape';\nimport { interpolate, InterpolationTypes } from '@/common/utils/interpolation';\nimport {\n  ChartInternalDataShape,\n  ChartInternalShallowDataShape\n} from '@/common/data';\nimport { calculateShowStroke } from '@/common/utils/stroke';\nimport {\n  constructFunctionProps,\n  PropFunctionTypes\n} from '@/common/utils/functions';\nimport { MotionPath, DEFAULT_TRANSITION } from '@/common/Motion';\nimport { Glow, Gradient, GradientProps, roundDecimals } from '@/common';\nimport { generateGlowStyles } from '@/common/Glow/utils';\nimport { CloneElement } from 'reablocks';\n\nexport interface LineProps extends PropFunctionTypes {\n  /**\n   * Id set internally by `AreaChart`.\n   */\n  id: string;\n\n  /**\n   * Parsed data shape. Set internally by `AreaChart`.\n   */\n  data: ChartInternalDataShape[];\n\n  /**\n   * Width of the chart. Set internally by `AreaChart`.\n   */\n  width: number;\n\n  /**\n   * Interpolation for the area. Set internally by `AreaSeries`.\n   */\n  interpolation: InterpolationTypes;\n\n  /**\n   * Color for the area. Set internally by `AreaSeries`.\n   */\n  color: any;\n\n  /**\n   * D3 scale for X Axis. Set internally by `AreaChart`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `AreaChart`.\n   */\n  yScale: any;\n\n  /**\n   * Index of the area in the series. Set internally by `AreaSeries`.\n   */\n  index: number;\n\n  /**\n   * Whether to animate the enter/update/exit. Set internally by `AreaSeries`.\n   */\n  animated: boolean;\n\n  /**\n   * Stroke width of the line.\n   */\n  strokeWidth: number;\n\n  /**\n   * Show the stroke if there is no value.\n   */\n  showZeroStroke: boolean;\n\n  /**\n   * Internal property to identify if there is a area or not.\n   */\n  hasArea: boolean;\n\n  /**\n   * Gradient to apply to the line.\n   */\n  gradient: ReactElement<GradientProps, typeof Gradient> | null;\n\n  /**\n   * Glow to apply to the line.\n   */\n  glow?: Glow;\n}\n\nexport const Line: FC<Partial<LineProps>> = ({\n  id,\n  width,\n  data,\n  color,\n  index,\n  strokeWidth = 3,\n  hasArea,\n  animated,\n  yScale,\n  xScale,\n  showZeroStroke = true,\n  interpolation,\n  gradient,\n  glow,\n  ...rest\n}) => {\n  const [pathLength, setPathLength] = useState<number | null>(null);\n  const ghostPathRef = useRef<SVGPathElement | null>(null);\n\n  useEffect(() => {\n    if (ghostPathRef.current) {\n      setPathLength(roundDecimals(ghostPathRef.current.getTotalLength()));\n    }\n  }, [data, xScale, yScale, width]);\n\n  const getLinePath = useCallback(\n    (point: ChartInternalShallowDataShape[]) => {\n      const fn = line()\n        .x((d: any) => roundDecimals(d.x))\n        .y((d: any) => roundDecimals(d.y1))\n        .defined((d: any) => showZeroStroke || calculateShowStroke(d, point))\n        .curve(interpolate(interpolation));\n\n      return fn(point as any);\n    },\n    [interpolation, showZeroStroke]\n  );\n\n  const transition = useMemo(() => {\n    if (animated) {\n      return {\n        ...DEFAULT_TRANSITION,\n        delay: hasArea ? 0 : index * 0.05\n      };\n    } else {\n      return {\n        type: false,\n        delay: 0\n      };\n    }\n  }, [animated, hasArea, index]);\n\n  const coords = useMemo(() => {\n    return data.map((item: any) => ({\n      x: xScale(item.x),\n      x1: xScale(item.x) - xScale(item.x1),\n      y: yScale(item.y),\n      y0: yScale(item.y0),\n      y1: yScale(item.y1)\n    })) as ChartInternalShallowDataShape[];\n  }, [data, xScale, yScale]);\n\n  const enter = useMemo(() => {\n    const linePath = getLinePath(coords);\n\n    let strokeDasharray = '';\n    if (!hasArea && pathLength !== null) {\n      strokeDasharray = `${pathLength} ${pathLength}`;\n    }\n\n    return {\n      d: linePath === null ? undefined : linePath,\n      strokeDashoffset: 0,\n      strokeDasharray: strokeDasharray\n    };\n  }, [coords, getLinePath, hasArea, pathLength]);\n\n  const exit = useMemo(() => {\n    let newCoords = coords;\n    if (hasArea) {\n      const maxY = Math.max(...yScale.range());\n      newCoords = data.map((item: any) => ({\n        x: xScale(item.x),\n        x1: 0,\n        y: maxY,\n        y1: maxY,\n        y0: maxY\n      })) as ChartInternalShallowDataShape[];\n    }\n\n    const linePath = getLinePath(newCoords);\n\n    let strokeDasharray = '';\n    let strokeDashoffset = 0;\n    if (!hasArea && pathLength !== null) {\n      strokeDasharray = `${pathLength} ${pathLength}`;\n      strokeDashoffset = pathLength;\n    }\n\n    return {\n      d: linePath === null ? undefined : linePath,\n      strokeDasharray,\n      strokeDashoffset\n    };\n  }, [coords, data, getLinePath, hasArea, pathLength, xScale, yScale]);\n\n  const stroke = color(data, index);\n  const extras = constructFunctionProps(rest, data);\n  const showLine = hasArea || pathLength !== null;\n\n  const strokeFill = useMemo(() => {\n    if (gradient) {\n      return `url(#gradient-${id})`;\n    }\n    return stroke;\n  }, [gradient, id]);\n\n  // framer-motion freaks out when these are added for area\n  if (hasArea) {\n    delete enter.strokeDashoffset;\n    delete exit.strokeDashoffset;\n  }\n\n  return (\n    <Fragment>\n      {showLine && (\n        <MotionPath\n          {...extras}\n          pointerEvents=\"none\"\n          stroke={strokeFill}\n          strokeWidth={strokeWidth}\n          fill=\"none\"\n          transition={transition}\n          custom={{\n            enter,\n            exit\n          }}\n          style={{\n            ...extras.style,\n            ...generateGlowStyles({ glow, colorSchemeColor: strokeFill })\n          }}\n        />\n      )}\n      {!hasArea && (\n        <path opacity=\"0\" d={enter.d} ref={ghostPathRef} pointerEvents=\"none\" />\n      )}\n      {gradient && (\n        <CloneElement<GradientProps>\n          element={gradient}\n          id={`gradient-${id}`}\n          color={stroke}\n        />\n      )}\n    </Fragment>\n  );\n};\n","import React, {\n  Fragment,\n  ReactElement,\n  FC,\n  useCallback,\n  useState,\n  useMemo\n} from 'react';\nimport {\n  POINT_SERIES_DEFAULT_PROPS,\n  PointSeries,\n  PointSeriesProps\n} from './PointSeries';\nimport { Area, AreaProps } from './Area';\nimport { MarkLine, MarkLineProps } from '@/common/MarkLine';\nimport {\n  ChartInternalDataShape,\n  ChartInternalNestedDataShape,\n  ChartInternalShallowDataShape\n} from '@/common/data';\nimport { CloneElement } from 'reablocks';\nimport {\n  TooltipArea,\n  TooltipAreaProps,\n  TooltipAreaEvent\n} from '@/common/Tooltip';\nimport { Line, LineProps } from './Line';\nimport { InterpolationTypes } from '@/common/utils/interpolation';\nimport { getColor, ColorSchemeType } from '@/common/color';\nimport { identifier } from 'safe-identifier';\nimport {\n  LinearValueMarker,\n  LinearValueMarkerProps,\n  mergeDefaultProps\n} from '@/common';\n\nexport type AreaChartTypes =\n  | 'standard'\n  | 'grouped'\n  | 'stacked'\n  | 'stackedNormalized';\n\nexport interface AreaSeriesProps {\n  /**\n   * Id set internally by `AreaChart`.\n   */\n  id: string;\n\n  /**\n   * D3 scale for X Axis. Set internally by `AreaChart`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `AreaChart`.\n   */\n  yScale: any;\n\n  /**\n   * Parsed data shape. Set internally by `AreaChart`.\n   */\n  data: ChartInternalDataShape[];\n\n  /**\n   * Height of the chart. Set internally by `AreaChart`.\n   */\n  height: number;\n\n  /**\n   * Width of the chart. Set internally by `AreaChart`.\n   */\n  width: number;\n\n  /**\n   * Whether to animate the enter/update/exit.\n   */\n  animated: boolean;\n\n  /**\n   * Type of area chart to render.\n   */\n  type: AreaChartTypes;\n\n  /**\n   * Interpolation type for the area/line.\n   */\n  interpolation: InterpolationTypes;\n\n  /**\n   * Tooltip for the chart area.\n   */\n  tooltip: ReactElement<TooltipAreaProps, typeof TooltipArea>;\n\n  /**\n   * Markline for the chart.\n   */\n  markLine: ReactElement<MarkLineProps, typeof MarkLine> | null;\n\n  /**\n   * Symbols used to show points.\n   */\n  symbols: ReactElement<PointSeriesProps, typeof PointSeries> | null;\n\n  /**\n   * Line that is rendered.\n   */\n  line: ReactElement<LineProps, typeof Line> | null;\n\n  /**\n   * Area that is rendered.\n   */\n  area: ReactElement<AreaProps, typeof Area> | null;\n\n  /**\n   * Color scheme for the series.\n   */\n  colorScheme: ColorSchemeType;\n\n  /**\n   * Whether the chart has been zoomed or not. Set internally by `AreaChart`.\n   */\n  isZoomed: boolean;\n\n  /**\n   * Value markers line for the chart.\n   */\n  valueMarkers:\n    | ReactElement<LinearValueMarkerProps, typeof LinearValueMarker>[]\n    | null;\n}\n\n// For area charts, often symbols exceed the area\n// and we want to add a little bit of padding to prevent clipping\nconst PADDING = 25;\nconst HALF_PADDING = PADDING / 2;\n\nexport const AreaSeries: FC<Partial<AreaSeriesProps>> = (props) => {\n  const {\n    data,\n    height,\n    id,\n    width,\n    isZoomed,\n    tooltip,\n    xScale,\n    yScale,\n    type,\n    markLine,\n    symbols,\n    animated,\n    area,\n    interpolation,\n    line,\n    colorScheme,\n    valueMarkers\n  } = mergeDefaultProps(AREA_SERIES_DEFAULT_PROPS, props);\n\n  const symbolsProps = useMemo(\n    () => ({\n      ...POINT_SERIES_DEFAULT_PROPS,\n      ...(symbols?.props ?? {})\n    }),\n    [symbols]\n  );\n\n  const [activeValues, setActiveValues] = useState<any | null>(null);\n  const [activePoint, setActivePoint] = useState<any | null>(null);\n\n  const onValueEnter = useCallback((event: TooltipAreaEvent) => {\n    setActivePoint(event.pointX);\n    setActiveValues(event.value);\n  }, []);\n\n  const onValueLeave = useCallback(() => {\n    setActivePoint(undefined);\n    setActiveValues(undefined);\n  }, []);\n\n  const isMulti =\n    type === 'grouped' || type === 'stacked' || type === 'stackedNormalized';\n\n  const getPointColor = useCallback(\n    (point, index: number) => {\n      const key = Array.isArray(point) ? point?.[0]?.key : point?.key;\n\n      return getColor({\n        data,\n        colorScheme,\n        active: activeValues,\n        point,\n        index,\n        key\n      });\n    },\n    [activeValues, colorScheme, data]\n  );\n\n  const renderArea = useCallback(\n    (data: ChartInternalShallowDataShape[], index = 0, total = 1) => (\n      <Fragment>\n        {line && (\n          <CloneElement<LineProps>\n            element={line}\n            xScale={xScale}\n            yScale={yScale}\n            data={data}\n            width={width}\n            index={index}\n            hasArea={area !== null}\n            animated={animated}\n            interpolation={interpolation as InterpolationTypes}\n            color={getPointColor}\n          />\n        )}\n        {area && (\n          <CloneElement<AreaProps>\n            element={area}\n            id={`${id}-area-${index}`}\n            xScale={xScale}\n            yScale={yScale}\n            data={data}\n            index={index}\n            total={total}\n            animated={animated}\n            interpolation={interpolation as InterpolationTypes}\n            color={getPointColor}\n          />\n        )}\n      </Fragment>\n    ),\n    [\n      animated,\n      area,\n      getPointColor,\n      id,\n      interpolation,\n      line,\n      width,\n      xScale,\n      yScale\n    ]\n  );\n\n  const renderSymbols = useCallback(\n    (data: ChartInternalShallowDataShape[], index = 0) => {\n      const visible = symbols !== null;\n      const activeSymbols =\n        (symbols && symbolsProps.activeValues) || activeValues;\n\n      // Animations are only valid for Area\n      const isAnimated = area !== undefined && animated && !activeSymbols;\n\n      return (\n        <Fragment>\n          {visible && (\n            <CloneElement<PointSeriesProps>\n              element={symbols}\n              key={`point-series-${id}`}\n              id={id}\n              height={height}\n              width={width}\n              activeValues={activeSymbols}\n              xScale={xScale}\n              yScale={yScale}\n              index={index}\n              data={data}\n              animated={isAnimated}\n              color={() => getPointColor(data, index)}\n            />\n          )}\n        </Fragment>\n      );\n    },\n    [\n      activeValues,\n      animated,\n      area,\n      getPointColor,\n      height,\n      id,\n      symbols,\n      width,\n      xScale,\n      yScale\n    ]\n  );\n\n  const renderMarkLine = useCallback(\n    () => (\n      <>\n        {activeValues && markLine && (\n          <CloneElement<MarkLineProps>\n            element={markLine}\n            height={height}\n            pointX={activePoint}\n          />\n        )}\n      </>\n    ),\n    [activePoint, activeValues, height, markLine]\n  );\n\n  const renderSingleSeries = useCallback(\n    (data: ChartInternalShallowDataShape[]) => (\n      <Fragment>\n        {renderArea(data)}\n        {renderMarkLine()}\n        {renderSymbols(data)}\n      </Fragment>\n    ),\n    [renderArea, renderMarkLine, renderSymbols]\n  );\n\n  const renderMultiSeries = useCallback(\n    (data: ChartInternalNestedDataShape[]) => (\n      <Fragment>\n        {data\n          .map((point, index) => (\n            <Fragment key={identifier(`${point.key}`)}>\n              {renderArea(point.data, index, data.length)}\n            </Fragment>\n          ))\n          .reverse()}\n        {renderMarkLine()}\n        {data\n          .map((point, index) => (\n            <Fragment key={identifier(`${point.key}`)}>\n              {renderSymbols(point.data, index)}\n            </Fragment>\n          ))\n          .reverse()}\n      </Fragment>\n    ),\n    [renderArea, renderMarkLine, renderSymbols]\n  );\n\n  const renderValueMarkers = useCallback(\n    () => (\n      <>\n        {valueMarkers?.length &&\n          valueMarkers.map((marker) => {\n            const isVertical = marker?.props?.direction === 'vertical';\n            const size = isVertical ? height : width;\n            const value = isVertical\n              ? xScale(marker.props.value)\n              : yScale(marker.props.value);\n            return (\n              <CloneElement<LinearValueMarkerProps>\n                key={marker.key}\n                element={marker}\n                size={size}\n                value={value}\n              />\n            );\n          })}\n      </>\n    ),\n    [valueMarkers, width, yScale, xScale, height]\n  );\n\n  return (\n    <Fragment>\n      <defs>\n        <clipPath id={`${id}-path`}>\n          <rect\n            width={isZoomed ? width : width + PADDING}\n            height={height + PADDING}\n            x={isZoomed ? 0 : -HALF_PADDING}\n            y={-HALF_PADDING}\n          />\n        </clipPath>\n      </defs>\n      <CloneElement<TooltipAreaProps>\n        element={tooltip}\n        xScale={xScale}\n        yScale={yScale}\n        data={data}\n        height={height}\n        width={width}\n        color={getPointColor}\n        onValueEnter={onValueEnter}\n        onValueLeave={onValueLeave}\n      >\n        <g clipPath={`url(#${id}-path)`}>\n          {isMulti && renderMultiSeries(data as ChartInternalNestedDataShape[])}\n          {!isMulti &&\n            renderSingleSeries(data as ChartInternalShallowDataShape[])}\n          {renderValueMarkers()}\n        </g>\n      </CloneElement>\n    </Fragment>\n  );\n};\n\nexport const AREA_SERIES_DEFAULT_PROPS: Partial<AreaSeriesProps> = {\n  colorScheme: 'cybertron',\n  animated: true,\n  interpolation: 'linear',\n  type: 'standard',\n  line: <Line />,\n  area: <Area />,\n  markLine: <MarkLine />,\n  tooltip: <TooltipArea />,\n  symbols: <PointSeries />\n};\n","import React, { FC, useMemo } from 'react';\nimport {\n  AreaSeriesProps,\n  AreaSeries,\n  AREA_SERIES_DEFAULT_PROPS\n} from './AreaSeries';\nimport { formatValue } from '@/common/utils/formatting';\nimport { TooltipTemplate, TooltipArea, ChartTooltip } from '@/common/Tooltip';\nimport { CloneElement } from 'reablocks';\nimport { POINT_SERIES_DEFAULT_PROPS, PointSeriesProps } from './PointSeries';\nimport { ScatterPointProps } from '@/ScatterPlot';\nimport { InterpolationTypes } from '@/common';\n\nexport const StackedNormalizedAreaSeries: FC<Partial<AreaSeriesProps>> = (\n  props\n) => {\n  const { interpolation, symbols, ...rest } = {\n    ...AREA_SERIES_DEFAULT_PROPS,\n    ...props\n  };\n\n  const symbolsProps = useMemo(\n    () => ({\n      ...POINT_SERIES_DEFAULT_PROPS,\n      ...symbols?.props\n    }),\n    [symbols]\n  );\n\n  return (\n    <AreaSeries\n      {...rest}\n      interpolation={interpolation as InterpolationTypes}\n      type=\"stackedNormalized\"\n      symbols={\n        symbols && (\n          <CloneElement<PointSeriesProps>\n            element={symbols}\n            {...symbols.props}\n            point={\n              <CloneElement<ScatterPointProps>\n                element={symbolsProps.point}\n                {...symbolsProps.point.props}\n                tooltip={null}\n              />\n            }\n          />\n        )\n      }\n      tooltip={\n        <TooltipArea\n          tooltip={\n            <ChartTooltip\n              content={(series, color) => {\n                if (!series) {\n                  return null;\n                }\n\n                const value = {\n                  ...series,\n                  data: series.data.map((d) => ({\n                    ...d,\n                    value: `${formatValue(d.value)} ∙ ${formatValue(\n                      Math.floor((d.y1 - d.y0) * 100)\n                    )}%`\n                  }))\n                };\n\n                return <TooltipTemplate color={color} value={value} />;\n              }}\n            />\n          }\n        />\n      }\n    />\n  );\n};\n","import React, { FC, useMemo } from 'react';\nimport {\n  AreaSeriesProps,\n  AreaSeries,\n  AREA_SERIES_DEFAULT_PROPS\n} from './AreaSeries';\nimport { CloneElement } from 'reablocks';\nimport { POINT_SERIES_DEFAULT_PROPS, PointSeriesProps } from './PointSeries';\nimport { SCATTER_POINT_DEFAULT_PROPS, ScatterPointProps } from '@/ScatterPlot';\nimport { InterpolationTypes } from '@/common';\n\nexport const StackedAreaSeries: FC<Partial<AreaSeriesProps>> = (props) => {\n  const { symbols, interpolation, ...rest } = {\n    ...AREA_SERIES_DEFAULT_PROPS,\n    ...props\n  };\n\n  const symbolsProps = useMemo(\n    () => ({\n      ...POINT_SERIES_DEFAULT_PROPS,\n      ...symbols?.props\n    }),\n    [symbols]\n  );\n\n  const pointProps = useMemo(\n    () => ({\n      ...SCATTER_POINT_DEFAULT_PROPS,\n      ...symbolsProps.point?.props\n    }),\n    [symbolsProps]\n  );\n\n  return (\n    <AreaSeries\n      {...rest}\n      interpolation={interpolation as InterpolationTypes}\n      type=\"stacked\"\n      symbols={\n        symbols && (\n          <CloneElement<PointSeriesProps>\n            element={symbols}\n            {...symbolsProps}\n            point={\n              <CloneElement<ScatterPointProps>\n                element={symbolsProps.point}\n                {...pointProps}\n                tooltip={null}\n              />\n            }\n          />\n        )\n      }\n    />\n  );\n};\n","import React, {\n  Fragment,\n  useEffect,\n  ReactElement,\n  FC,\n  useCallback,\n  useMemo,\n  useState,\n  useRef\n} from 'react';\nimport classNames from 'classnames';\nimport {\n  AREA_SERIES_DEFAULT_PROPS,\n  AreaSeries,\n  AreaSeriesProps\n} from './AreaSeries';\nimport {\n  isAxisVisible,\n  LinearAxisProps,\n  LinearXAxis,\n  LinearYAxis,\n  LinearAxis,\n  LINEAR_Y_AXIS_DEFAULT_PROPS,\n  LINEAR_X_AXIS_DEFAULT_PROPS\n} from '@/common/Axis/LinearAxis';\nimport { getXScale, getYScale } from '@/common/scales';\nimport { GridlineSeries, GridlineSeriesProps } from '@/common/Gridline';\nimport {\n  ChartDataShape,\n  ChartNestedDataShape,\n  buildStackData,\n  buildShallowChartData,\n  ChartShallowDataShape,\n  buildNestedChartData\n} from '@/common/data';\nimport css from './AreaChart.module.css';\nimport { ChartBrushProps, ChartBrush } from '@/common/Brush';\nimport {\n  ZoomPanChangeEvent,\n  ChartZoomPanProps,\n  ChartZoomPan\n} from '@/common/ZoomPan';\nimport {\n  ChartContainerChildProps,\n  ChartContainer,\n  ChartProps\n} from '@/common/containers/ChartContainer';\nimport { CloneElement } from 'reablocks';\nimport { mergeDefaultProps } from '@/common';\n\nexport interface AreaChartProps extends ChartProps {\n  /**\n   * Data the chart will receive to render.\n   */\n  data: ChartDataShape[];\n\n  /**\n   * The series component that renders the area/line/circles components.\n   */\n  series: ReactElement<AreaSeriesProps, typeof AreaSeries>;\n\n  /**\n   * The linear axis component for the Y Axis of the chart.\n   */\n  yAxis: ReactElement<LinearAxisProps, typeof LinearAxis>;\n\n  /**\n   * The linear axis component for the X Axis of the chart.\n   */\n  xAxis: ReactElement<LinearAxisProps, typeof LinearAxis>;\n\n  /**\n   * The chart's background gridlines component.\n   */\n  gridlines: ReactElement<GridlineSeriesProps, typeof GridlineSeries> | null;\n\n  /**\n   * The chart's brush component.\n   */\n  brush: ReactElement<ChartBrushProps, typeof ChartBrush> | null;\n\n  /**\n   * The chart's zoom pan component.\n   */\n  zoomPan: ReactElement<ChartZoomPanProps, typeof ChartZoomPan> | null;\n\n  /**\n   * Any secondary axis components. Useful for multi-axis charts.\n   */\n  secondaryAxis?: ReactElement<LinearAxisProps, typeof LinearAxis>[];\n}\n\nexport const AreaChart: FC<Partial<AreaChartProps>> = (props) => {\n  const {\n    xAxis,\n    yAxis,\n    id,\n    data,\n    width,\n    height,\n    margins,\n    className,\n    containerClassName,\n    series,\n    gridlines,\n    brush,\n    zoomPan,\n    secondaryAxis\n  } = mergeDefaultProps(AREA_CHART_DEFAULT_PROPS, props);\n\n  const zoom: any = zoomPan ? zoomPan.props : {};\n  const [zoomDomain, setZoomDomain] = useState<any>(zoom.domain);\n  const [preventAnimation, setPreventAnimation] = useState<boolean>(false);\n  const [isZoomed, setIsZoomed] = useState<boolean>(!!zoom.domain);\n  // eslint-disable-next-line\n  const [zoomControlled] = useState<boolean>(!zoom.hasOwnProperty('domain'));\n  const xAxisProps = useMemo(\n    () => ({ ...LINEAR_X_AXIS_DEFAULT_PROPS, ...xAxis.props }),\n    [xAxis.props]\n  );\n  const yAxisProps = useMemo(\n    () => ({ ...LINEAR_Y_AXIS_DEFAULT_PROPS, ...yAxis.props }),\n    [yAxis.props]\n  );\n  const seriesProps = useMemo(\n    () => ({ ...AREA_SERIES_DEFAULT_PROPS, ...series.props }),\n    [series.props]\n  );\n\n  const timeoutRef = useRef<any | null>(null);\n\n  const seriesType = seriesProps.type;\n  const isMultiSeries =\n    seriesType === 'stacked' ||\n    seriesType === 'stackedNormalized' ||\n    seriesType === 'grouped';\n\n  const animated = preventAnimation === true ? false : seriesProps.animated;\n\n  useEffect(() => {\n    if (zoomPan) {\n      const zoom = zoomPan.props;\n      if (!zoomControlled && zoom.domain !== zoomDomain) {\n        setZoomDomain(zoom.domain);\n        setIsZoomed(!!zoom.domain);\n      }\n    }\n  }, [zoomControlled, zoomDomain, zoomPan]);\n\n  const aggregatedData = useMemo(() => {\n    if (seriesType === 'stacked' || seriesType === 'stackedNormalized') {\n      return buildStackData(\n        data as ChartNestedDataShape[],\n        seriesType === 'stackedNormalized'\n      );\n    } else if (seriesType === 'grouped') {\n      return buildNestedChartData(data as ChartNestedDataShape[], true);\n    } else {\n      return buildShallowChartData(data as ChartShallowDataShape[]);\n    }\n  }, [data, seriesType]);\n\n  const getScales = useCallback(\n    (chartWidth: number, chartHeight: number) => {\n      const xScale = getXScale({\n        width: chartWidth,\n        type: xAxisProps.type,\n        roundDomains: xAxisProps.roundDomains,\n        data: aggregatedData,\n        domain: zoomDomain || xAxisProps.domain,\n        isMultiSeries\n      });\n\n      const yScale = getYScale({\n        roundDomains: yAxisProps.roundDomains,\n        type: yAxisProps.type,\n        height: chartHeight,\n        data: aggregatedData,\n        domain: yAxisProps.domain,\n        isMultiSeries\n      });\n\n      return { xScale, yScale };\n    },\n    [\n      aggregatedData,\n      isMultiSeries,\n      xAxisProps.domain,\n      xAxisProps.roundDomains,\n      xAxisProps.type,\n      yAxisProps.domain,\n      yAxisProps.roundDomains,\n      yAxisProps.type,\n      zoomDomain\n    ]\n  );\n\n  const onZoomPan = useCallback(\n    (event: ZoomPanChangeEvent) => {\n      if (zoomControlled) {\n        setZoomDomain(event.domain);\n        setIsZoomed(event.isZoomed);\n        setPreventAnimation(true);\n\n        clearTimeout(timeoutRef.current);\n        timeoutRef.current = setTimeout(() => setPreventAnimation(false));\n      }\n    },\n    [zoomControlled]\n  );\n\n  const renderChart = useCallback(\n    ({\n      chartHeight,\n      chartWidth,\n      id,\n      updateAxes,\n      chartSized\n    }: ChartContainerChildProps) => {\n      const { xScale, yScale } = getScales(chartWidth, chartHeight);\n      const disableBrush = aggregatedData.length <= 1;\n\n      return (\n        <Fragment>\n          {chartSized && gridlines && (\n            <CloneElement<GridlineSeriesProps>\n              element={gridlines}\n              height={chartHeight}\n              width={chartWidth}\n              yScale={yScale}\n              xScale={xScale}\n              yAxis={yAxisProps}\n              xAxis={xAxisProps}\n            />\n          )}\n          <CloneElement<LinearAxisProps>\n            element={xAxis}\n            height={chartHeight}\n            width={chartWidth}\n            scale={xScale}\n            visibility={chartSized ? 'visible' : 'hidden'}\n            onDimensionsChange={(event) => updateAxes('horizontal', event)}\n          />\n          <CloneElement<LinearAxisProps>\n            element={yAxis}\n            height={chartHeight}\n            width={chartWidth}\n            scale={yScale}\n            visibility={chartSized ? 'visible' : 'hidden'}\n            onDimensionsChange={(event) => updateAxes('vertical', event)}\n          />\n          {secondaryAxis &&\n            secondaryAxis.map((axis, i) => (\n              <CloneElement<LinearAxisProps>\n                key={i}\n                element={axis}\n                height={chartHeight}\n                width={chartWidth}\n                visibility={chartSized ? 'visible' : 'hidden'}\n                onDimensionsChange={(event) => updateAxes('horizontal', event)}\n              />\n            ))}\n          {chartSized && (\n            <CloneElement<ChartBrushProps>\n              disabled={disableBrush}\n              element={brush}\n              height={chartHeight}\n              width={chartWidth}\n              scale={xScale}\n            >\n              <CloneElement<ChartZoomPanProps>\n                element={zoomPan}\n                onZoomPan={onZoomPan}\n                height={chartHeight}\n                width={chartWidth}\n                axisType={xAxisProps.type}\n                roundDomains={xAxisProps.roundDomains}\n                data={aggregatedData}\n                domain={zoomDomain}\n              >\n                <CloneElement<AreaSeriesProps>\n                  element={series}\n                  id={`area-series-${id}`}\n                  data={aggregatedData}\n                  height={chartHeight}\n                  width={chartWidth}\n                  yScale={yScale}\n                  xScale={xScale}\n                  isZoomed={isZoomed}\n                  animated={animated}\n                />\n              </CloneElement>\n            </CloneElement>\n          )}\n        </Fragment>\n      );\n    },\n    [\n      aggregatedData,\n      animated,\n      brush,\n      getScales,\n      gridlines,\n      isZoomed,\n      onZoomPan,\n      secondaryAxis,\n      series,\n      xAxis,\n      yAxis,\n      xAxisProps,\n      yAxisProps,\n      zoomDomain,\n      zoomPan\n    ]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      height={height}\n      margins={margins}\n      containerClassName={containerClassName}\n      xAxisVisible={isAxisVisible(xAxisProps)}\n      yAxisVisible={isAxisVisible(yAxisProps)}\n      className={classNames(\n        css.areaChart,\n        className,\n        series.type as unknown as string\n      )}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n\nexport const AREA_CHART_DEFAULT_PROPS = {\n  data: [],\n  xAxis: <LinearXAxis type=\"time\" />,\n  yAxis: <LinearYAxis type=\"value\" />,\n  series: <AreaSeries />,\n  gridlines: <GridlineSeries />,\n  brush: null,\n  zoomPan: null\n};\n","import React, { FC } from 'react';\nimport { AreaChart, AreaChartProps } from './AreaChart';\nimport { ChartNestedDataShape } from '@/common/data';\nimport { StackedAreaSeries } from './AreaSeries';\n\nexport interface StackedAreaChartProps extends AreaChartProps {\n  data: ChartNestedDataShape[];\n}\n\nexport const StackedAreaChart: FC<Partial<StackedAreaChartProps>> = (props) => (\n  <AreaChart\n    {...props}\n    series={<StackedAreaSeries {...props.series?.props} type=\"stacked\" />}\n  />\n);\n","import React, { FC } from 'react';\nimport { AreaChart, AreaChartProps } from './AreaChart';\nimport { ChartNestedDataShape } from '@/common/data';\nimport { StackedNormalizedAreaSeries } from './AreaSeries';\nimport {\n  LinearYAxis,\n  LinearYAxisTickSeries,\n  LinearYAxisTickLabel,\n  LINEAR_Y_AXIS_TICK_LABEL_DEFAULT_PROPS\n} from '@/common/Axis/LinearAxis';\n\nexport interface StackedNormalizedAreaChartProps extends AreaChartProps {\n  data: ChartNestedDataShape[];\n}\n\nexport const StackedNormalizedAreaChart: FC<\n  Partial<StackedNormalizedAreaChartProps>\n> = (props) => (\n  <AreaChart\n    {...props}\n    series={\n      <StackedNormalizedAreaSeries\n        {...props.series?.props}\n        type=\"stackedNormalized\"\n      />\n    }\n    yAxis={\n      <LinearYAxis\n        type=\"value\"\n        tickSeries={\n          <LinearYAxisTickSeries\n            label={\n              <LinearYAxisTickLabel\n                {...LINEAR_Y_AXIS_TICK_LABEL_DEFAULT_PROPS}\n                rotation={false}\n                format={(data) => `${data * 100}%`}\n              />\n            }\n          />\n        }\n        {...props.yAxis?.props}\n      />\n    }\n  />\n);\n","import React, { FC, useMemo } from 'react';\nimport { ChartInternalShallowDataShape, Direction } from '@/common/data';\nimport { BarType } from './Bar';\nimport { motion } from 'motion/react';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\nimport { mergeDefaultProps } from '@/common';\n\nexport interface BarLabelProps {\n  /**\n   * Text of the label. Set internally by `Bar`.\n   */\n  text: string;\n\n  /**\n   * Height of the bar.\n   */\n  height: number;\n\n  /**\n   * Width of the bar.\n   */\n  width: number;\n\n  /**\n   * SVG x attribute for the bar.\n   */\n  x: number;\n\n  /**\n   * SVG y attribute for the bar.\n   */\n  y: number;\n\n  /**\n   * Group index or index of the bar. Set internally by `BarSeries`.\n   */\n  index: number;\n\n  /**\n   * D3 scale for Axis. Set internally by `BarChart`.\n   */\n  scale: any;\n\n  /**\n   * Position of the label.\n   */\n  position: 'top' | 'center' | 'bottom';\n\n  /**\n   * Parsed data shape. Set internally by `BarChart`.\n   */\n  data: ChartInternalShallowDataShape;\n\n  /**\n   * Color of the text.\n   */\n  fill: string;\n\n  /**\n   * Number of the bars in the bar group. Set internally by `BarSeries`.\n   */\n  barCount: number;\n\n  /**\n   * Layout of bar chart to render. Set internally by `BarSeries`.\n   */\n  layout: Direction;\n\n  /**\n   * Whether to animate the enter/update/exit. Set internally by `BarSeries`.\n   */\n  animated: boolean;\n\n  /**\n   * Type of bar chart to render. Set internally by `BarSeries`.\n   */\n  type: BarType;\n\n  /**\n   * Font size of the text.\n   */\n  fontSize: number;\n\n  /**\n   * Font family of the text.\n   */\n  fontFamily: string;\n\n  /**\n   * Padding of the label.\n   */\n  padding: number;\n\n  /**\n   * Class name to apply to the text.\n   */\n  className?: any;\n}\n\nexport const BarLabel: FC<Partial<BarLabelProps>> = (props) => {\n  const {\n    fontSize,\n    fontFamily,\n    fill,\n    layout,\n    className,\n    text,\n    x,\n    y,\n    height,\n    position,\n    width,\n    data,\n    padding,\n    scale,\n    type,\n    animated,\n    index,\n    barCount\n  } = mergeDefaultProps(BAR_LABEL_DEFAULT_PROPS, props);\n\n  const isVertical = useMemo(() => layout === 'vertical', [layout]);\n  const textAnchor = isVertical ? 'middle' : 'start';\n\n  const enterProps = useMemo(() => {\n    let newY = y;\n    let newX = x;\n\n    // If its diverging and the value is negative, we\n    // need to reverse the type...\n    const isTop = position === 'top';\n    const direction = isVertical\n      ? (data.y as number) < 0 && isTop\n        ? 'bottom'\n        : position\n      : (data.x0 as number) < 0 && isTop\n        ? 'bottom'\n        : position;\n\n    if (isVertical) {\n      if (direction === 'top') {\n        newY = y - padding;\n      } else if (direction === 'center') {\n        newY = y + height / 2;\n      } else if (direction === 'bottom') {\n        newY = y + height - padding;\n      }\n      newX = newX + width / 2;\n    } else {\n      if (direction === 'top') {\n        newX = x + width + padding;\n      } else if (direction === 'center') {\n        newX = x + width / 2;\n      } else if (direction === 'bottom') {\n        newX = x + padding;\n      }\n      newY = newY + height / 2;\n    }\n\n    return {\n      translateX: newX,\n      translateY: newY,\n      opacity: 1\n    };\n  }, [data.x0, data.y, height, isVertical, padding, position, width, x, y]);\n\n  const exitProps = useMemo(() => {\n    let newY = y;\n    let newX = x;\n\n    if (isVertical) {\n      const maxY = Math.max(...scale.range());\n      if (position === 'top') {\n        newY = maxY;\n      } else {\n        newY = maxY + height + padding;\n      }\n\n      newX = newX + width / 2;\n    } else {\n      const minX = Math.min(...scale.range());\n      if (position === 'top') {\n        newX = minX;\n      } else {\n        newX = minX + width + padding;\n      }\n\n      newY = newY + height / 2;\n    }\n\n    if (type === 'stackedDiverging') {\n      if (isVertical) {\n        newY = newY / 2;\n      } else {\n        newX = newX / 2;\n      }\n    }\n\n    return {\n      translateY: newY,\n      translateX: newX,\n      opacity: 0\n    };\n  }, [height, isVertical, padding, position, scale, type, width, x, y]);\n\n  const delay = useMemo(() => {\n    let delay = 0;\n    if (animated) {\n      if (layout === 'vertical') {\n        return (index / barCount) * 0.5;\n      } else {\n        return ((barCount - index) / barCount) * 0.5;\n      }\n    }\n\n    return delay;\n  }, [animated, barCount, index, layout]);\n\n  return (\n    <motion.g\n      initial={exitProps}\n      animate={enterProps}\n      exit={exitProps}\n      transition={{\n        ...DEFAULT_TRANSITION,\n        delay\n      }}\n      fontSize={fontSize}\n      fontFamily={fontFamily}\n    >\n      <text fill={fill} className={className} textAnchor={textAnchor}>\n        {text}\n      </text>\n    </motion.g>\n  );\n};\n\nexport const BAR_LABEL_DEFAULT_PROPS: Partial<BarLabelProps> = {\n  position: 'top',\n  layout: 'vertical' as const,\n  fontSize: 13,\n  padding: 5,\n  fontFamily: 'sans-serif',\n  fill: '#000'\n};\n","import React, {\n  Fragment,\n  ReactElement,\n  useCallback,\n  FC,\n  useRef,\n  useMemo,\n  useState\n} from 'react';\nimport chroma from 'chroma-js';\nimport { Gradient, GradientProps } from '@/common/Gradient';\nimport classNames from 'classnames';\nimport { ChartInternalShallowDataShape, Direction } from '@/common/data';\nimport { RangeLinesProps, RangeLines } from './RangeLines';\nimport { CloneElement } from 'reablocks';\nimport { Mask, MaskProps } from '@/common/Mask';\nimport {\n  constructFunctionProps,\n  PropFunctionTypes\n} from '@/common/utils/functions';\nimport { motion } from 'motion/react';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\nimport { BarLabelProps, BarLabel, BAR_LABEL_DEFAULT_PROPS } from './BarLabel';\nimport { formatValue, getAriaLabel } from '@/common/utils/formatting';\nimport { GuideBarProps, GuideBar } from './GuideBar';\nimport { ChartTooltipProps, ChartTooltip } from '@/common/Tooltip';\nimport { Glow } from '@/common/Glow';\nimport { ClickEvent } from '@/common/types';\nimport { generateGlowStyles } from '@/common/Glow/utils';\nimport { mergeDefaultProps } from '@/common';\n\nexport type BarType =\n  | 'standard'\n  | 'grouped'\n  | 'stacked'\n  | 'stackedNormalized'\n  | 'stackedDiverging'\n  | 'marimekko'\n  | 'waterfall';\n\nexport type BarProps = {\n  /**\n   * Whether the bar is active or not.\n   */\n  active: boolean;\n\n  /**\n   * Chroma brightness factor to brighten the active bar. See\n   * https://gka.github.io/chroma.js/#color-brighten for more info.\n   */\n  activeBrightness?: number;\n\n  /**\n   * D3 scale for X Axis. Set internally by `BarChart`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `BarChart`.\n   */\n  yScale: any;\n\n  /**\n   * D3 scale for X Multi-Group Axis. Set internally by `BarChart`.\n   */\n  xScale1: any;\n\n  /**\n   * Parsed data shape. Set internally by `BarChart`.\n   */\n  data: ChartInternalShallowDataShape;\n\n  /**\n   * Id set internally by `BarChart`.\n   */\n  id: string;\n\n  /**\n   * Gradient shades for the bar.\n   */\n  gradient: ReactElement<GradientProps, typeof Gradient> | null;\n\n  /**\n   * SVG rx attribute for the bar.\n   */\n  rx: number;\n\n  /**\n   * SVG ry attribute for the bar.\n   */\n  ry: number;\n\n  /**\n   * Width of the bar. Set internally by `BarSeries`.\n   */\n  width: number;\n\n  /**\n   * Padding for the bar groups.\n   */\n  padding: number;\n\n  /**\n   * Total number of bars used for animation. Set internally by `BarSeries`.\n   */\n  barCount: number;\n\n  /**\n   * Color callback for the bar.\n   */\n  color: any;\n\n  /**\n   * Cursor for the bar element.\n   */\n  cursor: string;\n\n  /**\n   * Index of the bar. Set internally by `BarSeries`.\n   */\n  barIndex: number;\n\n  /**\n   * Index of the group. Set internally by `BarSeries`.\n   */\n  groupIndex?: number;\n\n  /**\n   * Whether to animate the enter/update/exit. Set internally by `BarSeries`.\n   */\n  animated: boolean;\n\n  /**\n   * Whether this is categorical chart or not. Set internally by `BarSeries`.\n   */\n  isCategorical: boolean;\n\n  /**\n   * Rangelines element. for the bar.\n   */\n  rangeLines: ReactElement<RangeLinesProps, typeof RangeLines> | null;\n\n  /**\n   * Mask element for the bar.\n   */\n  mask: ReactElement<MaskProps, typeof Mask> | null;\n\n  /**\n   * Tooltip element.\n   */\n  tooltip: ReactElement<ChartTooltipProps, typeof ChartTooltip> | null;\n\n  /**\n   * Direction of the chart. Set internally by `BarSeries`.\n   */\n  layout: Direction;\n\n  /**\n   * Type of bar chart. Set internally by `BarSeries`.\n   */\n  type: BarType;\n\n  /**\n   * Label element.\n   */\n  label: ReactElement<BarLabelProps, typeof BarLabel> | null;\n\n  /**\n   * Guide bar component.\n   */\n  guide: ReactElement<GuideBarProps, typeof GuideBar> | null;\n\n  /**\n   * Force a min height on the bar.\n   */\n  minHeight?: number;\n\n  /**\n   * Glow styling for the bar.\n   */\n  glow?: Glow;\n\n  /**\n   * Event for when the bar is clicked.\n   */\n  onClick?: (event: ClickEvent) => void;\n\n  /**\n   * Event for when the bar has mouse enter.\n   */\n  onMouseEnter?: (event) => void;\n\n  /**\n   * Event for when the bar has mouse leave.\n   */\n  onMouseLeave?: (event) => void;\n\n  /**\n   * Event for when a bar has mouse move.\n   */\n  onMouseMove?: (event) => void;\n} & PropFunctionTypes;\n\ninterface BarCoordinates {\n  width: number;\n  height: number;\n  x: number;\n  y: number;\n}\n\nexport const Bar: FC<Partial<BarProps>> = (props) => {\n  const {\n    activeBrightness,\n    id,\n    gradient,\n    data,\n    barIndex,\n    color,\n    yScale,\n    barCount,\n    glow,\n    xScale,\n    groupIndex,\n    minHeight,\n    rangeLines,\n    animated,\n    active,\n    type,\n    tooltip,\n    layout,\n    mask,\n    label,\n    cursor,\n    rx,\n    ry,\n    isCategorical,\n    className,\n    style,\n    width,\n    padding,\n    guide,\n    xScale1,\n    onMouseEnter,\n    onClick,\n    onMouseMove,\n    onMouseLeave\n  } = mergeDefaultProps(BAR_DEFAULT_PROPS, props);\n  const labelProps = useMemo(\n    () => ({ ...BAR_LABEL_DEFAULT_PROPS, ...label?.props }),\n    [label?.props]\n  );\n\n  const isVertical = useMemo(() => layout === 'vertical', [layout]);\n  const rect = useRef<SVGGElement | null>(null);\n  const [internalActive, setInternalActive] = useState<boolean>(active);\n\n  const calculateLinearScalePadding = useCallback(\n    (scale, offset: number, size: number) => {\n      // This function calculates the padding on a linear scale used by the marimekko chart.\n      const totalSize = scale.range()[1];\n      const sizeMinusPadding = totalSize - padding * (barCount - 1);\n      const multiplier = sizeMinusPadding / totalSize;\n      offset = offset * multiplier + groupIndex! * padding;\n      size = size * multiplier;\n\n      return { size, offset };\n    },\n    [barCount, groupIndex, padding]\n  );\n\n  const getExit = useCallback(\n    ({ x, y, width, height }: BarCoordinates) => {\n      let newX = isVertical ? x : Math.min(...xScale.range());\n      let newY = isVertical ? Math.max(...yScale.range()) : y;\n      const newHeight = isVertical ? 0 : height;\n      const newWidth = isVertical ? width : 0;\n\n      if (type === 'stackedDiverging') {\n        if (isVertical) {\n          newY = newY / 2;\n        } else {\n          newX = newX / 2;\n        }\n      }\n\n      return {\n        x: newX,\n        y: newY,\n        height: newHeight,\n        width: newWidth\n      };\n    },\n    [isVertical, type, xScale, yScale]\n  );\n\n  const getKeyCoords = useCallback(\n    (\n      v,\n      v0,\n      v1,\n      scale,\n      sizeOverride: number,\n      isCategorical: boolean,\n      padding: number\n    ) => {\n      let offset;\n      let size;\n\n      if (isCategorical) {\n        if (scale.bandwidth) {\n          offset = scale(v);\n          size = scale.bandwidth();\n\n          if (sizeOverride) {\n            if (offset) {\n              offset = offset + size / 2 - sizeOverride / 2;\n            } else {\n              // Stacked bar charts don't have offsets...\n              offset = size / 2 - sizeOverride / 2;\n            }\n\n            size = sizeOverride;\n          }\n        } else {\n          if (sizeOverride) {\n            throw new Error('Not a valid option for this scale type');\n          }\n\n          offset = scale(v0);\n          size = scale((v1 as any) - (v0 as any));\n\n          if (padding) {\n            const calc = calculateLinearScalePadding(scale, offset, size);\n            offset = calc.offset;\n            size = calc.size;\n          }\n        }\n      } else {\n        if (sizeOverride) {\n          throw new Error('Not a valid option for this scale type');\n        }\n\n        const c0 = scale(v0);\n        const c1 = scale(v1);\n        const delta = c1 - c0;\n        offset = c0;\n        size = Math.max(delta - 1, 0);\n      }\n\n      return {\n        offset: isNaN(offset) ? 0 : offset,\n        size: isNaN(size) ? 0 : size\n      };\n    },\n    [calculateLinearScalePadding]\n  );\n\n  const getValueCoords = useCallback(\n    (v0, v1, scale) => {\n      const c0 = scale(v0);\n      const c1 = scale(v1);\n      const size = Math.abs(c0 - c1);\n      const minSize = Math.max(minHeight || 0, size);\n      const offset = Math.min(c0, c1);\n\n      return {\n        offset: isNaN(offset) ? 0 : offset,\n        size: isNaN(minSize) ? 0 : minSize\n      };\n    },\n    [minHeight]\n  );\n\n  const getCoords = useCallback(\n    (data: ChartInternalShallowDataShape) => {\n      let newYScale = yScale;\n      let newXScale = xScale;\n\n      if (xScale1) {\n        if (isVertical) {\n          newXScale = xScale1;\n        } else {\n          newYScale = xScale1;\n        }\n      }\n\n      if (isVertical) {\n        const xCoords = getKeyCoords(\n          data.x,\n          data.x0,\n          data.x1,\n          newXScale,\n          width,\n          isCategorical,\n          padding\n        );\n        const yCoords = getValueCoords(data.y0, data.y1, newYScale);\n\n        return {\n          x: xCoords.offset,\n          width: xCoords.size,\n          y: yCoords.offset,\n          height: yCoords.size\n        } as BarCoordinates;\n      } else {\n        const yCoords = getKeyCoords(\n          data.y,\n          data.y0,\n          data.y1,\n          newYScale,\n          width,\n          isCategorical,\n          padding\n        );\n        const xCoords = getValueCoords(data.x0, data.x1, newXScale);\n\n        return {\n          x: xCoords.offset,\n          width: xCoords.size,\n          y: yCoords.offset,\n          height: yCoords.size\n        } as BarCoordinates;\n      }\n    },\n    [\n      getKeyCoords,\n      getValueCoords,\n      isCategorical,\n      isVertical,\n      padding,\n      width,\n      xScale,\n      xScale1,\n      yScale\n    ]\n  );\n\n  const onMouseEnterInternal = useCallback(\n    (event) => {\n      // Only tooltip bars rely on this...\n      if (tooltip) {\n        setInternalActive(true);\n      }\n\n      onMouseEnter?.({\n        value: data,\n        nativeEvent: event\n      });\n    },\n    [data, onMouseEnter, tooltip]\n  );\n\n  const onMouseLeaveInternal = useCallback(\n    (event) => {\n      // Only tooltip bars rely on this...\n      if (tooltip) {\n        setInternalActive(false);\n      }\n\n      onMouseLeave?.({\n        value: data,\n        nativeEvent: event\n      });\n    },\n    [data, onMouseLeave, tooltip]\n  );\n\n  const onMouseClick = useCallback(\n    (event) => {\n      onClick?.({\n        value: data,\n        nativeEvent: event\n      });\n    },\n    [data, onClick]\n  );\n\n  const getFill = useCallback(\n    (color: string) => {\n      if (mask) {\n        return `url(#mask-pattern-${id})`;\n      } else {\n        if (gradient) {\n          return `url(#gradient-${id})`;\n        }\n\n        return color;\n      }\n    },\n    [gradient, id, mask]\n  );\n\n  const tooltipData = useMemo(() => {\n    const xAttr = isCategorical ? 'x' : 'x0';\n    let x = data[xAttr]!;\n\n    // Stacked diverging negative numbers\n    // in horizontal layouts need to pull x0\n    if ((data.x0 as number) < 0) {\n      x = data.x0;\n    }\n\n    const matches = isVertical\n      ? data.key && data.key !== x\n      : data.key && data.key !== data.y;\n\n    if (matches) {\n      x = `${data.key} ∙ ${x}`;\n    }\n\n    return {\n      y: data.y,\n      x\n    };\n  }, [data, isCategorical, isVertical]);\n\n  const ariaLabelData = useMemo(() => getAriaLabel(tooltipData), [tooltipData]);\n\n  const getTransition = useCallback(\n    (index: number) => {\n      if (animated) {\n        let delay = 0;\n        if (layout === 'vertical') {\n          delay = (index / barCount) * 0.5;\n        } else {\n          delay = ((barCount - index) / barCount) * 0.5;\n        }\n\n        return {\n          ...DEFAULT_TRANSITION,\n          delay: delay\n        };\n      } else {\n        return {\n          type: false,\n          delay: 0\n        };\n      }\n    },\n    [animated, barCount, layout]\n  );\n\n  const renderBar = useCallback(\n    (currentColorShade: string, coords: BarCoordinates, index: number) => {\n      const maskPath = mask ? `url(#mask-${id})` : '';\n      const fill = getFill(currentColorShade);\n      const initialExit = getExit(coords);\n      const extras = constructFunctionProps({ className, style }, data);\n      const transition = getTransition(index);\n\n      // UGH: https://github.com/framer/motion/issues/384\n      const initial = {\n        ...initialExit,\n        attrX: initialExit.x,\n        attrY: initialExit.y,\n        fill\n      };\n\n      delete initial.x;\n      delete initial.y;\n\n      const animate = {\n        ...coords,\n        attrX: coords.x,\n        attrY: coords.y,\n        fill\n      };\n\n      delete animate.x;\n      delete animate.y;\n\n      // If the fill is a gradient, we need to add it to the element\n      // rather than try and animate it. This is a workaround for a bug\n      // in the motion library where the gradient is not animated.\n      const extra: any = {};\n      if (fill.includes('url')) {\n        delete initial.fill;\n        delete animate.fill;\n        extra.fill = fill;\n      }\n\n      return (\n        <g ref={rect}>\n          <motion.rect\n            className={classNames(extras.className)}\n            style={{\n              ...extras.style,\n              ...generateGlowStyles({\n                glow,\n                colorSchemeColor: currentColorShade\n              }),\n              cursor\n            }}\n            {...extra}\n            mask={maskPath}\n            rx={rx}\n            ry={ry}\n            initial={initial}\n            animate={animate}\n            exit={initial}\n            transition={transition}\n            onMouseEnter={onMouseEnterInternal}\n            onMouseLeave={onMouseLeaveInternal}\n            onClick={onMouseClick}\n            onMouseMove={onMouseMove}\n            tabIndex={0}\n            aria-label={ariaLabelData}\n            role=\"graphics-document\"\n          />\n        </g>\n      );\n    },\n    [\n      className,\n      cursor,\n      data,\n      getExit,\n      getFill,\n      getTransition,\n      glow,\n      id,\n      mask,\n      onMouseClick,\n      onMouseEnterInternal,\n      onMouseLeaveInternal,\n      onMouseMove,\n      rx,\n      ry,\n      style,\n      ariaLabelData\n    ]\n  );\n\n  const renderGuideBar = useCallback(() => {\n    if (!guide) {\n      return null;\n    }\n\n    // If we are stacked, only render the first bar\n    if (type === 'stacked' && barIndex !== 0) {\n      return null;\n    }\n\n    // No reason to show them since they are always 100% tall\n    if (type === 'stackedNormalized' || type === 'marimekko') {\n      console.error('Guide bars are not supported for these chart types');\n      return null;\n    }\n\n    const valueScale = isVertical ? yScale : xScale;\n    const [start, end] = valueScale.domain();\n    const attr = isVertical ? 'y' : 'x';\n\n    // For stacked diverging we need to flip the points for positive / negative bars\n    const attrStart = type === 'stackedDiverging' ? '0' : '1';\n    const endPoint = type === 'stackedDiverging' ? start : end;\n    const startPoint =\n      type === 'stackedDiverging' && (data[attr]! as number) > 0\n        ? end\n        : endPoint;\n\n    const coords = getCoords({\n      ...data,\n      [attr]: endPoint,\n      [`${attr}${attrStart}`]: startPoint\n    });\n\n    return (\n      <CloneElement<GuideBarProps>\n        element={guide}\n        {...coords}\n        active={active}\n      />\n    );\n  }, [\n    active,\n    barIndex,\n    data,\n    getCoords,\n    guide,\n    isVertical,\n    type,\n    xScale,\n    yScale\n  ]);\n\n  const isActive = tooltip ? internalActive : active;\n  const stroke = color(data, barIndex);\n  const coords = getCoords(data);\n  const currentColorShade = active\n    ? chroma(stroke).brighten(activeBrightness).hex()\n    : stroke;\n  const rangeLineColor = (rangeLines && rangeLines.props.color) || stroke;\n  const rangeLineColorShade = active\n    ? chroma(rangeLineColor).brighten(activeBrightness)\n    : rangeLineColor;\n  const index = groupIndex !== undefined ? groupIndex : barIndex;\n  const scale = isVertical ? yScale : xScale;\n  const barLabel = isVertical ? tooltipData.y : tooltipData.x;\n  const placement = layout === 'vertical' ? 'top' : 'right';\n\n  return (\n    <Fragment>\n      {renderGuideBar()}\n      {renderBar(currentColorShade, coords, index)}\n      {rangeLines && (\n        <CloneElement<RangeLinesProps>\n          element={rangeLines}\n          {...coords}\n          index={index}\n          data={data}\n          scale={scale}\n          color={rangeLineColorShade}\n          barCount={barCount}\n          animated={animated}\n          layout={layout}\n          type={type}\n        />\n      )}\n      {mask && (\n        <Fragment>\n          <Mask id={`mask-${id}`} fill={`url(#gradient-${id})`} />\n          <CloneElement<MaskProps>\n            element={mask}\n            id={`mask-pattern-${id}`}\n            fill={stroke}\n          />\n        </Fragment>\n      )}\n      {gradient && (\n        <CloneElement<GradientProps>\n          element={gradient}\n          id={`gradient-${id}`}\n          direction={layout}\n          color={currentColorShade}\n        />\n      )}\n      {label && (\n        <CloneElement<BarLabelProps>\n          element={label}\n          {...coords}\n          text={formatValue(barLabel)}\n          index={index}\n          data={data}\n          scale={scale}\n          fill={labelProps.fill || currentColorShade}\n          barCount={barCount}\n          animated={animated}\n          layout={layout}\n          type={type}\n        />\n      )}\n      {tooltip && (\n        <CloneElement<ChartTooltipProps>\n          element={tooltip}\n          visible={!!isActive}\n          reference={rect}\n          color={color}\n          value={tooltipData}\n          placement={(tooltip.props as any).placement || placement}\n          data={data}\n        />\n      )}\n    </Fragment>\n  );\n};\n\nexport const BAR_DEFAULT_PROPS = {\n  activeBrightness: 0.5,\n  rx: 0,\n  ry: 0,\n  cursor: 'auto',\n  rangeLines: null,\n  label: null,\n  tooltip: null,\n  layout: 'vertical' as const,\n  guide: null,\n  gradient: <Gradient />\n};\n","import {\n  LinearValueMarker,\n  LinearValueMarkerProps,\n  mergeDefaultProps\n} from '@/common';\nimport { ColorSchemeType, getColor } from '@/common/color';\nimport {\n  ChartInternalDataShape,\n  ChartInternalNestedDataShape,\n  ChartInternalShallowDataShape,\n  Direction\n} from '@/common/data';\nimport {\n  ChartTooltip,\n  TooltipArea,\n  TooltipAreaEvent,\n  TooltipAreaProps\n} from '@/common/Tooltip';\nimport { offset } from '@floating-ui/dom';\nimport { CloneElement } from 'reablocks';\nimport React, {\n  FC,\n  Fragment,\n  ReactElement,\n  useCallback,\n  useMemo,\n  useRef,\n  useState\n} from 'react';\nimport { Bar, BAR_DEFAULT_PROPS, BarProps, BarType } from './Bar';\n\ntype BarElement = ReactElement<BarProps, typeof Bar>;\n\nexport interface BarSeriesProps {\n  /**\n   * Parsed data shape. Set internally by `BarChart`.\n   */\n  data: ChartInternalDataShape[];\n\n  /**\n   * Id of the bar chart. Set internally by `BarChart`.\n   */\n  id: string;\n\n  /**\n   * D3 scale for X Axis. Set internally by `BarChart`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `BarChart`.\n   */\n  yScale: any;\n\n  /**\n   * D3 scale for X Multi-Group Axis. Set internally by `BarChart`.\n   */\n  xScale1: any;\n\n  /**\n   * Bar element.\n   */\n  bar: BarElement | BarElement[];\n\n  /**\n   * Type of the chart.\n   */\n  type: BarType;\n\n  /**\n   * Color scheme for the chart.\n   */\n  colorScheme: ColorSchemeType;\n\n  /**\n   * Whether the chart is animated or not.\n   */\n  animated: boolean;\n\n  /**\n   * Amount of padding between each bar.\n   */\n  padding: number;\n\n  /**\n   * Amount of padding between each group.\n   */\n  groupPadding: number;\n\n  /**\n   * Whether the chart is categorical or not. Set internally by `BarChart`.\n   */\n  isCategorical: boolean;\n\n  /**\n   * Direction of the chart\n   */\n  layout: Direction;\n\n  /**\n   * The size of each bin/bucket in the bar chart.\n   */\n  binSize?: number;\n\n  /**\n   * Height of the chart. Set internally by `BarChart`.\n   */\n  height: number;\n\n  /**\n   * Width of the chart. Set internally by `BarChart`.\n   */\n  width: number;\n\n  /**\n   * Tooltip for the chart area.\n   */\n  tooltip: ReactElement<TooltipAreaProps, typeof TooltipArea> | null;\n\n  /**\n   * Value markers line for the chart.\n   */\n  valueMarkers:\n    | ReactElement<LinearValueMarkerProps, typeof LinearValueMarker>[]\n    | null;\n}\n\nexport const BarSeries: FC<Partial<BarSeriesProps>> = (props) => {\n  const {\n    data,\n    tooltip,\n    xScale,\n    yScale,\n    height,\n    width,\n    colorScheme,\n    xScale1,\n    bar,\n    padding,\n    animated,\n    isCategorical,\n    layout,\n    type,\n    id,\n    valueMarkers\n  } = mergeDefaultProps(BAR_SERIES_DEFAULT_PROPS, props);\n  const ref = useRef<any | null>(null);\n  const [activeValues, setActiveValues] = useState<any | null>(null);\n  const isVertical = useMemo(() => layout === 'vertical', [layout]);\n\n  const isMultiSeries = useMemo(() => {\n    return (\n      type === 'grouped' ||\n      type === 'stacked' ||\n      type === 'marimekko' ||\n      type === 'stackedNormalized' ||\n      type === 'stackedDiverging'\n    );\n  }, [type]);\n\n  const getTransform = useCallback(\n    (data: ChartInternalNestedDataShape) => {\n      let xPos = 0;\n      let yPos = 0;\n      if (type !== 'marimekko') {\n        if (layout === 'vertical') {\n          xPos = xScale(data.key);\n        } else {\n          yPos = yScale(data.key);\n        }\n      }\n\n      return `translate(${xPos}, ${yPos})`;\n    },\n    [layout, type, xScale, yScale]\n  );\n\n  const getBarColor = useCallback(\n    (point, index: number) => {\n      let key = 'key';\n      if (isMultiSeries) {\n        if (layout === 'vertical') {\n          key = 'x';\n        } else {\n          key = 'y';\n        }\n      }\n\n      // histograms...\n      if (point[key] === undefined) {\n        key = 'x0';\n      }\n\n      return getColor({\n        colorScheme,\n        point,\n        index,\n        data,\n        isMultiSeries,\n        attribute: key\n      });\n    },\n    [colorScheme, data, isMultiSeries, layout]\n  );\n\n  const onMouseMove = useCallback((event) => {\n    // Manuallly call mouse move so we don't have to kill bar pointer events\n    ref.current?.triggerMouseMove(event);\n  }, []);\n\n  const onValueEnter = useCallback((event: TooltipAreaEvent) => {\n    setActiveValues(event.value);\n  }, []);\n\n  const onValueLeave = useCallback(() => {\n    setActiveValues(null);\n  }, []);\n\n  const renderBar = useCallback(\n    (\n      data: ChartInternalShallowDataShape,\n      barIndex: number,\n      barCount: number,\n      groupIndex?: number\n    ) => {\n      const active = activeValues && activeValues.x === data.key;\n\n      let newYScale = yScale;\n      let newXScale = xScale;\n\n      if (xScale1) {\n        if (isVertical) {\n          newXScale = xScale1;\n        } else {\n          newYScale = xScale1;\n        }\n      }\n\n      // Histograms dont have keys\n      let key = barIndex.toString();\n      if (data.key) {\n        key = `${data.key!.toString()}-${groupIndex}-${data.x}`;\n      }\n\n      let barElements = Array.isArray(bar) ? bar[barIndex] : bar;\n      if (!bar) {\n        barElements = <Bar {...BAR_DEFAULT_PROPS} />;\n      }\n\n      return (\n        <Fragment key={key}>\n          <CloneElement<BarProps>\n            element={barElements}\n            id={`${id}-bar-${groupIndex}-${barIndex}`}\n            animated={animated}\n            active={active}\n            xScale={newXScale}\n            xScale1={xScale1}\n            yScale={newYScale}\n            padding={padding}\n            barCount={barCount}\n            groupIndex={groupIndex}\n            barIndex={barIndex}\n            data={data}\n            isCategorical={isCategorical}\n            color={getBarColor}\n            layout={layout}\n            type={type}\n            onMouseMove={onMouseMove}\n          />\n        </Fragment>\n      );\n    },\n    [\n      activeValues,\n      animated,\n      bar,\n      getBarColor,\n      id,\n      isCategorical,\n      isVertical,\n      layout,\n      onMouseMove,\n      padding,\n      type,\n      xScale,\n      xScale1,\n      yScale\n    ]\n  );\n\n  const renderBarGroup = useCallback(\n    (\n      data: ChartInternalShallowDataShape[],\n      barCount: number,\n      groupIndex?: number\n    ) => {\n      return (\n        <Fragment>\n          {data.map((barData, barIndex) =>\n            renderBar(barData, barIndex, barCount, groupIndex)\n          )}\n        </Fragment>\n      );\n    },\n    [renderBar]\n  );\n\n  const renderValueMarkers = useCallback(\n    () => (\n      <>\n        {valueMarkers?.length &&\n          valueMarkers.map((marker) => (\n            <CloneElement<LinearValueMarkerProps>\n              key={marker.key}\n              element={marker}\n              size={layout === 'vertical' ? width : height}\n              value={\n                layout === 'vertical'\n                  ? yScale(marker.props.value)\n                  : xScale(marker.props.value)\n              }\n              direction={layout === 'vertical' ? 'horizontal' : 'vertical'}\n            />\n          ))}\n      </>\n    ),\n    [height, layout, valueMarkers, width, xScale, yScale]\n  );\n\n  return (\n    <CloneElement<TooltipAreaProps>\n      element={tooltip}\n      childRef={ref}\n      xScale={xScale}\n      yScale={yScale}\n      data={data}\n      height={height}\n      width={width}\n      inverse={false}\n      isHorizontal={layout === 'horizontal'}\n      color={getBarColor}\n      onValueEnter={onValueEnter}\n      onValueLeave={onValueLeave}\n      isContinous={false}\n    >\n      {isMultiSeries &&\n        (data as ChartInternalNestedDataShape[]).map((groupData, index) => (\n          <g transform={getTransform(groupData)} key={`bar-group-${index}`}>\n            {renderBarGroup(\n              groupData.data as ChartInternalShallowDataShape[],\n              data.length,\n              index\n            )}\n          </g>\n        ))}\n      {!isMultiSeries &&\n        renderBarGroup(data as ChartInternalShallowDataShape[], data.length)}\n      {renderValueMarkers()}\n    </CloneElement>\n  );\n};\n\nexport const BAR_SERIES_DEFAULT_PROPS = {\n  type: 'standard' as BarType,\n  padding: 0.1,\n  groupPadding: 16,\n  animated: true,\n  tooltip: (\n    <TooltipArea\n      tooltip={<ChartTooltip followCursor={true} modifiers={[offset(5)]} />}\n    />\n  ),\n  colorScheme: 'cybertron',\n  bar: <Bar />,\n  layout: 'vertical' as const\n};\n","import React, { FC, useMemo } from 'react';\nimport { ChartInternalShallowDataShape, Direction } from '@/common/data';\nimport { motion } from 'motion/react';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\nimport { BarType } from './Bar';\n\nexport interface RangeLinesProps {\n  /**\n   * Height of the bar.\n   */\n  height: number;\n\n  /**\n   * Width of the bar.\n   */\n  width: number;\n\n  /**\n   * SVG x attribute for the bar.\n   */\n  x: number;\n\n  /**\n   * SVG y attribute for the bar.\n   */\n  y: number;\n\n  /**\n   * Group index or index of the bar. Set internally by `BarSeries`.\n   */\n  index: number;\n\n  /**\n   * Stroke width of the range line.\n   */\n  strokeWidth: number;\n\n  /**\n   * D3 scale for Axis. Set internally by `BarChart`.\n   */\n  scale: any;\n\n  /**\n   * Position of the range line.\n   */\n  position: 'top' | 'bottom';\n\n  /**\n   * Parsed data shape. Set internally by `BarChart`.\n   */\n  data: ChartInternalShallowDataShape;\n\n  /**\n   * Color for the range line.\n   */\n  color: string;\n\n  /**\n   * Total number of bars used for animation. Set internally by `BarSeries`.\n   */\n  barCount: number;\n\n  /**\n   * Direction of the chart. Set internally by `BarSeries`.\n   */\n  layout: Direction;\n\n  /**\n   * Whether to animate the enter/update/exit. Set internally by `BarSeries`.\n   */\n  animated: boolean;\n\n  /**\n   * Type of bar chart. Set internally by `BarSeries`.\n   */\n  type: BarType;\n}\n\nexport const RangeLines: FC<Partial<RangeLinesProps>> = ({\n  layout = 'vertical',\n  color,\n  x,\n  y,\n  scale,\n  type,\n  height,\n  position = 'top',\n  strokeWidth = 1,\n  width,\n  animated,\n  index,\n  barCount,\n  data\n}) => {\n  const isVertical = useMemo(() => layout === 'vertical', [layout]);\n  const rangeLineHeight = useMemo(\n    () => Math.min(strokeWidth, isVertical ? height : width),\n    [height, isVertical, strokeWidth, width]\n  );\n\n  const [newWidth, newHeight] = useMemo(\n    () => [\n      isVertical ? width : rangeLineHeight,\n      isVertical ? rangeLineHeight : height\n    ],\n    [height, isVertical, rangeLineHeight, width]\n  );\n\n  const enterProps = useMemo(() => {\n    let newY = y;\n    let newX = x;\n\n    // If its diverging and the value is negative, we\n    // need to reverse the type...\n    const isTop = position === 'top';\n    const direction = isVertical\n      ? (data.y as number) < 0 && isTop\n        ? 'bottom'\n        : position\n      : (data.x0 as number) < 0 && isTop\n        ? 'bottom'\n        : position;\n\n    if (isVertical) {\n      if (direction === 'top') {\n        newY = y;\n      } else {\n        newY = y + height - rangeLineHeight;\n      }\n    } else {\n      if (direction === 'top') {\n        newX = x + width - rangeLineHeight;\n      } else {\n        newX = x;\n      }\n    }\n\n    return {\n      x: newX,\n      y: newY,\n      opacity: 1\n    };\n  }, [\n    data.x0,\n    data.y,\n    height,\n    isVertical,\n    position,\n    rangeLineHeight,\n    width,\n    x,\n    y\n  ]);\n\n  const exitProps = useMemo(() => {\n    let newY = y;\n    let newX = x;\n\n    if (isVertical) {\n      const maxY = Math.max(...scale.range());\n      if (position === 'top') {\n        newY = maxY;\n      } else {\n        newY = maxY + height - rangeLineHeight;\n      }\n    } else {\n      const minX = Math.min(...scale.range());\n      if (position === 'top') {\n        newX = minX;\n      } else {\n        newX = minX + width - rangeLineHeight;\n      }\n    }\n\n    if (type === 'stackedDiverging') {\n      if (isVertical) {\n        newY = newY / 2;\n      } else {\n        newX = newX / 2;\n      }\n    }\n\n    return {\n      y: newY,\n      x: newX,\n      opacity: 0\n    };\n  }, [height, isVertical, position, rangeLineHeight, scale, type, width, x, y]);\n\n  const delay = useMemo(() => {\n    let delay = 0;\n    if (animated) {\n      if (layout === 'vertical') {\n        return (index / barCount) * 0.5;\n      } else {\n        return ((barCount - index) / barCount) * 0.5;\n      }\n    }\n\n    return delay;\n  }, [animated, barCount, index, layout]);\n\n  // UGH: https://github.com/framer/motion/issues/384\n  const initial = useMemo(() => {\n    const r = {\n      ...exitProps,\n      attrX: exitProps.x,\n      attrY: exitProps.y\n    };\n\n    delete r.x;\n    delete r.y;\n\n    return r;\n  }, [exitProps]);\n\n  const animate = useMemo(() => {\n    const r = {\n      ...enterProps,\n      attrX: enterProps.x,\n      attrY: enterProps.y\n    };\n\n    delete r.x;\n    delete r.y;\n\n    return r;\n  }, [enterProps]);\n\n  return (\n    <motion.rect\n      pointerEvents=\"none\"\n      fill={color}\n      width={newWidth}\n      height={newHeight}\n      initial={initial}\n      animate={animate}\n      exit={initial}\n      transition={{\n        ...DEFAULT_TRANSITION,\n        delay\n      }}\n    />\n  );\n};\n","import React, { FC } from 'react';\nimport {\n  BarSeriesProps,\n  BarSeries,\n  BAR_SERIES_DEFAULT_PROPS\n} from './BarSeries';\nimport { Bar, BAR_DEFAULT_PROPS, BarType } from './Bar';\nimport { RangeLines } from './RangeLines';\nimport { Gradient, GradientStop } from '@/common';\n\nexport const StackedBarSeries: FC<Partial<BarSeriesProps>> = (props) => (\n  <BarSeries {...STACKED_BAR_SERIES_DEFAULT_PROPS} {...props} />\n);\n\nexport const STACKED_BAR_SERIES_DEFAULT_PROPS = {\n  ...BAR_SERIES_DEFAULT_PROPS,\n  type: 'stacked' as BarType,\n  bar: (\n    <Bar\n      {...BAR_DEFAULT_PROPS}\n      gradient={\n        <Gradient\n          stops={[\n            <GradientStop offset=\"5%\" stopOpacity={0.1} key=\"start\" />,\n            <GradientStop offset=\"90%\" stopOpacity={0.7} key=\"stop\" />\n          ]}\n        />\n      }\n      rangeLines={<RangeLines position=\"top\" strokeWidth={3} />}\n    />\n  )\n};\n","import React, { FC } from 'react';\nimport { offset } from '@floating-ui/dom';\nimport {\n  BarSeriesProps,\n  BarSeries,\n  BAR_SERIES_DEFAULT_PROPS\n} from './BarSeries';\nimport { Bar, BAR_DEFAULT_PROPS, BarType } from './Bar';\nimport { RangeLines } from './RangeLines';\nimport { ChartTooltip, TooltipTemplate, TooltipArea } from '@/common/Tooltip';\nimport { formatValue } from '@/common/utils/formatting';\nimport { Gradient, GradientStop } from '@/common/Gradient';\n\nexport const StackedNormalizedBarSeries: FC<Partial<BarSeriesProps>> = (\n  props\n) => <BarSeries {...STACKED_NORMALIZED_BAR_SERIES_DEFAULT_PROPS} {...props} />;\n\nexport const STACKED_NORMALIZED_BAR_SERIES_DEFAULT_PROPS = {\n  ...BAR_SERIES_DEFAULT_PROPS,\n  type: 'stackedNormalized' as BarType,\n  tooltip: (\n    <TooltipArea\n      tooltip={\n        <ChartTooltip\n          followCursor={true}\n          modifiers={[offset(5)]}\n          content={(point, color) => {\n            point.data = point.data.map((d) => {\n              // Handle horz case\n              const start = isNaN(d.y0) ? d.x0 : d.y0;\n              const end = isNaN(d.y1) ? d.x1 : d.y1;\n\n              return {\n                ...d,\n                value: `${formatValue(Math.floor((end - start) * 100))}%`\n              };\n            });\n\n            return <TooltipTemplate value={point} color={color} />;\n          }}\n        />\n      }\n    />\n  ),\n  bar: (\n    <Bar\n      {...BAR_DEFAULT_PROPS}\n      gradient={\n        <Gradient\n          stops={[\n            <GradientStop offset=\"5%\" stopOpacity={0.1} key=\"start\" />,\n            <GradientStop offset=\"90%\" stopOpacity={0.7} key=\"stop\" />\n          ]}\n        />\n      }\n      rangeLines={<RangeLines position=\"top\" strokeWidth={3} />}\n    />\n  )\n};\n","import React, { FC } from 'react';\nimport { offset } from '@floating-ui/dom';\nimport {\n  BarSeriesProps,\n  BarSeries,\n  BAR_SERIES_DEFAULT_PROPS\n} from './BarSeries';\nimport { Bar, BAR_DEFAULT_PROPS, BarType } from './Bar';\nimport { RangeLines } from './RangeLines';\nimport { ChartTooltip, TooltipTemplate, TooltipArea } from '@/common/Tooltip';\nimport { formatValue } from '@/common/utils/formatting';\nimport { Gradient, GradientStop } from '@/common/Gradient';\n\nexport const MarimekkoBarSeries: FC<Partial<BarSeriesProps>> = (props) => (\n  <BarSeries {...MARIMEKKO_BAR_SERIES_DEFAULT_PROPS} {...props} />\n);\n\nexport const MARIMEKKO_BAR_SERIES_DEFAULT_PROPS: Partial<BarSeriesProps> = {\n  ...BAR_SERIES_DEFAULT_PROPS,\n  type: 'marimekko' as BarType,\n  padding: 10,\n  tooltip: (\n    <TooltipArea\n      tooltip={\n        <ChartTooltip\n          followCursor={true}\n          modifiers={[offset(5)]}\n          content={(point, color) => {\n            const data = {\n              ...point,\n              data: point.data.map((d) => ({\n                ...d,\n                value: `${formatValue(d.value)} ∙ ${formatValue(\n                  Math.floor((d.y1 - d.y0) * 100)\n                )}%`\n              }))\n            };\n\n            return <TooltipTemplate value={data} color={color} />;\n          }}\n        />\n      }\n    />\n  ),\n  bar: (\n    <Bar\n      {...BAR_DEFAULT_PROPS}\n      padding={10}\n      gradient={\n        <Gradient\n          stops={[\n            <GradientStop offset=\"5%\" stopOpacity={0.1} key=\"start\" />,\n            <GradientStop offset=\"90%\" stopOpacity={0.7} key=\"stop\" />\n          ]}\n        />\n      }\n      rangeLines={<RangeLines position=\"top\" strokeWidth={3} />}\n    />\n  )\n};\n","import React, { FC } from 'react';\nimport { offset } from '@floating-ui/dom';\nimport {\n  BarSeriesProps,\n  BarSeries,\n  BAR_SERIES_DEFAULT_PROPS\n} from './BarSeries';\nimport { ChartTooltip, TooltipTemplate, TooltipArea } from '@/common/Tooltip';\nimport { formatValue } from '@/common/utils/formatting';\nimport { schemes } from '@/common/color';\n\nexport const HistogramBarSeries: FC<Partial<BarSeriesProps>> = ({\n  type,\n  ...rest\n}) => <BarSeries {...HISTOGRAM_BAR_SERIES_DEFAULT_PROPS} {...rest} />;\n\nexport const HISTOGRAM_BAR_SERIES_DEFAULT_PROPS = {\n  ...BAR_SERIES_DEFAULT_PROPS,\n  colorScheme: schemes.cybertron[0],\n  tooltip: (\n    <TooltipArea\n      tooltip={\n        <ChartTooltip\n          followCursor={true}\n          modifiers={[offset(5)]}\n          content={(point, color) => {\n            const data = {\n              ...point,\n              x: `${formatValue(point.x0)} - ${formatValue(point.x1)}`,\n              value: point.y\n            };\n\n            return <TooltipTemplate value={data} color={color} />;\n          }}\n        />\n      }\n    />\n  )\n};\n","import React, { FC } from 'react';\nimport { motion } from 'motion/react';\n\nexport interface GuideBarProps extends SVGRect {\n  /**\n   * Whether the guide bar is active.\n   */\n  active: boolean;\n\n  /**\n   * Fill for the guide bar element.\n   */\n  fill?: string;\n\n  /**\n   * Opacity for the guide bar element.\n   */\n  opacity?: number;\n}\n\nexport const GuideBar: FC<Partial<GuideBarProps>> = ({\n  fill = '#eee',\n  active,\n  opacity = 0.15,\n  ...rest\n}) => {\n  const { x, y, ...other } = rest;\n\n  return (\n    <motion.rect\n      fill={fill}\n      {...other}\n      pointerEvents=\"none\"\n      initial=\"hidden\"\n      animate={active ? 'visible' : 'hidden'}\n      variants={{\n        hidden: { opacity: 0, attrX: x, attrY: y },\n        visible: { opacity, attrX: x, attrY: y }\n      }}\n    />\n  );\n};\n","import React, { Fragment, ReactElement, FC, useMemo, useCallback } from 'react';\nimport classNames from 'classnames';\nimport {\n  isAxisVisible,\n  LinearAxisProps,\n  LinearXAxisTickSeries,\n  LinearXAxis,\n  LinearYAxis,\n  LinearAxis,\n  LINEAR_X_AXIS_DEFAULT_PROPS,\n  LINEAR_Y_AXIS_DEFAULT_PROPS\n} from '@/common/Axis';\nimport {\n  BAR_SERIES_DEFAULT_PROPS,\n  BarSeries,\n  BarSeriesProps\n} from './BarSeries';\nimport {\n  ChartDataShape,\n  ChartNestedDataShape,\n  buildBarStackData,\n  buildMarimekkoData,\n  buildWaterfall,\n  ChartShallowDataShape,\n  buildNestedChartData,\n  buildShallowChartData,\n  StackTypes\n} from '@/common/data';\nimport { GridlineSeries, GridlineSeriesProps } from '@/common/Gridline';\nimport {\n  getXScale,\n  getYScale,\n  getGroupScale,\n  getInnerScale,\n  getMarimekkoScale,\n  getMarimekkoGroupScale\n} from '@/common/scales';\nimport { ChartBrushProps, ChartBrush } from '@/common/Brush';\nimport css from './BarChart.module.css';\nimport {\n  ChartContainer,\n  ChartContainerChildProps,\n  ChartProps\n} from '@/common/containers/ChartContainer';\nimport { CloneElement } from 'reablocks';\nimport { mergeDefaultProps } from '@/common';\n\nexport interface BarChartProps extends ChartProps {\n  /**\n   * Data the chart will receive to render.\n   */\n  data: ChartDataShape[];\n\n  /**\n   * The series component that renders the bar components.\n   */\n  series: ReactElement<BarSeriesProps, typeof BarSeries>;\n\n  /**\n   * The linear axis component for the Y Axis of the chart.\n   */\n  yAxis: ReactElement<LinearAxisProps, typeof LinearAxis>;\n\n  /**\n   * The linear axis component for the X Axis of the chart.\n   */\n  xAxis: ReactElement<LinearAxisProps, typeof LinearAxis>;\n\n  /**\n   * The chart's background gridlines component.\n   */\n  gridlines: ReactElement<GridlineSeriesProps, typeof GridlineSeries> | null;\n\n  /**\n   * The chart's brush component.\n   */\n  brush: ReactElement<ChartBrushProps, typeof ChartBrush> | null;\n\n  /**\n   * Any secondary axis components. Useful for multi-axis charts.\n   */\n  secondaryAxis?: ReactElement<LinearAxisProps, typeof LinearAxis>[];\n}\n\nexport const BarChart: FC<Partial<BarChartProps>> = (props) => {\n  const {\n    id,\n    width,\n    height,\n    margins,\n    className,\n    data,\n    xAxis,\n    yAxis,\n    series,\n    brush,\n    gridlines,\n    secondaryAxis,\n    containerClassName\n  } = mergeDefaultProps(BAR_CHART_DEFAULT_PROPS, props);\n  const seriesProps = useMemo(\n    () => ({ ...BAR_SERIES_DEFAULT_PROPS, ...series?.props }),\n    [series?.props]\n  );\n  const xAxisProps = useMemo(\n    () => ({ ...LINEAR_X_AXIS_DEFAULT_PROPS, ...xAxis.props }),\n    [xAxis.props]\n  );\n  const yAxisProps = useMemo(\n    () => ({ ...LINEAR_Y_AXIS_DEFAULT_PROPS, ...yAxis.props }),\n    [yAxis.props]\n  );\n  const isVertical = useMemo(\n    () => seriesProps.layout === 'vertical',\n    [seriesProps]\n  );\n  const keyAxisProps = useMemo(\n    () => (isVertical ? xAxisProps : yAxisProps),\n    [isVertical, xAxisProps, yAxisProps]\n  );\n  const isDiverging = useMemo(\n    () => seriesProps.type === 'stackedDiverging',\n    [seriesProps.type]\n  );\n\n  const getMarimekkoGroupScales = useCallback(\n    (aggregatedData, axisProps, width: number) => {\n      const keyScale = getMarimekkoScale(width, axisProps.roundDomains);\n\n      const groupScale = getMarimekkoGroupScale({\n        width,\n        padding: seriesProps.padding,\n        data: aggregatedData,\n        valueScale: keyScale\n      });\n\n      return {\n        keyScale,\n        groupScale\n      };\n    },\n    [seriesProps.padding]\n  );\n\n  const getMultiGroupScales = useCallback(\n    (aggregatedData, height: number, width: number) => {\n      const { groupPadding, layout } = seriesProps;\n\n      const groupScale = getGroupScale({\n        dimension: isVertical ? width : height,\n        direction: layout,\n        padding: groupPadding,\n        data: aggregatedData\n      });\n\n      const keyScale = getInnerScale({\n        groupScale: groupScale,\n        padding: seriesProps.padding,\n        data: aggregatedData,\n        prop: isVertical ? 'x' : 'y'\n      });\n\n      return {\n        groupScale,\n        keyScale\n      };\n    },\n    [isVertical, seriesProps]\n  );\n\n  const getKeyScale = useCallback(\n    (aggregatedData, axisProps, isMultiSeries: boolean, width: number) => {\n      return getXScale({\n        width,\n        type: axisProps.type,\n        roundDomains: axisProps.roundDomains,\n        data: aggregatedData,\n        padding: seriesProps.padding,\n        domain: axisProps.domain,\n        isMultiSeries,\n        isDiverging\n      });\n    },\n    [isDiverging, seriesProps]\n  );\n\n  const getValueScale = useCallback(\n    (aggregatedData, axisProps, isMultiSeries: boolean, height: number) => {\n      return getYScale({\n        roundDomains: axisProps.roundDomains,\n        padding: seriesProps.padding,\n        type: axisProps.type,\n        height,\n        data: aggregatedData,\n        domain: axisProps.domain,\n        isMultiSeries,\n        isDiverging\n      });\n    },\n    [isDiverging, seriesProps]\n  );\n\n  const getScalesAndData = useCallback(\n    (chartHeight: number, chartWidth: number) => {\n      const { type, layout } = seriesProps;\n      const isMarimekko = type === 'marimekko';\n      const isGrouped = type === 'grouped';\n      const isStacked =\n        type === 'stacked' ||\n        type === 'stackedNormalized' ||\n        type === 'stackedDiverging';\n      const isMultiSeries = isGrouped || isStacked;\n\n      let aggregatedData;\n      if (isStacked) {\n        let distroType: StackTypes = 'default';\n        if (type === 'stackedNormalized') {\n          distroType = 'expand';\n        } else if (type === 'stackedDiverging') {\n          distroType = 'diverging';\n        }\n\n        aggregatedData = buildBarStackData(\n          data as ChartNestedDataShape[],\n          distroType,\n          layout\n        );\n      } else if (type === 'waterfall') {\n        aggregatedData = buildWaterfall(\n          data as ChartShallowDataShape[],\n          layout,\n          seriesProps.binSize\n        );\n      } else if (isMarimekko) {\n        aggregatedData = buildMarimekkoData(data as ChartNestedDataShape[]);\n      } else if (isGrouped) {\n        aggregatedData = buildNestedChartData(\n          data as ChartNestedDataShape[],\n          false,\n          layout\n        );\n      } else {\n        aggregatedData = buildShallowChartData(\n          data as ChartShallowDataShape[],\n          layout,\n          seriesProps.binSize\n        );\n      }\n\n      let yScale;\n      let xScale;\n      let xScale1;\n\n      if (isVertical) {\n        if (isGrouped) {\n          const { keyScale, groupScale } = getMultiGroupScales(\n            aggregatedData,\n            chartHeight,\n            chartWidth\n          );\n          xScale = groupScale;\n          xScale1 = keyScale;\n        } else if (isMarimekko) {\n          const { keyScale, groupScale } = getMarimekkoGroupScales(\n            aggregatedData,\n            xAxisProps,\n            chartWidth\n          );\n          xScale = groupScale;\n          xScale1 = keyScale;\n        } else {\n          xScale = getKeyScale(\n            aggregatedData,\n            xAxisProps,\n            isMultiSeries,\n            chartWidth\n          );\n        }\n\n        yScale = getValueScale(\n          aggregatedData,\n          yAxisProps,\n          isMultiSeries,\n          chartHeight\n        );\n      } else {\n        if (isGrouped) {\n          const { keyScale, groupScale } = getMultiGroupScales(\n            aggregatedData,\n            chartHeight,\n            chartWidth\n          );\n          yScale = groupScale;\n          xScale1 = keyScale;\n          xScale = getKeyScale(\n            aggregatedData,\n            xAxisProps,\n            isMultiSeries,\n            chartWidth\n          );\n        } else if (isMarimekko) {\n          throw new Error(\n            'Marimekko is currently not supported for horizontal layouts'\n          );\n        } else {\n          xScale = getKeyScale(\n            aggregatedData,\n            xAxisProps,\n            isMultiSeries,\n            chartWidth\n          );\n          yScale = getValueScale(\n            aggregatedData,\n            yAxisProps,\n            isMultiSeries,\n            chartHeight\n          );\n        }\n      }\n\n      return { xScale, xScale1, yScale, aggregatedData };\n    },\n    [\n      getKeyScale,\n      data,\n      getMarimekkoGroupScales,\n      getMultiGroupScales,\n      getValueScale,\n      isVertical,\n      seriesProps,\n      xAxisProps,\n      yAxisProps\n    ]\n  );\n\n  const renderChart = useCallback(\n    (containerProps: ChartContainerChildProps) => {\n      const { chartHeight, chartWidth, id, updateAxes, chartSized } =\n        containerProps;\n      const { xScale, xScale1, yScale, aggregatedData } = getScalesAndData(\n        chartHeight,\n        chartWidth\n      );\n\n      const isCategorical = keyAxisProps.type === 'category';\n      const disableBrush = aggregatedData.length <= 1;\n\n      return (\n        <Fragment>\n          {chartSized && gridlines && (\n            <CloneElement<GridlineSeriesProps>\n              element={gridlines}\n              height={chartHeight}\n              width={chartWidth}\n              yScale={yScale}\n              xScale={xScale}\n              yAxis={yAxisProps}\n              xAxis={xAxisProps}\n            />\n          )}\n          <CloneElement<LinearAxisProps>\n            element={xAxis}\n            height={chartHeight}\n            width={chartWidth}\n            scale={xScale}\n            visibility={chartSized ? 'visible' : 'hidden'}\n            onDimensionsChange={(event) =>\n              updateAxes(isVertical ? 'horizontal' : 'vertical', event)\n            }\n          />\n          <CloneElement<LinearAxisProps>\n            element={yAxis}\n            height={chartHeight}\n            width={chartWidth}\n            scale={yScale}\n            visibility={chartSized ? 'visible' : 'hidden'}\n            onDimensionsChange={(event) =>\n              updateAxes(isVertical ? 'vertical' : 'horizontal', event)\n            }\n          />\n          {secondaryAxis &&\n            secondaryAxis.map((axis, i) => (\n              <CloneElement<LinearAxisProps>\n                key={i}\n                element={axis}\n                height={chartHeight}\n                width={chartWidth}\n                visibility={chartSized ? 'visible' : 'hidden'}\n                onDimensionsChange={(event) => updateAxes('horizontal', event)}\n              />\n            ))}\n          {chartSized && (\n            <CloneElement<ChartBrushProps>\n              disabled={disableBrush}\n              element={brush}\n              height={chartHeight}\n              width={chartWidth}\n              scale={xScale}\n            >\n              <CloneElement<BarSeriesProps>\n                element={series}\n                id={`bar-series-${id}`}\n                data={aggregatedData}\n                height={chartHeight}\n                width={chartWidth}\n                isCategorical={isCategorical}\n                xScale={xScale}\n                xScale1={xScale1}\n                yScale={yScale}\n              />\n            </CloneElement>\n          )}\n        </Fragment>\n      );\n    },\n    [\n      brush,\n      getScalesAndData,\n      gridlines,\n      isVertical,\n      keyAxisProps,\n      secondaryAxis,\n      series,\n      xAxis,\n      yAxis,\n      xAxisProps,\n      yAxisProps\n    ]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      height={height}\n      margins={margins}\n      containerClassName={containerClassName}\n      xAxisVisible={isAxisVisible(xAxisProps)}\n      yAxisVisible={isAxisVisible(yAxisProps)}\n      className={classNames(css.barChart, className, css[seriesProps.type])}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n\nconst BAR_CHART_DEFAULT_PROPS = {\n  data: [],\n  xAxis: (\n    <LinearXAxis\n      type=\"category\"\n      tickSeries={<LinearXAxisTickSeries tickSize={20} />}\n    />\n  ),\n  yAxis: <LinearYAxis type=\"value\" />,\n  series: <BarSeries />,\n  gridlines: <GridlineSeries />,\n  brush: null\n};\n","import React, { FC, ReactElement } from 'react';\nimport { BarChart, BarChartProps } from './BarChart';\nimport { ChartNestedDataShape } from '@/common/data';\nimport {\n  BarSeriesProps,\n  MARIMEKKO_BAR_SERIES_DEFAULT_PROPS,\n  MarimekkoBarSeries\n} from './BarSeries';\nimport {\n  LinearXAxis,\n  LinearXAxisTickSeries,\n  LinearYAxis,\n  LinearYAxisTickSeries,\n  LinearYAxisTickLabel,\n  LINEAR_Y_AXIS_TICK_LABEL_DEFAULT_PROPS\n} from '@/common/Axis/LinearAxis';\n\nexport interface MarimekkoChartProps extends BarChartProps {\n  data: ChartNestedDataShape[];\n  series: ReactElement<BarSeriesProps, typeof MarimekkoBarSeries>;\n}\n\nexport const MarimekkoChart: FC<Partial<MarimekkoChartProps>> = (props) => (\n  <BarChart\n    {...MARIMEKKO_CHART_DEFAULT_PROPS}\n    {...props}\n    series={\n      <MarimekkoBarSeries\n        {...MARIMEKKO_BAR_SERIES_DEFAULT_PROPS}\n        {...props.series.props}\n      />\n    }\n  />\n);\n\nconst MARIMEKKO_CHART_DEFAULT_PROPS = {\n  xAxis: (\n    <LinearXAxis\n      type=\"category\"\n      tickSeries={<LinearXAxisTickSeries tickSize={15} />}\n    />\n  ),\n  yAxis: (\n    <LinearYAxis\n      type=\"value\"\n      tickSeries={\n        <LinearYAxisTickSeries\n          label={\n            <LinearYAxisTickLabel\n              {...LINEAR_Y_AXIS_TICK_LABEL_DEFAULT_PROPS}\n              rotation={false}\n              format={(data) => `${data * 100}%`}\n            />\n          }\n        />\n      }\n    />\n  )\n};\n","import React, { FC } from 'react';\nimport { BarChart, BarChartProps } from './BarChart';\nimport { ChartNestedDataShape } from '@/common/data';\nimport {\n  STACKED_BAR_SERIES_DEFAULT_PROPS,\n  StackedBarSeries\n} from './BarSeries';\n\nexport interface StackedBarChartProps extends BarChartProps {\n  data: ChartNestedDataShape[];\n}\n\nexport const StackedBarChart: FC<Partial<StackedBarChartProps>> = (props) => (\n  <BarChart\n    {...props}\n    series={\n      <StackedBarSeries\n        {...STACKED_BAR_SERIES_DEFAULT_PROPS}\n        {...props.series.props}\n      />\n    }\n  />\n);\n","import React, { FC } from 'react';\nimport { ChartNestedDataShape } from '@/common/data';\nimport { BarChartProps, BarChart } from './BarChart';\nimport {\n  STACKED_NORMALIZED_BAR_SERIES_DEFAULT_PROPS,\n  StackedNormalizedBarSeries\n} from './BarSeries';\nimport {\n  LinearYAxis,\n  LinearYAxisTickSeries,\n  LinearYAxisTickLabel,\n  LINEAR_Y_AXIS_TICK_LABEL_DEFAULT_PROPS\n} from '@/common/Axis/LinearAxis';\n\nexport interface StackedNormalizedBarChartProps extends BarChartProps {\n  data: ChartNestedDataShape[];\n}\n\nexport const StackedNormalizedBarChart: FC<\n  Partial<StackedNormalizedBarChartProps>\n> = (props) => (\n  <BarChart\n    {...STACKED_NORMALIZED_BAR_CHART_DEFAULT_PROPS}\n    {...props}\n    series={\n      <StackedNormalizedBarSeries\n        {...STACKED_NORMALIZED_BAR_SERIES_DEFAULT_PROPS}\n        {...props.series.props}\n      />\n    }\n  />\n);\n\nconst STACKED_NORMALIZED_BAR_CHART_DEFAULT_PROPS = {\n  yAxis: (\n    <LinearYAxis\n      type=\"value\"\n      tickSeries={\n        <LinearYAxisTickSeries\n          label={\n            <LinearYAxisTickLabel\n              {...LINEAR_Y_AXIS_TICK_LABEL_DEFAULT_PROPS}\n              rotation={false}\n              format={(data) => `${data * 100}%`}\n            />\n          }\n        />\n      }\n    />\n  )\n};\n","import React, { FC } from 'react';\nimport { ChartShallowDataShape } from '@/common/data';\nimport { BarChartProps, BarChart } from './BarChart';\nimport {\n  HISTOGRAM_BAR_SERIES_DEFAULT_PROPS,\n  HistogramBarSeries\n} from './BarSeries';\n\nexport interface HistogramBarChartProps extends BarChartProps {\n  data: ChartShallowDataShape[];\n}\n\nexport const HistogramBarChart: FC<Partial<HistogramBarChartProps>> = (\n  props\n) => (\n  <BarChart\n    {...props}\n    series={\n      <HistogramBarSeries\n        {...HISTOGRAM_BAR_SERIES_DEFAULT_PROPS}\n        {...props.series.props}\n      />\n    }\n  />\n);\n","import React, { FC } from 'react';\nimport { AreaSeries, Line, AreaSeriesProps } from '@/AreaChart';\n\nexport type LineSeriesProps = AreaSeriesProps;\n\nexport const LineSeries: FC<Partial<LineSeriesProps>> = (props) => (\n  <AreaSeries area={null} line={<Line strokeWidth={3} />} {...props} />\n);\n","import React, { FC } from 'react';\nimport { AreaChart, AreaChartProps } from '@/AreaChart';\nimport { LineSeries } from './LineSeries';\n\nexport type LineChartProps = AreaChartProps;\n\nexport const LineChart: FC<Partial<LineChartProps>> = (props) => (\n  <AreaChart series={<LineSeries />} {...props} />\n);\n","import React, { Fragment, ReactElement, FC, useCallback } from 'react';\nimport {\n  geoNaturalEarth1,\n  geoPath,\n  GeoProjection,\n  GeoPath,\n  geoMercator\n} from 'd3-geo';\nimport {\n  ChartProps,\n  ChartContainer,\n  ChartContainerChildProps\n} from '@/common/containers/ChartContainer';\nimport { CloneElement } from 'reablocks';\nimport { MapMarkerProps, MapMarker } from './MapMarker';\nimport { motion } from 'motion/react';\n\ntype MarkerElement = ReactElement<MapMarkerProps, typeof MapMarker>;\n\nexport interface MapProps extends ChartProps {\n  markers?: MarkerElement[];\n  data: any;\n  fill?: string;\n  /**\n   * Determines how the map transforms spherical geometry to planar geometry\n   */\n  projection?: 'mercator' | 'natural-earth';\n}\n\nexport const Map: FC<MapProps> = ({\n  id,\n  width,\n  height,\n  margins,\n  className,\n  containerClassName,\n  markers,\n  data,\n  fill = 'rgba(255, 255, 255, 0.3)',\n  projection = 'mercator'\n}) => {\n  const getProjection = useCallback(\n    ({ chartWidth, chartHeight }: ChartContainerChildProps) => {\n      if (projection === 'natural-earth') {\n        return geoNaturalEarth1()\n          .fitSize([chartWidth, chartHeight], data)\n          .center([0, 0]);\n      }\n      return geoMercator()\n        .fitSize([chartWidth, chartHeight], data)\n        .center([0, 35]);\n    },\n    [data, projection]\n  );\n\n  const renderMarker = useCallback(\n    (marker: MarkerElement, index: number, projection: GeoProjection) => {\n      const position = projection(marker.props.coordinates);\n\n      if (!position) {\n        console.warn(\n          `Position for ${marker.props.coordinates.toString()} not found.`\n        );\n        return null;\n      }\n\n      return (\n        <CloneElement<MapMarkerProps>\n          element={marker}\n          cx={position[0]}\n          cy={position[1]}\n          index={index}\n        />\n      );\n    },\n    []\n  );\n\n  const renderCountry = useCallback(\n    (point, index: number, path: GeoPath) => {\n      // Exclude ATA\n      if (point.id === '010') {\n        return null;\n      }\n\n      return <path key={`path-${index}`} d={path(point)!} fill={fill} />;\n    },\n    [fill]\n  );\n\n  const renderChart = useCallback(\n    (containerProps: ChartContainerChildProps) => {\n      if (!data) {\n        return null;\n      }\n\n      const geoProjection = getProjection(containerProps);\n      const path = geoPath().projection(geoProjection);\n\n      return (\n        <motion.g\n          initial={{\n            opacity: 0\n          }}\n          animate={{\n            opacity: 1\n          }}\n        >\n          {data.features.map((point, index) =>\n            renderCountry(point, index, path)\n          )}\n          {markers &&\n            markers.map((marker, index) => (\n              <Fragment key={`marker-${index}`}>\n                {renderMarker(marker, index, geoProjection)}\n              </Fragment>\n            ))}\n        </motion.g>\n      );\n    },\n    [data, getProjection, markers, renderCountry, renderMarker]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      height={height}\n      margins={margins}\n      containerClassName={containerClassName}\n      xAxisVisible={false}\n      yAxisVisible={false}\n      className={className}\n    >\n      {(props) => renderChart(props)}\n    </ChartContainer>\n  );\n};\n","import React, { Fragment, useRef, useState, FC, useMemo } from 'react';\nimport { Tooltip } from 'reablocks';\nimport { motion } from 'motion/react';\nimport css from './MapMarker.module.css';\nimport { tooltipTheme } from '@/common';\nimport { offset } from '@floating-ui/dom';\n\nexport interface MapMarkerProps {\n  coordinates: [number, number];\n  index: number;\n  cy?: number;\n  cx?: number;\n  size?: number;\n  tooltip?: any;\n  onClick?: () => void;\n}\n\nexport const MapMarker: FC<Partial<MapMarkerProps>> = ({\n  size = 3,\n  index,\n  tooltip,\n  cx,\n  cy,\n  onClick = () => undefined\n}) => {\n  const ref = useRef<SVGCircleElement | null>(null);\n  const [active, setActive] = useState<boolean>(false);\n\n  const ariaLabelData = useMemo(\n    () => (typeof tooltip === 'string' ? tooltip : 'map marker'),\n    [tooltip]\n  );\n\n  return (\n    <Fragment>\n      <motion.circle\n        initial={{\n          opacity: 0,\n          scale: 0.02\n        }}\n        animate={{\n          opacity: 1,\n          scale: 1\n        }}\n        transition={{\n          delay: index! * 0.3\n        }}\n        ref={ref}\n        className={css.marker}\n        cx={cx}\n        cy={cy}\n        r={size}\n        onMouseEnter={() => setActive(true)}\n        onMouseLeave={() => setActive(false)}\n        onClick={onClick}\n        tabIndex={0}\n        aria-label={ariaLabelData}\n        role=\"graphics-document\"\n      />\n      {tooltip && (\n        <Tooltip\n          theme={tooltipTheme}\n          visible={active}\n          reference={ref}\n          modifiers={[offset({ mainAxis: 0, crossAxis: 3 })]}\n          content={tooltip}\n        />\n      )}\n    </Fragment>\n  );\n};\n","import { useEffect, useMemo, useRef } from 'react';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\nimport { useMotionValue, useSpring } from 'motion/react';\nimport { interpolate } from 'd3-interpolate';\n\nexport const useInterpolate = ({ data, animated, arc }) => {\n  const exit = useMemo(() => {\n    const startAngle = data.startAngle;\n    const endAngle = animated ? startAngle : data.endAngle;\n\n    return {\n      ...data,\n      startAngle,\n      endAngle\n    };\n  }, [data, animated]);\n\n  const prevData = useRef(exit);\n  const d = useMotionValue(exit);\n  const spring = useSpring(0, DEFAULT_TRANSITION);\n\n  useEffect(() => {\n    const interpolator = interpolate(prevData.current, data);\n    const prevSpring = spring.get();\n\n    spring.set(prevSpring + 1);\n\n    return spring.on('change', (v) => {\n      const newData = interpolator(v - prevSpring);\n      prevData.current = newData;\n\n      d.set(arc(newData));\n    });\n  }, [arc, d, data, exit, spring]);\n\n  return d;\n};\n","import React, { ReactElement, useState, FC, useRef, useMemo } from 'react';\nimport chroma from 'chroma-js';\nimport { motion } from 'motion/react';\nimport { CloneElement } from 'reablocks';\nimport { ArcData } from '@/PieChart';\nimport { ChartTooltip, ChartTooltipProps } from '@/common/Tooltip';\nimport { useInterpolate } from './useInterpolate';\nimport { useHoverIntent } from '@/common/utils/useHoverIntent';\nimport { Gradient, GradientProps } from '@/common/Gradient';\nimport { getAriaLabel } from '@/common';\n\nexport interface PieArcMouseEvent {\n  value: ArcData['data'];\n  nativeEvent: React.MouseEvent<SVGPathElement>;\n}\n\nexport interface PieArcProps {\n  /**\n   * Unique id for arc\n   */\n  id?: string;\n\n  /**\n   * The arc generator function returning an arc path\n   * @param data\n   */\n  arc?: (data: ArcData) => string | null;\n\n  /**\n   * Data is the datum passed to the arc generator function\n   */\n  data?: ArcData;\n\n  /**\n   * Color\n   */\n  color?: string;\n\n  /**\n   * Animate\n   */\n  animated?: boolean;\n\n  /**\n   * Tooltip component\n   */\n  tooltip?: ReactElement<ChartTooltipProps, typeof ChartTooltip> | null;\n\n  /**\n   * The cursor type used when hovering\n   */\n  cursor?: string;\n\n  /**\n   * Disable the arc\n   */\n  disabled?: boolean;\n\n  /**\n   * Gradient shades for the bar.\n   */\n  gradient?: ReactElement<GradientProps, typeof Gradient> | null;\n\n  /**\n   * OnClick event handler\n   * @param e Click event\n   */\n  onClick?: (e: PieArcMouseEvent) => void;\n\n  /**\n   * MouseEnter event handler\n   * @param e MouseEnter event\n   */\n  onMouseEnter?: (e: PieArcMouseEvent) => void;\n\n  /**\n   * MouseLeave event handler\n   * @param e MouseLeave event\n   */\n  onMouseLeave?: (e: PieArcMouseEvent) => void;\n}\n\nexport const PieArc: FC<PieArcProps> = ({\n  id,\n  color,\n  data,\n  arc,\n  cursor = 'initial',\n  animated = true,\n  gradient,\n  disabled = false,\n  onClick,\n  onMouseEnter,\n  onMouseLeave,\n  tooltip = <ChartTooltip />\n}) => {\n  const arcRef = useRef<SVGPathElement | null>(null);\n  const d = useInterpolate({ animated, arc, data });\n  const [active, setActive] = useState<boolean>(false);\n  const fill = useMemo(\n    () => (active ? chroma(color).brighten(0.5) : color),\n    [color, active]\n  );\n\n  const { pointerOut, pointerOver } = useHoverIntent({\n    onPointerOver: (event) => {\n      if (!disabled) {\n        setActive(true);\n        onMouseEnter?.({\n          value: data.data,\n          nativeEvent: event as any\n        });\n      }\n    },\n    onPointerOut: (event) => {\n      if (!disabled) {\n        setActive(false);\n        onMouseLeave?.({\n          value: data.data,\n          nativeEvent: event as any\n        });\n      }\n    }\n  });\n\n  const internalFill = useMemo(() => {\n    if (gradient) {\n      return `url(#gradient-${id})`;\n    }\n\n    return color;\n  }, [gradient, id, color]);\n\n  const tooltipData = useMemo(\n    () => ({ y: data.data.data, x: data.data.key }),\n    [data]\n  );\n  const ariaLabelData = useMemo(() => getAriaLabel(tooltipData), [tooltipData]);\n\n  return (\n    <g\n      ref={arcRef}\n      tabIndex={0}\n      aria-label={ariaLabelData}\n      role=\"graphics-document\"\n    >\n      <motion.path\n        role=\"graphics-symbol\"\n        d={d}\n        style={{ cursor }}\n        fill={internalFill}\n        onPointerOver={pointerOver}\n        onPointerOut={pointerOut}\n        onClick={(event) => {\n          if (!disabled) {\n            onClick?.({\n              value: data.data,\n              nativeEvent: event\n            });\n          }\n        }}\n      />\n      {gradient && (\n        <CloneElement<GradientProps>\n          element={gradient}\n          id={`gradient-${id}`}\n          direction=\"horizontal\"\n          color={fill}\n        />\n      )}\n      {!tooltip?.props?.disabled && (\n        <CloneElement<ChartTooltipProps>\n          element={tooltip}\n          visible={!!active}\n          reference={arcRef}\n          value={tooltipData}\n        />\n      )}\n    </g>\n  );\n};\n","type Coordinate = [number, number];\n\n/**\n * Finds intermediate point between two points so that this three points\n * can be nicely connected by two lines. One of this lines must be horizontal\n */\nexport function findBreakPoint(\n  [startX, startY]: Coordinate,\n  [endX, endY]: Coordinate\n): Coordinate {\n  let breakPoint: Coordinate = [0, 0];\n\n  // whether we should create breakpoint near pie or near label\n  const breakPointCondition = (endY - startY) * Math.sign(startY) >= 0;\n\n  if (breakPointCondition) {\n    // extend the line starting from startY till the endY\n    let scale = Math.abs(endY / startY) || 1;\n    const minScale = 1;\n    const maxScale = Math.abs(endX / startX) || 1;\n\n    scale = Math.max(Math.min(maxScale, scale), minScale);\n\n    breakPoint = [startX * scale, endY];\n  } else {\n    // some arbitrary scale to ensure that break point will be placed\n    // at some horizontal distance from the end point\n    let scale = 0.85;\n    const minScale = Math.abs(startX / endX) || 1;\n    const maxScale = 1;\n\n    scale = Math.max(Math.min(maxScale, scale), minScale);\n\n    breakPoint = [endX * scale, startY];\n  }\n\n  return breakPoint;\n}\n","import React, { FC } from 'react';\nimport { motion } from 'motion/react';\nimport { arc } from 'd3-shape';\nimport { ArcData } from '@/PieChart';\nimport { ChartInternalDataTypes } from '@/common/data/types';\nimport { formatValue } from '@/common/utils/formatting';\nimport { findBreakPoint } from './findBreakPoint';\nimport { mergeDefaultProps } from '@/common';\n\nexport interface PieArcLabelProps {\n  /**\n   * Data set by the parent component\n   */\n  data: ArcData;\n\n  /**\n   * A function returning the centroid of the corresponding `PieArc`\n   * @param d PieArcDatum\n   */\n  centroid: (d: ArcData) => [number, number];\n\n  /**\n   * A Formatting function for the label value\n   * @param v The label value\n   */\n  format?: (\n    // have added any because not sure whether this change won't be breaking\n    v: any & ArcData['data'] & { textAnchor: 'start' | 'end' }\n  ) => React.ReactNode;\n\n  /**\n   * FontFill color\n   */\n  fontFill: string;\n\n  /**\n   * FontSize\n   */\n  fontSize: number;\n\n  /**\n   * FontFamily\n   */\n  fontFamily: string;\n\n  /**\n   * Line stroke of the label connector\n   */\n  lineStroke: string;\n\n  /**\n   * Outer radius of the corresponding `PieArc`\n   */\n  outerRadius: number;\n\n  /**\n   * y Padding of the label\n   */\n  padding: string;\n\n  /**\n   * The label position set by the parent component\n   */\n  position: [number, number];\n\n  /**\n   * Width of the label\n   */\n  width?: number;\n\n  /**\n   * Height of the label\n   */\n  height?: number;\n}\n\nconst getTextAnchor = ({ startAngle, endAngle }: ArcData) =>\n  // we could also use the sign of position[0]\n  startAngle + (endAngle - startAngle) / 2 < Math.PI ? 'start' : 'end';\n\nexport const PieArcLabel: FC<Partial<PieArcLabelProps>> = (props) => {\n  const {\n    centroid,\n    data,\n    lineStroke,\n    padding,\n    fontSize,\n    fontFill,\n    format,\n    fontFamily,\n    position,\n    outerRadius,\n    width,\n    height\n  } = mergeDefaultProps(PIE_ARC_LABEL_DEFAULT_PROPS, props);\n\n  const textAnchor = getTextAnchor(data);\n  const text: React.ReactNode = format\n    ? format({ ...data.data, textAnchor })\n    : formatValue(data.data.key as ChartInternalDataTypes);\n  const [posX, posY] = position;\n  // we want to have at least some pixels of straight line (margin)\n  // from pie section till we start to change line direction\n  const minRadius = outerRadius + 4;\n\n  const startPoint = centroid(data);\n  const innerPoint = arc<ArcData>()\n    .innerRadius(minRadius)\n    .outerRadius(minRadius)\n    .centroid(data);\n  const breakPoint = findBreakPoint(innerPoint, position);\n\n  return (\n    <motion.g\n      initial={{ opacity: 0 }}\n      animate={{ opacity: 1 }}\n      exit={{ opacity: 0 }}\n      transition={{\n        duration: 0.1\n      }}\n    >\n      {typeof text === 'string' ? (\n        <>\n          <title>{text}</title>\n          <text\n            dy={padding}\n            fill={fontFill}\n            fontSize={fontSize}\n            fontFamily={fontFamily}\n            textAnchor={textAnchor}\n            style={{\n              shapeRendering: 'crispEdges',\n              transform: `translate3d(${posX}px,${posY}px, 0)`\n            }}\n          >\n            {text}\n          </text>\n        </>\n      ) : (\n        <foreignObject\n          width={width}\n          height={height}\n          style={{\n            transform: `translate3d(${\n              textAnchor === 'start' ? posX : posX - width\n            }px,${posY - height / 2}px, 0)`,\n            color: fontFill,\n            fontFamily,\n            fontSize\n          }}\n        >\n          {text}\n        </foreignObject>\n      )}\n      <polyline\n        fill=\"none\"\n        stroke={lineStroke}\n        points={`${startPoint},${innerPoint},${breakPoint},${position}`}\n      />\n    </motion.g>\n  );\n};\n\nexport const PIE_ARC_LABEL_DEFAULT_PROPS = {\n  format: undefined,\n  lineStroke: 'rgba(127,127,127,0.5)',\n  fontFill: '#8F979F',\n  fontSize: 11,\n  fontFamily: 'sans-serif',\n  padding: '.35em',\n  height: 11\n};\n","import { max } from 'd3-array';\nimport { arc } from 'd3-shape';\nimport { ArcData } from '@/PieChart';\n\nconst factor = 1.2;\nconst midAngle = (d: ArcData) => d.startAngle + (d.endAngle - d.startAngle) / 2;\nconst labelVisible = (arc: ArcData) =>\n  arc.endAngle - arc.startAngle > Math.PI / 30;\n\nfunction shouldDisplayLabel(displayAllLabels: boolean, arcData: ArcData) {\n  return displayAllLabels || labelVisible(arcData);\n}\n\nexport function calculateOuterRadius(\n  outerRadius: number,\n  data: ArcData[],\n  point: ArcData,\n  explode: boolean\n) {\n  if (!explode || data === undefined) {\n    return outerRadius;\n  }\n\n  const maxVal = max(data, (d: ArcData) => d.value);\n\n  return (outerRadius * point.value) / maxVal;\n}\n\nexport function calculateCentroid(\n  data: ArcData[],\n  innerRadius: number,\n  outerRadius: number,\n  explode: boolean\n) {\n  return (point: ArcData) => {\n    const newOuter = calculateOuterRadius(outerRadius, data, point, explode);\n\n    return arc<any, ArcData>()\n      .innerRadius(innerRadius)\n      .outerRadius(newOuter)\n      .centroid(point);\n  };\n}\n\nexport function calculateRadius(height, width, label, arcWidth, doughnut) {\n  const minDimension = Math.min(width, height);\n\n  let outerRadius = minDimension / 2;\n  let labelWidth = 0;\n\n  if (label) {\n    labelWidth = label.props.width;\n\n    if (labelWidth) {\n      const outerArcRadius = width / 2 - labelWidth;\n\n      outerRadius = Math.min(outerArcRadius / factor, height / 2);\n    } else {\n      outerRadius = minDimension / 3;\n      labelWidth = width / 2 - outerRadius * factor;\n    }\n  }\n\n  const innerRadius = doughnut ? outerRadius * (1 - arcWidth) : 0;\n\n  return {\n    outerRadius,\n    innerRadius,\n    labelWidth\n  };\n}\n\nexport function calculateInnerArc(\n  data: ArcData[],\n  innerRadius: number,\n  outerRadius: number,\n  cornerRadius: number,\n  padAngle: number,\n  padRadius: number,\n  explode: boolean\n) {\n  return (point: ArcData) => {\n    const newOuter = calculateOuterRadius(outerRadius, data, point, explode);\n\n    return arc<any, ArcData>()\n      .innerRadius(innerRadius)\n      .outerRadius(newOuter)\n      .cornerRadius(cornerRadius)\n      .padRadius(padRadius)\n      .padAngle(padAngle)(point);\n  };\n}\n\nexport function calculateLabelPositions(\n  data: ArcData[],\n  outerRadius: number,\n  minDistance: number,\n  cornerRadius: number,\n  padAngle: number,\n  padRadius: number,\n  displayAllLabels: boolean\n): Array<[number, number] | null> {\n  const outerArcRadius = outerRadius * factor;\n  const outerArc = arc<any, ArcData>()\n    .innerRadius(outerArcRadius)\n    .outerRadius(outerArcRadius)\n    .cornerRadius(cornerRadius)\n    .padAngle(padAngle)\n    .padRadius(padRadius);\n\n  const positions: Array<[number, number] | null> = data.map((d) => {\n    if (!shouldDisplayLabel(displayAllLabels, d)) {\n      return null;\n    }\n\n    const pos = outerArc.centroid(d);\n\n    // reposition the labels to the left/right from outerArc centroid\n    // so that all labels won't collide with pie\n    // when we will vertically reposition them\n    pos[0] = outerArcRadius * (midAngle(d) < Math.PI ? 1 : -1);\n\n    return pos;\n  });\n\n  for (let i = 0; i < data.length - 1; i++) {\n    if (!positions[i]) {\n      continue;\n    }\n\n    const [aPosX, aPosY] = positions[i];\n\n    for (let j = i + 1; j < data.length; j++) {\n      if (!positions[j]) {\n        continue;\n      }\n\n      const [bPosX, bPosY] = positions[j];\n\n      // if they're on the same side (both with - or + sign)\n      if (bPosX * aPosX > 0) {\n        // if they're overlapping\n        const overlap = minDistance - Math.abs(bPosY - aPosY);\n\n        if (overlap > 0) {\n          // push the second up or down\n          positions[j][1] += Math.sign(bPosX) * overlap;\n        }\n      }\n    }\n  }\n\n  return positions;\n}\n","import React, { FC, Fragment, ReactElement, useMemo } from 'react';\nimport { CloneElement } from 'reablocks';\nimport { ArcData } from '@/PieChart';\nimport { PieArc, PieArcProps } from './PieArc';\nimport {\n  PIE_ARC_LABEL_DEFAULT_PROPS,\n  PieArcLabel,\n  PieArcLabelProps\n} from './PieArcLabel';\nimport { getColor, ColorSchemeType } from '@/common/color';\nimport {\n  calculateCentroid,\n  calculateInnerArc,\n  calculateLabelPositions,\n  calculateRadius\n} from './radiusUtils';\nimport { identifier } from 'safe-identifier';\nimport { mergeDefaultProps } from '@/common';\n\nexport interface PieArcSeriesProps {\n  /**\n   * Unique id for the series.\n   */\n  id?: string;\n\n  /**\n   * Animated set by the `PieArc` components.\n   */\n  animated: boolean;\n\n  /**\n   * Outer radius set by the parent component.\n   */\n  outerRadius: number;\n\n  /**\n   * Inner radius set by the parent component.\n   */\n  innerRadius: number;\n\n  /**\n   * Pad Angle between adjacent arcs, see https://github.com/d3/d3-shape#arc_padAngle\n   */\n  padAngle: number;\n\n  /**\n   * Pad Radius between adjacent arcs, see https://github.com/d3/d3-shape#arc_padRadius\n   */\n  padRadius: number;\n\n  /**\n   * Corner Radius of the arcs, see https://github.com/d3/d3-shape#arc_cornerRadius\n   */\n  cornerRadius: number;\n\n  /**\n   * Data set by the parent component.\n   */\n  data: ArcData[];\n\n  /**\n   * Width of the arc\n   */\n  arcWidth: number;\n\n  /**\n   * Doughnut, render as a donut shape\n   */\n  doughnut: boolean;\n\n  /**\n   * Explode: OuterRadius will be adjusted by the data property\n   */\n  explode: boolean;\n\n  /**\n   * Display all labels shows labels even if there is little space\n   */\n  displayAllLabels: boolean;\n\n  /**\n   * Label component\n   */\n  label?: ReactElement<PieArcLabelProps, typeof PieArcLabel> | null;\n\n  /**\n   * Arc Component\n   */\n  arc: ReactElement<PieArcProps, typeof PieArc>;\n\n  /**\n   * Color scheme\n   */\n  colorScheme: ColorSchemeType;\n\n  /**\n   * Height set by the parent component\n   */\n  height: number;\n\n  /**\n   * Width set by the parent component\n   */\n  width: number;\n}\n\nexport const PieArcSeries: FC<Partial<PieArcSeriesProps>> = (props) => {\n  const {\n    doughnut,\n    arcWidth,\n    label,\n    colorScheme,\n    width,\n    displayAllLabels,\n    height,\n    explode,\n    id,\n    animated,\n    cornerRadius,\n    padAngle,\n    padRadius,\n    arc,\n    data\n  } = mergeDefaultProps(PIE_ARC_SERIES_DEFAULT_PROPS, props);\n\n  const labelProps = useMemo(\n    () => ({ ...PIE_ARC_LABEL_DEFAULT_PROPS, ...label?.props }),\n    [label]\n  );\n\n  const { outerRadius, innerRadius, labelWidth } = calculateRadius(\n    height,\n    width,\n    label,\n    arcWidth,\n    doughnut\n  );\n\n  const innerArc = calculateInnerArc(\n    data,\n    innerRadius,\n    outerRadius,\n    cornerRadius,\n    padAngle,\n    padRadius,\n    explode\n  );\n\n  const positions = label\n    ? calculateLabelPositions(\n      data,\n      outerRadius,\n      // 4 is for vertical margins between labels\n      labelProps.height + 4,\n      cornerRadius,\n      padAngle,\n      padRadius,\n      displayAllLabels\n    )\n    : [];\n\n  const centroid = calculateCentroid(data, innerRadius, outerRadius, explode);\n\n  function renderItem(arcData: ArcData, index: number) {\n    const safeKey = identifier(arcData.data.key.toString());\n    const color = getColor({\n      data,\n      colorScheme,\n      point: arcData.data,\n      index\n    });\n\n    return (\n      <Fragment key={safeKey}>\n        {positions[index] && (\n          <CloneElement<PieArcLabelProps>\n            id={id}\n            element={label}\n            data={arcData}\n            centroid={centroid}\n            outerRadius={outerRadius}\n            width={labelWidth}\n            position={positions[index]}\n          />\n        )}\n        <CloneElement<PieArcProps>\n          element={arc}\n          id={`${id}-arc-${safeKey}`}\n          data={arcData}\n          animated={animated}\n          arc={innerArc}\n          color={color}\n        />\n      </Fragment>\n    );\n  }\n\n  return <>{data.map(renderItem)}</>;\n};\n\nexport const PIE_ARC_SERIES_DEFAULT_PROPS = {\n  animated: true,\n  colorScheme: 'cybertron',\n  innerRadius: 0,\n  cornerRadius: 0,\n  padAngle: 0,\n  padRadius: 0,\n  explode: false,\n  displayAllLabels: false,\n  arcWidth: 0.25,\n  label: <PieArcLabel />,\n  arc: <PieArc />\n};\n","import React, { FC, ReactElement, useCallback, useMemo } from 'react';\nimport classNames from 'classnames';\nimport { PieArcDatum } from 'd3-shape';\nimport { pie } from 'd3-shape';\nimport { CloneElement, useId } from 'reablocks';\nimport {\n  ChartProps,\n  ChartContainer,\n  ChartContainerChildProps\n} from '@/common/containers';\nimport { ChartShallowDataShape } from '@/common/data';\nimport { PieArcSeries, PieArcSeriesProps } from './PieArcSeries';\n\nexport type ArcData = PieArcDatum<ChartShallowDataShape>;\n\nexport interface PieChartProps extends ChartProps {\n  /**\n   * Data the chart will receive to render.\n   */\n  data?: ChartShallowDataShape[];\n\n  /**\n   * Whether the chart is disabled.\n   */\n  disabled?: boolean;\n\n  /**\n   * Whether to display labels even if their value has a small display radius.\n   */\n  displayAllLabels?: boolean;\n\n  /**\n   * The series component that renders the arc components.\n   */\n  series?: ReactElement<PieArcSeriesProps, typeof PieArcSeries>;\n}\n\nexport const PieChart: FC<PieChartProps> = ({\n  id,\n  width,\n  height,\n  className,\n  containerClassName,\n  displayAllLabels,\n  data = [],\n  margins = 10,\n  series = <PieArcSeries />\n}) => {\n  const newId = useId(id);\n\n  const internalData = useMemo(() => {\n    const pieLayout = pie<void, ChartShallowDataShape>().value(\n      (d: ChartShallowDataShape) => Number(d.data)\n    );\n\n    // Explode sort doesn't work right...\n    if (!series.props.explode) {\n      pieLayout.sort(null);\n    }\n\n    return pieLayout(data);\n  }, [data, series]);\n\n  const renderSeries = useCallback(\n    ({ chartWidth, chartHeight }: ChartContainerChildProps) => {\n      return (\n        <CloneElement<PieArcSeriesProps>\n          element={series}\n          id={newId}\n          data={internalData}\n          height={chartHeight}\n          width={chartWidth}\n          displayAllLabels={displayAllLabels}\n        />\n      );\n    },\n    [displayAllLabels, internalData, newId, series]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      height={height}\n      margins={margins}\n      containerClassName={containerClassName}\n      xAxisVisible={false}\n      yAxisVisible={false}\n      center={true}\n      className={classNames(className)}\n    >\n      {renderSeries}\n    </ChartContainer>\n  );\n};\n","import { SankeyNode, SankeyLink } from 'd3-sankey';\n\nexport interface NodeExtra {\n  /**\n   * ID of the node. If not provided, the node's index will be used.\n   */\n  id?: string;\n\n  /**\n   * Title of the node.\n   */\n  title: string;\n\n  /**\n   * Color of the node.\n   */\n  color?: string;\n}\n\nexport interface LinkExtra {\n  /**\n   * Color of the link.\n   */\n  color?: string;\n}\n\nexport type SankeyNodeExtra = SankeyNode<NodeExtra, LinkExtra>;\n\nexport type SankeyLinkExtra = SankeyLink<NodeExtra, LinkExtra>;\n\nexport const DEFAULT_COLOR = 'rgba(255, 255, 255, 0.2)';\n\nexport const LABEL_PADDING_PERCENT = 0.1;\n","import React, {\n  FC,\n  Fragment,\n  ReactElement,\n  useCallback,\n  useMemo,\n  useState\n} from 'react';\nimport {\n  sankey,\n  sankeyLeft,\n  sankeyRight,\n  sankeyCenter,\n  sankeyJustify\n} from 'd3-sankey';\nimport {\n  ChartProps,\n  ChartContainer,\n  ChartContainerChildProps\n} from '@/common/containers/ChartContainer';\nimport { CloneElement, useId } from 'reablocks';\n\nimport { getColor, ColorSchemeType } from '@/common/color';\nimport { SankeyNodeProps, SankeyNode } from './SankeyNode';\nimport { SankeyLinkProps, SankeyLink } from './SankeyLink';\nimport {\n  SankeyNodeExtra,\n  SankeyLinkExtra,\n  LABEL_PADDING_PERCENT\n} from './utils';\nimport { SankeyLabelPosition } from './SankeyLabel';\n\nconst JUSTIFICATION = {\n  justify: sankeyJustify,\n  center: sankeyCenter,\n  left: sankeyLeft,\n  right: sankeyRight\n};\n\nexport type Justification = 'justify' | 'center' | 'left' | 'right';\n\nexport type NodeElement = ReactElement<SankeyNodeProps, typeof SankeyNode>;\n\nexport type LinkElement = ReactElement<SankeyLinkProps, typeof SankeyLink>;\n\nexport interface SankeyProps extends ChartProps {\n  /**\n   * Whether to animate the enter/update/exit. Set internally by `SankeyNode` and `SankeyLink`.\n   */\n  animated?: boolean;\n\n  /**\n   * Color scheme for the nodes. Set internally by `SankeyNode`.\n   */\n  colorScheme?: ColorSchemeType;\n\n  /**\n   * The node alignment method.\n   */\n  justification?: Justification;\n\n  /**\n   * Width of the node.\n   */\n  nodeWidth?: number;\n\n  /**\n   * Vertical padding between nodes in the same column.\n   */\n  nodePadding?: number;\n\n  /**\n   * Label position.\n   */\n  labelPosition?: SankeyLabelPosition;\n\n  /**\n   * Sort function for the nodes.\n   *\n   * If sort is specified, sets the node sort method and returns this Sankey generator.\n   * If sort is not specified, returns the current node sort method, which defaults\n   * to undefined, indicating that vertical order of nodes within each column will\n   * be determined automatically by the layout. If sort is null, the order is fixed\n   * by the input. Otherwise, the specified sort function determines the order;\n   * the function is passed two nodes, and must return a value less than 0 if the\n   * first node should be above the second, and a value greater than 0 if the second\n   * node should be above the first, or 0 if the order is not specified.\n   *\n   * Reference: https://github.com/d3/d3-sankey#sankey_nodeSort\n   */\n  nodeSort?: (a: any, b: any) => number;\n\n  /**\n   * Nodes that are rendered.\n   */\n  nodes: NodeElement[];\n\n  /**\n   * Links that are rendered.\n   */\n  links: LinkElement[];\n}\n\nexport const Sankey: FC<SankeyProps> = ({\n  width,\n  height,\n  margins,\n  className,\n  animated = true,\n  links,\n  justification = 'justify',\n  nodeWidth = 15,\n  nodePadding = 10,\n  labelPosition = 'inside',\n  nodeSort,\n  colorScheme,\n  nodes,\n  containerClassName,\n  ...rest\n}) => {\n  const id = useId(rest.id);\n  const [activeNodes, setActiveNodes] = useState<SankeyNodeExtra[]>([]);\n  const [activeLinks, setActiveLinks] = useState<SankeyLinkExtra[]>([]);\n\n  const getNodeColor = useCallback(\n    (node: NodeElement, index: any) => {\n      if (colorScheme) {\n        return getColor({\n          data: nodes,\n          colorScheme,\n          point: nodes[index],\n          index\n        });\n      } else {\n        return node.props.color;\n      }\n    },\n    [colorScheme, nodes]\n  );\n\n  const onNodeActive = useCallback((node: SankeyNodeExtra) => {\n    const activeNodes: SankeyNodeExtra[] = [node];\n    const activeLinks: SankeyLinkExtra[] = [];\n\n    if (node.sourceLinks) {\n      activeLinks.push(...node.sourceLinks);\n      node.sourceLinks.forEach((sourceLink) => {\n        const sourceLinkTarget = sourceLink.target as SankeyNodeExtra;\n        if (sourceLinkTarget.index !== node.index) {\n          activeNodes.push(sourceLinkTarget);\n        }\n      });\n    }\n\n    if (node.targetLinks) {\n      activeLinks.push(...node.targetLinks);\n      node.targetLinks.forEach((targetLink) => {\n        const targetLinkSource = targetLink.source as SankeyNodeExtra;\n        if (targetLinkSource.index !== node.index) {\n          activeNodes.push(targetLinkSource);\n        }\n      });\n    }\n\n    setActiveNodes(activeNodes);\n    setActiveLinks(activeLinks);\n  }, []);\n\n  const onLinkActive = useCallback((link: SankeyLinkExtra) => {\n    const activeNodes: SankeyNodeExtra[] = [\n      link.source as SankeyNodeExtra,\n      link.target as SankeyNodeExtra\n    ];\n    const activeLinks: SankeyLinkExtra[] = [link];\n\n    setActiveNodes(activeNodes);\n    setActiveLinks(activeLinks);\n  }, []);\n\n  const onInactive = useCallback(() => {\n    setActiveNodes([]);\n    setActiveLinks([]);\n  }, []);\n\n  const nodeMap = useMemo(() => {\n    // Not sure what this is for\n    const nodeMap = new Map<string, NodeElement>();\n    nodes.forEach((node: any) => node && nodeMap.set(node.props.title, node));\n\n    return nodeMap;\n  }, [nodes]);\n\n  const renderNode = useCallback(\n    (\n      computedNode: SankeyNodeExtra,\n      index: number,\n      chartWidth: number,\n      node?: NodeElement\n    ) => {\n      const active = activeNodes.some(\n        (node) => node.index === computedNode.index\n      );\n      const disabled = activeNodes.length > 0 && !active;\n      const labelPadding =\n        labelPosition === 'outside' ? LABEL_PADDING_PERCENT : 0;\n\n      return (\n        <CloneElement<SankeyNodeProps>\n          element={node}\n          key={`node-${index}`}\n          active={active}\n          animated={animated}\n          disabled={disabled}\n          chartWidth={chartWidth}\n          onMouseEnter={() => onNodeActive(computedNode)}\n          onMouseLeave={() => onInactive()}\n          labelPosition={labelPosition}\n          labelPadding={labelPadding}\n          {...computedNode}\n        />\n      );\n    },\n    [activeNodes, animated, onInactive, onNodeActive, labelPosition]\n  );\n\n  const renderLink = useCallback(\n    (computedLink: SankeyLinkExtra, index: number) => {\n      const active = activeLinks.some(\n        (link) => link.index === computedLink.index\n      );\n      const disabled = activeLinks.length > 0 && !active;\n\n      return (\n        <CloneElement<SankeyLinkProps>\n          element={links[index]}\n          active={active}\n          animated={animated}\n          key={`link-${index}`}\n          chartId={`sankey-${id}`}\n          disabled={disabled}\n          {...computedLink}\n          onMouseEnter={() => onLinkActive(computedLink)}\n          onMouseLeave={() => onInactive()}\n        />\n      );\n    },\n    [activeLinks, id, animated, links, onInactive, onLinkActive]\n  );\n\n  const getNodesAndLinks = useCallback(\n    (chartWidth: number, chartHeight: number) => {\n      const labelPadding =\n        labelPosition === 'outside' ? LABEL_PADDING_PERCENT : 0;\n      const padding = labelPadding * chartWidth;\n\n      const sankeyChart = sankey()\n        .extent([\n          [1 + padding, 1],\n          [chartWidth - padding, chartHeight]\n        ])\n        .nodeWidth(nodeWidth)\n        .nodePadding(nodePadding)\n        .nodeSort(nodeSort)\n        .nodeAlign(JUSTIFICATION[justification])\n        .nodeId((node: any) => node.id || node.index);\n\n      const nodesCopy: any = nodes.map((node, index) => ({\n        id: node.props.id,\n        title: node.props.title,\n        color: getNodeColor(node, index)\n      }));\n\n      const linksCopy = links.map((link) => ({\n        source: link.props.source,\n        target: link.props.target,\n        value: link.props.value\n      }));\n\n      const { nodes: sankeyNodes, links: sankeyLinks } = sankeyChart({\n        nodes: nodesCopy,\n        links: linksCopy\n      });\n\n      /*\n      // NOTE: Not sure what this is doing\n      sankeyNodes.sort((a, b) => {\n        const aX0 = a && a.x0 ? a.x0 : 0;\n        const aY0 = a && a.y0 ? a.y0 : 0;\n        const bX0 = b && b.x0 ? b.x0 : 0;\n        const bY0 = b && b.y0 ? b.y0 : 0;\n        return aX0 - bX0 || aY0 - bY0;\n      });\n      */\n\n      return { sankeyNodes, sankeyLinks };\n    },\n    [\n      getNodeColor,\n      nodeSort,\n      justification,\n      links,\n      nodePadding,\n      nodeWidth,\n      nodes,\n      labelPosition\n    ]\n  );\n\n  const renderChart = useCallback(\n    ({ id, chartWidth, chartHeight, chartSized }: ChartContainerChildProps) => {\n      if (!chartSized) {\n        return null;\n      }\n\n      const { sankeyNodes, sankeyLinks } = getNodesAndLinks(\n        chartWidth,\n        chartHeight\n      );\n\n      return (\n        <Fragment key=\"group\">\n          {sankeyLinks.map((link, index) =>\n            renderLink(link as SankeyLinkExtra, index)\n          )}\n          {sankeyNodes.map((node: SankeyNodeExtra, index) =>\n            renderNode(node, index, chartWidth, nodeMap.get(node.title))\n          )}\n        </Fragment>\n      );\n    },\n    [getNodesAndLinks, nodeMap, renderLink, renderNode]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      containerClassName={containerClassName}\n      height={height}\n      margins={margins}\n      className={className}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n","import React, { FC } from 'react';\nimport classNames from 'classnames';\nimport { SankeyNodeExtra } from '@/Sankey/utils';\nimport css from './SankeyLabel.module.css';\nimport ellipsize from 'ellipsize';\n\nexport type SankeyLabelPosition = 'inside' | 'outside';\n\nexport interface SankeyLabelFormatProps {\n  x: number;\n  y: number;\n  textAnchor: string;\n  node: SankeyNodeExtra;\n}\n\nexport interface SankeyLabelProps {\n  /**\n   * Whether the element is active or not. Set internally by `Sankey`.\n   */\n  active: boolean;\n\n  /**\n   * Whether the label is disabled. Set internally by `Sankey`.\n   */\n  disabled: boolean;\n\n  /**\n   * Width of the chart. Set internally by `Sankey`.\n   */\n  chartWidth?: number;\n\n  /**\n   * CSS class to apply.\n   */\n  className?: string;\n\n  /**\n   * Fill color.\n   */\n  fill: string;\n\n  /**\n   * Label position. Set internally by `Sankey`.\n   */\n  position?: SankeyLabelPosition;\n\n  /**\n   * Percentage of total width occupied by labels on\n   * either side of the graph inside the container.\n   * Used for auto-ellipsizing labels\n   * Set internally by `Sankey`.\n   */\n  labelPadding?: number;\n\n  /**\n   * Node data. Set internally by `Sankey`.\n   */\n  node?: SankeyNodeExtra;\n\n  /**\n   * Opacity callback. Used internally by `Sankey`.\n   */\n  opacity: (active: boolean, disabled: boolean) => number;\n\n  /**\n   * Padding between the label and the node.\n   */\n  padding?: string | number;\n\n  /**\n   * Whether to show the label or not.\n   */\n  visible: boolean;\n\n  /**\n   * Width of the node set by the 'Sankey'.\n   */\n  nodeWidth: number;\n\n  /**\n   * Custom formatting for the label.\n   */\n  format?: (value: SankeyLabelFormatProps) => any;\n\n  /**\n   * Specify the number of characters at which the text would be ellipsized.\n   * Defaults to 'auto' based on available width and max cut-off at `LABEL_TRUNCATE_LENGTH=10`\n   */\n  ellipsis?: number | 'none' | 'auto';\n}\n\nconst LABEL_PADDING = 5;\nconst LABEL_TRUNCATE_LENGTH = 10;\n\nexport const SankeyLabel: FC<Partial<SankeyLabelProps>> = ({\n  active = false,\n  chartWidth,\n  className,\n  nodeWidth,\n  disabled,\n  fill = '#fff',\n  format,\n  node,\n  position = 'inside',\n  opacity = (active, disabled) => (active ? 1 : disabled ? 0.2 : 0.9),\n  padding,\n  visible = true,\n  ellipsis = 'auto',\n  labelPadding\n}) => {\n  const x0 = node?.x0 || 0;\n  const x1 = node?.x1 || 0;\n  const y0 = node?.y0 || 0;\n  const y1 = node?.y1 || 0;\n  const paddedWidth = nodeWidth + LABEL_PADDING;\n\n  const width = chartWidth || 0;\n  const showRightSide = x0 < width / 2;\n  let x = showRightSide ? x1 + paddedWidth : x0 - paddedWidth;\n  const y = (y1 + y0) / 2;\n\n  let textAnchor = showRightSide ? 'start' : 'end';\n  if (position === 'outside') {\n    textAnchor = showRightSide ? 'end' : 'start';\n    x = showRightSide ? x1 - paddedWidth : x0 + paddedWidth;\n  }\n\n  if (!visible || !node) {\n    return null;\n  }\n\n  let truncatedTitle = '';\n  if (ellipsis === 'auto') {\n    // This math somehow works for now!\n    const avaialableWidth = showRightSide ? x : width - x;\n    truncatedTitle = ellipsize(\n      node.title,\n      Math.min(LABEL_TRUNCATE_LENGTH, avaialableWidth / (labelPadding * 100))\n    );\n  } else if (ellipsis === 'none') {\n    truncatedTitle = node.title;\n  } else {\n    truncatedTitle = ellipsize(node.title, ellipsis);\n  }\n\n  return (\n    <text\n      className={classNames(css.label, className)}\n      x={x}\n      y={y}\n      dy=\"0.35em\"\n      textAnchor={textAnchor}\n      fill={fill}\n      opacity={opacity(active, disabled)}\n      style={{ padding }}\n    >\n      {typeof format === 'function'\n        ? format({ x, y, textAnchor, node })\n        : truncatedTitle}\n    </text>\n  );\n};\n","import React, {\n  Fragment,\n  ReactElement,\n  useCallback,\n  useState,\n  useMemo,\n  useRef,\n  FC\n} from 'react';\nimport { offset } from '@floating-ui/dom';\nimport classNames from 'classnames';\nimport { motion } from 'motion/react';\nimport { sankeyLinkHorizontal } from 'd3-sankey';\nimport { CloneElement } from 'reablocks';\nimport { formatValue } from '@/common/utils/formatting';\nimport { Tooltip, TooltipProps } from 'reablocks';\nimport {\n  NodeExtra,\n  SankeyNodeExtra,\n  SankeyLinkExtra,\n  DEFAULT_COLOR\n} from '@/Sankey/utils';\nimport css from './SankeyLink.module.css';\nimport { useHoverIntent } from '@/common/utils/useHoverIntent';\nimport { tooltipTheme } from '@/common';\n\nexport interface SankeyLinkProps extends SankeyLinkExtra {\n  /**\n   * Color of the link.\n   */\n  color?: string;\n\n  /**\n   * Whether the element is active or not. Set internally by `Sankey`.\n   */\n  active: boolean;\n\n  /**\n   * Whether to animate the enter/update/exit.\n   */\n  animated: boolean;\n\n  /**\n   * Id of Sankey chart. Set internally by `Sankey`.\n   */\n  chartId: string;\n\n  /**\n   * CSS class to apply.\n   */\n  className?: string;\n\n  /**\n   * Whether the node is disabled. Set internally by `Sankey`.\n   */\n  disabled: boolean;\n\n  /**\n   * Whether to use gradient or not.\n   */\n  gradient?: boolean;\n\n  /**\n   * Opacity callback for the link.\n   */\n  opacity: (active: boolean, disabled: boolean) => number;\n\n  /**\n   * CSS styles to apply.\n   */\n  style?: object;\n\n  /**\n   * Tooltip element.\n   */\n  tooltip?: ReactElement<TooltipProps, typeof Tooltip> | null;\n\n  /**\n   * Width of the link. Set internally by `Sankey`.\n   */\n  width: number;\n\n  /**\n   * Event for when the link is clicked.\n   */\n  onClick?: (event: React.MouseEvent<SVGPathElement>) => void;\n\n  /**\n   * Event for when the link has mouse enter.\n   */\n  onMouseEnter?: (event: React.MouseEvent<SVGPathElement>) => void;\n\n  /**\n   * Event for when the link has mouse leave.\n   */\n  onMouseLeave?: (event: React.MouseEvent<SVGPathElement>) => void;\n}\n\nexport const SankeyLink: FC<Partial<SankeyLinkProps>> = ({\n  gradient = true,\n  index,\n  source,\n  target,\n  tooltip = (\n    <Tooltip theme={tooltipTheme} followCursor={true} modifiers={[offset(5)]} />\n  ),\n  chartId,\n  value,\n  active = false,\n  animated = true,\n  className,\n  disabled = false,\n  opacity = (active, disabled) => (active ? 0.5 : disabled ? 0.1 : 0.35),\n  style,\n  width = 0,\n  color,\n  y0,\n  y1,\n  onClick,\n  onMouseEnter,\n  onMouseLeave\n}) => {\n  const linkSource = source as SankeyNodeExtra;\n  const linkTarget = target as SankeyNodeExtra;\n\n  const [hovered, setHovered] = useState<boolean>(false);\n  const linkRef = useRef<SVGPathElement | null>(null);\n\n  const getLink = useCallback(() => {\n    return { index, y0, y1, value, width, source, target };\n  }, [index, source, target, value, width, y0, y1]);\n\n  const stroke = useMemo(() => {\n    if (gradient) {\n      return `url(#${chartId}-gradient-${index})`;\n    } else if (color) {\n      return color;\n    }\n\n    return DEFAULT_COLOR;\n  }, [chartId, gradient, index, color]);\n\n  const enterProps = useMemo(() => {\n    const path = sankeyLinkHorizontal();\n    const d = path(getLink()) as string;\n    const strokeWidth = Math.max(1, width);\n    return { d, strokeWidth };\n  }, [getLink, width]);\n\n  const exitProps = useMemo(() => {\n    const path = sankeyLinkHorizontal();\n    const d = path({ ...getLink(), width: 0 }) as string;\n    return { d, strokeWidth: 0 };\n  }, [getLink]);\n\n  const renderTooltipContent = useCallback(() => {\n    return (\n      <div className={css.tooltip}>\n        <div className={css.tooltipLabel}>\n          {`${(source as NodeExtra).title} → ${(target as NodeExtra).title}`}\n        </div>\n        <div className={css.tooltipValue}>{formatValue(value)}</div>\n      </div>\n    );\n  }, [source, target, value]);\n\n  const { pointerOut, pointerOver } = useHoverIntent({\n    onPointerOver: (event) => {\n      setHovered(true);\n      onMouseEnter?.(event as any);\n    },\n    onPointerOut: (event) => {\n      setHovered(false);\n      onMouseLeave?.(event as any);\n    }\n  });\n\n  const ariaLabelData = useMemo(\n    () =>\n      `${(source as NodeExtra).title} → ${\n        (target as NodeExtra).title\n      }: ${formatValue(value)}`,\n    [source, target, value]\n  );\n\n  return (\n    <Fragment>\n      {gradient && (\n        <linearGradient\n          id={`${chartId}-gradient-${index}`}\n          gradientUnits=\"userSpaceOnUse\"\n          x1={linkSource.x1}\n          x2={linkTarget.x0}\n        >\n          <stop offset=\"0%\" stopColor={linkSource.color} />\n          <stop offset=\"100%\" stopColor={linkTarget.color} />\n        </linearGradient>\n      )}\n      <g ref={linkRef}>\n        <motion.path\n          key={`sankey-link-${enterProps.d}-${index}`}\n          className={classNames(css.link, className)}\n          style={style}\n          initial={exitProps}\n          animate={enterProps}\n          exit={exitProps}\n          transition={{\n            duration: animated ? 0.5 : 0\n          }}\n          stroke={stroke}\n          strokeOpacity={opacity(active, disabled)}\n          onClick={onClick}\n          onPointerOver={pointerOver}\n          onPointerOut={pointerOut}\n          aria-label={ariaLabelData}\n          role=\"graphics-document\"\n        />\n      </g>\n      {!tooltip?.props?.disabled && (\n        <CloneElement<TooltipProps>\n          content={renderTooltipContent}\n          element={tooltip}\n          visible={hovered}\n          reference={linkRef}\n        />\n      )}\n    </Fragment>\n  );\n};\n","import React, {\n  Fragment,\n  ReactElement,\n  useCallback,\n  FC,\n  useState,\n  useRef,\n  useMemo\n} from 'react';\nimport { offset } from '@floating-ui/dom';\nimport classNames from 'classnames';\nimport { motion } from 'motion/react';\nimport { ChartInternalDataTypes } from '@/common/data';\nimport { CloneElement } from 'reablocks';\nimport { formatValue } from '@/common/utils/formatting';\nimport { Tooltip, TooltipProps } from 'reablocks';\nimport {\n  SankeyLabel,\n  SankeyLabelPosition,\n  SankeyLabelProps\n} from '@/Sankey/SankeyLabel';\nimport { SankeyNodeExtra, DEFAULT_COLOR } from '@/Sankey/utils';\nimport css from './SankeyNode.module.css';\nimport { useHoverIntent } from '@/common/utils/useHoverIntent';\nimport { tooltipTheme } from '@/common';\n\nexport interface SankeyNodeProps extends SankeyNodeExtra {\n  /**\n   * ID of the node. If not provided, the node's index will be used.\n   */\n  id?: string;\n\n  /**\n   * Title of the node.\n   */\n  title: string;\n\n  /**\n   * Color of the node.\n   */\n  color?: string;\n\n  /**\n   * Whether the element is active or not. Set internally by `Sankey`.\n   */\n  active: boolean;\n\n  /**\n   * Whether to animate the enter/update/exit.\n   */\n  animated: boolean;\n\n  /**\n   * Width of the chart. Set internally by `Sankey`.\n   */\n  chartWidth?: number;\n\n  /**\n   * CSS class to apply.\n   */\n  className?: string;\n\n  /**\n   * Whether the node is disabled. Set internally by `Sankey`.\n   */\n  disabled: boolean;\n\n  /**\n   * Label element.\n   */\n  label: ReactElement<SankeyLabelProps, typeof SankeyLabel>;\n\n  /**\n   * Label position. Set internally by `Sankey`.\n   */\n  labelPosition?: SankeyLabelPosition;\n\n  /**\n   * Percentage of total width occupied by labels on\n   * either side of the graph inside the container.\n   * Set internally by `Sankey`.\n   */\n  labelPadding?: number;\n\n  /**\n   * Opacity callback for the node.\n   */\n  opacity: (active: boolean, disabled: boolean) => number;\n\n  /**\n   * CSS styles to apply.\n   */\n  style?: React.StyleHTMLAttributes<SVGRectElement>;\n\n  /**\n   * Tooltip element.\n   */\n  tooltip?: ReactElement<TooltipProps, typeof Tooltip> | null;\n\n  /**\n   * Width of the node. Set internally by `Sankey`.\n   */\n  width?: number;\n\n  /**\n   * Event for when the node is clicked.\n   */\n  onClick?: (event: React.MouseEvent<SVGRectElement>) => void;\n\n  /**\n   * Event for when the node has mouse enter.\n   */\n  onMouseEnter?: (event: React.MouseEvent<SVGRectElement>) => void;\n\n  /**\n   * Event for when the node has mouse leave.\n   */\n  onMouseLeave?: (event: React.MouseEvent<SVGRectElement>) => void;\n}\n\nexport const SankeyNode: FC<Partial<SankeyNodeProps>> = ({\n  active = false,\n  animated = true,\n  chartWidth,\n  label = <SankeyLabel />,\n  labelPosition,\n  labelPadding,\n  tooltip = (\n    <Tooltip theme={tooltipTheme} followCursor={true} modifiers={[offset(5)]} />\n  ),\n  title,\n  value,\n  className,\n  color = DEFAULT_COLOR,\n  disabled = false,\n  index,\n  opacity = (active, disabled) => (active ? 1 : disabled ? 0.2 : 0.9),\n  style,\n  width,\n  x0,\n  x1,\n  y0,\n  y1,\n  id,\n  sourceLinks,\n  targetLinks,\n  onClick,\n  onMouseEnter,\n  onMouseLeave\n}) => {\n  const node = {\n    id,\n    title,\n    color,\n    sourceLinks,\n    targetLinks,\n    value,\n    index,\n    x0,\n    x1,\n    y0,\n    y1\n  };\n  const nodeWidth = width || (x1 && x0 && x1 - x0 > 0 ? x1 - x0 : 0);\n  const nodeHeight = y1 && y0 && y1 - y0 > 0 ? y1 - y0 : 0;\n\n  const [hovered, setHovered] = useState<boolean>(false);\n  const rectRef = useRef<SVGRectElement | null>(null);\n\n  const renderTooltipContent = useCallback(() => {\n    return (\n      <div className={css.tooltip}>\n        <div className={css.tooltipLabel}>{title}</div>\n        <div className={css.tooltipValue}>\n          {formatValue(value as ChartInternalDataTypes)}\n        </div>\n      </div>\n    );\n  }, [title, value]);\n\n  const { pointerOut, pointerOver } = useHoverIntent({\n    onPointerOver: (event) => {\n      setHovered(true);\n      onMouseEnter?.(event as any);\n    },\n    onPointerOut: (event) => {\n      setHovered(false);\n      onMouseLeave?.(event as any);\n    }\n  });\n\n  const ariaLabelData = useMemo(\n    () => `${title}: ${formatValue(value as ChartInternalDataTypes)}`,\n    [title, value]\n  );\n\n  return (\n    <Fragment>\n      <motion.g\n        ref={rectRef}\n        tabIndex={0}\n        aria-label={ariaLabelData}\n        role=\"graphics-document\"\n      >\n        <motion.rect\n          key={`sankey-node-${x0}-${x1}-${y0}-${y1}-${index}`}\n          className={classNames(css.node, className)}\n          fillOpacity={opacity(active, disabled)}\n          style={style}\n          width={nodeWidth}\n          height={nodeHeight}\n          fill={color}\n          initial={{\n            opacity: 0,\n            attrX: x0,\n            attrY: y0\n          }}\n          animate={{\n            opacity: 1,\n            attrX: x0,\n            attrY: y0\n          }}\n          exit={{\n            opacity: 0,\n            attrX: x0,\n            attrY: y0\n          }}\n          transition={{\n            duration: animated ? 0.1 : 0\n          }}\n          onClick={onClick}\n          onPointerOver={pointerOver}\n          onPointerOut={pointerOut}\n        />\n      </motion.g>\n      {label !== null && (\n        <CloneElement<SankeyLabelProps>\n          active={active}\n          element={label}\n          disabled={disabled}\n          chartWidth={chartWidth}\n          nodeWidth={nodeWidth}\n          node={node}\n          position={labelPosition}\n          labelPadding={labelPadding}\n        />\n      )}\n      {!tooltip?.props?.disabled && (\n        <CloneElement<TooltipProps>\n          content={renderTooltipContent}\n          element={tooltip}\n          visible={hovered}\n          reference={rectRef}\n        />\n      )}\n    </Fragment>\n  );\n};\n","import React, { FC } from 'react';\nimport { LineChart, LineChartProps } from '@/LineChart';\nimport { ChartShallowDataShape } from '@/common/data';\nimport { AreaSeries, Line } from '@/AreaChart';\nimport { PointSeries } from '@/AreaChart';\nimport {\n  LinearXAxis,\n  LinearYAxis,\n  LinearYAxisTickSeries,\n  LinearXAxisTickSeries\n} from '@/common/Axis/LinearAxis';\n\nexport interface SparklineChartProps extends LineChartProps {\n  data: ChartShallowDataShape[];\n}\n\nexport const SparklineChart: FC<Partial<SparklineChartProps>> = (props) => (\n  <LineChart\n    gridlines={null}\n    series={\n      <AreaSeries\n        symbols={<PointSeries show=\"hover\" />}\n        interpolation=\"smooth\"\n        markLine={null}\n        area={null}\n        line={<Line strokeWidth={2} />}\n      />\n    }\n    yAxis={\n      <LinearYAxis\n        scaled={true}\n        type=\"value\"\n        axisLine={null}\n        tickSeries={<LinearYAxisTickSeries line={null} label={null} />}\n      />\n    }\n    xAxis={\n      <LinearXAxis\n        type=\"time\"\n        scaled={true}\n        axisLine={null}\n        tickSeries={<LinearXAxisTickSeries line={null} label={null} />}\n      />\n    }\n    {...props}\n  />\n);\n","import React, { FC } from 'react';\nimport { AreaChart, AreaChartProps, AreaSeries, Area, Line } from '@/AreaChart';\nimport { ChartShallowDataShape } from '@/common/data';\nimport { PointSeries } from '@/AreaChart';\nimport {\n  LinearYAxisTickSeries,\n  LinearYAxis,\n  LinearXAxis,\n  LinearXAxisTickSeries\n} from '@/common/Axis/LinearAxis';\nimport { GradientStop, Gradient } from '@/common/Gradient';\nimport { Stripes } from '@/common/Mask';\n\nexport interface AreaSparklineChartProps extends AreaChartProps {\n  data: ChartShallowDataShape[];\n}\n\nexport const AreaSparklineChart: FC<Partial<AreaSparklineChartProps>> = (\n  props\n) => (\n  <AreaChart\n    gridlines={null}\n    series={\n      <AreaSeries\n        symbols={<PointSeries show=\"hover\" />}\n        interpolation=\"smooth\"\n        markLine={null}\n        area={\n          <Area\n            mask={<Stripes />}\n            gradient={\n              <Gradient\n                stops={[\n                  <GradientStop offset=\"10%\" stopOpacity={0} key=\"start\" />,\n                  <GradientStop offset=\"80%\" stopOpacity={1} key=\"stop\" />\n                ]}\n              />\n            }\n          />\n        }\n        line={<Line strokeWidth={3} />}\n      />\n    }\n    yAxis={\n      <LinearYAxis\n        type=\"value\"\n        scaled={true}\n        axisLine={null}\n        tickSeries={<LinearYAxisTickSeries line={null} label={null} />}\n      />\n    }\n    xAxis={\n      <LinearXAxis\n        type=\"time\"\n        scaled={true}\n        axisLine={null}\n        tickSeries={<LinearXAxisTickSeries line={null} label={null} />}\n      />\n    }\n    {...props}\n  />\n);\n","import React, { FC } from 'react';\nimport { BarChart, BarChartProps } from '@/BarChart';\nimport { ChartShallowDataShape } from '@/common/data';\nimport {\n  LinearXAxis,\n  LinearYAxis,\n  LinearYAxisTickSeries,\n  LinearXAxisTickSeries\n} from '@/common/Axis';\nimport { BarSeries } from '@/BarChart';\nimport { schemes } from '@/common/color';\n\nexport interface BarSparklineChartProps extends BarChartProps {\n  data: ChartShallowDataShape[];\n}\n\nexport const BarSparklineChart: FC<Partial<BarSparklineChartProps>> = (\n  props\n) => (\n  <BarChart\n    gridlines={null}\n    series={<BarSeries colorScheme={schemes.cybertron[0]} />}\n    yAxis={\n      <LinearYAxis\n        type=\"value\"\n        axisLine={null}\n        tickSeries={<LinearYAxisTickSeries line={null} label={null} />}\n      />\n    }\n    xAxis={\n      <LinearXAxis\n        type=\"category\"\n        axisLine={null}\n        tickSeries={<LinearXAxisTickSeries line={null} label={null} />}\n      />\n    }\n    {...props}\n  />\n);\n","import React, { FC } from 'react';\nimport { offset } from '@floating-ui/dom';\nimport {\n  StackedBarChart,\n  StackedBarSeries,\n  Bar,\n  BarChartProps,\n  BAR_DEFAULT_PROPS\n} from '@/BarChart';\nimport {\n  Gradient,\n  GradientStop,\n  LinearYAxis,\n  LinearXAxis,\n  LinearYAxisTickSeries,\n  LinearXAxisTickSeries,\n  TooltipArea,\n  ChartTooltip,\n  TooltipTemplate,\n  formatValue,\n  ChartNestedDataShape\n} from '@/common';\n\nexport interface SonarChartProps extends BarChartProps {\n  data: ChartNestedDataShape[];\n}\n\nexport const SonarChart: FC<Partial<SonarChartProps>> = (props) => (\n  <StackedBarChart\n    {...props}\n    margins={0}\n    gridlines={null}\n    series={\n      <StackedBarSeries\n        type=\"stackedDiverging\"\n        colorScheme=\"rgb(17, 207, 247)\"\n        tooltip={\n          <TooltipArea\n            tooltip={\n              <ChartTooltip\n                followCursor={true}\n                modifiers={[offset(5)]}\n                content={(data, color) => (\n                  <TooltipTemplate\n                    color={color}\n                    value={{\n                      x: formatValue(data.x),\n                      y: `${formatValue(Math.abs(data.data[0].y))}`\n                    }}\n                  />\n                )}\n              />\n            }\n          />\n        }\n        bar={[\n          <Bar\n            {...BAR_DEFAULT_PROPS}\n            key=\"first\"\n            width={1}\n            rangeLines={null}\n            minHeight={1}\n            gradient={\n              <Gradient\n                stops={[\n                  <GradientStop offset=\"5%\" stopOpacity={0.7} key=\"start\" />,\n                  <GradientStop offset=\"90%\" stopOpacity={1} key=\"stop\" />\n                ]}\n              />\n            }\n          />,\n          <Bar\n            key=\"second\"\n            width={1}\n            rangeLines={null}\n            minHeight={1}\n            gradient={\n              <Gradient\n                stops={[\n                  <GradientStop offset=\"5%\" stopOpacity={1} key=\"stop\" />,\n                  <GradientStop offset=\"90%\" stopOpacity={0.7} key=\"start\" />\n                ]}\n              />\n            }\n          />\n        ]}\n      />\n    }\n    yAxis={\n      <LinearYAxis\n        type=\"value\"\n        axisLine={null}\n        tickSeries={<LinearYAxisTickSeries line={null} label={null} />}\n      />\n    }\n    xAxis={\n      <LinearXAxis\n        type=\"category\"\n        axisLine={null}\n        tickSeries={<LinearXAxisTickSeries line={null} label={null} />}\n      />\n    }\n  />\n);\n","import React, { ReactElement, useCallback, FC, useMemo, Fragment } from 'react';\nimport { ChartInternalShallowDataShape } from '@/common/data';\nimport {\n  radialArea,\n  curveCardinalClosed,\n  curveLinearClosed,\n  curveCardinal,\n  curveLinear\n} from 'd3-shape';\nimport { RadialGradient, RadialGradientProps } from '@/common/Gradient';\nimport { CloneElement } from 'reablocks';\nimport { RadialInterpolationTypes } from '@/common/utils/interpolation';\nimport { MotionPath, DEFAULT_TRANSITION } from '@/common/Motion';\n\nexport interface RadialAreaProps {\n  /**\n   * Parsed data shape. Set internally by `RadialAreaChart`.\n   */\n  data: ChartInternalShallowDataShape[];\n\n  /**\n   * Whether to animate the enter/update/exit.\n   */\n  animated: boolean;\n\n  /**\n   * D3 scale for X Axis. Set internally by `RadialAreaChart`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `RadialAreaChart`.\n   */\n  yScale: any;\n\n  /**\n   * Interpolation for the area. Set internally by `RadialAreaSeries`.\n   */\n  interpolation: RadialInterpolationTypes;\n\n  /**\n   * Color for the area. Set internally by `RadialAreaSeries`.\n   */\n  color: any;\n\n  /**\n   * Id set internally by `RadialAreaSeries`.\n   */\n  id: string;\n\n  /**\n   * The inner radius for the chart center.\n   */\n  innerRadius: number;\n\n  /**\n   * The outer radius for the chart center.\n   */\n  outerRadius: number;\n\n  /**\n   * CSS classes to apply.\n   */\n  className?: string;\n\n  /**\n   * Index of the area in the series. Set internally by `RadialAreaSeries`.\n   */\n  index: number;\n\n  /**\n   * Gradient to apply to the area.\n   */\n  gradient: ReactElement<RadialGradientProps, typeof RadialGradient> | null;\n\n  /**\n   * Whether the curve should be closed. Set to true by deafult\n   */\n  isClosedCurve: boolean;\n}\n\nexport const RadialArea: FC<Partial<RadialAreaProps>> = ({\n  id,\n  data,\n  className,\n  yScale,\n  color,\n  animated,\n  index,\n  outerRadius,\n  xScale,\n  innerRadius,\n  interpolation,\n  gradient = <RadialGradient />,\n  isClosedCurve = true\n}) => {\n  const transition = useMemo(\n    () =>\n      animated\n        ? {\n          ...DEFAULT_TRANSITION,\n          delay: index * 0.05\n        }\n        : {\n          type: false,\n          delay: 0\n        },\n    [animated, index]\n  );\n\n  const getFill = useCallback(\n    (c: string) => {\n      if (!gradient) {\n        return c;\n      }\n\n      return `url(#${id}-gradient)`;\n    },\n    [id, gradient]\n  );\n\n  const getPath = useCallback(\n    (d: ChartInternalShallowDataShape[]) => {\n      const curve =\n        interpolation === 'smooth'\n          ? isClosedCurve\n            ? curveCardinalClosed\n            : curveCardinal\n          : isClosedCurve\n            ? curveLinearClosed\n            : curveLinear;\n\n      const radialFn = radialArea()\n        .angle((dd: any) => xScale(dd.x))\n        .innerRadius((_) => innerRadius!)\n        .outerRadius((d: any) => yScale(d.y))\n        .curve(curve);\n\n      return radialFn(d as any);\n    },\n    [interpolation, isClosedCurve, xScale, innerRadius, yScale]\n  );\n\n  const enter = useMemo(\n    () => ({\n      d: getPath(data!),\n      opacity: 1\n    }),\n    [data, getPath]\n  );\n\n  const exit = useMemo(() => {\n    const [yStart] = yScale.domain();\n    return {\n      d: getPath(data!.map((d) => ({ ...d, y: yStart }))),\n      opacity: 0\n    };\n  }, [data, getPath, yScale]);\n\n  const fill = color(data, 0);\n\n  return (\n    <Fragment>\n      <MotionPath\n        custom={{\n          enter,\n          exit\n        }}\n        transition={transition}\n        pointerEvents=\"none\"\n        className={className}\n        fill={getFill(color)}\n      />\n      {gradient && (\n        <CloneElement<RadialGradientProps>\n          element={gradient}\n          id={`${id}-gradient`}\n          radius={outerRadius}\n          color={fill}\n        />\n      )}\n    </Fragment>\n  );\n};\n","import React, { useCallback, useMemo, FC } from 'react';\nimport { ChartInternalShallowDataShape } from '@/common/data';\nimport {\n  radialLine,\n  curveCardinalClosed,\n  curveLinearClosed,\n  curveCardinal,\n  curveLinear\n} from 'd3-shape';\nimport { RadialInterpolationTypes } from '@/common/utils/interpolation';\nimport { MotionPath, DEFAULT_TRANSITION } from '@/common/Motion';\n\nexport interface RadialLineProps {\n  /**\n   * Parsed data shape. Set internally by `RadialAreaChart`.\n   */\n  data: ChartInternalShallowDataShape[];\n\n  /**\n   * Whether to animate the enter/update/exit. Set internally by `RadialAreaSeries`.\n   */\n  animated: boolean;\n\n  /**\n   * D3 scale for X Axis. Set internally by `RadialAreaChart`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `RadialAreaChart`.\n   */\n  yScale: any;\n\n  /**\n   * Color for the area. Set internally by `RadialAreaSeries`.\n   */\n  color: any;\n\n  /**\n   * Interpolation for the area. Set internally by `RadialAreaSeries`.\n   */\n  interpolation: RadialInterpolationTypes;\n\n  /**\n   * Index of the area in the series. Set internally by `RadialAreaSeries`.\n   */\n  index: number;\n\n  /**\n   * Stroke width of the line.\n   */\n  strokeWidth: number;\n\n  /**\n   * CSS classes to apply.\n   */\n  className?: string;\n\n  /**\n   * Internal property to identify if there is a area or not.\n   */\n  hasArea: boolean;\n\n  /**\n   * Whether the curve should be closed. Set to true by deafult\n   */\n  isClosedCurve: boolean;\n}\n\nexport const RadialLine: FC<Partial<RadialLineProps>> = ({\n  xScale,\n  yScale,\n  className,\n  index,\n  hasArea,\n  color,\n  data,\n  interpolation,\n  strokeWidth = 2,\n  animated = true,\n  isClosedCurve = true\n}) => {\n  const fill = color(data, index);\n\n  const getPath = useCallback(\n    (preData: ChartInternalShallowDataShape[]) => {\n      const curve =\n        interpolation === 'smooth'\n          ? isClosedCurve\n            ? curveCardinalClosed\n            : curveCardinal\n          : isClosedCurve\n            ? curveLinearClosed\n            : curveLinear;\n\n      const radialFn = radialLine()\n        .angle((d: any) => xScale(d.x))\n        .radius((d: any) => yScale(d.y))\n        .curve(curve);\n\n      return radialFn(preData as any);\n    },\n    [interpolation, isClosedCurve, xScale, yScale]\n  );\n\n  const transition = useMemo(\n    () =>\n      animated\n        ? {\n          ...DEFAULT_TRANSITION,\n          delay: hasArea ? 0 : index * 0.05\n        }\n        : {\n          type: false,\n          delay: 0\n        },\n    [animated, index, hasArea]\n  );\n\n  const enter = useMemo(\n    () => ({\n      d: getPath(data!),\n      opacity: 1\n    }),\n    [data, getPath]\n  );\n\n  const exit = useMemo(() => {\n    const [yStart] = yScale.domain();\n    return {\n      d: getPath(data!.map((d) => ({ ...d, y: yStart }))),\n      opacity: 0\n    };\n  }, [data, yScale, getPath]);\n\n  return (\n    <MotionPath\n      custom={{\n        enter,\n        exit\n      }}\n      transition={transition}\n      className={className}\n      pointerEvents=\"none\"\n      stroke={fill}\n      fill=\"none\"\n      strokeWidth={strokeWidth}\n    />\n  );\n};\n","import React, { FC, useCallback, Fragment, ReactElement } from 'react';\nimport {\n  ChartShallowDataShape,\n  buildShallowChartData,\n  ChartInternalShallowDataShape\n} from '@/common/data';\nimport { scaleBand, scaleTime } from 'd3-scale';\nimport { getYDomain, getXDomain } from '@/common/utils/domains';\nimport {\n  RadialScatterSeries,\n  RadialScatterSeriesProps\n} from './RadialScatterSeries';\nimport {\n  ChartProps,\n  ChartContainer,\n  ChartContainerChildProps\n} from '@/common/containers';\nimport { CloneElement } from 'reablocks';\nimport { RadialAxisProps, RadialAxis } from '@/common/Axis/RadialAxis';\nimport { getRadialYScale } from '@/common/scales';\nimport { uniqueBy } from '@/common';\n\nexport interface RadialScatterPlotProps extends ChartProps {\n  /**\n   * Data the chart will receive to render.\n   */\n  data: ChartShallowDataShape[];\n\n  /**\n   * The series component that renders the scatter components.\n   */\n  series: ReactElement<RadialScatterSeriesProps, typeof RadialScatterSeries>;\n\n  /**\n   * The radial axis component for the chart.\n   */\n  axis: ReactElement<RadialAxisProps, typeof RadialAxis> | null;\n\n  /**\n   * The inner radius for the chart center.\n   */\n  innerRadius: number;\n}\n\nexport const RadialScatterPlot: FC<Partial<RadialScatterPlotProps>> = ({\n  id,\n  width,\n  height,\n  margins,\n  className,\n  containerClassName,\n  innerRadius,\n  series,\n  axis,\n  data\n}) => {\n  const getScales = useCallback(\n    (\n      aggregatedData: ChartInternalShallowDataShape[],\n      outer: number,\n      inner: number\n    ) => {\n      let xScale;\n      if (axis?.props.type === 'category') {\n        const xDomain = uniqueBy<ChartInternalShallowDataShape>(\n          aggregatedData,\n          (dd) => dd.x\n        );\n        xScale = scaleBand()\n          .range([0, 2 * Math.PI])\n          .domain(xDomain as any[]);\n      } else {\n        const xDomain = getXDomain({ data: aggregatedData });\n        xScale = scaleTime()\n          .range([0, 2 * Math.PI])\n          .domain(xDomain);\n      }\n\n      const yDomain = getYDomain({ data: aggregatedData, scaled: false });\n      const yScale = getRadialYScale(inner, outer, yDomain);\n\n      return {\n        yScale,\n        xScale\n      };\n    },\n    []\n  );\n\n  const renderChart = useCallback(\n    (containerProps: ChartContainerChildProps) => {\n      const { chartWidth, chartHeight, id } = containerProps;\n      const outerRadius = Math.min(chartWidth, chartHeight) / 2;\n      const aggregatedData = buildShallowChartData(data);\n      const { yScale, xScale } = getScales(\n        aggregatedData,\n        outerRadius,\n        innerRadius\n      );\n\n      return (\n        <Fragment>\n          {axis && (\n            <CloneElement<RadialAxisProps>\n              element={axis}\n              xScale={xScale}\n              height={chartHeight}\n              width={chartWidth}\n              innerRadius={innerRadius}\n            />\n          )}\n          <CloneElement<RadialScatterSeriesProps>\n            element={series}\n            id={id}\n            data={aggregatedData}\n            xScale={xScale}\n            yScale={yScale}\n          />\n        </Fragment>\n      );\n    },\n    [data, getScales, innerRadius, series, axis]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      containerClassName={containerClassName}\n      width={width}\n      height={height}\n      margins={margins}\n      xAxisVisible={false}\n      yAxisVisible={false}\n      center={true}\n      className={className}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n","import React, {\n  ReactNode,\n  useRef,\n  Fragment,\n  ReactElement,\n  FC,\n  useState,\n  useMemo\n} from 'react';\nimport { ChartInternalShallowDataShape } from '@/common/data';\nimport { radialLine } from 'd3-shape';\nimport classNames from 'classnames';\nimport { ChartTooltip, ChartTooltipProps } from '@/common/Tooltip';\nimport { CloneElement } from 'reablocks';\nimport { motion } from 'motion/react';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\nimport { schemes } from '@/common/color';\nimport css from './RadialScatterPoint.module.css';\nimport { getAriaLabel, mergeDefaultProps } from '@/common';\n\nexport interface RadialScatterPointProps {\n  /**\n   * Parsed data shape. Set internally by `RadialScatterPlot`.\n   */\n  data: ChartInternalShallowDataShape;\n\n  /**\n   * Index of the element in the series. Set internally by `RadialScatterSeries`.\n   */\n  index: number;\n\n  /**\n   * Whether the element is active or not. Set internally by `RadialScatterSeries`.\n   */\n  animated: boolean;\n\n  /**\n   * D3 scale for X Axis. Set internally by `RadialScatterPlot`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `RadialScatterPlot`.\n   */\n  yScale: any;\n\n  /**\n   * Fill for the element.\n   */\n  fill: string;\n\n  /**\n   * Id set internally by `RadialScatterPlot`.\n   */\n  id: string;\n\n  /**\n   * Color of the circle.\n   */\n  color: any;\n\n  /**\n   * CSS classes to apply.\n   */\n  className?: any;\n\n  /**\n   * Whether the element is active or not. Set internally by `RadialScatterSeries`.\n   */\n  active?: boolean;\n\n  /**\n   * Whether the elment is visiblbe or not.\n   */\n  visible?: (value, index) => boolean;\n\n  /**\n   * Symbol element to render.\n   */\n  symbol: (value) => ReactNode;\n\n  /**\n   * Size of the circle element.\n   */\n  size?: ((d) => number) | number;\n\n  /**\n   * Tooltip element.\n   */\n  tooltip: ReactElement<ChartTooltipProps, typeof ChartTooltip> | null;\n\n  /**\n   * Event for when a symbol is clicked.\n   */\n  onClick: (event) => void;\n\n  /**\n   * Event for when the symbol has mouse enter.\n   */\n  onMouseEnter: (event) => void;\n\n  /**\n   * Event for when the symbol has mouse leave.\n   */\n  onMouseLeave: (event) => void;\n}\n\nexport const RadialScatterPoint: FC<Partial<RadialScatterPointProps>> = (\n  props\n) => {\n  const {\n    size,\n    data,\n    color,\n    index,\n    symbol,\n    active,\n    tooltip,\n    yScale,\n    xScale,\n    animated,\n    className,\n    visible,\n    ...rest\n  } = mergeDefaultProps(RADIAL_SCATTER_POINT_DEFAULT_PROPS, props);\n\n  const ref = useRef<any>(null);\n  const [hovered, setHovered] = useState<boolean>(false);\n\n  function onMouseEnter(event: React.MouseEvent) {\n    setHovered(true);\n    rest.onMouseEnter({\n      value: data,\n      nativeEvent: event\n    });\n  }\n\n  function onMouseLeave(event: React.MouseEvent) {\n    setHovered(false);\n    rest.onMouseLeave({\n      value: data,\n      nativeEvent: event\n    });\n  }\n\n  function onClick(event: React.MouseEvent) {\n    rest.onClick({\n      value: data,\n      nativeEvent: event\n    });\n  }\n\n  function getTranslate(data: ChartInternalShallowDataShape) {\n    const fn = radialLine()\n      .radius((d: any) => yScale(d.y))\n      .angle((d: any) => xScale(d.x));\n\n    // Parse the generated path to get point coordinates\n    // Ref: https://bit.ly/2CnZcPl\n    const path = fn([data] as any);\n\n    if (path) {\n      const [translateX, translateY] = path.slice(1).slice(0, -1).split(',');\n\n      return {\n        translateX: parseFloat(translateX),\n        translateY: parseFloat(translateY)\n      };\n    }\n  }\n\n  function getTransition() {\n    if (animated) {\n      return {\n        ...DEFAULT_TRANSITION,\n        delay: index * 0.005\n      };\n    } else {\n      return {\n        type: false,\n        delay: 0\n      };\n    }\n  }\n\n  const fill = typeof color === 'function' ? color(data, index) : color;\n  const transform = getTranslate(data);\n  const sizeVal = typeof size === 'function' ? size(data) : size;\n  const transition = getTransition();\n\n  const [yStart] = yScale.domain();\n  const exitTransform = getTranslate({ ...data, y: yStart });\n\n  const ariaLabelData = useMemo(() => getAriaLabel(data), [data]);\n\n  const isVisible = visible ? visible?.(data, index) : active;\n\n  return (\n    <Fragment>\n      <motion.g\n        initial={{ ...exitTransform, opacity: 0 }}\n        animate={{ ...transform, opacity: 1 }}\n        exit={{ ...exitTransform, opacity: 0 }}\n        transition={transition}\n        ref={ref}\n        onMouseEnter={onMouseEnter}\n        onMouseLeave={onMouseLeave}\n        onClick={onClick}\n        className={classNames(className, {\n          [css.inactive]: !active,\n          [css.hidden]: !isVisible\n        })}\n        tabIndex={0}\n        aria-label={ariaLabelData}\n        role=\"graphics-document\"\n      >\n        {symbol && symbol(data)}\n        {!symbol && <circle r={sizeVal} fill={fill} />}\n      </motion.g>\n      {tooltip && (\n        <CloneElement<ChartTooltipProps>\n          element={tooltip}\n          visible={hovered}\n          reference={ref}\n          value={data}\n        />\n      )}\n    </Fragment>\n  );\n};\n\nexport const RADIAL_SCATTER_POINT_DEFAULT_PROPS = {\n  size: 3,\n  color: schemes.cybertron[0],\n  tooltip: <ChartTooltip />,\n  active: true,\n  onClick: () => undefined,\n  onMouseEnter: () => undefined,\n  onMouseLeave: () => undefined\n};\n","import React, {\n  useState,\n  FC,\n  Fragment,\n  ReactElement,\n  useEffect,\n  useCallback,\n  useMemo\n} from 'react';\nimport { ChartInternalShallowDataShape } from '@/common/data';\nimport {\n  RADIAL_SCATTER_POINT_DEFAULT_PROPS,\n  RadialScatterPoint,\n  RadialScatterPointProps\n} from './RadialScatterPoint';\nimport { CloneElement } from 'reablocks';\nimport { identifier } from 'safe-identifier';\nimport { RadialValueMarker, RadialValueMarkerProps } from '@/common';\n\nexport interface RadialScatterSeriesProps {\n  /**\n   * Point that is rendered.\n   */\n  point: ReactElement<RadialScatterPointProps, typeof RadialScatterPoint>;\n\n  /**\n   * D3 scale for X Axis. Set internally by `RadialScatterPlot`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `RadialScatterPlot`.\n   */\n  yScale: any;\n\n  /**\n   * Parsed data shape. Set internally by `RadialScatterPlot`.\n   */\n  data: ChartInternalShallowDataShape[];\n\n  /**\n   * Id set internally by `RadialScatterPlot`.\n   */\n  id: string;\n\n  /**\n   * Whether to animate the enter/update/exit.\n   */\n  animated: boolean;\n\n  /**\n   * Active element ids to highlight.\n   */\n  activeIds?: string[];\n\n  /**\n   * When to show the point.\n   */\n  show: boolean;\n\n  /**\n   * Value markers line for the chart.\n   */\n  valueMarkers:\n    | ReactElement<RadialValueMarkerProps, typeof RadialValueMarker>[]\n    | null;\n}\n\nexport const RadialScatterSeries: FC<Partial<RadialScatterSeriesProps>> = ({\n  data,\n  point = <RadialScatterPoint />,\n  xScale,\n  yScale,\n  animated = true,\n  activeIds,\n  show = true,\n  valueMarkers\n}) => {\n  const pointProps = useMemo(\n    () => ({ ...RADIAL_SCATTER_POINT_DEFAULT_PROPS, ...(point?.props ?? {}) }),\n    [point?.props]\n  );\n  const [internalActiveIds, setInternalActiveIds] = useState<string[] | null>(\n    activeIds\n  );\n\n  useEffect(() => {\n    setInternalActiveIds(activeIds || []);\n  }, [activeIds]);\n\n  const onMouseEnter = useCallback(\n    ({ value }) => {\n      // Only perform this on unmanaged activations\n      if (!activeIds) {\n        setInternalActiveIds([value.id]);\n      }\n    },\n    [activeIds]\n  );\n\n  const onMouseLeave = useCallback(() => {\n    // Only perform this on unmanaged activations\n    if (!activeIds) {\n      setInternalActiveIds([]);\n    }\n  }, [activeIds]);\n\n  const isVisible = useCallback(() => show, [show]);\n\n  const renderPoint = useCallback(\n    (d: ChartInternalShallowDataShape, index: number) => {\n      let dataId;\n      if (d.id) {\n        dataId = d.id;\n      } else {\n        console.warn(\n          'No \\'id\\' property provided for scatter point; provide one via \\'id\\'.'\n        );\n      }\n\n      const key = identifier(`${dataId || index}`);\n      const active =\n        !(internalActiveIds && internalActiveIds.length) ||\n        internalActiveIds.includes(dataId);\n\n      const pointVisible = pointProps?.visible;\n\n      return (\n        <CloneElement<RadialScatterPointProps>\n          /* Trick to pass isVisible callback, directly cannot be passed when point is a cloned element already */\n          {...(pointVisible ? {} : { visible: isVisible })}\n          element={point}\n          key={key}\n          data={d}\n          index={index}\n          active={active}\n          xScale={xScale}\n          yScale={yScale}\n          animated={animated}\n          onMouseEnter={onMouseEnter}\n          onMouseLeave={onMouseLeave}\n        />\n      );\n    },\n    [\n      isVisible,\n      point,\n      pointProps,\n      internalActiveIds,\n      xScale,\n      yScale,\n      animated,\n      onMouseEnter,\n      onMouseLeave\n    ]\n  );\n\n  const renderValueMarkers = useCallback(\n    () => (\n      <>\n        {valueMarkers?.length &&\n          valueMarkers.map((marker) => (\n            <CloneElement<RadialValueMarkerProps>\n              key={marker.key}\n              element={marker}\n              value={yScale(marker.props.value)}\n            />\n          ))}\n      </>\n    ),\n    [valueMarkers, yScale]\n  );\n\n  return (\n    <Fragment>\n      {renderValueMarkers()}\n      {data.map(renderPoint)}\n    </Fragment>\n  );\n};\n","import React, { useCallback, ReactElement, FC } from 'react';\nimport {\n  RadialScatterSeries,\n  RadialScatterPoint,\n  RadialScatterPointProps\n} from '@/RadialScatterPlot';\nimport { ChartInternalShallowDataShape } from '@/common/data';\nimport { CloneElement } from 'reablocks';\nimport isEqual from 'react-fast-compare';\n\nexport interface RadialPointSeriesProps {\n  /**\n   * Whether the points are animated or not.\n   */\n  animated: boolean;\n\n  /**\n   * Color scheme.\n   */\n  color: any;\n\n  /**\n   * Index of the area in the series. Set internally by `RadialAreaSeries`.\n   */\n  index: number;\n\n  /**\n   * Active values set by parent.\n   */\n  activeValues?: any;\n\n  /**\n   * Parsed data object.\n   */\n  data: ChartInternalShallowDataShape[];\n\n  /**\n   * D3 X-Scale.\n   */\n  yScale: any;\n\n  /**\n   * D3 Y-Scale.\n   */\n  xScale: any;\n\n  /**\n   * When to show the point.\n   */\n  show: boolean | 'hover' | 'first' | 'last';\n\n  /**\n   * Point react component.\n   */\n  point: ReactElement<RadialScatterPointProps, typeof RadialScatterPoint>;\n}\n\nexport const RadialPointSeries: FC<Partial<RadialPointSeriesProps>> = (\n  props\n) => {\n  const { data, xScale, yScale, animated, color, activeValues, show, point } = {\n    ...RADIAL_POINT_SERIES_DEFAULT_PROPS,\n    ...props\n  };\n\n  const isVisible = useCallback(\n    (point: ChartInternalShallowDataShape, index: number): boolean => {\n      const isActive =\n        activeValues && point && isEqual(activeValues.x, point.x);\n\n      if (show === 'hover') {\n        return isActive;\n      } else if (show === 'first') {\n        if (activeValues) {\n          return isActive;\n        } else {\n          return index === 0;\n        }\n      } else if (show === 'last') {\n        if (activeValues) {\n          return isActive;\n        } else {\n          return index === data!.length - 1;\n        }\n      }\n\n      return Boolean(show);\n    },\n    [data, activeValues, show]\n  );\n\n  return (\n    <RadialScatterSeries\n      animated={animated}\n      data={data}\n      xScale={xScale}\n      yScale={yScale}\n      point={\n        <CloneElement<RadialScatterPointProps>\n          element={point}\n          color={color}\n          tooltip={null}\n          visible={isVisible}\n        />\n      }\n    />\n  );\n};\n\nexport const RADIAL_POINT_SERIES_DEFAULT_PROPS = {\n  show: 'hover',\n  point: <RadialScatterPoint />\n};\n","import React, {\n  FC,\n  Fragment,\n  ReactElement,\n  useCallback,\n  useMemo,\n  useState\n} from 'react';\nimport {\n  ChartInternalNestedDataShape,\n  ChartInternalShallowDataShape\n} from '@/common/data';\nimport { getColor, ColorSchemeType, schemes } from '@/common/color';\nimport { CloneElement } from 'reablocks';\nimport { RadialAreaProps, RadialArea } from './RadialArea';\nimport { RadialLine, RadialLineProps } from './RadialLine';\nimport { RadialInterpolationTypes } from '@/common/utils/interpolation';\nimport {\n  RADIAL_POINT_SERIES_DEFAULT_PROPS,\n  RadialPointSeries,\n  RadialPointSeriesProps\n} from './RadialPointSeries';\nimport { TooltipAreaProps, TooltipArea } from '@/common/Tooltip';\nimport {\n  mergeDefaultProps,\n  RadialValueMarker,\n  RadialValueMarkerProps\n} from '@/common';\n\nexport type RadialPointSeriesType = 'standard' | 'grouped';\n\nexport interface RadialAreaSeriesProps {\n  /**\n   * Parsed data shape. Set internally by `RadialAreaChart`.\n   */\n  data: ChartInternalShallowDataShape[];\n\n  /**\n   * The type of the chart.\n   */\n  type?: RadialPointSeriesType;\n\n  /**\n   * Color scheme for the series.\n   */\n  colorScheme: ColorSchemeType;\n\n  /**\n   * The outer radius for the chart center.\n   */\n  outerRadius: number;\n\n  /**\n   * The inner radius for the chart center.\n   */\n  innerRadius: number;\n\n  /**\n   * D3 scale for X Axis. Set internally by `RadialAreaChart`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `RadialAreaChart`.\n   */\n  yScale: any;\n\n  /**\n   * Id set internally by `RadialAreaChart`.\n   */\n  id: string;\n\n  /**\n   * interpolation set internally by `RadialAreaChart`.\n   */\n  interpolation: RadialInterpolationTypes;\n\n  /**\n   * Whether to animate the enter/update/exit.\n   */\n  animated: boolean;\n\n  /**\n   * Height of the chart. Set internally by `RadialAreaChart`.\n   */\n  height: number;\n\n  /**\n   * Width of the chart. Set internally by `RadialAreaChart`.\n   */\n  width: number;\n\n  /**\n   * Area that is rendered.\n   */\n  area: ReactElement<RadialAreaProps, typeof RadialArea> | null;\n\n  /**\n   * Line that is rendered.\n   */\n  line: ReactElement<RadialLineProps, typeof RadialLine> | null;\n\n  /**\n   * Symbols used to show points.\n   */\n  symbols: ReactElement<\n    RadialPointSeriesProps,\n    typeof RadialPointSeries\n  > | null;\n\n  /**\n   * Tooltip for the chart area.\n   */\n  tooltip: ReactElement<TooltipAreaProps, typeof TooltipArea>;\n\n  /**\n   * Start angle for the first value.\n   */\n  startAngle?: number;\n\n  /**\n   * End angle for the last value.\n   */\n  endAngle?: number;\n\n  /**\n   * Whether the curve should be closed. Set to true by deafult\n   */\n  isClosedCurve: boolean;\n\n  /**\n   * Value markers line for the chart.\n   */\n  valueMarkers:\n    | ReactElement<RadialValueMarkerProps, typeof RadialValueMarker>[]\n    | null;\n}\n\nexport const RadialAreaSeries: FC<Partial<RadialAreaSeriesProps>> = (props) => {\n  const {\n    area,\n    line,\n    symbols,\n    tooltip,\n    xScale,\n    yScale,\n    data,\n    id,\n    animated,\n    width,\n    height,\n    innerRadius,\n    outerRadius,\n    type,\n    colorScheme,\n    interpolation,\n    startAngle,\n    endAngle,\n    isClosedCurve,\n    valueMarkers\n  } = mergeDefaultProps(RADIAL_AREA_SERIES_DEFAULT_PROPS, props);\n\n  const symbolsProps = useMemo(\n    () => ({\n      ...RADIAL_POINT_SERIES_DEFAULT_PROPS,\n      ...symbols?.props\n    }),\n    [symbols]\n  );\n  const [activeValues, setActiveValues] = useState<any | null>(null);\n  const isMulti = type === 'grouped';\n\n  const getColorForPoint = useCallback(\n    (point: ChartInternalShallowDataShape, index: number) => {\n      const key = Array.isArray(point) ? point?.[0]?.key : point?.key;\n\n      return getColor({\n        colorScheme,\n        data,\n        index,\n        point,\n        key\n      });\n    },\n    [colorScheme, data]\n  );\n\n  const renderArea = useCallback(\n    (point: ChartInternalShallowDataShape[], index = 0) => (\n      <>\n        {area && (\n          <CloneElement<RadialAreaProps>\n            element={area}\n            id={`${id}-radial-area-${index}`}\n            xScale={xScale}\n            yScale={yScale}\n            animated={animated}\n            color={getColorForPoint}\n            index={index}\n            data={point}\n            interpolation={interpolation as RadialInterpolationTypes}\n            outerRadius={outerRadius}\n            innerRadius={innerRadius}\n            isClosedCurve={isClosedCurve}\n          />\n        )}\n        {line && (\n          <CloneElement<RadialLineProps>\n            element={line}\n            xScale={xScale}\n            yScale={yScale}\n            hasArea={area !== null}\n            index={index}\n            animated={animated}\n            interpolation={interpolation as RadialInterpolationTypes}\n            color={getColorForPoint}\n            data={point}\n            isClosedCurve={isClosedCurve}\n          />\n        )}\n      </>\n    ),\n    [\n      animated,\n      area,\n      getColorForPoint,\n      id,\n      innerRadius,\n      interpolation,\n      isClosedCurve,\n      line,\n      outerRadius,\n      xScale,\n      yScale\n    ]\n  );\n\n  const renderSymbols = useCallback(\n    (data: ChartInternalShallowDataShape[], index = 0) => {\n      // Animations are only valid for Area\n      const activeSymbols =\n        (symbols && symbolsProps.activeValues) || activeValues;\n      const isAnimated = area !== undefined && animated && !activeSymbols;\n\n      return (\n        <CloneElement<RadialPointSeriesProps>\n          element={symbols}\n          activeValues={activeValues}\n          xScale={xScale}\n          index={index}\n          yScale={yScale}\n          data={data}\n          animated={isAnimated}\n          color={getColorForPoint}\n        />\n      );\n    },\n    [\n      activeValues,\n      animated,\n      area,\n      getColorForPoint,\n      symbols,\n      symbolsProps,\n      xScale,\n      yScale\n    ]\n  );\n\n  const renderSingleSeries = useCallback(\n    (points: ChartInternalShallowDataShape[]) => (\n      <Fragment>\n        {renderArea(points)}\n        {symbols && renderSymbols(points)}\n      </Fragment>\n    ),\n    [renderArea, renderSymbols, symbols]\n  );\n\n  const renderMultiSeries = useCallback(\n    (points: ChartInternalNestedDataShape[]) => (\n      <Fragment>\n        {points\n          .map((point, index) => (\n            <Fragment key={`${point.key!.toString()}`}>\n              {renderArea(point.data, index)}\n            </Fragment>\n          ))\n          .reverse()}\n        {points\n          .map((point, index) => (\n            <Fragment key={`${point.key!.toString()}`}>\n              {renderSymbols(point.data, index)}\n            </Fragment>\n          ))\n          .reverse()}\n      </Fragment>\n    ),\n    [renderArea, renderSymbols]\n  );\n\n  const renderValueMarkers = useCallback(\n    () => (\n      <>\n        {valueMarkers?.length &&\n          valueMarkers.map((marker) => (\n            <CloneElement<RadialValueMarkerProps>\n              key={marker.key}\n              element={marker}\n              value={yScale(marker.props.value)}\n            />\n          ))}\n      </>\n    ),\n    [valueMarkers, yScale]\n  );\n\n  return (\n    <CloneElement<TooltipAreaProps>\n      element={tooltip}\n      xScale={xScale}\n      yScale={yScale}\n      data={data}\n      height={height}\n      width={width}\n      isRadial={true}\n      innerRadius={innerRadius}\n      outerRadius={outerRadius}\n      color={getColorForPoint}\n      onValueEnter={(event) => setActiveValues(event.value)}\n      onValueLeave={() => setActiveValues(null)}\n      startAngle={startAngle}\n      endAngle={endAngle}\n    >\n      <g clipPath={`url(#${id}-path)`}>\n        {isMulti &&\n          renderMultiSeries(data as unknown as ChartInternalNestedDataShape[])}\n        {!isMulti &&\n          renderSingleSeries(data as ChartInternalShallowDataShape[])}\n        {renderValueMarkers()}\n      </g>\n    </CloneElement>\n  );\n};\n\nexport const RADIAL_AREA_SERIES_DEFAULT_PROPS: Partial<RadialAreaSeriesProps> =\n  {\n    colorScheme: schemes.cybertron,\n    interpolation: 'smooth',\n    type: 'standard',\n    animated: true,\n    area: <RadialArea />,\n    line: <RadialLine />,\n    symbols: <RadialPointSeries />,\n    tooltip: <TooltipArea />,\n    startAngle: 0,\n    endAngle: 2 * Math.PI,\n    isClosedCurve: true\n  };\n","import React, { Fragment, ReactElement, FC, useCallback, useMemo } from 'react';\nimport {\n  ChartInternalShallowDataShape,\n  buildShallowChartData,\n  ChartDataShape,\n  buildNestedChartData,\n  ChartNestedDataShape,\n  ChartShallowDataShape\n} from '@/common/data';\nimport { scaleTime, scaleBand, scalePoint } from 'd3-scale';\nimport { getYDomain, getXDomain } from '@/common/utils/domains';\nimport {\n  ChartProps,\n  ChartContainer,\n  ChartContainerChildProps\n} from '@/common/containers';\nimport { CloneElement } from 'reablocks';\nimport {\n  RADIAL_AREA_SERIES_DEFAULT_PROPS,\n  RadialAreaSeries,\n  RadialAreaSeriesProps\n} from './RadialAreaSeries';\nimport {\n  RADIAL_AXIS_DEFAULT_PROPS,\n  RadialAxis,\n  RadialAxisProps\n} from '@/common/Axis/RadialAxis';\nimport { getRadialYScale } from '@/common/scales/radial';\nimport { uniqueBy } from '@/common/utils';\n\nexport interface RadialAreaChartProps extends ChartProps {\n  /**\n   * Data the chart will receive to render.\n   */\n  data: ChartDataShape[];\n\n  /**\n   * The series component that renders the area components.\n   */\n  series: ReactElement<RadialAreaSeriesProps, typeof RadialAreaSeries>;\n\n  /**\n   * The radial axis component for the chart.\n   */\n  innerRadius: number;\n\n  /**\n   * The inner radius for the chart center.\n   */\n  axis: ReactElement<RadialAxisProps, typeof RadialAxis> | null;\n\n  /**\n   * Start angle for the first value.\n   */\n  startAngle?: number;\n\n  /**\n   * End angle for the last value.\n   */\n  endAngle?: number;\n\n  /**\n   * Whether the curve should be closed. Set to true by deafult\n   */\n  isClosedCurve?: boolean;\n}\n\nexport const RadialAreaChart: FC<Partial<RadialAreaChartProps>> = ({\n  id,\n  width,\n  height,\n  className,\n  data,\n  containerClassName,\n  innerRadius = 0.1,\n  series = <RadialAreaSeries />,\n  axis = <RadialAxis />,\n  margins = 75,\n  startAngle = 0,\n  endAngle = 2 * Math.PI,\n  isClosedCurve = true\n}) => {\n  const seriesProps = useMemo(\n    () => ({ ...RADIAL_AREA_SERIES_DEFAULT_PROPS, ...series.props }),\n    [series.props]\n  );\n  const axisProps = useMemo(\n    () => ({ ...RADIAL_AXIS_DEFAULT_PROPS, ...(axis?.props ?? {}) }),\n    [axis?.props]\n  );\n\n  const getXScale = useCallback(\n    (points) => {\n      const isFullCircle = Math.abs(endAngle - startAngle) >= 2 * Math.PI;\n      let xScale;\n      if (axisProps.type === 'category') {\n        const isMultiSeries = seriesProps.type === 'grouped';\n\n        let xDomain;\n        if (isMultiSeries) {\n          xDomain = uniqueBy<ChartInternalShallowDataShape>(\n            points,\n            (dd) => dd.data,\n            (dd) => dd.x\n          );\n        } else {\n          xDomain = uniqueBy<ChartInternalShallowDataShape>(\n            points,\n            (dd) => dd.x\n          );\n        }\n\n        if (isFullCircle) {\n          xScale = scaleBand()\n            .range([0, 2 * Math.PI])\n            .domain(xDomain as any[]);\n        } else {\n          // scaleBand() excludes the end value from the band:\n          //  https://www.d3indepth.com/scales/#scaleband\n          xScale = scalePoint()\n            .range([startAngle, endAngle])\n            .domain(xDomain as any[]);\n        }\n      } else {\n        const xDomain = getXDomain({ data: points });\n\n        xScale = scaleTime().range([startAngle, endAngle]).domain(xDomain);\n      }\n\n      return xScale;\n    },\n    [axisProps.type, endAngle, seriesProps.type, startAngle]\n  );\n\n  const getScales = useCallback(\n    (preData: ChartDataShape[], outerRadius: number, innerRadius: number) => {\n      const isMultiSeries = seriesProps.type === 'grouped';\n\n      let d;\n      if (isMultiSeries) {\n        d = buildNestedChartData(preData as ChartNestedDataShape[], true);\n      } else {\n        d = buildShallowChartData(preData as ChartShallowDataShape[]);\n      }\n\n      const xScale = getXScale(d);\n      const yDomain = getYDomain({ data: d, scaled: false });\n      const yScale = getRadialYScale(innerRadius, outerRadius, yDomain);\n\n      return {\n        yScale,\n        xScale,\n        result: d\n      };\n    },\n    [getXScale, seriesProps.type]\n  );\n\n  const renderChart = useCallback(\n    (containerProps: ChartContainerChildProps) => {\n      const { chartWidth, chartHeight, id } = containerProps;\n      const outerRadius = Math.min(chartWidth, chartHeight) / 2;\n      const { yScale, xScale, result } = getScales(\n        data!,\n        outerRadius,\n        innerRadius\n      );\n\n      return (\n        <Fragment>\n          {axis && (\n            <CloneElement<RadialAxisProps>\n              element={axis}\n              xScale={xScale}\n              height={chartHeight}\n              width={chartWidth}\n              innerRadius={innerRadius}\n              startAngle={startAngle}\n              endAngle={endAngle}\n            />\n          )}\n          <CloneElement<RadialAreaSeriesProps>\n            element={series}\n            id={id}\n            data={result}\n            xScale={xScale}\n            yScale={yScale}\n            height={chartHeight}\n            width={chartWidth}\n            outerRadius={outerRadius}\n            innerRadius={innerRadius}\n            startAngle={startAngle}\n            endAngle={endAngle}\n            isClosedCurve={isClosedCurve}\n          />\n        </Fragment>\n      );\n    },\n    [\n      getScales,\n      data,\n      innerRadius,\n      axis,\n      startAngle,\n      endAngle,\n      series,\n      isClosedCurve\n    ]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      height={height}\n      containerClassName={containerClassName}\n      margins={margins}\n      xAxisVisible={false}\n      yAxisVisible={false}\n      center={true}\n      className={className}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n","const pi = Math.PI,\n    tau = 2 * pi,\n    epsilon = 1e-6,\n    tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n  this._ += strings[0];\n  for (let i = 1, n = strings.length; i < n; ++i) {\n    this._ += arguments[i] + strings[i];\n  }\n}\n\nfunction appendRound(digits) {\n  let d = Math.floor(digits);\n  if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n  if (d > 15) return append;\n  const k = 10 ** d;\n  return function(strings) {\n    this._ += strings[0];\n    for (let i = 1, n = strings.length; i < n; ++i) {\n      this._ += Math.round(arguments[i] * k) / k + strings[i];\n    }\n  };\n}\n\nexport class Path {\n  constructor(digits) {\n    this._x0 = this._y0 = // start of current subpath\n    this._x1 = this._y1 = null; // end of current subpath\n    this._ = \"\";\n    this._append = digits == null ? append : appendRound(digits);\n  }\n  moveTo(x, y) {\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n  }\n  closePath() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._append`Z`;\n    }\n  }\n  lineTo(x, y) {\n    this._append`L${this._x1 = +x},${this._y1 = +y}`;\n  }\n  quadraticCurveTo(x1, y1, x, y) {\n    this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  bezierCurveTo(x1, y1, x2, y2, x, y) {\n    this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  arcTo(x1, y1, x2, y2, r) {\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let x0 = this._x1,\n        y0 = this._y1,\n        x21 = x2 - x1,\n        y21 = y2 - y1,\n        x01 = x0 - x1,\n        y01 = y0 - y1,\n        l01_2 = x01 * x01 + y01 * y01;\n\n    // Is this path empty? Move to (x1,y1).\n    if (this._x1 === null) {\n      this._append`M${this._x1 = x1},${this._y1 = y1}`;\n    }\n\n    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n    else if (!(l01_2 > epsilon));\n\n    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n    // Equivalently, is (x1,y1) coincident with (x2,y2)?\n    // Or, is the radius zero? Line to (x1,y1).\n    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n      this._append`L${this._x1 = x1},${this._y1 = y1}`;\n    }\n\n    // Otherwise, draw an arc!\n    else {\n      let x20 = x2 - x0,\n          y20 = y2 - y0,\n          l21_2 = x21 * x21 + y21 * y21,\n          l20_2 = x20 * x20 + y20 * y20,\n          l21 = Math.sqrt(l21_2),\n          l01 = Math.sqrt(l01_2),\n          l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n          t01 = l / l01,\n          t21 = l / l21;\n\n      // If the start tangent is not coincident with (x0,y0), line to.\n      if (Math.abs(t01 - 1) > epsilon) {\n        this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n      }\n\n      this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n    }\n  }\n  arc(x, y, r, a0, a1, ccw) {\n    x = +x, y = +y, r = +r, ccw = !!ccw;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let dx = r * Math.cos(a0),\n        dy = r * Math.sin(a0),\n        x0 = x + dx,\n        y0 = y + dy,\n        cw = 1 ^ ccw,\n        da = ccw ? a0 - a1 : a1 - a0;\n\n    // Is this path empty? Move to (x0,y0).\n    if (this._x1 === null) {\n      this._append`M${x0},${y0}`;\n    }\n\n    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n      this._append`L${x0},${y0}`;\n    }\n\n    // Is this arc empty? We’re done.\n    if (!r) return;\n\n    // Does the angle go the wrong way? Flip the direction.\n    if (da < 0) da = da % tau + tau;\n\n    // Is this a complete circle? Draw two arcs to complete the circle.\n    if (da > tauEpsilon) {\n      this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n    }\n\n    // Is this arc non-empty? Draw an arc!\n    else if (da > epsilon) {\n      this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n    }\n  }\n  rect(x, y, w, h) {\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n  }\n  toString() {\n    return this._;\n  }\n}\n\nexport function path() {\n  return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n  return new Path(+digits);\n}\n","import React, { useEffect, useRef } from 'react';\nimport { motion, useMotionValue, useSpring } from 'motion/react';\nimport { interpolate } from 'd3-interpolate';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\n\nexport const MotionBar = ({ custom, transition, arc, ...rest }) => {\n  const d = useMotionValue('');\n  const currentYRef = useRef(custom.exit.y);\n  const spring = useSpring(0, DEFAULT_TRANSITION);\n\n  useEffect(() => {\n    const interpolator = interpolate(currentYRef.current, custom.enter.y);\n    const prevSpring = spring.get();\n    let timeoutId;\n\n    if (transition?.delay) {\n      timeoutId = setTimeout(() => {\n        spring.set(prevSpring + 1);\n      }, transition.delay * 1000);\n    } else {\n      spring.set(prevSpring + 1);\n    }\n\n    const unsubscribe = spring.onChange((v) => {\n      currentYRef.current = interpolator(v - prevSpring);\n      d.set(arc({ ...custom.enter, y: currentYRef.current }));\n    });\n\n    return () => {\n      if (timeoutId) {\n        clearTimeout(timeoutId);\n      }\n      unsubscribe();\n    };\n  }, [arc, custom.enter, d, spring, transition.delay]);\n\n  const { d: enterD, ...enterRest } = custom.enter;\n  const { d: exitD, ...exitRest } = custom.exit;\n\n  return (\n    <motion.path\n      {...rest}\n      initial={exitRest}\n      exit={exitRest}\n      animate={enterRest}\n      transition={transition}\n      d={transition.type !== false ? d : enterD}\n      tabIndex={0}\n    />\n  );\n};\n","import React, { FC } from 'react';\nimport { motion } from 'motion/react';\n\nexport interface RadialGuideBarProps {\n  active: boolean;\n  path: string;\n  fill?: string;\n  opacity?: number;\n}\n\nexport const RadialGuideBar: FC<Partial<RadialGuideBarProps>> = ({\n  active,\n  path,\n  fill = '#eee',\n  opacity = 0.2\n}) => (\n  <motion.path\n    d={path}\n    fill={fill}\n    pointerEvents=\"none\"\n    initial=\"hidden\"\n    animate={active ? 'visible' : 'hidden'}\n    variants={{\n      hidden: { opacity: 0 },\n      visible: { opacity }\n    }}\n  />\n);\n","import React, {\n  FC,\n  Fragment,\n  ReactElement,\n  useCallback,\n  useMemo,\n  useRef\n} from 'react';\nimport { ChartInternalShallowDataShape } from '@/common/data';\nimport { arc } from 'd3-shape';\nimport { Gradient } from '@/common/Gradient';\nimport chroma from 'chroma-js';\nimport { path } from 'd3-path';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\nimport { MotionBar } from './MotionBar';\nimport { RadialGuideBar, RadialGuideBarProps } from './RadialGuideBar';\nimport { CloneElement } from 'reablocks';\nimport { scaleBand } from 'd3-scale';\n\nexport interface RadialBarProps {\n  /**\n   * Parsed data shape. Set internally by `RadialBarChart`.\n   */\n  data: ChartInternalShallowDataShape;\n\n  /**\n   * The inner radius for the chart center.\n   */\n  innerRadius: number;\n\n  /**\n   * Index of the element in the series. Set internally by `RadialBarSeries`.\n   */\n  index: number;\n\n  /**\n   * Whether the element is active or not. Set internally by `RadialBarSeries`.\n   */\n  animated: boolean;\n\n  /**\n   * D3 scale for X Axis. Set internally by `RadialBarChart`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `RadialBarChart`.\n   */\n  yScale: any;\n\n  /**\n   * Color of the bar.\n   */\n  color: any;\n\n  /**\n   * Whether to use gradient or not.\n   */\n  gradient: boolean;\n\n  /**\n   * Id set internally by `RadialBarSeries`.\n   */\n  id: string;\n\n  /**\n   * Total number of bars used for animation. Set internally by `RadialBarSeries`.\n   */\n  barCount: number;\n\n  /**\n   * Total number of nested bars inside each group. Set internally by `RadialBarSeries`.\n   */\n  innerBarCount: number;\n\n  /**\n   * Index of the group. Set internally by `BarSeries`.\n   */\n  groupIndex?: number;\n\n  /**\n   * CSS classes to apply.\n   */\n  className?: string;\n\n  /**\n   * Whether the bar is curved or not.\n   */\n  curved: boolean;\n\n  /**\n   * Guide bar component.\n   */\n  guide: ReactElement<RadialGuideBarProps, typeof RadialGuideBar> | null;\n\n  /**\n   * Active caused by hover.\n   */\n  active: boolean;\n\n  /**\n   * Event for when a symbol is clicked.\n   */\n  onClick: (event) => void;\n\n  /**\n   * Event for when the symbol has mouse enter.\n   */\n  onMouseEnter: (event) => void;\n\n  /**\n   * Event for when the symbol has mouse leave.\n   */\n  onMouseLeave: (event) => void;\n}\n\nexport const RadialBar: FC<Partial<RadialBarProps>> = ({\n  animated,\n  innerRadius,\n  xScale,\n  yScale,\n  curved,\n  id,\n  gradient,\n  barCount,\n  innerBarCount,\n  groupIndex,\n  className,\n  data,\n  active,\n  guide,\n  index,\n  color,\n  onClick,\n  onMouseEnter,\n  onMouseLeave\n}) => {\n  const previousEnter = useRef<any | null>(null);\n  const fill = color(data, index);\n  const currentColorShade = active ? chroma(fill).brighten(0.5) : fill;\n\n  const transition = useMemo(() => {\n    if (animated) {\n      return {\n        ...DEFAULT_TRANSITION,\n        delay: (index / barCount) * 0.9\n      };\n    } else {\n      return {\n        type: false,\n        delay: 0\n      };\n    }\n  }, [animated, barCount, index]);\n\n  const getFill = useCallback(\n    (color: string) => {\n      if (!gradient) {\n        return color;\n      }\n\n      return `url(#${id}-gradient)`;\n    },\n    [gradient, id]\n  );\n\n  const getArc = useCallback(\n    (data: ChartInternalShallowDataShape) => {\n      const outerRadius = yScale(data.y);\n\n      if (curved) {\n        const startAngle = xScale(data.x);\n        const endAngle = startAngle + xScale.bandwidth();\n\n        const arcFn = arc()\n          .innerRadius(innerRadius)\n          .outerRadius(outerRadius)\n          .startAngle(startAngle)\n          .endAngle(endAngle)\n          .padAngle(0.01)\n          .padRadius(innerRadius);\n\n        return arcFn(data as any);\n      } else {\n        const isMultiSeries = groupIndex !== undefined;\n        const xScaleDomain = xScale.domain();\n        const xScaleRange = xScale.range();\n        const isFullCircle =\n          Math.abs(xScaleRange[1] - xScaleRange[0]) >= 2 * Math.PI;\n\n        let xScaleBandwidth;\n        let rotateMid;\n        let startAngle;\n        let endAngle;\n        if (isFullCircle) {\n          xScaleBandwidth = xScale.bandwidth();\n\n          // Align groups centrally about the label axis\n          rotateMid =\n            isMultiSeries && xScaleBandwidth ? xScaleBandwidth / 2 : 0;\n          startAngle = xScale(data.x) - Math.PI * 0.5 - rotateMid;\n          endAngle = startAngle + xScaleBandwidth;\n        } else {\n          xScaleBandwidth = scaleBand()\n            .domain(xScaleDomain)\n            .range(xScaleRange)\n            .bandwidth();\n          rotateMid =\n            isMultiSeries && xScaleBandwidth ? xScaleBandwidth / 2 : 0;\n\n          if (index === 0) {\n            // Squeeze in the first group aligning the first bar in the group with the start margin\n            startAngle = xScale(data.x) - Math.PI * 0.5;\n            endAngle = startAngle + xScaleBandwidth - rotateMid;\n          } else if (index === barCount - 1) {\n            // Squeeze in the last group aligning the last bar in the group with the end margin\n            endAngle = xScaleRange[1] - Math.PI * 0.5;\n            startAngle = endAngle - xScaleBandwidth + rotateMid;\n          } else {\n            // Other groups are center aligned with the label axis\n            startAngle = xScale(data.x) - Math.PI * 0.5 - rotateMid;\n            endAngle = startAngle + xScaleBandwidth;\n          }\n        }\n\n        const innerAngleDistance = endAngle - startAngle;\n        const arcLength = innerRadius * innerAngleDistance;\n        const outerAngleDistance = arcLength / outerRadius;\n        const halfAngleDistanceDelta =\n          (innerAngleDistance - outerAngleDistance) / 2;\n\n        const innerDiff = innerAngleDistance / innerBarCount;\n        const innerStart = isMultiSeries\n          ? startAngle + groupIndex * innerDiff\n          : startAngle;\n        const innerEnd = isMultiSeries ? innerStart + innerDiff : endAngle;\n        const outerDiff = outerAngleDistance / innerBarCount;\n        const halfAngleDiffDistanceDelta = isMultiSeries\n          ? (innerDiff - outerDiff) / 2\n          : halfAngleDistanceDelta;\n\n        const pathFn = path();\n        pathFn.arc(0, 0, innerRadius, innerStart, innerEnd);\n        pathFn.arc(\n          0,\n          0,\n          outerRadius,\n          innerEnd - halfAngleDiffDistanceDelta,\n          innerStart + halfAngleDiffDistanceDelta,\n          true\n        );\n\n        return pathFn.toString();\n      }\n    },\n    [\n      barCount,\n      curved,\n      groupIndex,\n      index,\n      innerBarCount,\n      innerRadius,\n      xScale,\n      yScale\n    ]\n  );\n\n  const renderBar = useCallback(\n    (color: string) => {\n      const fill = getFill(color);\n\n      // Track previous props\n      const prev = previousEnter.current\n        ? { ...previousEnter.current }\n        : undefined;\n      previousEnter.current = { ...data };\n\n      const [yStart, yEnd] = yScale.domain();\n      const exit = {\n        ...data,\n        y: yStart\n      };\n\n      const guidePath = getArc({\n        ...data,\n        y: yEnd\n      }) as string;\n\n      return (\n        <Fragment>\n          {guide && (\n            <CloneElement<RadialGuideBarProps>\n              element={guide}\n              active={active}\n              path={guidePath}\n            />\n          )}\n          <MotionBar\n            arc={getArc}\n            custom={{\n              enter: data,\n              exit,\n              previousEnter: prev\n            }}\n            transition={transition}\n            fill={fill}\n            className={className}\n            onMouseEnter={(event) =>\n              onMouseEnter?.({\n                value: data,\n                nativeEvent: event\n              })\n            }\n            onMouseLeave={(event) =>\n              onMouseLeave?.({\n                value: data,\n                nativeEvent: event\n              })\n            }\n            onClick={(event) =>\n              onClick?.({\n                value: data,\n                nativeEvent: event\n              })\n            }\n          />\n        </Fragment>\n      );\n    },\n    [\n      active,\n      className,\n      data,\n      getArc,\n      getFill,\n      guide,\n      onClick,\n      onMouseEnter,\n      onMouseLeave,\n      transition,\n      yScale\n    ]\n  );\n\n  return (\n    <Fragment>\n      {renderBar(currentColorShade)}\n      {gradient && <Gradient id={`${id}-gradient`} color={currentColorShade} />}\n    </Fragment>\n  );\n};\n\nRadialBar.defaultProps = {\n  gradient: true,\n  curved: false,\n  guide: <RadialGuideBar />,\n  onClick: () => undefined,\n  onMouseEnter: () => undefined,\n  onMouseLeave: () => undefined\n};\n","import React, {\n  FC,\n  Fragment,\n  ReactElement,\n  useState,\n  useCallback,\n  useMemo\n} from 'react';\nimport {\n  ChartInternalDataShape,\n  ChartInternalNestedDataShape,\n  ChartInternalShallowDataShape\n} from '@/common/data';\nimport { RadialBar, RadialBarProps } from './RadialBar';\nimport { CloneElement } from 'reablocks';\nimport { ColorSchemeType, getColor, schemes } from '@/common/color';\nimport { TooltipAreaProps, TooltipArea, ChartTooltip } from '@/common/Tooltip';\nimport isEqual from 'react-fast-compare';\nimport { RadialValueMarker, RadialValueMarkerProps } from '@/common';\n\nexport type RadialBarSeriesType = 'standard' | 'grouped';\n\nexport interface RadialBarSeriesProps {\n  /**\n   * Parsed data shape. Set internally by `RadialBarChart`.\n   */\n  data: ChartInternalDataShape[];\n\n  /**\n   * Color scheme for the series.\n   */\n  colorScheme: ColorSchemeType;\n\n  /**\n   * The inner radius for the chart center.\n   */\n  innerRadius: number;\n\n  /**\n   * The outer radius for the chart center.\n   */\n  outerRadius: number;\n\n  /**\n   * D3 scale for X Axis. Set internally by `RadialBarChart`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `RadialBarChart`.\n   */\n  yScale: any;\n\n  /**\n   * Id set internally by `RadialBarChart`.\n   */\n  id: string;\n\n  /**\n   * Bar that is rendered.\n   */\n  bar: ReactElement<RadialBarProps, typeof RadialBar>;\n\n  /**\n   * Whether to animate the enter/update/exit.\n   */\n  animated: boolean;\n\n  /**\n   * Height of the chart. Set internally by `RadialBarChart`.\n   */\n  height: number;\n\n  /**\n   * Width of the chart. Set internally by `RadialBarChart`.\n   */\n  width: number;\n\n  /**\n   * Tooltip for the chart area.\n   */\n  tooltip: ReactElement<TooltipAreaProps, typeof TooltipArea>;\n\n  /**\n   * Start angle for the first value.\n   */\n  startAngle?: number;\n\n  /**\n   * End angle for the last value.\n   */\n  endAngle?: number;\n\n  /**\n   * The type of the chart.\n   */\n  type?: RadialBarSeriesType;\n\n  /**\n   * Value markers line for the chart.\n   */\n  valueMarkers:\n    | ReactElement<RadialValueMarkerProps, typeof RadialValueMarker>[]\n    | null;\n}\n\nexport const RadialBarSeries: FC<Partial<RadialBarSeriesProps>> = ({\n  data,\n  id,\n  innerRadius,\n  outerRadius,\n  xScale,\n  yScale,\n  height,\n  width,\n  tooltip,\n  colorScheme,\n  bar,\n  animated,\n  startAngle,\n  endAngle,\n  type,\n  valueMarkers\n}) => {\n  const [activeValues, setActiveValues] = useState<any | null>(null);\n  const isMultiSeries = useMemo(() => type === 'grouped', [type]);\n\n  const renderBar = useCallback(\n    (\n      point: ChartInternalShallowDataShape,\n      innerBarCount: number,\n      index: number,\n      barCount: number,\n      groupIndex?: number\n    ) => {\n      const active = activeValues && data && isEqual(activeValues.x, point.x);\n\n      return (\n        <Fragment key={index}>\n          <CloneElement<RadialBarProps>\n            element={bar}\n            id={`radialbar-${id}-${index}`}\n            index={index}\n            data={point}\n            xScale={xScale}\n            active={active}\n            yScale={yScale}\n            innerRadius={innerRadius}\n            color={(point) => getColor({ data, point, index: 0, colorScheme })}\n            barCount={barCount}\n            innerBarCount={innerBarCount}\n            groupIndex={groupIndex}\n            animated={animated}\n            startAngle={startAngle}\n            endAngle={endAngle}\n          />\n        </Fragment>\n      );\n    },\n    [\n      activeValues,\n      animated,\n      bar,\n      colorScheme,\n      data,\n      endAngle,\n      id,\n      innerRadius,\n      startAngle,\n      xScale,\n      yScale\n    ]\n  );\n\n  const renderBarGroup = useCallback(\n    (\n      data: ChartInternalShallowDataShape[],\n      innerBarCount: number,\n      barCount: number,\n      groupIndex?: number\n    ) => {\n      return (\n        <Fragment>\n          {data.map((barData, barIndex) =>\n            renderBar(barData, innerBarCount, barIndex, barCount, groupIndex)\n          )}\n        </Fragment>\n      );\n    },\n    [renderBar]\n  );\n\n  const renderValueMarkers = useCallback(\n    () => (\n      <>\n        {valueMarkers?.length &&\n          valueMarkers.map((marker) => (\n            <CloneElement<RadialValueMarkerProps>\n              key={marker.key}\n              element={marker}\n              value={yScale(marker.props.value)}\n            />\n          ))}\n      </>\n    ),\n    [valueMarkers, yScale]\n  );\n\n  return (\n    <CloneElement<TooltipAreaProps>\n      element={tooltip}\n      xScale={xScale}\n      yScale={yScale}\n      data={data}\n      height={height}\n      width={width}\n      isRadial={true}\n      innerRadius={innerRadius}\n      outerRadius={outerRadius}\n      onValueEnter={(event) => setActiveValues(event.value)}\n      onValueLeave={() => setActiveValues(null)}\n      color={(point, index) => getColor({ data, point, index, colorScheme })}\n      startAngle={startAngle}\n      endAngle={endAngle}\n    >\n      {isMultiSeries\n        ? (data as ChartInternalNestedDataShape[]).map((groupData, index) => (\n          <g key={`bar-group-${index}`}>\n            {renderBarGroup(\n                groupData.data as ChartInternalShallowDataShape[],\n                data.length,\n                groupData.data.length,\n                index\n            )}\n          </g>\n        ))\n        : renderBarGroup(\n            data as ChartInternalShallowDataShape[],\n            1,\n            data.length\n        )}\n      {renderValueMarkers()}\n    </CloneElement>\n  );\n};\n\nRadialBarSeries.defaultProps = {\n  colorScheme: schemes.cybertron[0],\n  tooltip: <TooltipArea tooltip={<ChartTooltip followCursor={true} />} />,\n  bar: <RadialBar />,\n  animated: true,\n  startAngle: 0,\n  endAngle: 2 * Math.PI,\n  type: 'standard'\n};\n","import React, { useCallback, FC, Fragment, ReactElement, useMemo } from 'react';\nimport {\n  ChartShallowDataShape,\n  ChartInternalShallowDataShape,\n  buildShallowChartData,\n  ChartDataShape,\n  buildNestedChartData,\n  ChartNestedDataShape\n} from '@/common/data';\nimport { scaleBand, scalePoint } from 'd3-scale';\nimport { getYDomain } from '@/common/utils/domains';\nimport { RadialBarSeries, RadialBarSeriesProps } from './RadialBarSeries';\nimport {\n  ChartProps,\n  ChartContainer,\n  ChartContainerChildProps\n} from '@/common/containers';\nimport { CloneElement } from 'reablocks';\nimport {\n  RADIAL_AXIS_DEFAULT_PROPS,\n  RadialAxis,\n  RadialAxisProps\n} from '@/common/Axis/RadialAxis';\nimport { getRadialYScale } from '@/common/scales';\nimport { uniqueBy } from '@/common/utils/array';\n\nexport interface RadialBarChartProps extends ChartProps {\n  /**\n   * Data the chart will receive to render.\n   */\n  data: ChartDataShape[];\n\n  /**\n   * The series component that renders the bar components.\n   */\n  series: ReactElement<RadialBarSeriesProps, typeof RadialBarSeries>;\n\n  /**\n   * The radial axis component for the chart.\n   */\n  axis: ReactElement<RadialAxisProps, typeof RadialAxis> | null;\n\n  /**\n   * The inner radius for the chart center.\n   */\n  innerRadius: number;\n\n  /**\n   * Start angle for the first value.\n   */\n  startAngle?: number;\n\n  /**\n   * End angle for the last value.\n   */\n  endAngle?: number;\n}\n\nexport const RadialBarChart: FC<Partial<RadialBarChartProps>> = ({\n  id,\n  width,\n  height,\n  margins = 75,\n  className,\n  containerClassName,\n  data,\n  innerRadius = 10,\n  series = <RadialBarSeries />,\n  axis = <RadialAxis />,\n  startAngle = 0,\n  endAngle = 2 * Math.PI\n}) => {\n  const axisProps = useMemo(\n    () => ({ ...RADIAL_AXIS_DEFAULT_PROPS, ...(axis?.props ?? {}) }),\n    [axis?.props]\n  );\n\n  const seriesProps = useMemo(\n    () => ({ ...RADIAL_AXIS_DEFAULT_PROPS, ...(series?.props ?? {}) }),\n    [series?.props]\n  );\n\n  const getXScale = useCallback(\n    (points) => {\n      const isFullCircle = Math.abs(endAngle - startAngle) >= 2 * Math.PI;\n      let xScale;\n      if (axisProps.type === 'category') {\n        const isMultiSeries = seriesProps.type === 'grouped';\n\n        let xDomain;\n        if (isMultiSeries) {\n          xDomain = uniqueBy<ChartInternalShallowDataShape>(\n            points,\n            (dd) => dd.data,\n            (dd) => dd.x\n          );\n        } else {\n          xDomain = uniqueBy<ChartInternalShallowDataShape>(\n            points,\n            (dd) => dd.x\n          );\n        }\n\n        if (isFullCircle) {\n          xScale = scaleBand()\n            .range([0, 2 * Math.PI])\n            .domain(xDomain as any[]);\n        } else {\n          // scaleBand() excludes the end value from the band:\n          //  https://www.d3indepth.com/scales/#scaleband\n          xScale = scalePoint()\n            .range([startAngle, endAngle])\n            .domain(xDomain as any[]);\n        }\n      } else {\n        const xDomain = uniqueBy(points, (d) => d.x);\n\n        xScale = scaleBand()\n          .range([startAngle, endAngle])\n          .domain(xDomain as any[]);\n      }\n\n      return xScale;\n    },\n    [axisProps.type, endAngle, seriesProps.type, startAngle]\n  );\n\n  const getScales = useCallback(\n    (preData: ChartDataShape[], innerRadius: number, outerRadius: number) => {\n      const isMultiSeries = seriesProps.type === 'grouped';\n      let newData;\n      if (isMultiSeries) {\n        newData = buildNestedChartData(preData as ChartNestedDataShape[], true);\n      } else {\n        newData = buildShallowChartData(preData as ChartShallowDataShape[]);\n      }\n\n      const yDomain = getYDomain({ data: newData, scaled: false });\n\n      const yScale = getRadialYScale(innerRadius, outerRadius, yDomain);\n\n      const xScale = getXScale(newData);\n\n      return {\n        xScale,\n        yScale,\n        newData\n      };\n    },\n    [getXScale, seriesProps.type]\n  );\n\n  const renderChart = useCallback(\n    ({ chartWidth, chartHeight, id }: ChartContainerChildProps) => {\n      const outerRadius = Math.min(chartWidth, chartHeight) / 2;\n      const { yScale, xScale, newData } = getScales(\n        data,\n        innerRadius,\n        outerRadius\n      );\n\n      return (\n        <Fragment>\n          {axis && (\n            <CloneElement<RadialAxisProps>\n              element={axis}\n              xScale={xScale}\n              height={chartHeight}\n              width={chartWidth}\n              innerRadius={innerRadius}\n              startAngle={startAngle}\n              endAngle={endAngle}\n            />\n          )}\n          <CloneElement<RadialBarSeriesProps>\n            element={series}\n            id={id}\n            data={newData}\n            height={chartHeight}\n            width={chartWidth}\n            xScale={xScale}\n            yScale={yScale}\n            innerRadius={innerRadius}\n            outerRadius={outerRadius}\n            startAngle={startAngle}\n            endAngle={endAngle}\n          />\n        </Fragment>\n      );\n    },\n    [axis, data, endAngle, getScales, innerRadius, series, startAngle]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      height={height}\n      margins={margins}\n      xAxisVisible={false}\n      yAxisVisible={false}\n      center={true}\n      className={className}\n      containerClassName={containerClassName}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n","import React, { FC, ReactElement, useMemo } from 'react';\nimport { arc } from 'd3-shape';\nimport { PieArc, ArcData } from '@/PieChart';\nimport { ChartShallowDataShape } from '@/common/data';\nimport { ChartTooltip, ChartTooltipProps } from '@/common/Tooltip';\nimport { Gradient, GradientProps } from '@/common/Gradient';\n\nexport interface RadialGaugeArcProps {\n  /**\n   * ID generated by the chart.\n   */\n  id?: string;\n\n  /**\n   * Data set by the `RadialGaugeSeries` components.\n   */\n  data?: ChartShallowDataShape;\n\n  /**\n   * Start angle set by the `RadialGaugeSeries` components.\n   */\n  startAngle: number;\n\n  /**\n   * End angle set by the `RadialGaugeSeries` components.\n   */\n  endAngle: number;\n\n  /**\n   * Inner radius set by the `RadialGaugeSeries` components.\n   */\n  innerRadius: number;\n\n  /**\n   * Outer radius set by the `RadialGaugeSeries` components.\n   */\n  outerRadius: number;\n\n  /**\n   * Color set by the `RadialGaugeSeries` components.\n   */\n  color: any;\n\n  /**\n   * Corner Radius of the arcs, see https://github.com/d3/d3-shape#arc_cornerRadius\n   */\n  cornerRadius?: number;\n\n  /**\n   * Pad Angle between adjacent arcs, see https://github.com/d3/d3-shape#arc_padAngle\n   */\n  padAngle?: number;\n\n  /**\n   * Pad Radius between adjacent arcs, see https://github.com/d3/d3-shape#arc_padRadius\n   */\n  padRadius?: number;\n\n  /**\n   * Animation set by the `RadialGaugeSeries` component.\n   */\n  animated: boolean;\n\n  /**\n   * Disable the interactions.\n   */\n  disabled: boolean;\n\n  /**\n   * Fill the arc.\n   */\n  fill?: string;\n\n  /**\n   * Gradient shades for the bar.\n   */\n  gradient: ReactElement<GradientProps, typeof Gradient> | null;\n\n  /**\n   * Tooltip component.\n   */\n  tooltip: ReactElement<ChartTooltipProps, typeof ChartTooltip> | null;\n\n  /**\n   * Event for when the arc is clicked.\n   */\n  onClick: (event) => void;\n\n  /**\n   * Event for when the arc has mouse enter.\n   */\n  onMouseEnter: (event) => void;\n\n  /**\n   * Event for when the arc has mouse leave.\n   */\n  onMouseLeave: (event) => void;\n}\n\nexport const RadialGaugeArc: FC<Partial<RadialGaugeArcProps>> = ({\n  data,\n  gradient,\n  startAngle,\n  id,\n  endAngle,\n  innerRadius,\n  outerRadius,\n  cornerRadius = 0,\n  padAngle = 0,\n  color = '#353d44',\n  animated = true,\n  disabled = false,\n  fill,\n  onClick,\n  onMouseEnter,\n  onMouseLeave,\n  tooltip = <ChartTooltip />\n}) => {\n  /**\n   * This function will generate the arcs\n   * https://github.com/d3/d3-shape#arcs\n   */\n  const arcGenerator = useMemo(() => {\n    return arc<ArcData>()\n      .innerRadius(innerRadius)\n      .outerRadius(outerRadius)\n      .cornerRadius(cornerRadius);\n  }, [innerRadius, outerRadius, cornerRadius]);\n\n  const arcElement = useMemo(() => {\n    const arcData: ArcData = {\n      // @ts-ignore Data must be passed\n      data: data || {},\n      startAngle,\n      endAngle,\n      padAngle\n    };\n\n    return (\n      <PieArc\n        id={id}\n        arc={arcGenerator}\n        data={arcData}\n        animated={animated}\n        color={color}\n        gradient={gradient}\n        disabled={disabled}\n        tooltip={tooltip}\n        onClick={onClick}\n        onMouseEnter={onMouseEnter}\n        onMouseLeave={onMouseLeave}\n      />\n    );\n  }, [\n    id,\n    arcGenerator,\n    startAngle,\n    endAngle,\n    padAngle,\n    data,\n    animated,\n    color,\n    gradient,\n    disabled,\n    tooltip,\n    onClick,\n    onMouseEnter,\n    onMouseLeave\n  ]);\n\n  return (\n    <g>\n      {fill && <circle fill={fill} r={outerRadius} />}\n      {arcElement}\n    </g>\n  );\n};\n","import React, { FC } from 'react';\nimport { ChartShallowDataShape, ChartInternalDataTypes } from '@/common/data';\nimport { formatValue } from '@/common/utils';\nimport classNames from 'classnames';\nimport css from './RadialGaugeLabel.module.css';\n\nexport interface RadialGaugeLabelProps {\n  /**\n   * Data set by the `RadialGaugeSeries` component.\n   */\n  data: ChartShallowDataShape;\n\n  /**\n   * Offset set by the `RadialGaugeSeries` component.\n   */\n  offset: number;\n\n  /**\n   * Classname to apply to the label.\n   */\n  className?: any;\n\n  /**\n   * Label click event.\n   */\n  onClick: (event: { data; nativeEvent }) => void;\n}\n\nexport const RadialGaugeLabel: FC<Partial<RadialGaugeLabelProps>> = ({\n  data,\n  className,\n  offset,\n  onClick = () => undefined\n}) => {\n  const label = formatValue(data.key as ChartInternalDataTypes);\n\n  return (\n    <text\n      x=\"0\"\n      y={offset}\n      textAnchor=\"middle\"\n      // This is only valid when placed below the chart\n      alignmentBaseline={'text-after-edge'}\n      onClick={(nativeEvent) => onClick({ data, nativeEvent })}\n      className={classNames(className, css.valueLabel)}\n    >\n      {label}\n    </text>\n  );\n};\n","import React, { FC } from 'react';\nimport { ChartShallowDataShape } from '@/common/data';\nimport classNames from 'classnames';\nimport css from './RadialGaugeValueLabel.module.css';\nimport { useCount } from '@/common/Count';\n\nexport interface RadialGaugeValueLabelProps {\n  /**\n   * Data set by the `RadialGaugeSeries` component.\n   */\n  data: ChartShallowDataShape;\n\n  /**\n   * Classname to apply to the value label.\n   */\n  className?: any;\n}\n\nexport const RadialGaugeValueLabel: FC<Partial<RadialGaugeValueLabelProps>> = ({\n  data,\n  className\n}) => {\n  const ref = useCount({\n    to: data.data as number\n  });\n\n  return (\n    <text\n      dy=\"-0.5em\"\n      x=\"0\"\n      y=\"15\"\n      textAnchor=\"middle\"\n      className={classNames(className, css.valueLabel)}\n      ref={ref}\n    />\n  );\n};\n","import React, { FC } from 'react';\nimport { RadialGaugeArc, RadialGaugeArcProps } from './RadialGaugeArc';\n\nexport const RadialGaugeOuterArc: FC<Partial<RadialGaugeArcProps>> = (\n  props\n) => <RadialGaugeArc animated={false} disabled={true} {...props} />;\n","import React, {\n  cloneElement,\n  FC,\n  Fragment,\n  ReactElement,\n  useCallback,\n  useMemo\n} from 'react';\nimport { range, min } from 'd3-array';\nimport { scaleBand } from 'd3-scale';\nimport { ChartShallowDataShape } from '@/common';\nimport { ColorSchemeType, getColor } from '@/common/color';\nimport { RadialGaugeArc, RadialGaugeArcProps } from './RadialGaugeArc';\nimport { RadialGaugeLabel, RadialGaugeLabelProps } from './RadialGaugeLabel';\nimport {\n  RadialGaugeValueLabel,\n  RadialGaugeValueLabelProps\n} from './RadialGaugeValueLabel';\nimport { RadialGaugeOuterArc } from './RadialGaugeOuterArc';\nimport { identifier } from 'safe-identifier';\n\nexport interface RadialGaugeSeriesProps {\n  /**\n   * Unique id for the series.\n   */\n  id?: string;\n\n  /**\n   * Data to render set by `RadialGauge` component.\n   */\n  data: ChartShallowDataShape[];\n\n  /**\n   * D3 scale function set by `RadialGauge` component.\n   */\n  scale: any;\n\n  /**\n   * Start angle set by `RadialGauge` component.\n   */\n  startAngle: number;\n\n  /**\n   * Start angle set by `RadialGauge` component.\n   */\n  endAngle: number;\n\n  /**\n   * The \"thickness\" of the arcs\n   */\n  arcWidth?: number;\n\n  /**\n   * Width set by `RadialGauge` component.\n   */\n  width: number;\n\n  /**\n   * Height set by `RadialGauge` component.\n   */\n  height: number;\n\n  /**\n   * Padding between each gauge.\n   */\n  padding: number;\n\n  /**\n   * Color scheme to apply.\n   */\n  colorScheme: ColorSchemeType;\n\n  /**\n   * Arc component.\n   */\n  innerArc: ReactElement<RadialGaugeArcProps, typeof RadialGaugeArc>;\n\n  /**\n   * Outer arc component. This is the 'fill' element.\n   */\n  outerArc: ReactElement<RadialGaugeArcProps, typeof RadialGaugeArc> | null;\n\n  /**\n   * Label component.\n   */\n  label: ReactElement<RadialGaugeLabelProps, typeof RadialGaugeLabel> | null;\n\n  /**\n   * Value label component.\n   */\n  valueLabel: ReactElement<\n    RadialGaugeValueLabelProps,\n    typeof RadialGaugeValueLabel\n  > | null;\n\n  /**\n   * Min width for a gauge. Only applicable in multi-series gauges.\n   */\n  minGaugeWidth: number;\n}\n\nexport const RadialGaugeSeries: FC<Partial<RadialGaugeSeriesProps>> = ({\n  data,\n  scale,\n  startAngle,\n  endAngle,\n  arcWidth = 5,\n  outerArc = <RadialGaugeOuterArc />,\n  innerArc = <RadialGaugeArc />,\n  label = <RadialGaugeLabel />,\n  valueLabel = <RadialGaugeValueLabel />,\n  colorScheme = ['#00ECB1'],\n  id,\n  padding = 20,\n  minGaugeWidth = 50,\n  ...props\n}) => {\n  const { columns, width, height, xScale, yScale } = useMemo(() => {\n    let rows = 1;\n    let columns = data.length;\n\n    if (props.width / data.length < minGaugeWidth) {\n      while (props.width / columns < minGaugeWidth) {\n        rows += 1;\n        columns = Math.ceil(data.length / rows);\n      }\n    }\n\n    const xScale: any = scaleBand();\n    xScale.domain(range(columns));\n    xScale.rangeRound([0, props.width], 0.1);\n\n    const yScale: any = scaleBand();\n    yScale.domain(range(rows));\n    yScale.rangeRound([0, props.height], 0.1);\n\n    return {\n      columns,\n      xScale,\n      yScale,\n      width: xScale.bandwidth(),\n      height: yScale.bandwidth()\n    };\n  }, [data.length, minGaugeWidth, props.height, props.width]);\n\n  const renderGauge = useCallback(\n    (point: ChartShallowDataShape, index: number) => {\n      const dataEndAngle = scale(point.data as number);\n\n      const outerRadius =\n        (min([width - padding * 2, height - padding * 2]) as number) / 2;\n\n      const innerRadius = outerRadius - arcWidth;\n\n      const labelOffset = height / 2;\n\n      const x = xScale(index % columns);\n      const y = yScale(Math.floor(index / columns));\n\n      const xOffset = x + width / 2;\n      const yOffset = y + height / 2;\n      const key = identifier(point.key?.toLocaleString());\n\n      return (\n        <g key={key} transform={`translate(${xOffset}, ${yOffset})`}>\n          {outerArc &&\n            cloneElement(outerArc, {\n              id: `${id}-${key}-outer`,\n              outerRadius,\n              innerRadius,\n              startAngle,\n              endAngle\n            })}\n          {innerArc &&\n            cloneElement(innerArc, {\n              id: `${id}-${key}-inner`,\n              outerRadius,\n              innerRadius,\n              startAngle,\n              endAngle: dataEndAngle,\n              data: point,\n              color: getColor({\n                data,\n                colorScheme,\n                point,\n                index\n              })\n            })}\n          {valueLabel && cloneElement(valueLabel, { data: point })}\n          {label && cloneElement(label, { data: point, offset: labelOffset })}\n        </g>\n      );\n    },\n    [\n      id,\n      arcWidth,\n      colorScheme,\n      columns,\n      data,\n      endAngle,\n      height,\n      innerArc,\n      label,\n      outerArc,\n      padding,\n      scale,\n      startAngle,\n      valueLabel,\n      width,\n      xScale,\n      yScale\n    ]\n  );\n\n  return <Fragment>{data.map(renderGauge)}</Fragment>;\n};\n","import React, { FC, JSX, useMemo } from 'react';\nimport { arc } from 'd3-shape';\n\nimport {\n  ChartNestedDataShape,\n  ChartShallowDataShape,\n  ChartTooltip,\n  ColorSchemeType,\n  getColor\n} from '@/common';\nimport { ArcData, PieArc } from '@/PieChart';\nimport { RadialGaugeArcProps } from './RadialGaugeArc';\n\nexport type RadialGaugeStackedArcProps = Omit<\n  RadialGaugeArcProps,\n  'endAngle' | 'data' | 'color'\n> & {\n  /**\n   * Data set by the `StackedRadialGaugeSeries` components.\n   */\n  data: ChartNestedDataShape;\n\n  /**\n   * D3 scale function set by `RadialGauge` component.\n   */\n  scale: (x: number) => number;\n\n  /**\n   * Color scheme to apply set by 'StackedRadialGaugeSeries' component.\n   */\n  colorScheme: ColorSchemeType;\n};\n\nexport const RadialGaugeStackedArc: FC<Partial<RadialGaugeStackedArcProps>> = ({\n  id,\n  data,\n  scale,\n  innerRadius,\n  outerRadius,\n  cornerRadius = 0,\n  padAngle = 0,\n  padRadius = 0,\n  startAngle,\n  colorScheme,\n  animated = true,\n  disabled = false,\n  tooltip = <ChartTooltip />,\n  ...restProps\n}) => {\n  const arcGenerator = useMemo(() => {\n    return arc<ArcData>()\n      .innerRadius(innerRadius)\n      .outerRadius(outerRadius)\n      .cornerRadius(cornerRadius);\n  }, [innerRadius, outerRadius, cornerRadius]);\n\n  const stackedArcs = useMemo(() => {\n    let prevEndAngle = startAngle;\n\n    function renderArc(\n      point: ChartShallowDataShape,\n      index: number\n    ): JSX.Element {\n      const value = point.data as number;\n      const startArcAngle = prevEndAngle;\n      const endArcAngle = startArcAngle + scale(value) - startAngle;\n      prevEndAngle = endArcAngle;\n\n      const arcData: ArcData = {\n        data: point,\n        startAngle: startArcAngle,\n        endAngle: endArcAngle,\n        padAngle,\n        value,\n        index\n      };\n\n      const color = getColor({\n        colorScheme,\n        data: [data],\n        point: point,\n        index,\n        active: [data],\n        isMultiSeries: true\n      });\n\n      return (\n        <PieArc\n          animated={animated}\n          disabled={disabled}\n          tooltip={tooltip}\n          {...restProps}\n          id={point.key.toLocaleString()}\n          key={point.key.toLocaleString()}\n          arc={arcGenerator}\n          data={arcData}\n          color={color}\n        />\n      );\n    }\n\n    return data.data.map(renderArc as any) as any;\n  }, [\n    animated,\n    arcGenerator,\n    colorScheme,\n    data,\n    disabled,\n    padAngle,\n    restProps,\n    scale,\n    startAngle,\n    tooltip\n  ]);\n\n  return <g key={id}>{stackedArcs}</g>;\n};\n","import React, { FC } from 'react';\nimport classNames from 'classnames';\nimport css from './StackedRadialGaugeValueLabel.module.css';\n\nexport interface StackedRadialGaugeValueLabelProps {\n  /**\n   * A label shown at the center\n   */\n  label: string;\n\n  /**\n   * A class name to apply\n   */\n  className?: string;\n\n  /**\n   * A y offset to apply to the label\n   */\n  yOffset?: number;\n}\n\nexport const StackedRadialGaugeValueLabel: FC<\n  Partial<StackedRadialGaugeValueLabelProps>\n> = ({ label, className, yOffset = 0 }) => (\n  <>\n    {label && (\n      <text\n        x=\"0\"\n        y={yOffset}\n        textAnchor=\"middle\"\n        alignmentBaseline=\"middle\"\n        className={classNames(className, css.stackedValueLabel)}\n      >\n        {label}\n      </text>\n    )}\n  </>\n);\n","import React, { cloneElement, FC, ReactElement, useCallback } from 'react';\nimport { range } from 'd3-array';\nimport { scaleBand } from 'd3-scale';\nimport {\n  ChartDataShape,\n  ChartNestedDataShape,\n  ChartShallowDataShape\n} from '@/common/data';\nimport { ColorSchemeType, getColor } from '@/common/color';\nimport { RadialGaugeArc, RadialGaugeArcProps } from './RadialGaugeArc';\nimport {\n  RadialGaugeStackedArc,\n  RadialGaugeStackedArcProps\n} from './RadialGaugeStackedArc';\nimport {\n  StackedRadialGaugeValueLabel,\n  StackedRadialGaugeValueLabelProps\n} from './StackedRadialGaugeValueLabel';\nimport {\n  StackedRadialGaugeDescriptionLabel,\n  StackedRadialGaugeDescriptionLabelProps\n} from './StackedRadialGaugeDescriptionLabel';\n\nexport interface StackedRadialGaugeSeriesProps {\n  /**\n   * Data to render set by `RadialGauge` component.\n   */\n  data: ChartDataShape[];\n\n  /**\n   * D3 scale function set by `RadialGauge` component.\n   */\n  scale: any;\n\n  /**\n   * Start angle set by `RadialGauge` component.\n   */\n  startAngle: number;\n\n  /**\n   * Start angle set by `RadialGauge` component.\n   */\n  endAngle: number;\n\n  /**\n   * Width set by `RadialGauge` component.\n   */\n  width: number;\n\n  /**\n   * Height set by `RadialGauge` component.\n   */\n  height: number;\n\n  /**\n   * Color scheme to apply.\n   */\n  colorScheme: ColorSchemeType;\n\n  /**\n   * Arc component.\n   */\n  innerArc: ReactElement<RadialGaugeArcProps, typeof RadialGaugeArc>;\n\n  /**\n   * Stacked Arc component.\n   */\n  stackedInnerArc: ReactElement<\n    RadialGaugeStackedArcProps,\n    typeof RadialGaugeStackedArc\n  >;\n\n  /**\n   * Outer arc component. This is the 'fill' element.\n   */\n  outerArc: ReactElement<RadialGaugeArcProps, typeof RadialGaugeArc> | null;\n\n  /**\n   * Label component.\n   */\n  label: ReactElement<\n    StackedRadialGaugeValueLabelProps,\n    typeof StackedRadialGaugeValueLabel\n  > | null;\n\n  /**\n   * Description label component.\n   */\n  descriptionLabel: ReactElement<\n    StackedRadialGaugeDescriptionLabelProps,\n    typeof StackedRadialGaugeDescriptionLabel\n  > | null;\n\n  /**\n   * A factor from 0 to 1 determining how much of the Gauge should be filled with arcs\n   */\n  fillFactor: number;\n\n  /**\n   * Padding between the stacked arcs, following d3 bandwidth innerPadding\n   */\n  arcPadding: number;\n}\n\nconst isChartNestedData = (\n  point: ChartDataShape\n): point is ChartNestedDataShape => {\n  return Array.isArray(point.data);\n};\n\nexport const StackedRadialGaugeSeries: FC<\n  Partial<StackedRadialGaugeSeriesProps>\n> = ({\n  data,\n  width,\n  height,\n  scale,\n  startAngle,\n  endAngle,\n  outerArc = <RadialGaugeArc disabled={true} animated={false} />,\n  innerArc = <RadialGaugeArc animated={true} />,\n  stackedInnerArc = <RadialGaugeStackedArc animated={true} />,\n  label = <StackedRadialGaugeValueLabel />,\n  descriptionLabel,\n  colorScheme = ['#00ECB1'],\n  fillFactor = 0.2,\n  arcPadding = 0.15\n}) => {\n  const radius = Math.min(width, height) / 2;\n  const innerRadius = radius * (1 - Math.min(fillFactor, 1));\n\n  const rAxis = scaleBand()\n    .domain(range(data.length))\n    .range([innerRadius, radius])\n    .paddingInner(arcPadding);\n\n  const renderOuterArc = useCallback(\n    (outerRadius: number, innerRadius: number) => {\n      return (\n        outerArc &&\n        cloneElement(outerArc, {\n          outerRadius,\n          innerRadius,\n          startAngle,\n          endAngle\n        })\n      );\n    },\n    [outerArc, startAngle, endAngle]\n  );\n\n  const renderInnerArc = useCallback(\n    (\n      outerRadius: number,\n      innerRadius: number,\n      dataEndAngle: number,\n      point: ChartShallowDataShape,\n      index: number\n    ) => {\n      const color = getColor({ data, colorScheme, point, index });\n\n      return (\n        innerArc &&\n        cloneElement(innerArc, {\n          outerRadius,\n          innerRadius,\n          startAngle,\n          endAngle: dataEndAngle,\n          data: point,\n          color\n        })\n      );\n    },\n    [innerArc, startAngle, data, colorScheme]\n  );\n\n  const renderStackedArc = useCallback(\n    (\n      outerRadius: number,\n      innerRadius: number,\n      point: ChartNestedDataShape,\n      index: number\n    ) => {\n      return (\n        <>\n          {stackedInnerArc &&\n            cloneElement(stackedInnerArc, {\n              outerRadius,\n              innerRadius,\n              colorScheme,\n              startAngle,\n              scale: scale?.[index] ?? scale?.[index] ?? scale,\n              data: point\n            })}\n        </>\n      );\n    },\n    [stackedInnerArc, colorScheme, startAngle, scale]\n  );\n\n  const renderStackedGauges = useCallback(\n    (point: ChartDataShape, index: number) => {\n      const outerRadius = rAxis(index as any);\n      const innerRadius = outerRadius - rAxis.bandwidth();\n\n      return (\n        <g key={point.key.toLocaleString()}>\n          {renderOuterArc(outerRadius, innerRadius)}\n          {isChartNestedData(point)\n            ? renderStackedArc(outerRadius, innerRadius, point, index)\n            : renderInnerArc(\n              outerRadius,\n              innerRadius,\n              scale?.[index]?.(point.data) ??\n                  scale?.[0]?.(point.data) ??\n                  scale(point.data),\n              point,\n              index\n            )}\n        </g>\n      );\n    },\n    [rAxis, renderOuterArc, renderStackedArc, renderInnerArc, scale]\n  );\n\n  return (\n    <>\n      <g transform={`translate(${width / 2}, ${height / 2})`}>\n        {data.map(renderStackedGauges)}\n        {descriptionLabel}\n        {label}\n      </g>\n    </>\n  );\n};\n","import React, { FC } from 'react';\nimport classNames from 'classnames';\nimport css from './StackedRadialGaugeDescriptionLabel.module.css';\n\nexport interface StackedRadialGaugeDescriptionLabelProps {\n  /**\n   * A label shown at the center\n   */\n  label: string;\n\n  /**\n   * A class name to apply\n   */\n  className?: string;\n\n  /**\n   * A y offset to apply to the label\n   */\n  yOffset?: number;\n}\n\nexport const StackedRadialGaugeDescriptionLabel: FC<\n  Partial<StackedRadialGaugeDescriptionLabelProps>\n> = ({ label, className, yOffset = 0 }) => (\n  <>\n    {label && (\n      <text\n        x=\"0\"\n        y={yOffset - 20}\n        textAnchor=\"middle\"\n        alignmentBaseline=\"middle\"\n        className={classNames(className, css.stackedDescriptionLabel)}\n      >\n        {label}\n      </text>\n    )}\n  </>\n);\n","import React, { cloneElement, FC, ReactElement, useCallback } from 'react';\nimport { scaleLinear } from 'd3-scale';\nimport {\n  ChartContainer,\n  ChartContextProps,\n  ChartProps\n} from '@/common/containers';\nimport { ChartDataShape } from '@/common/data';\nimport {\n  RadialGaugeSeries,\n  RadialGaugeSeriesProps,\n  StackedRadialGaugeSeries,\n  StackedRadialGaugeSeriesProps\n} from './RadialGaugeSeries';\nimport { useId } from 'reablocks';\n\nexport interface RadialGaugeProps extends ChartProps {\n  /**\n   * Data the chart will receive to render.\n   */\n  data: ChartDataShape[];\n\n  /**\n   * Min value to scale on.\n   */\n  minValue?: number | number[];\n\n  /**\n   * Max value to scale on.\n   */\n  maxValue?: number | number[];\n\n  /**\n   * Start angle for the first value.\n   */\n  startAngle?: number;\n\n  /**\n   * End angle for the last value.\n   */\n  endAngle?: number;\n\n  /**\n   * Gauge series component to render.\n   */\n  series?: ReactElement<\n    RadialGaugeSeriesProps | StackedRadialGaugeSeriesProps,\n    typeof RadialGaugeSeries | typeof StackedRadialGaugeSeries\n  >;\n}\n\nexport const RadialGauge: FC<RadialGaugeProps> = ({\n  id,\n  width,\n  height,\n  margins,\n  className,\n  data,\n  minValue = 0,\n  maxValue = 100,\n  startAngle = 0,\n  endAngle = Math.PI * 2,\n  series = <RadialGaugeSeries />,\n  containerClassName\n}) => {\n  const newId = useId(id);\n\n  const renderSeries = useCallback(\n    ({ chartHeight, chartWidth }: ChartContextProps) => {\n      let scale;\n\n      if (Array.isArray(maxValue)) {\n        scale = maxValue.map((max, index) =>\n          scaleLinear()\n            .domain([minValue?.[index] ?? minValue?.[0] ?? minValue, max])\n            .range([startAngle, endAngle])\n        );\n      } else if (Array.isArray(minValue)) {\n        scale = minValue.map((min, index) =>\n          scaleLinear()\n            .domain([min, maxValue?.[index] ?? maxValue?.[0] ?? maxValue])\n            .range([startAngle, endAngle])\n        );\n      } else {\n        scale = scaleLinear()\n          .domain([minValue, maxValue])\n          .range([startAngle, endAngle]);\n      }\n\n      return cloneElement(series, {\n        id: newId,\n        scale,\n        data,\n        startAngle,\n        endAngle,\n        width: chartWidth,\n        height: chartHeight\n      });\n    },\n    [data, endAngle, maxValue, minValue, series, startAngle, newId]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      height={height}\n      margins={margins}\n      xAxisVisible={false}\n      yAxisVisible={false}\n      className={className}\n      containerClassName={containerClassName}\n    >\n      {renderSeries}\n    </ChartContainer>\n  );\n};\n","import React, {\n  FC,\n  Fragment,\n  MouseEvent,\n  ReactElement,\n  useMemo,\n  useState,\n  useRef,\n  ReactNode\n} from 'react';\nimport { offset } from '@floating-ui/dom';\nimport { ChartTooltip, ChartTooltipProps } from '@/common/Tooltip';\nimport { CloneElement } from 'reablocks';\nimport {\n  constructFunctionProps,\n  PropFunctionTypes\n} from '@/common/utils/functions';\nimport chroma from 'chroma-js';\nimport classNames from 'classnames';\nimport { motion } from 'motion/react';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\nimport { ChartInternalShallowDataShape } from '@/common/data';\nimport css from './HeatmapCell.module.css';\nimport { useHoverIntent } from '@/common/utils/useHoverIntent';\nimport { getAriaLabel } from '@/common';\n\nexport type HeatmapCellProps = {\n  /**\n   * X Position set by `HeatmapSeries`.\n   */\n  x: number;\n\n  /**\n   * Y Position set by `HeatmapSeries`.\n   */\n  y: number;\n\n  /**\n   * rx SVG Attribute.\n   */\n  rx: number;\n\n  /**\n   * ry SVG Attribute.\n   */\n  ry: number;\n\n  /**\n   * Height of cell set by `HeatmapSeries`.\n   */\n  height: number;\n\n  /**\n   * Width of cell set by `HeatmapSeries`.\n   */\n  width: number;\n\n  /**\n   * Total count of cells set by `HeatmapSeries`.\n   */\n  cellCount: number;\n\n  /**\n   * Tooltip component.\n   */\n  tooltip: ReactElement<ChartTooltipProps, typeof ChartTooltip> | null;\n\n  /**\n   * Fill color set by `HeatmapSeries`.\n   */\n  fill: string;\n\n  /**\n   * Stroke color set by `HeatmapSeries`.\n   */\n  stroke: string;\n\n  /**\n   * Symbol element to render.\n   */\n  symbol?: (data: ChartInternalShallowDataShape) => ReactNode;\n\n  /**\n   * Data object set by `Heatmap`.\n   */\n  data: ChartInternalShallowDataShape;\n\n  /**\n   * Whether cell is animated or not set by `HeatmapSeries`.\n   */\n  animated: boolean;\n\n  /**\n   * Cell index set by `HeatmapSeries`.\n   */\n  cellIndex: number;\n\n  /**\n   * Cursor style attribute.\n   */\n  cursor: string;\n\n  /**\n   * Event for when the bar is clicked.\n   */\n  onClick: (event) => void;\n\n  /**\n   * Event for when the bar has mouse enter.\n   */\n  onMouseEnter: (event) => void;\n\n  /**\n   * Event for when the bar has mouse leave.\n   */\n  onMouseLeave: (event) => void;\n} & PropFunctionTypes;\n\n// Set padding modifier for the tooltips\nconst modifiers = [offset({ mainAxis: 0, crossAxis: 3 })];\n\nexport const HeatmapCell: FC<Partial<HeatmapCellProps>> = ({\n  rx = 2,\n  ry = 2,\n  cursor = 'auto',\n  tooltip = <ChartTooltip />,\n  onClick,\n  onMouseEnter,\n  onMouseLeave,\n  data,\n  animated,\n  cellIndex,\n  cellCount,\n  fill,\n  stroke,\n  symbol,\n  x,\n  y,\n  style,\n  className,\n  ...rest\n}) => {\n  const [active, setActive] = useState(false);\n  const rect = useRef<SVGRectElement | null>(null);\n\n  const { pointerOut, pointerOver } = useHoverIntent({\n    onPointerOver: (event) => {\n      setActive(true);\n      onMouseEnter({\n        value: data,\n        nativeEvent: event\n      });\n    },\n    onPointerOut: (event) => {\n      setActive(false);\n      onMouseLeave({\n        value: data,\n        nativeEvent: event\n      });\n    }\n  });\n\n  const onMouseClick = (event: MouseEvent) => {\n    onClick({\n      value: data,\n      nativeEvent: event\n    });\n  };\n\n  const tooltipData = useMemo(\n    () => ({\n      y: data.value,\n      x: `${data.key} ∙ ${data.x}`,\n      data\n    }),\n    [data]\n  );\n\n  const transition = useMemo(() => {\n    if (animated) {\n      return {\n        ...DEFAULT_TRANSITION,\n        delay: (cellIndex / cellCount) * 0.005\n      };\n    } else {\n      return {\n        type: false,\n        delay: 0\n      };\n    }\n  }, [animated, cellIndex, cellCount]);\n\n  const extras = constructFunctionProps({ style, className }, data);\n  const isTransparent = fill === 'transparent';\n  const appliedStroke =\n    active && !isTransparent\n      ? chroma(stroke || fill).brighten(1)\n      : stroke || fill;\n\n  const ariaLabelData = useMemo(\n    () => getAriaLabel({ ...tooltipData, data: null }),\n    [tooltipData]\n  );\n\n  const renderedSymbol = useMemo(\n    () => (symbol ? symbol(data!) : null),\n    [data, symbol]\n  );\n\n  return (\n    <Fragment>\n      <g ref={rect}>\n        {renderedSymbol ? (\n          <motion.g\n            {...rest}\n            fill={fill}\n            stroke={appliedStroke}\n            style={{ ...extras.style, cursor }}\n            className={extras?.className}\n            transform={`translate(${x}, ${y})`}\n            initial={{\n              opacity: 0\n            }}\n            animate={{\n              opacity: 1\n            }}\n            exit={{\n              opacity: 0\n            }}\n            transition={transition}\n            onPointerOver={pointerOver}\n            onPointerOut={pointerOut}\n            onClick={onMouseClick}\n            tabIndex={0}\n            aria-label={ariaLabelData}\n            role=\"graphics-document\"\n          >\n            {renderedSymbol}\n          </motion.g>\n        ) : (\n          <motion.rect\n            {...rest}\n            fill={fill}\n            stroke={appliedStroke}\n            x={x}\n            y={y}\n            rx={rx}\n            ry={ry}\n            style={{ ...extras.style, cursor }}\n            className={classNames(css.cell, extras.className)}\n            initial={{\n              opacity: 0\n            }}\n            animate={{\n              opacity: 1\n            }}\n            exit={{\n              opacity: 0\n            }}\n            transition={transition}\n            onPointerOver={pointerOver}\n            onPointerOut={pointerOut}\n            onClick={onMouseClick}\n            tabIndex={0}\n            aria-label={ariaLabelData}\n            role=\"graphics-document\"\n          />\n        )}\n      </g>\n      {tooltip && !(tooltip.props as any).disabled && !isTransparent && (\n        <CloneElement<ChartTooltipProps>\n          element={tooltip}\n          visible={active}\n          modifiers={(tooltip.props as any).modifiers || modifiers}\n          reference={rect}\n          value={tooltipData}\n        />\n      )}\n    </Fragment>\n  );\n};\n","import React, { FC, ReactElement, Fragment } from 'react';\nimport { HeatmapCell, HeatmapCellProps } from './HeatmapCell';\nimport { CloneElement } from 'reablocks';\nimport { ColorSchemeType } from '@/common/color';\nimport { ChartInternalNestedDataShape } from '@/common/data';\nimport {\n  ColorSchemeStyleArray,\n  createColorSchemeValueScales,\n  getColorSchemeStyles\n} from '@/common/color/helper';\nimport { mergeDefaultProps } from '@/common';\n\nexport interface HeatmapSeriesProps {\n  /**\n   * Padding between cells.\n   */\n  padding: number;\n\n  /**\n   * Id set by `Heatmap`.\n   */\n  id: string;\n\n  /**\n   * Parsed data set by `Heatmap`.\n   */\n  data: ChartInternalNestedDataShape[];\n\n  /**\n   * D3 scale for X Axis. Set internally by `Heatmap`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `Heatmap`.\n   */\n  yScale: any;\n\n  /**\n   * Color scheme for the chart.\n   */\n  colorScheme: ColorSchemeType | ColorSchemeStyleArray;\n\n  /**\n   * Color for the empty cell of the chart.\n   */\n  emptyColor: string;\n\n  /**\n   * Whether the chart is animated or not.\n   */\n  animated: boolean;\n\n  /**\n   * Cell component that will be rendered.\n   */\n  cell: ReactElement<HeatmapCellProps, typeof HeatmapCell>;\n\n  /**\n   * Selected cell(s) in active state\n   */\n  selections?: any;\n}\n\nexport const HeatmapSeries: FC<Partial<HeatmapSeriesProps>> = (props) => {\n  const {\n    animated,\n    emptyColor,\n    colorScheme,\n    cell: cellElement,\n    xScale,\n    yScale,\n    data,\n    id,\n    selections\n  } = mergeDefaultProps(HEATMAP_SERIES_DEFAULT_PROPS, props);\n\n  const valueScales = createColorSchemeValueScales(\n    data,\n    colorScheme,\n    emptyColor,\n    selections\n  );\n  const height = yScale.bandwidth();\n  const width = xScale.bandwidth();\n  const cellCount = [...yScale.domain(), ...xScale.domain()].length;\n\n  const renderCell = ({\n    row,\n    cell,\n    rowIndex,\n    cellIndex,\n    width,\n    height,\n    cellCount\n  }) => {\n    const x = xScale(row.key);\n    const y = yScale(cell.x);\n    const style = getColorSchemeStyles(cell, valueScales);\n\n    return (\n      <CloneElement<HeatmapCellProps>\n        key={`${id}-${rowIndex}-${cellIndex}`}\n        element={cellElement}\n        animated={animated}\n        cellIndex={rowIndex + cellIndex}\n        cellCount={cellCount}\n        x={x}\n        y={y}\n        fill={style?.fill}\n        stroke={style?.stroke}\n        width={width}\n        height={height}\n        data={cell}\n        style={style}\n      />\n    );\n  };\n\n  return (\n    <Fragment>\n      {data.map((row, rowIndex) =>\n        row.data.map((cell, cellIndex) =>\n          renderCell({\n            height,\n            width,\n            cellCount,\n            row,\n            cell,\n            rowIndex,\n            cellIndex\n          })\n        )\n      )}\n    </Fragment>\n  );\n};\n\nexport const HEATMAP_SERIES_DEFAULT_PROPS: Partial<HeatmapSeriesProps> = {\n  padding: 0.1,\n  animated: true,\n  emptyColor: 'rgba(200,200,200,0.08)',\n  colorScheme: ['rgba(28, 107, 86, 0.5)', '#2da283'],\n  cell: <HeatmapCell />\n};\n","import React, { useCallback, Fragment, ReactElement, FC, useMemo } from 'react';\nimport {\n  ChartProps,\n  ChartContainer,\n  ChartContainerChildProps\n} from '@/common/containers/ChartContainer';\nimport { ChartNestedDataShape, buildNestedChartData } from '@/common/data';\nimport { CloneElement } from 'reablocks';\nimport {\n  isAxisVisible,\n  LinearAxisProps,\n  LinearXAxis,\n  LinearYAxis,\n  LinearYAxisTickSeries,\n  LinearXAxisTickSeries,\n  LinearYAxisTickLabel,\n  LinearXAxisTickLabel,\n  LinearAxis,\n  LINEAR_X_AXIS_DEFAULT_PROPS,\n  LINEAR_Y_AXIS_DEFAULT_PROPS,\n  LINEAR_Y_AXIS_TICK_LABEL_DEFAULT_PROPS,\n  LINEAR_X_AXIS_TICK_LABEL_DEFAULT_PROPS\n} from '@/common/Axis';\nimport {\n  HEATMAP_SERIES_DEFAULT_PROPS,\n  HeatmapSeries,\n  HeatmapSeriesProps\n} from './HeatmapSeries';\nimport { scaleBand } from 'd3-scale';\nimport { uniqueBy } from '@/common/utils/array';\n\nexport interface HeatmapProps extends ChartProps {\n  /**\n   * Data the chart will receive to render.\n   */\n  data: ChartNestedDataShape[];\n\n  /**\n   * The series component that renders the cell components.\n   */\n  series: ReactElement<HeatmapSeriesProps, typeof HeatmapSeries>;\n\n  /**\n   * The linear axis component for the Y Axis of the chart.\n   */\n  yAxis: ReactElement<LinearAxisProps, typeof LinearAxis>;\n\n  /**\n   * The linear axis component for the X Axis of the chart.\n   */\n  xAxis: ReactElement<LinearAxisProps, typeof LinearAxis>;\n\n  /**\n   * Any secondary axis components. Useful for multi-axis charts.\n   */\n  secondaryAxis?: ReactElement<LinearAxisProps, typeof LinearAxis>[];\n}\n\nexport const Heatmap: FC<Partial<HeatmapProps>> = ({\n  data = [],\n  margins = 10,\n  series = <HeatmapSeries padding={0.3} />,\n  yAxis = (\n    <LinearYAxis\n      type=\"category\"\n      axisLine={null}\n      tickSeries={\n        <LinearYAxisTickSeries\n          line={null}\n          label={\n            <LinearYAxisTickLabel\n              {...LINEAR_Y_AXIS_TICK_LABEL_DEFAULT_PROPS}\n              padding={5}\n            />\n          }\n        />\n      }\n    />\n  ),\n  xAxis = (\n    <LinearXAxis\n      type=\"category\"\n      axisLine={null}\n      tickSeries={\n        <LinearXAxisTickSeries\n          line={null}\n          label={\n            <LinearXAxisTickLabel\n              {...LINEAR_X_AXIS_TICK_LABEL_DEFAULT_PROPS}\n              padding={5}\n            />\n          }\n        />\n      }\n    />\n  ),\n  secondaryAxis,\n  id,\n  width,\n  height,\n  className,\n  containerClassName\n}) => {\n  const xAxisProps = useMemo(\n    () => ({ ...LINEAR_X_AXIS_DEFAULT_PROPS, ...xAxis.props }),\n    [xAxis.props]\n  );\n  const yAxisProps = useMemo(\n    () => ({ ...LINEAR_Y_AXIS_DEFAULT_PROPS, ...yAxis.props }),\n    [yAxis.props]\n  );\n  const seriesProps = useMemo(\n    () => ({ ...HEATMAP_SERIES_DEFAULT_PROPS, ...series.props }),\n    [series.props]\n  );\n\n  const getScalesData = useCallback(\n    (chartHeight: number, chartWidth: number) => {\n      const nestedData = buildNestedChartData(data);\n\n      const xDomain: any =\n        xAxisProps.domain || uniqueBy(nestedData, (d) => d.key);\n\n      const xScale = scaleBand()\n        .range([0, chartWidth])\n        .domain(xDomain)\n        .paddingInner(seriesProps.padding || 0.1);\n\n      const yDomain: any =\n        yAxisProps.domain ||\n        uniqueBy(\n          nestedData,\n          (d) => d.data,\n          (d) => d.x\n        );\n\n      const yScale = scaleBand()\n        .domain(yDomain)\n        .range([chartHeight, 0])\n        .paddingInner(seriesProps.padding || 0.1);\n\n      return {\n        yScale,\n        xScale,\n        data: nestedData\n      };\n    },\n    [data, xAxisProps.domain, seriesProps.padding, yAxisProps.domain]\n  );\n\n  const renderChart = useCallback(\n    (containerProps: ChartContainerChildProps) => {\n      const { chartWidth, chartHeight, updateAxes, id, chartSized } =\n        containerProps;\n      const {\n        xScale,\n        yScale,\n        data: scalesData\n      } = getScalesData(chartHeight, chartWidth);\n\n      return (\n        <Fragment>\n          <CloneElement<LinearAxisProps>\n            element={xAxis}\n            height={chartHeight}\n            width={chartWidth}\n            scale={xScale}\n            visibility={chartSized ? 'visible' : 'hidden'}\n            onDimensionsChange={(event) => updateAxes('horizontal', event)}\n          />\n          <CloneElement<LinearAxisProps>\n            element={yAxis}\n            height={chartHeight}\n            width={chartWidth}\n            scale={yScale}\n            visibility={chartSized ? 'visible' : 'hidden'}\n            onDimensionsChange={(event) => updateAxes('vertical', event)}\n          />\n          {secondaryAxis &&\n            secondaryAxis.map((axis, i) => (\n              <CloneElement<LinearAxisProps>\n                key={i}\n                element={axis}\n                height={chartHeight}\n                width={chartWidth}\n                visibility={chartSized ? 'visible' : 'hidden'}\n                onDimensionsChange={(event) => updateAxes('horizontal', event)}\n              />\n            ))}\n          {chartSized && (\n            <CloneElement<HeatmapSeriesProps>\n              element={series}\n              id={`heat-series-${id}`}\n              data={scalesData}\n              xScale={xScale}\n              yScale={yScale}\n            />\n          )}\n        </Fragment>\n      );\n    },\n    [getScalesData, secondaryAxis, series, xAxis, yAxis]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      height={height}\n      margins={margins}\n      containerClassName={containerClassName}\n      xAxisVisible={isAxisVisible(xAxisProps)}\n      yAxisVisible={isAxisVisible(yAxisProps)}\n      className={className}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n","/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument) {\n  const argStr = Object.prototype.toString.call(argument);\n\n  // Clone the date\n  if (\n    argument instanceof Date ||\n    (typeof argument === \"object\" && argStr === \"[object Date]\")\n  ) {\n    // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n    return new argument.constructor(+argument);\n  } else if (\n    typeof argument === \"number\" ||\n    argStr === \"[object Number]\" ||\n    typeof argument === \"string\" ||\n    argStr === \"[object String]\"\n  ) {\n    // TODO: Can we get rid of as?\n    return new Date(argument);\n  } else {\n    // TODO: Can we get rid of as?\n    return new Date(NaN);\n  }\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from 'date-fns'\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date(date: DateType): DateType {\n *   return constructFrom(\n *     date, // Use contrustor from the given date\n *     date.getTime() // Use the date value to create a new date\n *   )\n * }\n */\nexport function constructFrom(date, value) {\n  if (date instanceof Date) {\n    return new date.constructor(value);\n  } else {\n    return new Date(value);\n  }\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { toDate } from \"./toDate.mjs\";\nimport { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param amount - The amount of days to be added.\n *\n * @returns The new date with the days added\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\nexport function addDays(date, amount) {\n  const _date = toDate(date);\n  if (isNaN(amount)) return constructFrom(date, NaN);\n  if (!amount) {\n    // If 0 days, no-op to avoid changing times in the hour before end of DST\n    return _date;\n  }\n  _date.setDate(_date.getDate() + amount);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default addDays;\n","import { addDays } from \"./addDays.mjs\";\n\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @description\n * Subtract the specified number of days from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param amount - The amount of days to be subtracted.\n *\n * @returns The new date with the days subtracted\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * const result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\nexport function subDays(date, amount) {\n  return addDays(date, -amount);\n}\n\n// Fallback for modularized imports:\nexport default subDays;\n","import { ChartShallowDataShape } from '@/common/data';\nimport { max, min, range } from 'd3-array';\nimport { subDays } from 'date-fns';\n\nexport type CalendarView = 'year' | 'month';\n\nconst getFirstOfMonth = (date: Date) =>\n  new Date(date.getFullYear(), date.getMonth(), 1);\n\nexport const addWeeksToDate = (date: Date, weeks: number) => {\n  const d = new Date(date.getTime());\n  d.setDate(d.getDate() + weeks * 7);\n  return d;\n};\n\nconst getStartOfDay = (date: Date) => {\n  const d = new Date(date.getTime());\n  d.setHours(0, 0, 0, 0);\n  return d;\n};\n\nconst getNewDayFromDay = (date: Date, num: number) => {\n  const d = new Date(date.getTime());\n  d.setDate(d.getDate() + num);\n  return d;\n};\n\nexport const weekDays: string[] = (() => {\n  const base = new Date(Date.UTC(2017, 0, 2));\n  return range(7).map(() => {\n    const name = base.toLocaleDateString('default', { weekday: 'short' });\n    base.setDate(base.getDate() + 1);\n    return name;\n  });\n})();\n\nexport const buildDataScales = (\n  rawData: ChartShallowDataShape[],\n  view: CalendarView\n) => {\n  // Get the most recent date to get the range from\n  // From the end date, lets find the start year/month of that\n  // From that start year/month, lets find the end year/month for our bounds\n  const startDate = min(rawData, (d) => d.key) || new Date();\n  const endDomain = view === 'year' ? 53 : 5;\n\n  let end, start;\n  if (view === 'year') {\n    // For year view, end at the most recent date and start 364 days before that\n    end = getStartOfDay(max(rawData, (d) => d.key) || new Date());\n    start = getStartOfDay(subDays(end, 365));\n  } else {\n    // For month view, start at the first of the month and end 4 weeks from that\n    start = getFirstOfMonth(startDate);\n    end = addWeeksToDate(start, endDomain);\n  }\n\n  // Base on the view type, swap out some ranges\n  const xDomainRange = view === 'year' ? 53 : 5;\n\n  // Build our x/y domains for days of week + number of weeks in year\n  const yDomain = range(7).reverse();\n  const xDomain = range(xDomainRange);\n\n  // Filter out dates that are not in the start/end ranges\n  // and turn them into something our chart can read\n  const dates = rawData\n    .filter(\n      (d) =>\n        (d.key as Date).getTime() > start.getTime() ||\n        (d.key as Date).getTime() < end.getTime()\n    )\n    .map((d) => ({\n      key: getStartOfDay(d.key as Date),\n      data: d.data\n    }));\n\n  // Find the first day of the duration and subtract the delta\n  const firstDayOfStart = start.getDay();\n  const curDate = getNewDayFromDay(start, -firstDayOfStart);\n  const rows: any[] = [];\n\n  // Build out the dataset for the n duration\n  for (let week = 0; week < xDomainRange; week++) {\n    const row = {\n      key: week,\n      data: [] as any\n    };\n\n    for (let day = 0; day <= 6; day++) {\n      const dayValue = dates.find((d) => d.key.getTime() === curDate.getTime());\n\n      row.data.push({\n        key: day,\n        data: dayValue?.data ?? undefined,\n        metadata: {\n          date: new Date(curDate.getTime()),\n          start: start,\n          end: end\n        }\n      });\n\n      curDate.setDate(curDate.getDate() + 1);\n    }\n\n    rows.push(row);\n  }\n\n  return {\n    data: rows,\n    yDomain,\n    xDomain,\n    start\n  };\n};\n","import React, { FC, useCallback, useMemo } from 'react';\nimport { ChartShallowDataShape } from '@/common/data';\nimport { Heatmap, HeatmapProps } from './Heatmap';\nimport {\n  LinearXAxis,\n  LinearYAxis,\n  LinearYAxisTickSeries,\n  LinearXAxisTickSeries,\n  LinearYAxisTickLabel,\n  LinearXAxisTickLabel,\n  LINEAR_Y_AXIS_TICK_LABEL_DEFAULT_PROPS,\n  LINEAR_X_AXIS_TICK_LABEL_DEFAULT_PROPS\n} from '@/common/Axis';\nimport { HeatmapSeries, HeatmapCell } from './HeatmapSeries';\nimport { ChartTooltip } from '@/common/Tooltip';\nimport { formatValue } from '@/common/utils/formatting';\nimport {\n  buildDataScales,\n  CalendarView,\n  addWeeksToDate,\n  weekDays\n} from './calendarUtils';\n\nexport interface CalendarHeatmapProps extends Omit<HeatmapProps, 'data'> {\n  /**\n   * Chart data shape.\n   */\n  data: ChartShallowDataShape[];\n\n  /**\n   * Height of the component.\n   */\n  height: number;\n\n  /**\n   * Width of the component.\n   */\n  width: number;\n\n  /**\n   * View of the calendar renderer.\n   */\n  view: CalendarView;\n}\n\nexport const CalendarHeatmap: FC<Partial<CalendarHeatmapProps>> = ({\n  view = 'year',\n  data,\n  series = (\n    <HeatmapSeries\n      padding={0.3}\n      emptyColor=\"transparent\"\n      cell={\n        <HeatmapCell\n          tooltip={\n            <ChartTooltip\n              content={(d) =>\n                `${formatValue(d.data.metadata.date)} ∙ ${formatValue(\n                  d.data.value\n                )}`\n              }\n            />\n          }\n        />\n      }\n    />\n  ),\n  ...rest\n}) => {\n  const {\n    data: domainData,\n    yDomain,\n    xDomain,\n    start\n  } = useMemo(() => buildDataScales(data, view), [data, view]);\n\n  // For month, only pass 1 tick value\n  const xTickValues = view === 'year' ? undefined : [1];\n\n  const getDayOfWeek = useCallback((day: number) => weekDays[day], []);\n\n  // Get the yAxis label formatting based on view type\n  const yAxisLabelFormat = useMemo(\n    () => (view === 'year' ? getDayOfWeek : () => null),\n    [getDayOfWeek, view]\n  );\n\n  // Format the xAxis label for the start + n week\n  const xAxisLabelFormat = useCallback(\n    (weeks: number) =>\n      addWeeksToDate(start, weeks).toLocaleString('default', { month: 'long' }),\n    [start]\n  );\n\n  return (\n    <Heatmap\n      {...rest}\n      series={series}\n      data={domainData}\n      yAxis={\n        <LinearYAxis\n          type=\"category\"\n          axisLine={null}\n          domain={yDomain}\n          tickSeries={\n            <LinearYAxisTickSeries\n              tickSize={20}\n              line={null}\n              label={\n                <LinearYAxisTickLabel padding={5} format={yAxisLabelFormat} />\n              }\n            />\n          }\n        />\n      }\n      xAxis={\n        <LinearXAxis\n          type=\"category\"\n          axisLine={null}\n          domain={xDomain}\n          tickSeries={\n            <LinearXAxisTickSeries\n              line={null}\n              tickValues={xTickValues}\n              label={\n                <LinearXAxisTickLabel\n                  padding={5}\n                  align=\"end\"\n                  format={xAxisLabelFormat}\n                />\n              }\n            />\n          }\n        />\n      }\n    />\n  );\n};\n","import React, { FC } from 'react';\nimport { Bar, BarProps } from '../BarChart';\nimport { ChartTooltip, TooltipTemplate } from '@/common/Tooltip';\n\nexport type LinearGaugeBarProps = BarProps;\n\nexport const LinearGaugeBar: FC<Partial<LinearGaugeBarProps>> = (props) => (\n  <Bar\n    tooltip={\n      <ChartTooltip\n        placement=\"top\"\n        content={(data) => (\n          <TooltipTemplate value={{ y: data.value, x: data.y }} />\n        )}\n      />\n    }\n    {...props}\n  />\n);\n","import React, { FC } from 'react';\n\nexport interface LinearGaugeOuterBarProps extends SVGRect {\n  /**\n   * Height of the chart. Set by `LinearGauge` component.\n   */\n  height: number;\n\n  /**\n   * Width of the chart. Set by `LinearGauge` component.\n   */\n  width: number;\n\n  /**\n   * Fill for the bar element.\n   */\n  fill: string;\n}\n\nexport const LinearGaugeOuterBar: FC<Partial<LinearGaugeOuterBarProps>> = ({\n  height,\n  width,\n  fill = '#484848',\n  ...rest\n}) => (\n  <rect\n    {...rest}\n    fill={fill}\n    width={Math.max(width!, 0)}\n    height={Math.max(height!, 0)}\n  />\n);\n","import React, { Fragment, ReactElement, FC } from 'react';\nimport { BarSeries, BarSeriesProps } from '@/BarChart';\nimport { LinearGaugeBar, LinearGaugeBarProps } from './LinearGaugeBar';\nimport {\n  LinearGaugeOuterBar,\n  LinearGaugeOuterBarProps\n} from './LinearGaugeOuterBar';\nimport { CloneElement } from 'reablocks';\n\nexport interface LinearGaugeSeriesProps extends Omit<BarSeriesProps, 'bar'> {\n  /**\n   * Height of the chart. Set by `LinearGauge` component.\n   */\n  height: number;\n\n  /**\n   * Width of the chart. Set by `LinearGauge` component.\n   */\n  width: number;\n\n  /**\n   * Whether its a multi-series or not. Set by `LinearGauge` component.\n   */\n  isMultiSeries: boolean;\n\n  /**\n   * Bar element. Only applicable for single series.\n   */\n  bar: ReactElement<LinearGaugeBarProps, typeof LinearGaugeBar>;\n\n  /**\n   * Outer bar element. Only applicable for single series.\n   */\n  outerBar: ReactElement<LinearGaugeOuterBarProps, typeof LinearGaugeOuterBar>;\n}\n\nexport const LinearGaugeSeries: FC<Partial<LinearGaugeSeriesProps>> = ({\n  height,\n  width,\n  bar = <LinearGaugeBar />,\n  outerBar = <LinearGaugeOuterBar />,\n  isMultiSeries,\n  ...rest\n}) => (\n  <Fragment>\n    {!isMultiSeries && outerBar && (\n      <CloneElement<LinearGaugeOuterBarProps>\n        element={outerBar}\n        height={height}\n        width={width}\n      />\n    )}\n    <BarSeries\n      {...rest}\n      layout=\"horizontal\"\n      tooltip={null}\n      bar={<CloneElement<LinearGaugeOuterBarProps> element={bar} />}\n    />\n  </Fragment>\n);\n","import React, { FC, Fragment, ReactElement, useCallback, useMemo } from 'react';\nimport {\n  ChartProps,\n  ChartContainer,\n  ChartContainerChildProps\n} from '@/common/containers';\nimport {\n  ChartShallowDataShape,\n  buildBarStackData,\n  ChartInternalNestedDataShape,\n  buildShallowChartData,\n  ChartNestedDataShape\n} from '@/common/data';\nimport { getXScale, getYScale } from '@/common/scales';\nimport { CloneElement } from 'reablocks';\nimport { LinearGaugeSeries, LinearGaugeSeriesProps } from './LinearGaugeSeries';\n\nexport interface LinearGaugeProps extends ChartProps {\n  /**\n   * Data the chart will receive to render.\n   */\n  data: ChartShallowDataShape | ChartShallowDataShape[];\n\n  /**\n   * The series component that renders the bar components.\n   */\n  series: ReactElement<LinearGaugeSeriesProps, typeof LinearGaugeSeries>;\n\n  /**\n   * Min value to scale on. Only applicable for single-series.\n   */\n  minValue: number;\n\n  /**\n   * Max value to scale on. Only applicable for single-series.\n   */\n  maxValue: number;\n}\n\nexport const LinearGauge: FC<Partial<LinearGaugeProps>> = ({\n  id,\n  width,\n  height,\n  margins,\n  className,\n  containerClassName,\n  series = <LinearGaugeSeries />,\n  data,\n  minValue = 0,\n  maxValue = 100\n}) => {\n  const transformedData = useMemo(() => {\n    if (Array.isArray(data)) {\n      return buildBarStackData(\n        [\n          {\n            key: 'default',\n            data\n          }\n        ] as ChartNestedDataShape[],\n        'expand',\n        'horizontal'\n      );\n    } else {\n      return buildShallowChartData([data], 'horizontal');\n    }\n  }, [data]);\n\n  const getScales = useCallback(\n    (\n      isMultiSeries: boolean,\n      data: ChartInternalNestedDataShape[],\n      width: number,\n      height: number,\n      minValue: number,\n      maxValue: number\n    ) => {\n      const domain = !isMultiSeries ? [minValue, maxValue] : undefined;\n\n      const keyScale = getXScale({\n        width,\n        type: 'value',\n        data,\n        domain,\n        isMultiSeries\n      });\n\n      const valueScale = getYScale({\n        type: 'category',\n        height,\n        data,\n        isMultiSeries\n      });\n\n      return {\n        keyScale,\n        valueScale\n      };\n    },\n    []\n  );\n\n  const renderChart = useCallback(\n    ({ chartHeight, chartWidth, id, chartSized }: ChartContainerChildProps) => {\n      const isMultiSeries = Array.isArray(data);\n      const type = isMultiSeries ? 'stackedNormalized' : 'standard';\n      const { keyScale, valueScale } = getScales(\n        isMultiSeries,\n        transformedData as ChartInternalNestedDataShape[],\n        chartWidth,\n        chartHeight,\n        minValue,\n        maxValue\n      );\n\n      return (\n        <Fragment>\n          {chartSized && (\n            <CloneElement<LinearGaugeSeriesProps>\n              element={series}\n              id={`linear-gauge-series-${id}`}\n              data={transformedData}\n              isCategorical={true}\n              xScale={keyScale}\n              yScale={valueScale}\n              type={type}\n              height={chartHeight}\n              width={chartWidth}\n              isMultiSeries={isMultiSeries}\n            />\n          )}\n        </Fragment>\n      );\n    },\n    [data, getScales, maxValue, minValue, series, transformedData]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      height={height}\n      margins={margins}\n      className={className}\n      containerClassName={containerClassName}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n","import { useEffect } from 'react';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\nimport { useMotionValue, useSpring } from 'motion/react';\nimport { interpolate } from 'd3-interpolate';\n\nexport const useInterpolate = ({ data, animated }) => {\n  const transition = animated\n    ? { ...DEFAULT_TRANSITION }\n    : {\n      delay: 0,\n      type: false\n    };\n\n  const d = useMotionValue(data.path);\n  const spring = useSpring(0, { stiffness: 300, damping: 30 });\n\n  useEffect(() => {\n    const interpolator = interpolate(d.get(), data.path);\n    const prevSpring = spring.get();\n    spring.set(1 + prevSpring);\n\n    return spring.on('change', (v) => d.set(interpolator(v - prevSpring)));\n  }, [d, data.path, spring]);\n\n  return { transition, d };\n};\n","import React, {\n  FC,\n  useRef,\n  ReactElement,\n  useState,\n  Fragment,\n  useMemo\n} from 'react';\nimport { IVennLayout } from '@upsetjs/venn.js';\nimport { ChartTooltip, ChartTooltipProps } from '@/common/Tooltip';\nimport { CloneElement } from 'reablocks';\nimport { motion } from 'motion/react';\nimport { useInterpolate } from './useInterpolate';\nimport { Mask, MaskProps } from '@/common/Mask';\nimport { Gradient, GradientProps } from '@/common/Gradient';\nimport { useHoverIntent } from '@/common/utils/useHoverIntent';\nimport { Glow, getAriaLabel } from '@/common';\nimport { generateGlowStyles } from '@/common/Glow/utils';\n\nexport interface VennArcProps {\n  /**\n   * Whether the shape is active or not.\n   */\n  active?: boolean | null;\n\n  /**\n   * Id set by the parent.\n   */\n  id: string;\n\n  /**\n   * Whether the chart is animated or not.\n   */\n  animated?: boolean;\n\n  /**\n   * Fill color for the arc.\n   */\n  fill: string;\n\n  /**\n   * Stroke for the arc.\n   */\n  stroke?:\n    | string\n    | ((\n        data: IVennLayout<any>[],\n        index: number,\n        isActive: boolean | null,\n        isHovered: boolean | null\n      ) => string);\n\n  /**\n   * The internal data object built by venn.js\n   */\n  data: IVennLayout<any>;\n\n  /**\n   * Whether the chart is disabled.\n   */\n  disabled?: boolean;\n\n  /**\n   * Stroke on the arc.\n   */\n  strokeWidth?: number;\n\n  /**\n   * Initial style of arc.\n   */\n  initialStyle?: any;\n\n  /**\n   * Active style of arc.\n   */\n  activeStyle?: any;\n\n  /**\n   * Inactive style of arc.\n   */\n  inactiveStyle?: any;\n\n  /**\n   * CSS Styles for the arc.\n   */\n  style?: any;\n\n  /**\n   * Tooltip element.\n   */\n  tooltip?: ReactElement<ChartTooltipProps, typeof ChartTooltip> | null;\n\n  /**\n   * Mask element for the arc.\n   */\n  mask: ReactElement<MaskProps, typeof Mask> | null;\n\n  /**\n   * Gradient shades for the arc.\n   */\n  gradient: ReactElement<GradientProps, typeof Gradient> | null;\n\n  /**\n   * Glow styling for the arc.\n   */\n  glow: Glow;\n\n  /**\n   * Event for when the arc is clicked.\n   */\n  onClick: (event) => void;\n\n  /**\n   * Event for when the arc has mouse enter.\n   */\n  onMouseEnter: (event) => void;\n\n  /**\n   * Event for when the arc has mouse leave.\n   */\n  onMouseLeave: (event) => void;\n}\n\nexport const VennArc: FC<Partial<VennArcProps>> = ({\n  data,\n  fill,\n  disabled,\n  animated,\n  stroke,\n  mask,\n  id,\n  style,\n  active = false,\n  inactiveStyle = { opacity: 0.3 },\n  activeStyle = { opacity: 0.8 },\n  initialStyle = { opacity: 0.6 },\n  strokeWidth = 3,\n  gradient = <Gradient />,\n  glow,\n  tooltip = <ChartTooltip />,\n  onClick = () => undefined,\n  onMouseEnter = () => undefined,\n  onMouseLeave = () => undefined\n}) => {\n  const [internalActive, setInternalActive] = useState<boolean>(false);\n  const arcRef = useRef<any | null>(null);\n  const { transition, d } = useInterpolate({ animated, data });\n  const currentStyle = active\n    ? activeStyle\n    : active === null\n      ? inactiveStyle\n      : initialStyle;\n\n  const arcFill =\n    gradient && !mask\n      ? `url(#gradient-${id})`\n      : mask\n        ? `url(#mask-pattern-${id})`\n        : fill;\n\n  const { pointerOut, pointerOver } = useHoverIntent({\n    onPointerOver: (event) => {\n      if (!disabled) {\n        setInternalActive(true);\n        onMouseEnter?.({\n          value: data.data,\n          nativeEvent: event\n        });\n      }\n    },\n    onPointerOut: (event) => {\n      if (!disabled) {\n        setInternalActive(false);\n        onMouseLeave?.({\n          value: data.data,\n          nativeEvent: event\n        });\n      }\n    }\n  });\n\n  const tooltipData = useMemo(\n    () => ({ y: data.data.size, x: data.data?.sets?.join(' | ') }),\n    [data]\n  );\n  const ariaLabelData = useMemo(() => getAriaLabel(tooltipData), [tooltipData]);\n\n  return (\n    <g\n      title={data.data.key}\n      onPointerOver={pointerOver}\n      onPointerOut={pointerOut}\n      onClick={(event) => {\n        if (!disabled) {\n          onClick?.({\n            value: data.data,\n            nativeEvent: event\n          });\n        }\n      }}\n      tabIndex={0}\n      aria-label={ariaLabelData}\n      role=\"graphics-document\"\n    >\n      <motion.path\n        ref={arcRef}\n        fill={arcFill}\n        id={`${id}-arc`}\n        strokeWidth={strokeWidth}\n        stroke={stroke as string}\n        transition={transition}\n        d={d}\n        initial={initialStyle}\n        animate={currentStyle}\n        style={{\n          ...style,\n          ...generateGlowStyles({\n            glow,\n            colorSchemeColor: typeof stroke === 'string' ? stroke : null\n          })\n        }}\n      />\n      {mask && (\n        <Fragment>\n          <Mask id={`mask-${id}`} fill={`url(#gradient-${id})`} />\n          <CloneElement<MaskProps>\n            element={mask}\n            id={`mask-pattern-${id}`}\n            fill={fill}\n          />\n        </Fragment>\n      )}\n      {gradient && (\n        <CloneElement<GradientProps>\n          element={gradient}\n          id={`gradient-${id}`}\n          color={fill}\n        />\n      )}\n      {tooltip && !tooltip.props.disabled && (\n        <CloneElement<ChartTooltipProps>\n          element={tooltip}\n          visible={!!internalActive}\n          reference={arcRef}\n          value={tooltipData}\n        />\n      )}\n    </g>\n  );\n};\n","import React, { FC } from 'react';\nimport { motion } from 'motion/react';\nimport { wrapText } from '@/common/utils/wrapText';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\n\nexport interface VennLabelProps {\n  /**\n   * Whether the shape is active or not.\n   */\n  active?: boolean | null;\n\n  /**\n   * Set by the parent element.\n   */\n  id?: string;\n\n  /**\n   * Show all labels or just the large ones. Default false.\n   */\n  showAll?: boolean;\n\n  /**\n   * The label type to show.\n   */\n  labelType: 'key' | 'value';\n\n  /**\n   * Should wrap text or not.\n   */\n  wrap?: boolean;\n\n  /**\n   * The internal data object built by venn.js\n   */\n  data: any;\n\n  /**\n   * Font size of the text.\n   */\n  fontSize?: number;\n\n  /**\n   * Font family of the text.\n   */\n  fontFamily?: string;\n\n  /**\n   * Fill of the text.\n   */\n  fill?: string;\n\n  /**\n   * Whether the chart is animated or not.\n   */\n  animated?: boolean;\n\n  /**\n   * Format label.\n   */\n  format?: (data) => any;\n}\n\nexport const VennLabel: FC<Partial<VennLabelProps>> = ({\n  data,\n  format,\n  id,\n  active,\n  labelType = 'key',\n  showAll = false,\n  wrap = true,\n  animated = true,\n  fill,\n  fontSize = 11,\n  fontFamily = 'sans-serif'\n}) => {\n  // If the text area is very large, then lets just skip showing the label\n  if (!showAll && !data.arcs?.filter((a) => a.large).length) {\n    return null;\n  }\n\n  const key =\n    labelType === 'key' ? data.data?.sets?.join(' | ') : data.data.size;\n\n  const transition = animated ? DEFAULT_TRANSITION : { delay: 0, type: false };\n  const text = wrap\n    ? wrapText({\n      key,\n      x: data.text.x,\n      fontFamily,\n      fontSize,\n      width: data?.circles?.[0]?.radius\n    })\n    : key;\n\n  return (\n    <motion.text\n      id={`${id}-text`}\n      fill={fill}\n      pointerEvents=\"none\"\n      fontFamily={fontFamily}\n      fontSize={fontSize}\n      initial={\n        {\n          attrX: data.text.x,\n          attrY: data.text.y,\n          opacity: 1\n        } as any\n      }\n      animate={\n        {\n          attrX: data.text.x,\n          attrY: data.text.y,\n          opacity: active === null ? 0.3 : 1\n        } as any\n      }\n      transition={transition}\n      textAnchor=\"middle\"\n    >\n      {format ? format(data) : text}\n    </motion.text>\n  );\n};\n","import React, { FC, Fragment, isValidElement } from 'react';\nimport { motion } from 'motion/react';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\n\nexport interface VennOuterLabelProps {\n  /**\n   * The internal data object built by venn.js\n   */\n  data: any;\n\n  /**\n   * Font size of the text.\n   */\n  fontSize?: number;\n\n  /**\n   * Font family of the text.\n   */\n  fontFamily?: string;\n\n  /**\n   * Fill of the text.\n   */\n  fill?: string;\n\n  /**\n   * Whether the chart is animated or not.\n   */\n  animated?: boolean;\n\n  /**\n   * Format label.\n   */\n  format?: (data) => any;\n}\n\nexport const VennOuterLabel: FC<Partial<VennOuterLabelProps>> = ({\n  data,\n  format,\n  animated = true,\n  fill = '#000',\n  fontSize = 14,\n  fontFamily = 'sans-serif'\n}) => {\n  const transition = animated ? DEFAULT_TRANSITION : { delay: 0, type: false };\n  const text = data.set.data.key;\n\n  const label = format ? format(data) : text;\n  const isElement = isValidElement(label);\n  const showIcon = isElement && data.set.icon;\n\n  // TODO: framer-motion doesn't seem to like the translates on the g\n  // initial={pos} animate={pos}\n  const pos = {\n    x: showIcon ? data.set.icon.x : data.set.text.x,\n    y: showIcon ? data.set.icon.y : data.set.text.y\n  };\n\n  return (\n    <Fragment>\n      {isElement ? (\n        <g style={{ transform: `translate(${pos.x}px, ${pos.y}px)` }}>\n          {label}\n        </g>\n      ) : (\n        <motion.text\n          fill={fill}\n          style={{ pointerEvents: 'none', fontFamily, fontSize }}\n          textAnchor={data.set.align === 'middle' ? 'center' : data.set.align}\n          alignmentBaseline={data.set.verticalAlign}\n          initial={\n            {\n              attrX: pos.x,\n              attrY: pos.y\n            } as any\n          }\n          animate={\n            {\n              attrX: pos.x,\n              attrY: pos.y\n            } as any\n          }\n          transition={transition}\n        >\n          {label}\n        </motion.text>\n      )}\n    </Fragment>\n  );\n};\n","import React, {\n  FC,\n  Fragment,\n  ReactElement,\n  useCallback,\n  useState,\n  useMemo\n} from 'react';\nimport { IVennLayout } from '@upsetjs/venn.js';\nimport { ColorSchemeType, getColor } from '@/common/color';\nimport { VennArc, VennArcProps } from './VennArc';\nimport { VennLabel, VennLabelProps } from './VennLabel';\nimport { motion } from 'motion/react';\nimport { CloneElement } from 'reablocks';\nimport chroma from 'chroma-js';\nimport { VennOuterLabel, VennOuterLabelProps } from './VennOuterLabel';\nimport invert from 'invert-color';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\nimport { identifier } from 'safe-identifier';\n\nexport interface VennSeriesProps {\n  /**\n   * Id set by the parent.\n   */\n  id: string;\n\n  /**\n   * Active managed selections.\n   */\n  selections?: string[];\n\n  /**\n   * The internal data object built by venn.js\n   */\n  data: IVennLayout<any>[];\n\n  /**\n   * Color scheme for the chart.\n   */\n  colorScheme: ColorSchemeType;\n\n  /**\n   * Whether the chart is disabled.\n   */\n  disabled?: boolean;\n\n  /**\n   * Whether the chart is animated or not.\n   */\n  animated?: boolean;\n\n  /**\n   * Label element.\n   */\n  label?: ReactElement<VennLabelProps, typeof VennLabel> | null;\n\n  /**\n   * Label element.\n   */\n  outerLabel?: ReactElement<VennOuterLabelProps, typeof VennOuterLabel> | null;\n\n  /**\n   * Arc element.\n   */\n  arc?: ReactElement<VennArcProps, typeof VennArc> | null;\n}\n\nexport const VennSeries: FC<Partial<VennSeriesProps>> = ({\n  data,\n  id,\n  selections,\n  animated = true,\n  disabled = false,\n  colorScheme = 'cybertron',\n  outerLabel = <VennOuterLabel />,\n  arc = <VennArc />,\n  label = <VennLabel />\n}) => {\n  const transition = animated ? DEFAULT_TRANSITION : { type: false, delay: 0 };\n  const [actives, setActives] = useState<string[]>([]);\n  const [hovered, setHovered] = useState<string | null>(null);\n\n  const onActivate = useCallback(\n    (point: string) => {\n      setHovered(point);\n\n      setActives(\n        data\n          .filter((d) => d.data?.key.indexOf(point) > -1)\n          .map((d) => d.data?.key)\n      );\n    },\n    [data]\n  );\n\n  const renderArc = useCallback(\n    (d: IVennLayout<any> & { set?: any }, index: number) => {\n      // Get the colors of the fill\n      const fill = getColor({\n        data,\n        colorScheme,\n        point: d.data,\n        index\n      });\n\n      const textFill = fill\n        ? invert(chroma(fill).darken(0.5).hex(), true)\n        : 'white';\n\n      const arcFill = arc.props.fill || fill;\n\n      const key = d?.data?.key;\n      const safeKey = identifier(d.data?.key);\n      const isSelected = selections?.includes(key);\n\n      // Get the state of the arc\n      const isHovered = hovered === key || isSelected;\n      const isActive =\n        isSelected ||\n        actives.includes(key) ||\n        (actives.length > 0 ? null : false);\n\n      const getStrokeColor = () => {\n        if (typeof arc.props.stroke === 'function') {\n          return arc.props.stroke(data, index, isActive, isHovered);\n        }\n        if (arc.props.stroke !== undefined) {\n          return arc.props.stroke;\n        }\n\n        // fallback to fill (determined by colorScheme) if stroke is undefined\n        return fill;\n      };\n\n      const stroke = getStrokeColor();\n\n      const arcStroke =\n        stroke ||\n        chroma(arcFill)\n          .darken(isActive ? 0.8 : 0.5)\n          .hex();\n\n      return (\n        <Fragment key={safeKey}>\n          <CloneElement<VennArcProps>\n            element={arc}\n            id={`${id}-${safeKey}`}\n            data={d}\n            fill={arcFill}\n            stroke={arcStroke}\n            disabled={disabled}\n            animated={animated}\n            active={isActive}\n            onMouseEnter={() => onActivate(key)}\n            onMouseLeave={() => {\n              setActives([]);\n              setHovered(null);\n            }}\n          />\n          {label && (\n            <CloneElement<VennLabelProps>\n              element={label}\n              data={d}\n              id={`${id}-${safeKey}`}\n              active={isActive}\n              animated={animated}\n              fill={textFill}\n              {...label.props}\n            />\n          )}\n          {d.set && outerLabel && (\n            <CloneElement<VennLabelProps>\n              element={outerLabel}\n              data={d}\n              animated={animated}\n            />\n          )}\n        </Fragment>\n      );\n    },\n    [\n      data,\n      colorScheme,\n      arc,\n      selections,\n      hovered,\n      actives,\n      id,\n      disabled,\n      animated,\n      label,\n      outerLabel,\n      onActivate\n    ]\n  );\n\n  const topArcs = useMemo(() => {\n    const result = [];\n\n    if (actives.length > 0) {\n      result.push(...actives.filter((s) => s !== hovered));\n    }\n\n    if (selections?.length) {\n      result.push(\n        ...selections.filter((s) => !actives.includes(s) && s !== hovered)\n      );\n    }\n\n    if (hovered) {\n      result.push(hovered);\n    }\n\n    return result;\n  }, [hovered, actives, selections]);\n\n  return (\n    <motion.g\n      initial={{ opacity: 0, scale: 0 }}\n      animate={{ opacity: 1, scale: 1 }}\n      transition={transition}\n    >\n      {data.map(renderArc)}\n      {topArcs.length > 0 &&\n        topArcs.map((a) => (\n          <use\n            key={a}\n            xlinkHref={`#${id}-${a}-arc`}\n            style={{ pointerEvents: 'none' }}\n          />\n        ))}\n      {data.map((d, index) => (\n        <use\n          key={index}\n          xlinkHref={`#${id}-${identifier(d.data?.key)}-text`}\n          style={{ pointerEvents: 'none' }}\n        />\n      ))}\n    </motion.g>\n  );\n};\n","import venn0 from './venn0.json';\nimport venn1 from './venn1.json';\nimport venn2 from './venn2.json';\nimport venn3 from './venn3.json';\nimport venn4 from './venn4.json';\nimport venn5 from './venn5.json';\n\nexport interface BoundingBox {\n  width: number;\n  height: number;\n}\n\n// Static shapes for rendering\nconst shapes = [venn0, venn1, venn2, venn3, venn4, venn5];\n\n/**\n * Sort helper.\n * Reference: https://stackoverflow.com/a/64449554/1288340\n */\nconst upto = (limit) => Array.from({ length: limit }, (_, i) => i);\n\n/**\n * Detect ellipse.\n * Reference: https://github.com/upsetjs/chartjs-chart-venn/blob/master/src/model/generate.ts#L4\n */\nfunction isEllipse(d) {\n  return typeof d.rx === 'number';\n}\n\n/**\n * Generate all combinations of a given array.\n * Reference: https://stackoverflow.com/questions/5752002/find-all-possible-subset-combos-in-an-array\n */\nfunction combinations(array: string[]) {\n  return (new Array(1 << array.length) as any)\n    .fill()\n    .map((_e1, i) => array.filter((_e2, j) => i & (1 << j)));\n}\n\n/**\n * Given a array set, lookup the data.\n */\nfunction lookup(combo: string[], data: any[]) {\n  const key = combo.join('|');\n  const found = data.find((d) => d.key === key);\n\n  return {\n    key,\n    sets: combo,\n    size: found?.size || 0\n  };\n}\n\n/**\n * Build the data combinations for the layout.\n */\nfunction buildData(data: any[]) {\n  // Collect all unique sets and sort by size\n  const uniqueSets = data\n    .filter((d) => d.sets.length === 1)\n    .sort((a, b) => b.size - a.size);\n\n  // Map our unique sets\n  const uniqueSetKeys = uniqueSets.map((u) => u.key);\n\n  // Build all combos and return 1+ combos\n  const sets: any[] = combinations(uniqueSetKeys);\n  const filteredSets = sets.slice(1, sets.length);\n\n  // Sort the child sets based on the parent\n  const result = filteredSets.map((d) =>\n    [...d].sort((a, b) => uniqueSetKeys.indexOf(a) - uniqueSetKeys.indexOf(b))\n  );\n\n  // Sort the data based on index of keys and length\n  // Reference: https://stackoverflow.com/a/64449554/1288340\n  result.sort(\n    (a, b) =>\n      a.length - b.length ||\n      upto(a.length).reduce(\n        (diff, i) =>\n          diff || uniqueSetKeys.indexOf(a[i]) - uniqueSetKeys.indexOf(b[i]),\n        0\n      )\n  );\n\n  // reshape the data key so they will match combos\n  const keyedData = data.map((d) => {\n    const sets = [...d.sets].sort(\n      (a, b) => uniqueSetKeys.indexOf(a) - uniqueSetKeys.indexOf(b)\n    );\n    const key = sets.join('|');\n\n    return {\n      size: d.size,\n      sets,\n      key\n    };\n  });\n\n  return {\n    uniqueCount: uniqueSets.length,\n    data: result.map((r) => lookup(r, keyedData))\n  };\n}\n\n/**\n * Generate the arc slice path.\n * Reference: https://github.com/upsetjs/chartjs-chart-venn/blob/master/src/model/generate.ts#L4\n */\nexport function generateArcSlicePath(s: any, refs: any[]) {\n  return `M ${s.x1},${s.y1} ${s.arcs\n    .map((arc) => {\n      const ref = refs[arc.ref];\n      const rx = isEllipse(ref) ? ref.rx : ref.r;\n      const ry = isEllipse(ref) ? ref.ry : ref.r;\n      const rot = isEllipse(ref) ? ref.rotation : 0;\n      return `A ${rx} ${ry} ${rot} ${arc.large ? 1 : 0} ${arc.sweep ? 1 : 0} ${\n        arc.x2\n      } ${arc.y2}`;\n    })\n    .join(' ')}`;\n}\n\n/**\n * Build the layout for the given chart.\n * Reference: https://github.com/upsetjs/chartjs-chart-venn/blob/master/src/model/generate.ts#L4\n */\nfunction buildLayout({ data, uniqueCount }, box: BoundingBox) {\n  const shape = shapes[Math.min(shapes.length - 1, uniqueCount)];\n  const f = Math.min(box.width / shape.bb.width, box.height / shape.bb.height);\n  const x = f * -shape.bb.x + (box.width - f * shape.bb.width) / 2 + 0;\n  const y = f * -shape.bb.y + (box.height - f * shape.bb.height) / 2 + 0;\n  const mx = (v: number) => x + f * v;\n  const my = (v: number) => y + f * v;\n\n  const shapeSets = shape.sets.map((c, i) => ({\n    ...c,\n    ...{\n      data: data[i],\n      cx: mx(c.cx),\n      cy: my(c.cy),\n      text: {\n        x: mx(c.text.x),\n        y: my(c.text.y)\n      },\n      ...(c.icon\n        ? {\n          icon: {\n            x: mx(c.icon.x),\n            y: my(c.icon.y)\n          }\n        }\n        : {})\n    },\n    ...(isEllipse(c)\n      ? {\n        rx: c.rx * f,\n        ry: c.ry * f\n      }\n      : {\n        r: c.r * f\n      })\n  }));\n\n  const intersections = shape.intersections.map((c, i) => ({\n    text: {\n      x: mx(c.text.x),\n      y: my(c.text.y)\n    },\n    x1: mx(c.x1),\n    y1: my(c.y1),\n    data: data[i],\n    set: shapeSets[i],\n    arcs: c.arcs.map((a) => ({\n      ...a,\n      x2: mx(a.x2),\n      y2: my(a.y2)\n    }))\n  }));\n\n  return intersections.map((i) => ({\n    ...i,\n    path: generateArcSlicePath(i, shapeSets)\n  }));\n}\n\n/**\n * Generate the star euler layout.\n * Adapted from: https://github.com/upsetjs/chartjs-chart-venn\n */\nexport function starEulerLayout(data: any[], bb: BoundingBox) {\n  return buildLayout(buildData(data), bb);\n}\n","import React, { FC, ReactElement, useCallback } from 'react';\nimport {\n  ChartContainer,\n  ChartContainerChildProps,\n  ChartProps\n} from '@/common/containers';\nimport { layout } from '@upsetjs/venn.js';\nimport { VennSeries, VennSeriesProps } from './VennSeries';\nimport { CloneElement } from 'reablocks';\nimport { starEulerLayout } from './starEuler';\n\nexport interface VennDiagramData {\n  /**\n   * List of Keys for the data.\n   */\n  key: string[];\n\n  /**\n   * Size of the data keys.\n   */\n  data: number;\n}\n\nexport interface VennDiagramProps extends ChartProps {\n  /**\n   * Type of the chart.\n   */\n  type?: 'venn' | 'euler' | 'starEuler';\n\n  /**\n   * Data the chart will receive to render.\n   */\n  data: VennDiagramData[];\n\n  /**\n   * The series component that renders the arc and label components.\n   */\n  series?: ReactElement<VennSeriesProps, typeof VennSeries> | null;\n\n  /**\n   * Whether the chart is disabled.\n   */\n  disabled?: boolean;\n}\n\nexport const VennDiagram: FC<VennDiagramProps> = ({\n  id,\n  type = 'venn',\n  width,\n  height,\n  margins,\n  className,\n  containerClassName,\n  data,\n  disabled,\n  series = <VennSeries />\n}) => {\n  const renderChart = useCallback(\n    (containerProps: ChartContainerChildProps) => {\n      const normalized = data.map((d) => ({\n        key: d.key.join('|'),\n        sets: d.key,\n        size: d.data\n      }));\n\n      let layoutData;\n      if (type === 'starEuler') {\n        layoutData = starEulerLayout(normalized, {\n          height: containerProps.height,\n          width: containerProps.width\n        });\n      } else {\n        layoutData = layout(normalized, {\n          height: containerProps.height,\n          width: containerProps.width,\n          distinct: type !== 'euler'\n        });\n      }\n\n      return (\n        <CloneElement<VennSeriesProps>\n          element={series}\n          data={layoutData}\n          disabled={disabled}\n          id={containerProps.id}\n        />\n      );\n    },\n    [data, disabled, series, type]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      height={height}\n      margins={margins}\n      containerClassName={containerClassName}\n      xAxisVisible={false}\n      yAxisVisible={false}\n      center={false}\n      className={className}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n","import React, {\n  FC,\n  Fragment,\n  ReactElement,\n  useMemo,\n  useRef,\n  useState\n} from 'react';\nimport { HierarchyCircularNode } from 'd3-hierarchy';\nimport { ChartTooltip, ChartTooltipProps } from '@/common/Tooltip';\nimport { CloneElement } from 'reablocks';\nimport { motion } from 'motion/react';\nimport { Gradient, GradientProps } from '@/common/Gradient';\nimport { Mask, MaskProps } from '@/common/Mask';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\nimport { useHoverIntent } from '@/common/utils/useHoverIntent';\nimport { Glow } from '@/common/Glow';\nimport { generateGlowStyles } from '@/common/Glow/utils';\nimport { getAriaLabel } from '@/common';\n\nexport interface BubbleProps {\n  /**\n   * Id set by the parent.\n   */\n  id: string;\n\n  /**\n   * The internal data object built by d3\n   */\n  data: HierarchyCircularNode<any>;\n\n  /**\n   * Fill for the bubble.\n   */\n  fill: string;\n\n  /**\n   * Whether the chart is animated or not.\n   */\n  animated?: boolean;\n\n  /**\n   * Tooltip element.\n   */\n  tooltip?: ReactElement<ChartTooltipProps, typeof ChartTooltip> | null;\n\n  /**\n   * Mask element for the bubble.\n   */\n  mask: ReactElement<MaskProps, typeof Mask> | null;\n\n  /**\n   * Glow styling for the bubble.\n   */\n  glow?: Glow;\n\n  /**\n   * Gradient shades for the bubble.\n   */\n  gradient: ReactElement<GradientProps, typeof Gradient> | null;\n\n  /**\n   * Event for when the bubble is clicked.\n   */\n  onClick?: (\n    event: React.MouseEvent<SVGCircleElement>,\n    currentItem?: HierarchyCircularNode<any>\n  ) => void;\n\n  /**\n   * Event for when the mouse enters bubble.\n   */\n  onMouseEnter?: (event) => void;\n\n  /**\n   * Event for when the mouse leaves the bubble.\n   */\n  onMouseLeave?: (event) => void;\n}\n\nexport const Bubble: FC<Partial<BubbleProps>> = ({\n  id,\n  data,\n  fill,\n  mask,\n  gradient,\n  glow,\n  onClick,\n  onMouseEnter,\n  onMouseLeave,\n  animated,\n  tooltip = <ChartTooltip />\n}) => {\n  const [internalActive, setInternalActive] = useState<boolean>(false);\n  const bubbleRef = useRef<any | null>(null);\n  const transition = animated ? DEFAULT_TRANSITION : { type: false, delay: 0 };\n\n  const { pointerOut, pointerOver } = useHoverIntent({\n    onPointerOver: (event) => {\n      setInternalActive(true);\n      onMouseEnter?.(event);\n    },\n    onPointerOut: (event) => {\n      setInternalActive(false);\n      onMouseLeave?.(event);\n    }\n  });\n\n  const arcFill =\n    gradient && !mask\n      ? `url(#gradient-${id})`\n      : mask\n        ? `url(#mask-pattern-${id})`\n        : fill;\n\n  const tooltipData = useMemo(\n    () => ({ y: data.data.data, x: data.data.key }),\n    [data]\n  );\n  const ariaLabelData = useMemo(() => getAriaLabel(tooltipData), [tooltipData]);\n\n  return (\n    <Fragment>\n      <motion.circle\n        id={`${id}-bubble`}\n        ref={bubbleRef}\n        fill={arcFill}\n        style={generateGlowStyles({ glow })}\n        initial={{\n          r: data.r,\n          cx: data.x,\n          cy: data.y\n        }}\n        animate={{\n          r: data.r,\n          cx: data.x,\n          cy: data.y\n        }}\n        transition={transition}\n        onClick={(event) => onClick && onClick(event, data)}\n        onPointerOver={pointerOver}\n        onPointerOut={pointerOut}\n        tabIndex={0}\n        aria-label={ariaLabelData}\n        role=\"graphics-document\"\n      />\n      {mask && (\n        <Fragment>\n          <Mask id={`mask-${id}`} fill={`url(#gradient-${id})`} />\n          <CloneElement<MaskProps>\n            element={mask}\n            id={`mask-pattern-${id}`}\n            fill={fill}\n          />\n        </Fragment>\n      )}\n      {gradient && (\n        <CloneElement<GradientProps>\n          element={gradient}\n          id={`gradient-${id}`}\n          color={fill}\n        />\n      )}\n      {tooltip && !tooltip.props.disabled && (\n        <CloneElement<ChartTooltipProps>\n          element={tooltip}\n          visible={!!internalActive}\n          reference={bubbleRef}\n          value={tooltipData}\n        />\n      )}\n    </Fragment>\n  );\n};\n","import React, { FC, isValidElement } from 'react';\nimport { HierarchyCircularNode } from 'd3-hierarchy';\nimport { motion } from 'motion/react';\nimport { wrapText } from '@/common/utils/wrapText';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\n\nexport interface BubbleLabelProps {\n  /**\n   * Id set by the parent.\n   */\n  id: string;\n\n  /**\n   * The internal data object built by d3\n   */\n  data: HierarchyCircularNode<any>;\n\n  /**\n   * Font size of the text.\n   */\n  fontSize?: number;\n\n  /**\n   * Font family of the text.\n   */\n  fontFamily?: string;\n\n  /**\n   * Fill of the text.\n   */\n  fill?: string;\n\n  /**\n   * Should wrap text or not.\n   */\n  wrap?: boolean;\n\n  /**\n   * Whether the chart is animated or not.\n   */\n  animated?: boolean;\n\n  /**\n   * Format label.\n   */\n  format?: (data) => any;\n}\n\nexport const BubbleLabel: FC<Partial<BubbleLabelProps>> = ({\n  id,\n  data,\n  format,\n  wrap = true,\n  fill,\n  fontSize = 14,\n  fontFamily = 'sans-serif',\n  animated\n}) => {\n  const transition = animated ? DEFAULT_TRANSITION : { type: false, delay: 0 };\n  let isElement = false;\n  let label;\n\n  if (format) {\n    label = format(data);\n    isElement = isValidElement(label);\n  }\n\n  if (!isElement) {\n    const text = wrap\n      ? wrapText({\n        key: data.data.key,\n        fontFamily,\n        fontSize,\n        width: data.r\n      })\n      : data.data.key;\n\n    return (\n      <motion.text\n        initial={{\n          x: data.x,\n          y: data.y\n        }}\n        animate={{\n          x: data.x,\n          y: data.y\n        }}\n        transition={transition}\n        id={`${id}-text`}\n        style={{ pointerEvents: 'none', fontFamily, fontSize }}\n        fill={fill}\n        textAnchor=\"middle\"\n      >\n        {text}\n      </motion.text>\n    );\n  }\n\n  return (\n    <g style={{ transform: `translate(${data.x}px, ${data.y}px)` }}>{label}</g>\n  );\n};\n","import React, { FC, Fragment, ReactElement } from 'react';\nimport { motion } from 'motion/react';\nimport { HierarchyCircularNode } from 'd3-hierarchy';\nimport { ColorSchemeType, getColor } from '@/common/color';\nimport { Bubble, BubbleProps } from './Bubble';\nimport { BubbleLabel, BubbleLabelProps } from './BubbleLabel';\nimport { CloneElement } from 'reablocks';\nimport invert from 'invert-color';\nimport chroma from 'chroma-js';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\nimport { identifier } from 'safe-identifier';\n\nexport interface BubbleSeriesProps {\n  /**\n   * Id set by the parent.\n   */\n  id: string;\n\n  /**\n   * The internal data object built by d3\n   */\n  data: HierarchyCircularNode<any>[];\n\n  /**\n   * Whether the chart is animated or not.\n   */\n  animated?: boolean;\n\n  /**\n   * Color scheme for the chart.\n   */\n  colorScheme: ColorSchemeType;\n\n  /**\n   * Bubble element.\n   */\n  bubble?: ReactElement<BubbleProps, typeof Bubble>;\n\n  /**\n   * Bubble element.\n   */\n  format?: (item: any) => ReactElement<BubbleProps, typeof Bubble>;\n\n  /**\n   * Label element.\n   */\n  label?: ReactElement<BubbleLabelProps, typeof BubbleLabel>;\n}\n\nexport const BubbleSeries: FC<Partial<BubbleSeriesProps>> = ({\n  id,\n  data,\n  colorScheme = 'cybertron',\n  animated = true,\n  bubble = <Bubble />,\n  format,\n  label = <BubbleLabel />\n}) => {\n  const transition = animated ? DEFAULT_TRANSITION : { type: false, delay: 0 };\n\n  const renderBubble = (item, index) => {\n    const fill = getColor({\n      data,\n      colorScheme,\n      point: item.data,\n      index\n    });\n\n    const textFill = fill\n      ? invert(chroma(fill).darken(0.5).hex(), true)\n      : 'white';\n\n    return (\n      <motion.g\n        key={(item.data as any).key}\n        initial={{\n          scale: 0.5,\n          opacity: 0\n        }}\n        animate={{\n          scale: 1,\n          opacity: 1\n        }}\n        transition={transition}\n      >\n        <CloneElement<BubbleProps>\n          element={format ? format(item) : bubble}\n          id={identifier(`${id}-${item.data.key}-bubble`)}\n          animated={animated}\n          data={item}\n          fill={fill}\n        />\n        <CloneElement<BubbleLabelProps>\n          element={label}\n          id={identifier(`${id}-${item.data.key}-label`)}\n          animated={animated}\n          data={item}\n          fill={textFill}\n        />\n      </motion.g>\n    );\n  };\n\n  return <Fragment>{data.map(renderBubble)}</Fragment>;\n};\n","import React, { FC, ReactElement, useCallback } from 'react';\nimport { hierarchy, pack } from 'd3-hierarchy';\nimport { CloneElement } from 'reablocks';\nimport {\n  ChartContainer,\n  ChartContainerChildProps,\n  ChartProps,\n  ChartShallowDataShape\n} from '@/common';\nimport { BubbleSeries, BubbleSeriesProps } from './BubbleSeries';\n\nexport interface BubbleChartProps extends ChartProps {\n  /**\n   * Data the chart will receive to render.\n   */\n  data: ChartShallowDataShape[];\n\n  /**\n   * The series component that renders the arc components.\n   */\n  series?: ReactElement<BubbleSeriesProps, typeof BubbleSeries>;\n}\n\nexport const BubbleChart: FC<Partial<BubbleChartProps>> = ({\n  data = [],\n  id,\n  width,\n  height,\n  className,\n  containerClassName,\n  margins = 10,\n  series = <BubbleSeries />\n}) => {\n  const getData = useCallback(\n    (cw: number, ch: number) => {\n      const bubble = pack().size([cw, ch]).padding(3);\n\n      const root = hierarchy<any>({ children: data })\n        .sum((d) => d.data)\n        .sort((a, b) => b.data - a.data);\n\n      return bubble(root).leaves();\n    },\n    [data]\n  );\n\n  const renderChart = useCallback(\n    ({ chartWidth, chartHeight, ...rest }: ChartContainerChildProps) => {\n      const circles = getData(chartWidth, chartHeight);\n\n      return (\n        <CloneElement<BubbleSeriesProps>\n          element={series}\n          id={`${rest.id}-series`}\n          data={circles}\n        />\n      );\n    },\n    [series, getData]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      height={height}\n      containerClassName={containerClassName}\n      margins={margins}\n      xAxisVisible={false}\n      yAxisVisible={false}\n      className={className}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n","import React, { FC } from 'react';\nimport { calculateDimensions, wrapText } from '@/common/utils';\n\nexport interface TreeMapLabelProps {\n  /**\n   * Id set by the parent.\n   */\n  id: string;\n\n  /**\n   * The internal data object built by d3\n   */\n  data: any;\n\n  /**\n   * Font size of the text.\n   */\n  fontSize?: number;\n\n  /**\n   * Font family of the text.\n   */\n  fontFamily?: string;\n\n  /**\n   * Fill of the text.\n   */\n  fill?: string;\n\n  /**\n   * Should wrap text or not.\n   */\n  wrap?: boolean;\n\n  /**\n   * Placement of the text.\n   */\n  placement?: 'start' | 'middle' | 'end';\n}\n\nexport const TreeMapLabel: FC<Partial<TreeMapLabelProps>> = ({\n  id,\n  data,\n  fill = '#FFF',\n  wrap = true,\n  placement = 'start',\n  fontSize = 14,\n  fontFamily = 'sans-serif'\n}) => {\n  const key = data.data.key;\n  const width = data.x1 - data.x0;\n  const text = wrapText({\n    key,\n    fontFamily,\n    fontSize,\n    paddingX: 10,\n    wrap,\n    paddingY: 10,\n    width,\n    height: data.y1 - data.y0\n  });\n  const size = calculateDimensions(\n    typeof text === 'string' ? text : key,\n    fontFamily,\n    fontSize\n  );\n\n  const offsetX =\n    placement === 'start'\n      ? 10\n      : placement === 'middle'\n        ? (width - size.width) / 2\n        : width - size.width - 10;\n\n  return (\n    <g style={{ transform: `translate(${offsetX}px, 15px)` }}>\n      <text\n        id={`${id}-text`}\n        style={{ pointerEvents: 'none', fontFamily, fontSize }}\n        fill={fill}\n      >\n        {text}\n      </text>\n    </g>\n  );\n};\n","import React, {\n  FC,\n  ReactElement,\n  useRef,\n  useState,\n  Fragment,\n  useMemo\n} from 'react';\nimport { motion } from 'motion/react';\nimport chroma from 'chroma-js';\nimport { ChartTooltip, ChartTooltipProps } from '@/common/Tooltip';\nimport { CloneElement } from 'reablocks';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\nimport { useHoverIntent } from '@/common/utils/useHoverIntent';\nimport { getAriaLabel } from '@/common';\n\nexport interface TreeMapRectProps {\n  /**\n   * The internal data object built by d3\n   */\n  data: any;\n\n  /**\n   * Id set by the parent.\n   */\n  id: string;\n\n  /**\n   * Fill for the rect.\n   */\n  fill: string;\n\n  /**\n   * Whether the chart is animated or not.\n   */\n  animated?: boolean;\n\n  /**\n   * Cursor for the element.\n   */\n  cursor?: string;\n\n  /**\n   * Tooltip element.\n   */\n  tooltip?: ReactElement<ChartTooltipProps, typeof ChartTooltip> | null;\n\n  /**\n   * Event for when the arc is clicked.\n   */\n  onClick?: (event, data) => void;\n\n  /**\n   * Event for when the arc has mouse enter.\n   */\n  onMouseEnter?: (event, data) => void;\n\n  /**\n   * Event for when the arc has mouse leave.\n   */\n  onMouseLeave?: (event, data) => void;\n}\n\nexport const TreeMapRect: FC<Partial<TreeMapRectProps>> = ({\n  data,\n  fill,\n  animated,\n  cursor = 'pointer',\n  tooltip = <ChartTooltip />,\n  onMouseEnter,\n  onMouseLeave,\n  onClick\n}) => {\n  const [internalActive, setInternalActive] = useState<boolean>(false);\n  const rectRef = useRef<any | null>(null);\n  const transition = animated ? DEFAULT_TRANSITION : { type: false, delay: 0 };\n  const currentFill = internalActive ? chroma(fill).darken(0.8).hex() : fill;\n\n  const { pointerOut, pointerOver } = useHoverIntent({\n    onPointerOver: (event) => {\n      setInternalActive(true);\n      onMouseEnter?.(event, data);\n    },\n    onPointerOut: (event) => {\n      setInternalActive(false);\n      onMouseLeave?.(event, data);\n    }\n  });\n\n  const tooltipLabel = useMemo(() => {\n    const getKey = (node): string[] => {\n      if (!node.parent) {\n        return [];\n      }\n      return [...getKey(node.parent), node.data.key];\n    };\n    return getKey(data).join(' → ');\n  }, [data]);\n\n  const tooltipData = useMemo(\n    () => ({ y: data.value, x: tooltipLabel }),\n    [data, tooltipLabel]\n  );\n  const ariaLabelData = useMemo(() => getAriaLabel(tooltipData), [tooltipData]);\n\n  return (\n    <Fragment>\n      <motion.rect\n        ref={rectRef}\n        initial={{\n          fill: currentFill,\n          width: data.x1 - data.x0,\n          height: data.y1 - data.y0\n        }}\n        animate={{\n          fill: currentFill,\n          width: data.x1 - data.x0,\n          height: data.y1 - data.y0\n        }}\n        style={{ cursor }}\n        transition={transition}\n        onClick={(event) => {\n          onClick?.(event, data);\n        }}\n        onPointerOver={pointerOver}\n        onPointerOut={pointerOut}\n        tabIndex={0}\n        aria-label={ariaLabelData}\n        role=\"graphics-document\"\n      />\n      {tooltip && !tooltip.props.disabled && (\n        <CloneElement<ChartTooltipProps>\n          element={tooltip}\n          visible={!!internalActive}\n          reference={rectRef}\n          value={tooltipData}\n        />\n      )}\n    </Fragment>\n  );\n};\n","import React, { FC, Fragment, ReactElement } from 'react';\nimport { motion } from 'motion/react';\nimport { CloneElement } from 'reablocks';\nimport { ColorSchemeType, getColor } from '@/common/color';\nimport { TreeMapLabel, TreeMapLabelProps } from './TreeMapLabel';\nimport { TreeMapRect, TreeMapRectProps } from './TreeMapRect';\nimport invert from 'invert-color';\nimport chroma from 'chroma-js';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\n\nexport interface TreeMapSeriesProps {\n  /**\n   * Id set by the parent.\n   */\n  id: string;\n\n  /**\n   * The internal data object built by d3\n   */\n  data: any[];\n\n  /**\n   * Whether the chart is animated or not.\n   */\n  animated?: boolean;\n\n  /**\n   * Color scheme for the chart.\n   */\n  colorScheme: ColorSchemeType;\n\n  /**\n   * Rect element to be rendered.\n   */\n  rect?: ReactElement<TreeMapRectProps, typeof TreeMapRect>;\n\n  /**\n   * Label element to be rendered.\n   */\n  label?: ReactElement<TreeMapLabelProps, typeof TreeMapLabel>;\n}\n\nexport const TreeMapSeries: FC<Partial<TreeMapSeriesProps>> = ({\n  id,\n  data,\n  colorScheme = 'cybertron',\n  animated = true,\n  rect = <TreeMapRect />,\n  label = <TreeMapLabel />\n}) => {\n  const transition = animated ? DEFAULT_TRANSITION : { type: false, delay: 0 };\n\n  const renderItem = (item: any, index: number) => {\n    const fill = getColor({\n      data,\n      colorScheme,\n      point: item.data,\n      index\n    });\n\n    const textFill = fill\n      ? invert(chroma(fill).darken(0.5).hex(), true)\n      : 'white';\n\n    return (\n      <motion.g\n        key={item.data.key}\n        initial={{\n          scale: 0.5,\n          opacity: 0,\n          x: item.x0,\n          y: item.y0\n        }}\n        animate={{\n          scale: 1,\n          opacity: 1,\n          x: item.x0,\n          y: item.y0\n        }}\n        transition={transition}\n      >\n        <CloneElement<TreeMapRectProps>\n          element={rect}\n          id={`${id}-${item.data.key}-rect`}\n          animated={animated}\n          data={item}\n          fill={fill}\n        />\n        <CloneElement<TreeMapLabelProps>\n          element={label}\n          id={`${id}-${item.data.key}-label`}\n          data={item}\n          fill={textFill}\n        />\n      </motion.g>\n    );\n  };\n\n  return <Fragment>{data.map((d, index) => renderItem(d, index))}</Fragment>;\n};\n","import React, { FC, ReactElement, useCallback } from 'react';\nimport {\n  ChartContainer,\n  ChartContainerChildProps,\n  ChartProps\n} from '@/common/containers/ChartContainer';\nimport { ChartNestedDataShape, ChartShallowDataShape } from '@/common/data';\nimport { hierarchy, treemap, treemapSquarify } from 'd3-hierarchy';\nimport { TreeMapSeries, TreeMapSeriesProps } from './TreeMapSeries';\nimport { CloneElement } from 'reablocks';\n\nexport interface TreeMapProps extends ChartProps {\n  /**\n   * Data the chart will receive to render.\n   */\n  data: ChartShallowDataShape[] | ChartNestedDataShape[];\n\n  /**\n   * The series component that renders the components.\n   */\n  series?: ReactElement<TreeMapSeriesProps, typeof TreeMapSeries>;\n\n  /**\n   * Inner padding for the treemap. Defaults to 5.\n   */\n  paddingInner?: number;\n\n  /**\n   * Outer padding for the treemap. Defaults to 5.\n   */\n  paddingOuter?: number;\n\n  /**\n   * Padding top for the treemap. This is used for the title\n   * spacing in nested situations. Defaults to 30.\n   */\n  paddingTop?: number;\n}\n\nexport const TreeMap: FC<Partial<TreeMapProps>> = ({\n  data = [],\n  id,\n  containerClassName,\n  paddingInner = 5,\n  paddingTop = 30,\n  paddingOuter = 5,\n  width,\n  height,\n  className,\n  margins = 0,\n  series = <TreeMapSeries />\n}) => {\n  const getData = useCallback(\n    (cw: number, ch: number) => {\n      const root = hierarchy<any>({ data }, (d) => d.data)\n        .sum((d) => d.data)\n        .sort((a, b) => b.data - a.data);\n\n      const t = treemap()\n        .size([cw, ch])\n        .tile(treemapSquarify)\n        .round(true)\n        .paddingInner(paddingInner)\n        .paddingOuter(paddingOuter)\n        .paddingTop(paddingTop);\n\n      const tree = t(root);\n      const nodes = [];\n\n      const getAllNodes = (node) => {\n        if (node?.parent) {\n          // Don't add root node\n          nodes.push(node);\n        }\n        for (let child of node?.children || []) {\n          getAllNodes(child);\n        }\n      };\n\n      getAllNodes(tree);\n      return nodes;\n    },\n    [data, paddingInner, paddingOuter, paddingTop]\n  );\n\n  const renderChart = useCallback(\n    ({ chartWidth, chartHeight, ...rest }: ChartContainerChildProps) => {\n      const datas = getData(chartWidth, chartHeight);\n      return (\n        <CloneElement<TreeMapSeriesProps>\n          element={series}\n          {...rest}\n          id={`${id || rest.id}-series`}\n          data={datas}\n        />\n      );\n    },\n    [series, getData, id]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      height={height}\n      containerClassName={containerClassName}\n      margins={margins}\n      xAxisVisible={false}\n      yAxisVisible={false}\n      className={className}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n","import React, { FC, useCallback } from 'react';\nimport {\n  ChartInternalDataTypes,\n  ChartShallowDataShape,\n  ColorSchemeType,\n  DEFAULT_TRANSITION,\n  formatValue,\n  getAriaLabel,\n  getColor\n} from '@/common';\nimport { motion } from 'motion/react';\nimport classNames from 'classnames';\nimport css from './BarListSeries.module.css';\n\nexport type BarListLabelPosition = 'none' | 'top' | 'start' | 'end' | 'bottom';\n\nexport interface BarListSeriesProps {\n  /**\n   * Data for the chart.\n   */\n  data?: ChartShallowDataShape[];\n\n  /**\n   * Color scheme for the chart.\n   */\n  colorScheme?: ColorSchemeType;\n\n  /**\n   * The label position.\n   */\n  labelPosition?: BarListLabelPosition;\n\n  /**\n   * The value position.\n   */\n  valuePosition?: BarListLabelPosition;\n\n  /**\n   * The bar item class name.\n   */\n  itemClassName?: string;\n\n  /**\n   * Label css class name.\n   */\n  labelClassName?: string;\n\n  /**\n   * Label value class name.\n   */\n  valueClassName?: string;\n\n  /**\n   * Bar component class name.\n   */\n  barClassName?: string;\n\n  /**\n   * Bar container class name.\n   */\n  outerBarClassName?: string;\n\n  /**\n   * Custom label format.\n   */\n  labelFormat?: (data: ChartInternalDataTypes, index: number) => any;\n\n  /**\n   * Custom value format\n   */\n  valueFormat?: (data: ChartInternalDataTypes, index: number) => any;\n\n  /**\n   * Item was clicked.\n   */\n  onItemClick?: (data: ChartShallowDataShape) => void;\n\n  /**\n   * Item had mouse enter.\n   */\n  onItemMouseEnter?: (data: ChartShallowDataShape) => void;\n\n  /**\n   * Item had mouse leave.\n   */\n  onItemMouseLeave?: (data: ChartShallowDataShape) => void;\n}\n\nexport const BarListSeries: FC<Partial<BarListSeriesProps>> = ({\n  data,\n  colorScheme = 'cybertron',\n  itemClassName,\n  labelClassName,\n  outerBarClassName,\n  valueClassName,\n  labelFormat,\n  barClassName,\n  labelPosition = 'top',\n  valuePosition = 'none',\n  valueFormat,\n  onItemClick,\n  onItemMouseEnter,\n  onItemMouseLeave\n}) => {\n  const renderBar = useCallback(\n    (item, index) => {\n      const fill = getColor({\n        data,\n        colorScheme,\n        point: item.data,\n        index\n      });\n\n      return (\n        <div className={classNames(css.outerBar, outerBarClassName)}>\n          <motion.div\n            transition={DEFAULT_TRANSITION}\n            className={classNames(css.bar, barClassName)}\n            initial={{ width: '0%' }}\n            animate={{ width: `${item.data}%` }}\n            style={{ background: fill }}\n            tabIndex={0}\n            aria-label={getAriaLabel(item)}\n            role=\"graphics-document\"\n          />\n        </div>\n      );\n    },\n    [barClassName, outerBarClassName, colorScheme, data]\n  );\n\n  return (\n    <>\n      {data.map((d, i) => {\n        const label = labelFormat ? labelFormat(d.key as any, i) : d.key;\n\n        const valueLabel = valueFormat\n          ? valueFormat(d.metadata.value, i)\n          : formatValue(d.metadata.value);\n\n        return (\n          <div\n            key={d.key as string}\n            role=\"listitem\"\n            className={classNames(css.item, itemClassName, {\n              [css.clickable]: onItemClick,\n              [css.valueBottom]: valuePosition === 'bottom',\n              [css.valueStart]: valuePosition === 'start',\n              [css.valueEnd]: valuePosition === 'end',\n              [css.valueNone]: valuePosition === 'none',\n              [css.labelBottom]: labelPosition === 'bottom',\n              [css.labelTop]: labelPosition === 'top',\n              [css.labelStart]: labelPosition === 'start',\n              [css.labelEnd]: labelPosition === 'end',\n              [css.labelNone]: labelPosition === 'none'\n            })}\n            onMouseEnter={() => onItemMouseEnter?.(d)}\n            onMouseLeave={() => onItemMouseLeave?.(d)}\n            onClick={() => onItemClick?.(d)}\n          >\n            <label\n              title={label}\n              className={classNames(css.label, labelClassName)}\n            >\n              {label}\n            </label>\n            {renderBar(d, i)}\n            <label\n              title={valueLabel}\n              className={classNames(css.valueLabel, valueClassName)}\n            >\n              <small>{valueLabel}</small>\n            </label>\n          </div>\n        );\n      })}\n    </>\n  );\n};\n","import { max } from 'd3-array';\nimport { scaleLinear } from 'd3-scale';\nimport { motion } from 'motion/react';\nimport { CloneElement, useId } from 'reablocks';\nimport React, { FC, ReactElement, useMemo } from 'react';\nimport { ChartShallowDataShape } from '@/common';\nimport { BarListSeries, BarListSeriesProps } from './BarListSeries';\n\nexport interface BarListProps {\n  /**\n   * ID for the chart.\n   */\n  id?: string;\n\n  /**\n   * CSS Classname for the element.\n   */\n  className?: string;\n\n  /**\n   * Style for the element.\n   */\n  style?: React.CSSProperties;\n\n  /**\n   * Data for the chart.\n   */\n  data: ChartShallowDataShape[];\n\n  /**\n   * Sort direction of the data.\n   */\n  sortDirection?: 'asc' | 'desc' | 'none';\n\n  /**\n   * Series to render.\n   */\n  series?: ReactElement<BarListSeriesProps, typeof BarList>;\n\n  /**\n   * Whether the values are percentages or absolute values.\n   * In the latter case, the chart would be relative\n   */\n  type?: 'percent' | 'count';\n}\n\nexport const BarList: FC<BarListProps> = ({\n  id,\n  className,\n  style,\n  data = [],\n  sortDirection = 'desc',\n  series = <BarListSeries />,\n  type = 'count'\n}) => {\n  const curId = useId(id);\n\n  const mashedData = useMemo(() => {\n    const maxVal = type === 'count' ? max(data, (d) => d.data) : 100;\n    const domainVal = maxVal == 0 ? [0] : [0, maxVal];\n    const groupScale = scaleLinear().domain(domainVal).rangeRound([0, 100]);\n\n    const mashed = data.map((d) => ({\n      ...d,\n      data: groupScale(d.data as number),\n      metadata: {\n        value: d.data,\n        percent: (data.length * (d.data as number)) / 100\n      }\n    }));\n\n    if (sortDirection === 'asc') {\n      mashed.sort((a, b) => a.data - b.data);\n    } else if (sortDirection === 'desc') {\n      mashed.sort((a, b) => b.data - a.data);\n    }\n\n    return mashed;\n  }, [data, sortDirection]);\n\n  return (\n    <motion.section\n      role=\"list\"\n      variants={{\n        initial: {\n          transition: {\n            staggerChildren: 0.05,\n            staggerDirection: -1 as any\n          }\n        },\n        animate: {\n          transition: {\n            staggerChildren: 0.07,\n            delayChildren: 0.2\n          }\n        }\n      }}\n      id={curId}\n      className={className}\n      style={style}\n    >\n      <CloneElement<BarListSeriesProps> element={series} data={mashedData} />\n    </motion.section>\n  );\n};\n","import React, { FC } from 'react';\nimport { motion } from 'motion/react';\nimport { DEFAULT_TRANSITION, schemes } from '@/common';\n\nexport interface MeterColumnProps {\n  /**\n   * The value of the meter.\n   */\n  value: number;\n\n  /**\n   * The height of the column.\n   */\n  height?: number;\n\n  /**\n   * The index of the column.\n   */\n  index: number;\n\n  /**\n   * The scale to use.\n   */\n  scale: any;\n\n  /**\n   * The active fill color.\n   */\n  activeFill: string;\n\n  /**\n   * The inactive fill color.\n   */\n  inActiveFill: string;\n\n  /**\n   * Additional class names to apply.\n   */\n  className?: string;\n\n  /**\n   * The total number of columns. Set internally.\n   */\n  count?: number;\n\n  /**\n   * Whether to animate the column.\n   */\n  animated?: boolean;\n}\n\nexport const MeterColumn: FC<Partial<MeterColumnProps>> = ({\n  index,\n  scale,\n  value,\n  count,\n  height = 32,\n  className,\n  animated = true,\n  activeFill = schemes.cybertron[0],\n  inActiveFill = '#414242'\n}) => {\n  const isActive = scale(index) <= scale(value);\n  const fill = isActive ? activeFill : inActiveFill;\n  const transition = animated\n    ? {\n      ...DEFAULT_TRANSITION,\n      delay: (index / count) * 0.5\n    }\n    : {\n      type: false,\n      delay: 0\n    };\n\n  return (\n    <motion.div\n      key={index}\n      initial={{\n        background: inActiveFill,\n        height\n      }}\n      animate={{\n        background: fill,\n        height\n      }}\n      tranisition={transition}\n      className={className}\n    />\n  );\n};\n","import React, { FC, ReactElement } from 'react';\nimport { scaleLinear } from 'd3-scale';\nimport classNames from 'classnames';\nimport { MeterColumn, MeterColumnProps } from './MeterColumn';\nimport { CloneElement } from 'reablocks';\nimport css from './Meter.module.css';\n\nexport interface MeterProps {\n  /**\n   * The value of the meter.\n   */\n  value: number;\n\n  /**\n   * The minimum value of the meter.\n   */\n  min?: number;\n\n  /**\n   * The maximum value of the meter.\n   */\n  max?: number;\n\n  /**\n   * The number of columns to display.\n   */\n  columns?: number;\n\n  /**\n   * Additional class names to apply.\n   */\n  className?: string;\n\n  /**\n   * The gap between columns.\n   */\n  gap?: number;\n\n  /**\n   * Additional styles to apply.\n   */\n  style?: React.CSSProperties;\n\n  /**\n   * The column to render.\n   */\n  column: ReactElement<MeterColumnProps, typeof MeterColumn> | null;\n}\n\nexport const Meter: FC<Partial<MeterProps>> = ({\n  min = 0,\n  max = 100,\n  className,\n  column = <MeterColumn />,\n  gap = 15,\n  style = {},\n  value,\n  columns = 10\n}) => {\n  const scale = scaleLinear().domain([min, max]).range([0, 100]);\n  const cols = scale.ticks(columns);\n\n  return (\n    <div\n      className={classNames(css.container, className)}\n      style={{ gap: `${gap}px`, ...style }}\n    >\n      {cols.map((index) => (\n        <CloneElement<MeterColumnProps>\n          element={column}\n          key={index}\n          count={cols.length}\n          index={index}\n          scale={scale}\n          value={value}\n        />\n      ))}\n    </div>\n  );\n};\n","import React, { FC } from 'react';\nimport {\n  RadialAreaSeries,\n  RadialAreaSeriesProps,\n  RadialPointSeries,\n  RadialPointSeriesType\n} from '@/RadialAreaChart';\n\nexport interface RadarChartSeriesProps extends RadialAreaSeriesProps {}\n\nexport const RadarChartSeries: FC<Partial<RadarChartSeriesProps>> = (props) => (\n  <RadialAreaSeries {...RADAR_CHART_SERIES_DEFAULT_PROPS} {...props} />\n);\n\nexport const RADAR_CHART_SERIES_DEFAULT_PROPS = {\n  area: null,\n  type: 'grouped' as RadialPointSeriesType,\n  symbols: <RadialPointSeries show />\n};\n","import React, { FC } from 'react';\nimport { ChartNestedDataShape } from '@/common/data';\nimport { RadialAreaChart, RadialAreaChartProps } from '@/RadialAreaChart';\nimport {\n  RadialAxis,\n  RadialAxisArcLine,\n  RadialAxisArcSeries\n} from '@/common/Axis/RadialAxis';\nimport {\n  RADAR_CHART_SERIES_DEFAULT_PROPS,\n  RadarChartSeries\n} from './RadarChartSeries';\n\nexport interface RadarChartProps extends RadialAreaChartProps {\n  data: ChartNestedDataShape[];\n}\n\nexport const RadarChart: FC<Partial<RadarChartProps>> = (props) => (\n  <RadialAreaChart\n    {...props}\n    series={\n      <RadarChartSeries\n        {...RADAR_CHART_SERIES_DEFAULT_PROPS}\n        {...props?.series?.props}\n      />\n    }\n    axis={\n      <RadialAxis\n        type=\"category\"\n        arcs={\n          <RadialAxisArcSeries\n            count={5}\n            arc={null}\n            line={<RadialAxisArcLine />}\n          />\n        }\n      />\n    }\n  />\n);\n","import React, { FC, ReactElement, useMemo } from 'react';\nimport { ChartShallowDataShape } from '@/common/data';\nimport { area } from 'd3-shape';\nimport {\n  InterpolationTypes,\n  getAriaLabel,\n  interpolate,\n  mergeDefaultProps\n} from '@/common/utils';\nimport { ColorSchemeType, getColor, schemes } from '@/common/color';\nimport { Gradient, GradientProps, GradientStop } from '@/common/Gradient';\nimport { CloneElement } from 'reablocks';\nimport { motion } from 'motion/react';\nimport {\n  ChartTooltip,\n  TooltipArea,\n  TooltipAreaProps,\n  TooltipTemplate\n} from '@/common/Tooltip';\nimport { Glow } from '@/common/Glow';\nimport { generateGlowStyles } from '@/common/Glow/utils';\n\nexport interface FunnelArcProps {\n  /**\n   * Unique identifier for the arc. Set internally by `FunnelChart`.\n   */\n  id: string;\n\n  /**\n   * Data to render the funnel. Set internally by `FunnelChart`.\n   */\n  data: ChartShallowDataShape[];\n\n  /**\n   * Opacity of the funnel arc.\n   */\n  opacity?: number;\n\n  /**\n   * Index of the funnel arc. Set internally by `FunnelChart`.\n   */\n  index?: number;\n\n  /**\n   * The chart funnel style to use.\n   */\n  variant?: 'default' | 'layered';\n\n  /**\n   * xScale for the funnel. Set internally by `FunnelChart`.\n   */\n  xScale: any;\n\n  /**\n   * yScale for the funnel. Set internally by `FunnelChart`.\n   */\n  yScale: any;\n\n  /**\n   * Interpolation for the area. Set internally by `AreaSeries`.\n   */\n  interpolation: InterpolationTypes;\n\n  /**\n   * Color scheme for the chart.\n   */\n  colorScheme: ColorSchemeType;\n\n  /**\n   * Gradient to apply to the area.\n   */\n  gradient: ReactElement<GradientProps, typeof Gradient> | null;\n\n  /**\n   * Glow styling for the arc.\n   */\n  glow?: Glow;\n\n  /**\n   * Tooltip for the chart area.\n   */\n  tooltip: ReactElement<TooltipAreaProps, typeof TooltipArea>;\n}\n\nexport const FunnelArc: FC<Partial<FunnelArcProps>> = (props) => {\n  const {\n    data,\n    id,\n    xScale,\n    opacity,\n    index,\n    variant,\n    yScale,\n    interpolation,\n    colorScheme,\n    gradient,\n    glow,\n    tooltip\n  } = mergeDefaultProps(FUNNEL_ARC_DEFAULT_PROPS, props);\n\n  // Note: Need to append the last section\n  const internalData = [...data, data[data.length - 1]];\n\n  const areaGenerator = area()\n    .curve(interpolate(interpolation))\n    .x((_d, i) => xScale(i))\n    .y0(yScale(0))\n    .y1(({ data }: any) => yScale(data));\n\n  const areaMirrorGenerator = area()\n    .curve(interpolate(interpolation))\n    .x((_d, i) => xScale(i))\n    .y0(yScale(0))\n    .y1(({ data }: any) => yScale(-data));\n\n  const fillColor = getColor({\n    data,\n    domain: [0, 1, 2, 3],\n    colorScheme,\n    key: index\n  });\n\n  const fillTop = gradient ? `url(#gradient-${id}-top)` : fillColor;\n  const fillBottom = gradient ? `url(#gradient-${id}-bottom)` : fillColor;\n\n  const [height] = yScale.range();\n  const [_, width] = xScale.range();\n\n  const ariaLabelData = useMemo(() => getAriaLabel(data), [data]);\n\n  return (\n    <CloneElement<TooltipAreaProps>\n      element={tooltip}\n      xScale={xScale}\n      yScale={yScale}\n      data={data as any}\n      height={height}\n      width={width}\n      tooltip={\n        <ChartTooltip\n          followCursor\n          content={(data, color) => {\n            const value = {\n              x: data.key,\n              y: data.data,\n              value: data.data\n            };\n\n            return <TooltipTemplate value={value} color={color} />;\n          }}\n        />\n      }\n    >\n      <g\n        pointerEvents={tooltip ? 'none' : 'auto'}\n        style={generateGlowStyles({ glow })}\n        aria-label={ariaLabelData}\n        role=\"graphics-document\"\n      >\n        <motion.path\n          d={areaGenerator(internalData as any[])}\n          fill={fillTop}\n          stroke=\"none\"\n          initial={{\n            opacity: 0\n          }}\n          animate={{\n            opacity\n          }}\n        />\n        <motion.path\n          d={areaMirrorGenerator(internalData as any[])}\n          fill={fillBottom}\n          stroke=\"none\"\n          initial={{\n            opacity: 0\n          }}\n          animate={{\n            opacity\n          }}\n        />\n        {gradient && (\n          <>\n            <CloneElement<GradientProps>\n              element={gradient}\n              id={`gradient-${id}-top`}\n              color={fillColor}\n            />\n            <CloneElement<GradientProps>\n              element={gradient}\n              id={`gradient-${id}-bottom`}\n              color={fillColor}\n            />\n          </>\n        )}\n      </g>\n    </CloneElement>\n  );\n};\n\nexport const FUNNEL_ARC_DEFAULT_PROPS: Partial<FunnelArcProps> = {\n  gradient: (\n    <Gradient\n      direction=\"horizontal\"\n      stops={[\n        <GradientStop offset=\"0%\" stopOpacity={1} key=\"stop\" />,\n        <GradientStop offset=\"80%\" stopOpacity={0.5} key=\"start\" />\n      ]}\n    />\n  ),\n  interpolation: 'smooth',\n  colorScheme: schemes.cybertron[0],\n  variant: 'default',\n  opacity: 1,\n  tooltip: null\n};\n","import React, { FC, useCallback } from 'react';\nimport { ChartShallowDataShape } from '@/common/data';\nimport { calculateDimensions, formatValue, wrapText } from '@/common/utils';\nimport { motion } from 'motion/react';\n\nexport interface FunnelAxisLabelProps {\n  /**\n   * Data object for the label. Set internally by `FunnelAxis`.\n   */\n  data: ChartShallowDataShape;\n\n  /**\n   * Index of the label. Set internally by `FunnelAxis`.\n   */\n  index: number;\n\n  /**\n   * Color of the text.\n   */\n  fill: string;\n\n  /**\n   * Font size of the text.\n   */\n  fontSize: number;\n\n  /**\n   * Font family of the text.\n   */\n  fontFamily: string;\n\n  /**\n   * Padding of the label.\n   */\n  padding?: number;\n\n  /**\n   * Class name to apply to the text.\n   */\n  className?: string;\n\n  /**\n   * xScale for the funnel. Set internally by `FunnelAxis`.\n   */\n  xScale: any;\n\n  /**\n   * yScale for the funnel. Set internally by `FunnelAxis`.\n   */\n  yScale: any;\n\n  /**\n   * Positioning of the label.\n   */\n  position?: 'top' | 'middle' | 'bottom';\n\n  /**\n   * Whether to show the value of the data.\n   * Defaults to `true`.\n   */\n  showValue?: boolean;\n\n  /**\n   * Visibility of the label.\n   */\n  labelVisibility?: 'auto' | 'always';\n}\n\nexport const FunnelAxisLabel: FC<Partial<FunnelAxisLabelProps>> = ({\n  data,\n  index,\n  xScale,\n  yScale,\n  fontFamily = 'sans-serif',\n  padding = 10,\n  fontSize = 13,\n  fill = '#fff',\n  className,\n  position = 'middle',\n  showValue = true,\n  labelVisibility = 'auto'\n}) => {\n  const x = xScale(index) + padding;\n  const [height] = yScale.range();\n  const y = height / 2 + padding;\n  const label = data.key as string;\n  const nextOffset = xScale(index + 1);\n  const width = (nextOffset ? nextOffset - xScale(index) : 0) - padding;\n  const size = calculateDimensions(label, fontFamily, fontSize);\n  const text = wrapText({\n    key: label,\n    size,\n    paddingY: padding,\n    paddingX: padding,\n    width,\n    height,\n    fontFamily,\n    fontSize,\n    visibility: labelVisibility\n  });\n\n  const getTransformString = useCallback(() => {\n    let transform: string;\n\n    switch (position) {\n    case 'top':\n      transform = `translate(${x}, ${fontSize * 3})`; // fontSize * 3 is to account for the total height of the label\n      break;\n    case 'middle':\n      transform = `translate(${x}, ${y})`;\n      break;\n    case 'bottom':\n      {\n        // If the text is wrapping, we need to account for the height of all the lines\n        const textWrapHeight = Array.isArray(text)\n          ? text.slice(1).reduce((acc, curr) => acc + curr.props.dy, 0) // Don't include first line's dy in order to align properly\n          : 0;\n        transform = `translate(${x}, ${height - padding - textWrapHeight})`;\n      }\n      break;\n    }\n\n    return transform;\n  }, [position, x, fontSize, y, text, height, padding]);\n\n  // If the labels don't fit, just hide them\n  if (labelVisibility !== 'always' && size.width > width) {\n    return null;\n  }\n\n  return (\n    <motion.g\n      transform={getTransformString()}\n      initial={{ opacity: 0 }}\n      animate={{ opacity: 1 }}\n    >\n      {showValue && (\n        <text\n          pointerEvents=\"none\"\n          fill={fill}\n          y={-(fontSize + padding)}\n          className={className}\n          dominantBaseline=\"middle\"\n          fontFamily={fontFamily}\n          fontSize={fontSize * 2}\n        >\n          {formatValue(data.data as any)}\n        </text>\n      )}\n      <text\n        pointerEvents=\"none\"\n        fill={fill}\n        className={className}\n        dominantBaseline=\"middle\"\n        fontFamily={fontFamily}\n        fontSize={fontSize}\n      >\n        {text}\n      </text>\n    </motion.g>\n  );\n};\n","import React, { FC } from 'react';\n\nexport interface FunnelAxisLineProps {\n  /**\n   * Color of the axis lines.\n   */\n  strokeColor: string;\n\n  /**\n   * Width of the axis lines.\n   */\n  strokeWidth: number;\n\n  /**\n   * xScale for the funnel. Set internally by `FunnelChart`.\n   */\n  xScale: any;\n\n  /**\n   * yScale for the funnel. Set internally by `FunnelChart`.\n   */\n  yScale: any;\n\n  /**\n   * Index of the line. Set internally by `FunnelAxis`.\n   */\n  index: number;\n}\n\nexport const FunnelAxisLine: FC<Partial<FunnelAxisLineProps>> = ({\n  strokeColor = '#333',\n  strokeWidth = 2,\n  yScale,\n  xScale,\n  index\n}) => {\n  const [height] = yScale.range();\n\n  return (\n    <line\n      x1={xScale(index)}\n      y1={0}\n      x2={xScale(index)}\n      y2={height}\n      stroke={strokeColor}\n      strokeWidth={strokeWidth}\n      pointerEvents=\"none\"\n    />\n  );\n};\n","import React, { FC, Fragment, ReactElement } from 'react';\nimport { ChartShallowDataShape } from '@/common/data';\nimport { range } from 'd3-array';\nimport { FunnelAxisLabel, FunnelAxisLabelProps } from './FunnelAxisLabel';\nimport { CloneElement } from 'reablocks';\nimport { FunnelAxisLine, FunnelAxisLineProps } from './FunnelAxisLine';\n\nexport interface FunnelAxisProps {\n  /**\n   * Data to render the funnel. Set internally by `FunnelChart`.\n   */\n  data: ChartShallowDataShape[];\n\n  /**\n   * xScale for the funnel. Set internally by `FunnelChart`.\n   */\n  xScale: any;\n\n  /**\n   * yScale for the funnel. Set internally by `FunnelChart`.\n   */\n  yScale: any;\n\n  /**\n   * The funnel axis line.\n   */\n  line?: ReactElement<FunnelAxisLineProps, typeof FunnelAxisLine> | null;\n\n  /**\n   * Label component for the axis.\n   */\n  label?: ReactElement<FunnelAxisLabelProps, typeof FunnelAxisLabel> | null;\n}\n\nexport const FunnelAxis: FC<Partial<FunnelAxisProps>> = ({\n  data,\n  xScale,\n  yScale,\n  line = <FunnelAxisLine />,\n  label = <FunnelAxisLabel />\n}) => {\n  const lines = range(0, data.length);\n\n  return (\n    <>\n      {lines.map((index) => (\n        <Fragment key={index}>\n          {line && index !== 0 && (\n            <CloneElement<FunnelAxisLineProps>\n              element={line}\n              index={index}\n              xScale={xScale}\n              yScale={yScale}\n            />\n          )}\n          {label && (\n            <CloneElement<FunnelAxisLabelProps>\n              element={label}\n              index={index}\n              data={data[index]}\n              xScale={xScale}\n              yScale={yScale}\n            />\n          )}\n        </Fragment>\n      ))}\n    </>\n  );\n};\n","import React, { MouseEvent, useCallback, useMemo } from 'react';\nimport { FUNNEL_ARC_DEFAULT_PROPS, FunnelArc } from './FunnelArc';\nimport { CloneElement } from 'reablocks';\nimport { FunnelArcProps } from './FunnelArc';\nimport { FunnelAxis, FunnelAxisProps } from './FunnelAxis';\nimport {\n  ChartShallowDataShape,\n  getClosestContinousScalePoint,\n  getPositionForTarget\n} from '@/common';\nimport { ClickEvent } from '@/common/types';\nimport { scaleLinear } from 'd3-scale';\nimport { max } from 'd3-array';\n\nexport interface FunnelSeriesProps {\n  /**\n   * Parsed data shape. Set internally by `FunnelChart`.\n   */\n  data: ChartShallowDataShape[];\n\n  /**\n   * Id of the funnel chart. Set internally by `FunnelChart`.\n   */\n  id: string;\n\n  /**\n   * The arc component that renders the funnel shape.\n   */\n  arc: React.ReactElement<FunnelArcProps, typeof FunnelArc>;\n\n  /**\n   * The axis component that renders the funnel axis.\n   */\n  axis: React.ReactElement<FunnelAxisProps, typeof FunnelAxis>;\n\n  /**\n   * Height of the chart. Set internally by `FunnelChart`.\n   */\n  height: number;\n\n  /**\n   * Width of the chart. Set internally by `FunnelChart`.\n   */\n  width: number;\n\n  /**\n   * Event for when a segment is clicked.\n   */\n  onSegmentClick?: (e: ClickEvent) => void;\n}\n\nexport const FunnelSeries: React.FC<Partial<FunnelSeriesProps>> = ({\n  data,\n  id,\n  arc = <FunnelArc />,\n  axis = <FunnelAxis />,\n  height,\n  width,\n  onSegmentClick\n}) => {\n  const arcProps = useMemo(\n    () => ({ ...FUNNEL_ARC_DEFAULT_PROPS, ...(arc?.props ?? {}) }),\n    [arc?.props]\n  );\n\n  // Calculate the funnel data on mount and when data changes\n  const getScales = useCallback(\n    (height: number, width: number) => {\n      const yScale = scaleLinear()\n        .domain([-max(data, ({ data }) => data), max(data, ({ data }) => data)])\n        .nice()\n        .range([height, 0]);\n\n      const xScale = scaleLinear().domain([0, data.length]).range([0, width]);\n\n      const transformedData = data.map((d, i) => ({\n        ...d,\n        key: d.key,\n        x: xScale(i),\n        i\n      }));\n\n      return {\n        data: transformedData,\n        yScale,\n        xScale\n      };\n    },\n    [data]\n  );\n\n  const { datas, halfOffset } = useMemo(() => {\n    // The 'layered' variant is actually just a series of funnel charts\n    // laid on top of each other to create the effect of a layered funnel.\n    if (arcProps.variant === 'layered') {\n      const offset = height / 4;\n      const halfOffset = offset / 2;\n\n      return {\n        halfOffset,\n        datas: [\n          { data, ...getScales(height, width) },\n          { data, ...getScales(height - offset, width) },\n          { data, ...getScales(height - offset * 2, width) }\n        ]\n      };\n    } else {\n      return {\n        halfOffset: 0,\n        datas: [{ data, ...getScales(height, width) }]\n      };\n    }\n  }, [data, arcProps, height, width, getScales]);\n\n  const handleSegmentClick = useCallback(\n    (e: MouseEvent) => {\n      if (onSegmentClick) {\n        const { xScale, data } = datas[0];\n        const { clientX, clientY, target } = e;\n        const position = getPositionForTarget({ target, clientX, clientY });\n        const value = getClosestContinousScalePoint({\n          pos: position.x,\n          scale: xScale,\n          data,\n          attr: 'i'\n        });\n\n        onSegmentClick({\n          value: { key: value.key, data: value.data },\n          nativeEvent: e\n        });\n      }\n    },\n    [datas, onSegmentClick]\n  );\n\n  return (\n    <>\n      {datas.map((d, i) => (\n        <g\n          key={i}\n          style={{ transform: `translate(0, ${i * halfOffset}px)` }}\n          onClick={handleSegmentClick}\n        >\n          <CloneElement<FunnelArcProps>\n            element={arc}\n            {...d}\n            id={`${id}-arc-${i}`}\n            index={i}\n          />\n        </g>\n      ))}\n      <CloneElement<FunnelAxisProps>\n        element={axis}\n        data={data}\n        xScale={datas[0].xScale}\n        yScale={datas[0].yScale}\n      />\n    </>\n  );\n};\n","import React, { FC, ReactElement, useCallback } from 'react';\nimport { CloneElement, useId } from 'reablocks';\nimport {\n  ChartContainer,\n  ChartContainerChildProps,\n  ChartProps\n} from '@/common/containers';\nimport { ChartShallowDataShape } from '@/common/data';\nimport { FunnelSeries, FunnelSeriesProps } from './FunnelSeries/FunnelSeries';\n\nexport interface FunnelChartProps extends ChartProps {\n  /**\n   * Chart shape used to render the funnel.\n   */\n  data: ChartShallowDataShape[];\n\n  /**\n   * The series component that renders the funnel components.\n   */\n  series: ReactElement<FunnelSeriesProps, typeof FunnelSeries>;\n}\n\nexport const FunnelChart: FC<Partial<FunnelChartProps>> = ({\n  data,\n  width,\n  margins = 0,\n  height,\n  className,\n  containerClassName,\n  series = <FunnelSeries />,\n  ...rest\n}) => {\n  const id = useId(rest.id);\n\n  const renderChart = useCallback(\n    ({ id, chartWidth, chartHeight, chartSized }: ChartContainerChildProps) => {\n      if (!chartSized) {\n        return null;\n      }\n\n      return (\n        <CloneElement<FunnelSeriesProps>\n          element={series}\n          id={`funnel-series-${id}`}\n          data={data}\n          height={chartHeight}\n          width={chartWidth}\n        />\n      );\n    },\n    [data, series]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      height={height}\n      margins={margins}\n      containerClassName={containerClassName}\n      className={className}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n","import { useEffect } from 'react';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\nimport { useMotionValue, useSpring } from 'motion/react';\nimport { interpolate } from 'd3-interpolate';\n\nexport const useInterpolate = ({ animated, initial, path }) => {\n  const transition = animated\n    ? { ...DEFAULT_TRANSITION }\n    : {\n      delay: 0,\n      type: false\n    };\n\n  const d = useMotionValue(initial);\n  const spring = useSpring(0, { stiffness: 300, damping: 30 });\n\n  useEffect(() => {\n    const interpolator = interpolate(d.get(), path);\n    const prevSpring = spring.get();\n    spring.set(1 + prevSpring);\n\n    return spring.on('change', (v) => d.set(interpolator(v - prevSpring)));\n  }, [d, path, spring]);\n\n  return { transition, d: animated ? d : path };\n};\n","import React, {\n  FC,\n  ReactElement,\n  useCallback,\n  useMemo,\n  useRef,\n  useState\n} from 'react';\nimport { arc } from 'd3-shape';\nimport { getAriaLabel } from '@/common/utils/formatting';\nimport { motion } from 'motion/react';\nimport { ChartTooltip, ChartTooltipProps } from '@/common/Tooltip';\nimport { CloneElement } from 'reablocks';\nimport { useHoverIntent } from '@/common/utils/useHoverIntent';\nimport { Gradient, GradientProps } from '@/common/Gradient';\nimport chroma from 'chroma-js';\nimport { useInterpolate } from './useInterpolate';\n\nexport interface SunburstArcProps {\n  /**\n   * Id set by the parent.\n   */\n  id: string;\n\n  /**\n   * Radius of the chart. Set internally by `SunburstChart`.\n   */\n  radius: number;\n\n  /**\n   * The internal data object built by d3\n   */\n  data: any;\n\n  /**\n   * Fill color for the arc.\n   */\n  fill: string;\n\n  /**\n   * Whether the chart is animated or not.\n   */\n  animated?: boolean;\n\n  /**\n   * Cursor for the element.\n   */\n  cursor?: string;\n\n  /**\n   * Tooltip element.\n   */\n  tooltip?: ReactElement<ChartTooltipProps, typeof ChartTooltip> | null;\n\n  /**\n   * Gradient shades for the bar.\n   */\n  gradient?: ReactElement<GradientProps, typeof Gradient> | null;\n\n  /**\n   * The onClick handler for the arc.\n   */\n  onClick?: (event: React.MouseEvent, data: any) => void;\n\n  /**\n   * Event for when the arc has mouse enter.\n   */\n  onMouseEnter?: (event, data) => void;\n\n  /**\n   * Event for when the arc has mouse leave.\n   */\n  onMouseLeave?: (event, data) => void;\n}\n\nexport const SunburstArc: FC<Partial<SunburstArcProps>> = ({\n  id,\n  radius,\n  fill,\n  data,\n  cursor = 'pointer',\n  tooltip = <ChartTooltip />,\n  animated,\n  gradient,\n  onClick,\n  onMouseEnter,\n  onMouseLeave\n}) => {\n  const [internalActive, setInternalActive] = useState<boolean>(false);\n  const arcRef = useRef<any | null>(null);\n\n  const getPath = useCallback(\n    (item) => {\n      return arc()\n        .startAngle((d: any) => d.x0)\n        .endAngle((d: any) => d.x1)\n        .padAngle((d: any) => Math.min((d.x1 - d.x0) / 2, 0.005))\n        .padRadius(radius / 2)\n        .innerRadius((d: any) => d.y0)\n        .outerRadius((d: any) => d.y1 - 1)(item);\n    },\n    [radius]\n  );\n\n  const p = data.parent || { x0: 0, x1: 0, y0: 0, y1: 0 };\n  const initial = getPath({\n    x0: ((data.x0 - p.x0) / (p.x1 - p.x0)) * 2 * Math.PI,\n    x1: ((data.x1 - p.x0) / (p.x1 - p.x0)) * 2 * Math.PI,\n    y0: 0,\n    y1: 0\n  });\n  const animate = getPath(data);\n  const ariaLabelData = getAriaLabel(data.data);\n\n  const { pointerOut, pointerOver } = useHoverIntent({\n    onPointerOver: (event) => {\n      setInternalActive(true);\n      onMouseEnter?.(event, data);\n    },\n    onPointerOut: (event) => {\n      setInternalActive(false);\n      onMouseLeave?.(event, data);\n    }\n  });\n\n  const tooltipLabel = useMemo(() => {\n    const getKey = (node): string[] => {\n      if (!node.parent) {\n        return [];\n      }\n      return [...getKey(node.parent), node.data.key];\n    };\n    return getKey(data).join(' → ');\n  }, [data]);\n\n  const tooltipData = useMemo(\n    () => ({ y: data.value, x: tooltipLabel }),\n    [data, tooltipLabel]\n  );\n\n  const currentFill = useMemo(\n    () => (internalActive ? chroma(fill).brighten(0.5).hex() : fill),\n    [fill, internalActive]\n  );\n\n  const pathFill = gradient ? `url(#gradient-${id})` : currentFill;\n\n  const { transition, d } = useInterpolate({\n    animated,\n    path: animate,\n    initial\n  });\n\n  return (\n    <g\n      ref={arcRef}\n      tabIndex={0}\n      aria-label={ariaLabelData}\n      role=\"graphics-document\"\n    >\n      <motion.path\n        id={id}\n        fill={pathFill}\n        d={d}\n        initial={{ opacity: 0 }}\n        animate={{ opacity: 1 }}\n        role=\"graphics-symbol\"\n        tabIndex={0}\n        style={{ cursor }}\n        transition={transition}\n        aria-label={ariaLabelData}\n        onClick={(event) => onClick?.(event, data)}\n        onPointerOver={pointerOver}\n        onPointerOut={pointerOut}\n      />\n      {gradient && (\n        <CloneElement<GradientProps>\n          element={gradient}\n          id={`gradient-${id}`}\n          direction=\"vertical\"\n          color={currentFill}\n        />\n      )}\n      {tooltip && !tooltip.props.disabled && (\n        <CloneElement<ChartTooltipProps>\n          element={tooltip}\n          visible={!!internalActive}\n          reference={arcRef}\n          value={tooltipData}\n        />\n      )}\n    </g>\n  );\n};\n","import React, { FC, useMemo } from 'react';\nimport invert from 'invert-color';\nimport ellipsize from 'ellipsize';\nimport { motion } from 'motion/react';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\n\nexport interface SunburstArcLabelProps {\n  /**\n   * Id set by the parent.\n   */\n  id: string;\n\n  /**\n   * The internal data object built by d3\n   */\n  data: any;\n\n  /**\n   * Fill color for the arc.\n   */\n  fill: string;\n\n  /**\n   * Radius of the chart. Set internally by `SunburstChart`.\n   */\n  radius: number;\n\n  /**\n   * Font size of the text.\n   */\n  fontSize?: number;\n\n  /**\n   * Font family of the text.\n   */\n  fontFamily?: string;\n\n  /**\n   * Whether the chart is animated or not.\n   */\n  animated?: boolean;\n}\n\nexport const SunburstArcLabel: FC<Partial<SunburstArcLabelProps>> = ({\n  data,\n  animated,\n  fill = 'black',\n  fontSize = 14,\n  fontFamily = 'sans-serif',\n  radius\n}) => {\n  // Get the full text and the truncated text\n  // NOTE: This could use some improvement around measuring\n  const fullText = data.data.key;\n  const text = ellipsize(fullText, 10);\n\n  // Make the fill inverted for better contrast\n  fill = invert(fill, true);\n\n  function labelTransform(d) {\n    const x = (((data.x0 + data.x1) / 2) * 180) / Math.PI;\n    const y = (data.y0 + data.y1) / 2;\n    return `rotate(${x - 90}deg) translate(${y}px,0) rotate(${x < 180 ? 0 : 180}deg)`;\n  }\n\n  function labelVisible(d) {\n    return (d.y1 - d.y0) * (d.x1 - d.x0) > 0.05;\n  }\n\n  const transition = useMemo(() => {\n    if (animated) {\n      return {\n        ...DEFAULT_TRANSITION\n      };\n    } else {\n      return {\n        type: false,\n        delay: 0\n      };\n    }\n  }, [animated]);\n\n  if (!labelVisible(data)) {\n    return null;\n  }\n\n  return (\n    <motion.g\n      initial={{ opacity: 0 }}\n      animate={{ opacity: 1 }}\n      style={{ transform: labelTransform(data) }}\n      fontFamily={fontFamily}\n      fontSize={fontSize}\n      transition={transition}\n    >\n      <title>{fullText}</title>\n      <text\n        style={{\n          pointerEvents: 'none',\n          userSelect: 'none'\n        }}\n        fill={fill}\n        dy=\"0.35em\"\n        textAnchor=\"middle\"\n      >\n        {text}\n      </text>\n    </motion.g>\n  );\n};\n","import React, { FC, Fragment, ReactElement, useCallback } from 'react';\nimport { ColorSchemeType, getColor } from '@/common/color';\nimport chroma from 'chroma-js';\nimport { SunburstArc, SunburstArcProps } from './SunburstArc';\nimport { SunburstArcLabel, SunburstArcLabelProps } from './SunburstArcLabel';\nimport { CloneElement } from 'reablocks';\nimport { identifier } from 'safe-identifier';\n\nexport interface SunburstSeriesProps {\n  /**\n   * Id set by the parent.\n   */\n  id: string;\n\n  /**\n   * The internal data object built by d3\n   */\n  data: any[];\n\n  /**\n   * Whether the chart is animated or not.\n   */\n  animated?: boolean;\n\n  /**\n   * Color scheme for the chart.\n   */\n  colorScheme: ColorSchemeType;\n\n  /**\n   * Radius of the chart. Set internally by `SunburstChart`.\n   */\n  radius: number;\n\n  /**\n   * The arc component to render.\n   */\n  arc?: ReactElement<SunburstArcProps, typeof SunburstArc>;\n\n  /**\n   * The arc label component to render.\n   */\n  label?: ReactElement<SunburstArcLabelProps, typeof SunburstArcLabel>;\n}\n\nexport const SunburstSeries: FC<Partial<SunburstSeriesProps>> = ({\n  id,\n  data,\n  radius,\n  colorScheme = 'cybertron',\n  animated = true,\n  arc = <SunburstArc />,\n  label = <SunburstArcLabel />\n}) => {\n  const getFill = useCallback(\n    (item: any, index: number) => {\n      // Get the parent most item for the color start\n      let parent = item;\n      while (parent.depth > 1) {\n        parent = parent.parent;\n      }\n\n      let fill = getColor({\n        data,\n        colorScheme,\n        point: parent.data,\n        index\n      });\n\n      // darken the color based on the depth\n      fill = chroma(fill)\n        .darken((item.depth - 1) * 0.5)\n        .hex();\n\n      return fill;\n    },\n    [colorScheme, data]\n  );\n\n  const renderItem = useCallback(\n    (item: any, index: number) => {\n      const fill = getFill(item, index);\n\n      // // Handle getting the item id recursively\n      const getItemId = (item: any): string => {\n        if (item.parent) {\n          return `${getItemId(item.parent)}-${item.data.key}`;\n        }\n        return `${item.data.key}`;\n      };\n\n      const itemId = getItemId(item);\n      const safeKey = identifier(itemId);\n\n      return (\n        <Fragment key={safeKey}>\n          <CloneElement<SunburstArcProps>\n            element={arc}\n            id={`${id}-${safeKey}-arc`}\n            fill={fill}\n            radius={radius}\n            animated={animated}\n            data={item}\n          />\n          <CloneElement<SunburstArcLabelProps>\n            element={label}\n            id={`${id}-${safeKey}-label`}\n            fill={fill}\n            data={item}\n            radius={radius}\n            animated={animated}\n          />\n        </Fragment>\n      );\n    },\n    [animated, arc, getFill, id, label, radius]\n  );\n\n  return <>{data.map(renderItem)}</>;\n};\n","import React, { FC, ReactElement, useCallback } from 'react';\nimport {\n  ChartContainer,\n  ChartContainerChildProps,\n  ChartProps\n} from '@/common/containers/ChartContainer';\nimport { ChartNestedDataShape, ChartShallowDataShape } from '@/common/data';\nimport { hierarchy, partition } from 'd3-hierarchy';\nimport { CloneElement, useId } from 'reablocks';\nimport { SunburstSeries, SunburstSeriesProps } from './SunburstSeries';\n\nexport interface SunburstChartProps extends ChartProps {\n  /**\n   * Data the chart will receive to render.\n   */\n  data: ChartShallowDataShape[] | ChartNestedDataShape[];\n\n  /**\n   * The series component that renders the components.\n   */\n  series?: ReactElement<SunburstSeriesProps, typeof SunburstSeries>;\n}\n\nexport const SunburstChart: FC<Partial<SunburstChartProps>> = ({\n  data = [],\n  id,\n  series = <SunburstSeries />,\n  containerClassName,\n  width,\n  height,\n  className,\n  margins = 0\n}) => {\n  const newId = useId(id);\n\n  const getData = useCallback(\n    (radius: number) => {\n      const rootHierarchy = hierarchy<any>({ data }, (d) => d.data)\n        .sum((d) => d.data)\n        .sort((a, b) => b.data - a.data);\n\n      const root = partition().size([2 * Math.PI, radius])(rootHierarchy);\n\n      const nodes = [];\n      const getAllNodes = (node) => {\n        if (node?.parent) {\n          // Don't add root node\n          nodes.push(node);\n        }\n        for (let child of node?.children || []) {\n          getAllNodes(child);\n        }\n      };\n\n      getAllNodes(root);\n      return nodes;\n    },\n    [data]\n  );\n\n  const renderChart = useCallback(\n    ({ chartWidth, chartHeight, ...rest }: ChartContainerChildProps) => {\n      const radius = Math.min(chartWidth, chartHeight) / 2;\n      const root = getData(radius);\n\n      return (\n        <CloneElement<SunburstSeriesProps>\n          element={series}\n          id={`${newId}-series`}\n          data={root}\n          radius={radius}\n        />\n      );\n    },\n    [getData, newId, series]\n  );\n\n  return (\n    <ChartContainer\n      id={newId}\n      width={width}\n      height={height}\n      containerClassName={containerClassName}\n      margins={margins}\n      xAxisVisible={false}\n      yAxisVisible={false}\n      center={true}\n      className={className}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n","import React, { FC, ReactElement, useRef, useState } from 'react';\nimport { motion } from 'motion/react';\nimport { ChartShallowDataShape } from '../common/data';\nimport { ChartTooltip, ChartTooltipProps } from '../common/Tooltip';\nimport { CloneElement } from 'reablocks';\nimport classNames from 'classnames';\nimport css from './WordCloudLabel.module.css';\nimport { useHoverIntent } from '@/common/utils/useHoverIntent';\n\nexport interface WordCloudLabelProps {\n  /**\n   * Text to display.\n   */\n  text: string;\n\n  /**\n   * Font size in pixels.\n   */\n  fontSize: number;\n\n  /**\n   * Font family to use.\n   */\n  fontFamily: string;\n\n  /**\n   * Fill color for the text.\n   */\n  fill: string;\n\n  /**\n   * X position of the text.\n   */\n  x: number;\n\n  /**\n   * Y position of the text.\n   */\n  y: number;\n\n  /**\n   * Rotation angle in degrees.\n   */\n  rotate: number;\n\n  /**\n   * Original data point.\n   */\n  data: ChartShallowDataShape;\n\n  /**\n   * Additional className to apply.\n   */\n  className?: string;\n\n  /**\n   * Tooltip element.\n   */\n  tooltip?: ReactElement<ChartTooltipProps, typeof ChartTooltip> | null;\n\n  /**\n   * Click handler.\n   */\n  onClick?: (event: React.MouseEvent, data: ChartShallowDataShape) => void;\n\n  /**\n   * Mouse enter handler.\n   */\n  onMouseEnter?: (\n    event: React.PointerEvent,\n    data: ChartShallowDataShape\n  ) => void;\n\n  /**\n   * Mouse leave handler.\n   */\n  onMouseLeave?: (\n    event: React.PointerEvent,\n    data: ChartShallowDataShape\n  ) => void;\n}\n\nexport const WordCloudLabel: FC<Partial<WordCloudLabelProps>> = ({\n  text,\n  fontSize,\n  fontFamily,\n  fill,\n  x,\n  y,\n  rotate,\n  data,\n  onClick,\n  className,\n  onMouseEnter,\n  onMouseLeave,\n  tooltip = <ChartTooltip />\n}) => {\n  const [tooltipVisible, setTooltipVisible] = useState<boolean>(false);\n  const labelRef = useRef<SVGTextElement>(null);\n\n  const { pointerOut, pointerOver } = useHoverIntent({\n    onPointerOver: (event) => {\n      setTooltipVisible(true);\n      onMouseEnter?.(event, data);\n    },\n    onPointerOut: (event) => {\n      setTooltipVisible(false);\n      onMouseLeave?.(event, data);\n    }\n  });\n\n  return (\n    <>\n      <g\n        ref={labelRef}\n        className={classNames(css.wordLabel, className, {\n          [css.clickable]: !!onClick\n        })}\n        onPointerOut={pointerOut}\n        onPointerOver={pointerOver}\n        onClick={(event) => onClick?.(event, data)}\n      >\n        <motion.text\n          style={{\n            fontSize: `${fontSize}px`,\n            fontFamily,\n            fill,\n            cursor: onClick ? 'pointer' : 'default'\n          }}\n          textAnchor=\"middle\"\n          initial={{\n            opacity: 0,\n            x,\n            y,\n            rotate\n          }}\n          animate={{\n            opacity: 1,\n            x,\n            y,\n            rotate\n          }}\n          exit={{\n            opacity: 0,\n            x,\n            y,\n            rotate\n          }}\n          whileHover={{\n            opacity: 0.7,\n            transition: { duration: 0.2 }\n          }}\n        >\n          {text}\n        </motion.text>\n      </g>\n      <CloneElement<ChartTooltipProps>\n        element={tooltip}\n        visible={tooltipVisible}\n        reference={labelRef}\n        value={{\n          x: text,\n          value: data.data\n        }}\n      />\n    </>\n  );\n};\n","import React, { useCallback, FC } from 'react';\nimport cloud from 'd3-cloud';\nimport { max } from 'd3-array';\nimport { scaleLinear } from 'd3-scale';\nimport { getColor, schemes } from '@/common/color';\nimport { ChartShallowDataShape } from '@/common/data';\nimport {\n  ChartProps,\n  ChartContainer,\n  ChartContextProps\n} from '@/common/containers';\nimport { WordCloudLabel } from './WordCloudLabel';\n\nexport interface WordCloudProps extends ChartProps {\n  /**\n   * Data to render in the word cloud.\n   * The 'key' represents the word and 'data' represents its frequency/weight.\n   */\n  data: ChartShallowDataShape[];\n\n  /**\n   * Font size range [min, max].\n   */\n  fontSizeRange?: [number, number];\n\n  /**\n   * Font family to use.\n   */\n  fontFamily?: string;\n\n  /**\n   * Padding between words.\n   */\n  padding?: number;\n\n  /**\n   * Rotation angles for words.\n   */\n  rotationAngles?: [number, number];\n\n  /**\n   * Number of possible rotations.\n   */\n  rotations?: number;\n\n  /**\n   * Custom color scheme for words.\n   */\n  colorScheme?: string[];\n\n  /**\n   * Event triggered when a word is clicked.\n   */\n  onLabelClick?: (event: React.MouseEvent, data: ChartShallowDataShape) => void;\n\n  /**\n   * Mouse enter handler.\n   */\n  onLabelMouseEnter?: (\n    event: React.PointerEvent,\n    data: ChartShallowDataShape\n  ) => void;\n\n  /**\n   * Mouse leave handler.\n   */\n  onLabelMouseLeave?: (\n    event: React.PointerEvent,\n    data: ChartShallowDataShape\n  ) => void;\n}\n\nexport const WordCloud: FC<Partial<WordCloudProps>> = ({\n  data = [],\n  width,\n  height,\n  fontSizeRange = [12, 50],\n  fontFamily = 'Arial',\n  padding = 3,\n  rotationAngles = [-30, 30],\n  rotations = 2,\n  colorScheme = schemes.cybertron,\n  onLabelClick,\n  onLabelMouseEnter,\n  onLabelMouseLeave,\n  margins,\n  className,\n  containerClassName\n}) => {\n  const buildData = useCallback(\n    (chartWidth: number, chartHeight: number) => {\n      // Create scales\n      const sizeScale = scaleLinear()\n        .domain([0, max(data, (d) => Number(d.data)) || 0])\n        .range(fontSizeRange);\n\n      // Create layout\n      const layout = cloud()\n        .size([chartWidth, chartHeight])\n        .words(\n          data.map((d, index) => ({\n            text: String(d.key),\n            size: sizeScale(Number(d.data)),\n            color: getColor({\n              colorScheme,\n              index,\n              point: d,\n              data\n            }),\n            data: d\n          }))\n        )\n        .padding(padding)\n        .font(fontFamily)\n        .fontSize((d) => d.size)\n        .rotate(() =>\n          rotations > 0\n            ? (Math.floor(Math.random() * rotations) *\n                (rotationAngles[1] - rotationAngles[0])) /\n                (rotations - 1) +\n              rotationAngles[0]\n            : 0\n        );\n\n      layout.start();\n      const words = layout.words();\n      return words;\n    },\n    [\n      colorScheme,\n      data,\n      fontFamily,\n      fontSizeRange,\n      padding,\n      rotationAngles,\n      rotations\n    ]\n  );\n\n  const renderChart = useCallback(\n    ({ chartHeight, chartWidth }: ChartContextProps) => {\n      const words = buildData(chartWidth, chartHeight);\n\n      return words.map((word: any, i) => (\n        <WordCloudLabel\n          key={`${word.text}-${i}`}\n          text={word.text}\n          fontSize={word.size}\n          fontFamily={fontFamily}\n          fill={word.color}\n          x={word.x || 0}\n          y={word.y || 0}\n          rotate={word.rotate || 0}\n          data={word.data}\n          onClick={onLabelClick}\n          onMouseEnter={onLabelMouseEnter}\n          onMouseLeave={onLabelMouseLeave}\n        />\n      ));\n    },\n    [buildData, fontFamily, onLabelClick, onLabelMouseEnter, onLabelMouseLeave]\n  );\n\n  return (\n    <ChartContainer\n      width={width}\n      height={height}\n      margins={margins}\n      className={className}\n      containerClassName={containerClassName}\n      center={true}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n"],"names":["min","max","value","curveMonotoneX","curveStep","curveLinear","end","bisector","node","applyToPoint","inverse","applyToPoints","dimensions","jsx","useRef","useCallback","useState","useEffect","entry","useId","Fragment","CloneElement","path","useMemo","start","line","position","align","jsxs","label","getDimension","ticks","angle","createRef","height","width","translateY","translateX","point","textAnchor","transform","arc","scaleLinear","d","Children","cloneElement","css","hasNoSlice","domain","createContext","useContext","median","histogram","transformDataToStack","transformStackToData","stack","stackOffsetExpand","stackOffsetDiverging","Component","smoothMatrix","translate","scale","symbol","extent","yAxisGrid","xAxisGrid","Tooltip","forwardRef","tooltip","data","target","offsetX","offsetY","outerRadius","useImperativeHandle","offset","flip","identity","fromDefinition","fromObject","scaleTime","scaleBand","zoomOffset","useMotionValue","useSpring","interpolate","motion","scaleOrdinal","maxIndex","scaleQuantile","animate","identifier","PADDING","marker","id","gradient","item","area","coords","markLine","zoom","delay","isCategorical","padding","color","index","currentColorShade","bar","getValueScale","Map","geoNaturalEarth1","geoMercator","projection","geoPath","useInterpolate","pie","sankeyJustify","sankeyCenter","sankeyLeft","sankeyRight","activeNodes","activeLinks","link","nodeMap","sankey","active","disabled","sankeyLinkHorizontal","createElement","curveCardinalClosed","curveCardinal","curveLinearClosed","radialArea","radialLine","getXScale","scalePoint","innerRadius","fill","valueLabel","columns","xScale","range","yScale","cell","cellCount","base","outerBar","minValue","maxValue","isValidElement","sets","intersections","bb","layout","pack","hierarchy","tooltipLabel","treemap","treemapSquarify","halfOffset","labelVisible","partition","buildData"],"mappings":";;;;AAEA,QAAM,mBAAmB,IAAI,YAAY,MAAM;AAAA,IAC7C,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,EACL,CAAC;AAED,QAAM,0BAA0B,IAAI,YAAY,MAAM;AAAA,IACpD,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,EACL,CAAC;AAED,QAAM,cAAc;AACpB,QAAM,cAAc;AAEP,QAAA,wBAAwB,CAAC,eAAe;AAC/C,QAAA,WAAW,QAAQ,WAAW,GAAG;AACnC,aAAO,YAAY,WAAW,OAAO,WAAW,EAAE,cAAc;AAAA,QAC9D,OAAO;AAAA,MAAA,CACR;AAAA,IAAA;AAEH,WAAO,YAAY,WAAW,cAAc,EAAE,OAAO,kBAAkB;AAAA,EACzE;AAEa,QAAA,2BAA2B,CAAC,eAAe;AACtD,QAAI,IAAI;AACR,QAAI,kBAAkB;AACX,eAAA,KAAK,WAAW,SAAS,EAAE,MAAM,EAAE,EAAE,WAAW;AACzD,UAAI,IAAI,KAAK,IAAI,MAAM,GAAG;AACxB,0BAAkB,MAAM;AAAA,MAAA;AAE1B,wBAAkB,IAAI;AACtB;AAAA,IAAA;AAEK,WAAA;AAAA,EACT;ACRA,WAAS,aAAa,SAAmB;AACvC,QAAI,MAAM;AACV,QAAI,QAAQ;AACZ,QAAI,SAAS;AACb,QAAI,OAAO;AAEP,QAAA,MAAM,QAAQ,OAAO,GAAG;AACtB,UAAA,QAAQ,WAAW,GAAG;AACxB,cAAM,QAAQ,CAAC;AACf,iBAAS,QAAQ,CAAC;AAClB,eAAO,QAAQ,CAAC;AAChB,gBAAQ,QAAQ,CAAC;AAAA,MAAA,WACR,QAAQ,WAAW,GAAG;AAC/B,cAAM,QAAQ,CAAC;AACf,gBAAQ,QAAQ,CAAC;AACjB,iBAAS,QAAQ,CAAC;AAClB,eAAO,QAAQ,CAAC;AAAA,MAAA;AAAA,IAClB,WACS,YAAY,QAAW;AAC1B,YAAA;AACE,cAAA;AACC,eAAA;AACF,aAAA;AAAA,IAAA;AAGF,WAAA;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAKA,WAAS,uBACP,QACA,OACA,SACA;AACA,UAAM,EAAE,MAAM,OAAO,QAAQ,IAAQ,IAAA;AAC/B,UAAA,YAAY,SAAS,MAAM;AAC3B,UAAA,WAAW,QAAQ,OAAO;AAEzB,WAAA;AAAA,MACL,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,EACF;AAKO,WAAS,aAAa;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAyC;AACjC,UAAA,gBAAgB,aAAa,OAAO;AAC1C,UAAM,aAAa,uBAAuB,QAAQ,OAAO,aAAa;AAChE,UAAA,aAAa,WAAW,QAAQ;AAChC,UAAA,cAAc,WAAW,SAAS;AAEjC,WAAA;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS,UAAU,cAAc;AAAA,MACjC,SAAS,cAAc;AAAA,IACzB;AAAA,EACF;ACpGgB,WAAA,OAAO,MAAa,MAAwB;AACpD,UAAA,WAAW,CAAC,KAAK,OAAO;AAC5B,UAAI,MAAM,QAAQ,IAAI,IAAI,GAAG;AAC3B,eAAO,GAAG,IAAI,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;AAAA,MAAA;AAEtC,aAAO,IAAI,IAAI;AAAA,IACjB;AAEM,UAAA,SAASA,YAAI,MAAM,CAAC,MAAM,SAAS,GAAGA,QAAAA,GAAG,CAAC;AAC1C,UAAA,SAASC,YAAI,MAAM,CAAC,MAAM,SAAS,GAAGA,QAAAA,GAAG,CAAC;AAEzC,WAAA,CAAC,QAAQ,MAAM;AAAA,EACxB;AAKO,WAAS,WAAW;AAAA,IACzB;AAAA,IACA,SAAS;AAAA,IACT,cAAc;AAAA,EAChB,GAAa;AACX,UAAM,CAAC,QAAQ,IAAI,IAAI,OAAO,MAAM,GAAG;AACvC,UAAM,CAAC,SAAS,KAAK,IAAI,OAAO,MAAM,IAAI;AAItC,QAAA,SAAS,KAAK,aAAa;AAC7B,YAAM,WAAW,CAAC;AAClB,YAAM,SAAS,KAAK,IAAI,UAAU,IAAI;AAE/B,aAAA,CAAC,CAAC,QAAQ,MAAM;AAAA,IAAA;AAIzB,QAAI,QAAQ;AACH,aAAA,CAAC,SAAS,KAAK;AAAA,IAAA;AAIjB,WAAA,CAAC,GAAG,KAAK;AAAA,EAClB;AAKO,WAAS,WAAW;AAAA,IACzB;AAAA,IACA,SAAS;AAAA,IACT,cAAc;AAAA,EAChB,GAAa;AACX,UAAM,UAAU,OAAO,MAAM,IAAI,EAAE,CAAC;AACpC,UAAM,QAAQ,OAAO,MAAM,IAAI,EAAE,CAAC;AAGlC,QAAI,OAAO,YAAY,YAAY,OAAO,UAAU,UAAU;AAGxD,UAAA,UAAU,KAAK,aAAa;AAC9B,cAAM,WAAW,CAAC;AAClB,cAAM,SAAS,KAAK,IAAI,UAAU,KAAK;AAEhC,eAAA,CAAC,CAAC,QAAQ,MAAM;AAAA,MAAA;AAIzB,UAAI,CAAC,QAAQ;AACJ,eAAA,CAAC,GAAG,KAAK;AAAA,MAAA;AAAA,IAClB;AAIK,WAAA,CAAC,SAAS,KAAK;AAAA,EACxB;AC3EA,QAAM,uBAAuB,MAAM;AAC7B,QAAA,OAAO,WAAW,aAAa;AAC1B,aAAA;AAAA,IAAA;AAGT,QAAI,UAAU,aAAa,UAAU,UAAU,QAAQ;AAC9C,aAAA,UAAU,UAAU,CAAC;AAAA,IAAA;AAG9B,QACG,UAAkB,gBACnB,UAAU,YACT,UAAkB,iBACnB;AACO,aAAA;AAAA,IAAA;AAAA,EAEX;AAEA,QAAM,SAAS,qBAAqB;AAEpC,QAAM,UAAU;AAAA,IACd,MAAM;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,eAAe;AAAA,EACjB;AAKO,WAAS,YAAYC,QAAuC;AACjE,QAAIA,WAAU,QAAW;AACvB,UAAIA,kBAAiB,MAAM;AACjB,eAAAA,OAAe,mBAAmB,QAAQ,OAAc;AAAA,MAAA,WACvD,OAAOA,WAAU,UAAU;AACpC,eAAOA,OAAM,eAAe;AAAA,MAAA;AAGvB,aAAAA;AAAA,IAAA;AAGF,WAAA;AAAA,EACT;AAOO,WAAS,aAAa,WAAW;AAChC,UAAA,UAAU,MAAM,QAAQ,SAAS;AACvC,QAAI,SAAS;AACJ,aAAA,uCAAW,IAAI,CAAC,QAAQ,aAAa,GAAG,GAAG,KAAK;AAAA,IAAI,OACtD;AACC,YAAA,OAAM,uCAAW,SAAO,uCAAW;AAEnC,YAAAA,UAAQ,uCAAW,UAAQ,uCAAW;AAC5C,aAAO,GAAG,GAAG,KAAK,YAAYA,MAAK,CAAC;AAAA,IAAA;AAAA,EAExC;ACvDO,WAAS,YACd,MACA;AACA,QAAI,SAAS,UAAU;AACd,aAAAC,QAAA;AAAA,IAAA,WACE,SAAS,QAAQ;AACnB,aAAAC,QAAA;AAAA,IAAA,OACF;AACE,aAAAC,QAAA;AAAA,IAAA;AAAA,EAEX;ACTA,QAAM,kBAAkB,CAAC,OAAO,QAAQ,UAAU;AAC1C,UAAA,SAAS,MAAM,OAAO;AAC5B,UAAM,eAAe,MAAM,OAAO,CAAC,CAAC;AAC9B,UAAA,WAAW,MAAM,KAAK;AAC5B,UAAM,GAAGC,IAAG,IAAI,MAAM,MAAM;AAE5B,WAAO,CAAC,WAAW;AAEjB,UAAI,OAAO,KAAK;AAAA,SACb,SAAS,gBAAgB;AAAA,QAC1B,OAAO,SAAS;AAAA,MAClB;AAGI,UAAA,OAAO,KAAK,KAAK,IAAI,IAAI,IAAI,OAAO,SAAS,GAAG;AAClD,eAAO,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI;AAAA,MAAA;AAItC,UAAI,QAAQ,QACR,KAAK,MAAM,IAAI,IAAI,OAAO,SAC1B,KAAK,MAAM,IAAI,IAAI,OAAO;AAG9B,UAAIA,SAAQ,GAAG;AACb,gBAAQ,QAAQ;AAAA,MAAA;AAGX,aAAA,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,OAAO,OAAO,SAAS,CAAC,CAAC,CAAC;AAAA,IAC/D;AAAA,EACF;AAca,QAAA,gCAAgC,CAAC;AAAA,IAC5C;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,YAAY;AAAA,EACd,MAMM;AACE,UAAA,SAAS,MAAM,OAAO,GAAG;AAGzB,UAAA,SAASC,iBAAS,CAAC,MAAW;AAElC,aAAO,SAAS,MAAM,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI;AAAA,IAC3C,CAAA,EAAE;AACG,UAAA,QAAQ,OAAO,MAAM,MAAM;AAGjC,UAAM,WAAW,KAAK,IAAI,GAAG,QAAQ,CAAC;AAChC,UAAA,SAAS,KAAK,QAAQ;AAE5B,QAAI,WAAW;AACN,aAAA;AAAA,IAAA;AAIT,UAAM,WAAW,KAAK,IAAI,KAAK,SAAS,GAAG,KAAK;AAC1C,UAAA,QAAQ,KAAK,QAAQ;AAGvB,QAAA,YAAY,OAAO,IAAI;AACvB,QAAA,WAAW,MAAM,IAAI;AACzB,gBAAY,SAAS;AACrB,eAAW,WAAW;AAEf,WAAA,YAAY,WAAW,SAAS;AAAA,EACzC;AAaa,QAAA,2BAA2B,CAAC;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,EACjB,MAKM;AACE,UAAA,SAAS,MAAM,OAAO;AACxB,QAAA;AAGJ,QAAI,MAAM,gBAAgB;AACjB,aAAA,MAAM,eAAe,GAAG;AAAA,IAAA,OAC1B;AACL,aAAO,gBAAgB,OAAO,YAAY,EAAE,GAAG;AAAA,IAAA;AAG3C,UAAA,MAAM,OAAO,QAAQ,IAAI;AAC/B,WAAO,KAAK,GAAG;AAAA,EACjB;AAKa,QAAA,eAAe,CAAC,UAAU;AAEjC,QAAAC,QAAO,MAAM,OAAO;AAGxB,QAAIA,OAAM;AACR,aAAOA,MAAK,iBAAiB;AAC3B,QAAAA,QAAOA,MAAK;AAAA,MAAA;AAAA,IACd;AAGK,WAAAA;AAAA,EACT;AAKa,QAAA,uBAAuB,CAAC,EAAE,QAAQ,SAAS,cAAc;AAC9D,UAAA,OAAO,OAAO,sBAAsB;AACnC,WAAA;AAAA,MACL,GAAG,YAAW,6BAAM,SAAQ,KAAK,OAAO;AAAA,MACxC,GAAG,YAAW,6BAAM,QAAO,KAAK,OAAO;AAAA,IACzC;AAAA,EACF;AAKa,QAAA,qBAAqB,CAAC,OAAO,WAAgC;AAClE,UAAA,SAAS,aAAa,KAAK;AAEjC,QAAI,CAAC,QAAQ;AACJ,aAAA;AAAA,IAAA;AAIT,UAAM,EAAE,KAAK,SAAS,OAAO,sBAAsB;AAC7C,UAAA,IAAI,MAAM,UAAU;AACpB,UAAA,IAAI,MAAM,UAAU;AAG1B,WAAOC,qBAAAA,aAAaC,qBAAAA,QAAQ,MAAM,GAAG,EAAE,GAAG,GAAG;AAAA,EAC/C;AAKO,QAAM,iBAAiB,CAC5B,QACA,OACA,WAEAC,qBAAAA,cAAc,QAAQ;AAAA,IACpB,EAAE,GAAG,GAAG,GAAG,EAAE;AAAA,IACb,EAAE,GAAG,OAAO,GAAG,OAAO;AAAA,EACxB,CAAC;AAKU,QAAA,kBAAkB,CAAC,QAAgB,OAAe,WAAW;AACxE,UAAM,CAAC,KAAK,GAAG,IAAI,eAAe,QAAQ,OAAO,MAAM;AAKvD,QAAI,IAAI,IAAI,SAAS,IAAI,IAAI,QAAQ;AAC5B,aAAA;AAAA,IAAA;AAGT,QAAI,IAAI,IAAI,KAAK,IAAI,IAAI,GAAG;AACnB,aAAA;AAAA,IAAA;AAGF,WAAA;AAAA,EACT;AAKA,QAAM,yBAAyB,CAACT,QAAO,gBACrCA,OAAM,kBAAkBA,OAAM,IAAI,eAAeA,OAAM;AAKzD,QAAM,yBAAyB,CAACA,QAAO,gBACrCA,OAAM,kBAAkBA,OAAM,IAAI,eAAeA,OAAM;AAK5C,QAAA,8BAA8B,CAACA,QAAO,gBAAwB;AACzE,UAAM,IAAI,uBAAuBA,QAAO,WAAW,KAAK,cAAc;AACtE,UAAM,IAAI,uBAAuBA,QAAO,WAAW,KAAK,cAAc;AACtE,WAAO,KAAK;AAAA,EACd;ACpOO,WAAS,oBAAoB,gBAAyB;AACrD,UAAA,QAAQ,iBAAiB,KAAK;AACpC;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,EACA,QAAQ,CAAC,SAAU,SAAS,KAAK,MAAM,IAAI,IAAI,KAAM;AAAA,EACzD;ACRgB,WAAA,oBACd,SACA,MACA;AACM,UAAA,IAAI,KAAK,QAAQ,OAAO;AAC9B,QAAI,WAAW;AAET,UAAA,OAAO,KAAK,IAAI,CAAC;AACnB,QAAA,IAAI,KAAK,KAAK,GAAG;AACR,iBAAA;AAAA,IAAA;AAGP,UAAA,MAAM,KAAK,CAAC;AAClB,QAAI,IAAI,GAAG;AACE,iBAAA;AAAA,IAAA;AAGP,UAAA,OAAO,KAAK,IAAI,CAAC;AACvB,QAAI,IAAI,KAAK,SAAS,KAAK,KAAK,GAAG;AACtB,iBAAA;AAAA,IAAA;AAGN,WAAA;AAAA,EACT;AC1BA,QAAM,UAAU,KAAK,KAAK;AAC1B,QAAM,sBAAsB;AAAA,IAC1B;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA,KAAK;AAAA;AAAA,IACL,KAAK;AAAA;AAAA,IACL,KAAK;AAAA;AAAA,IACL,KAAK,KAAK;AAAA;AAAA,IACV,KAAK,KAAK;AAAA;AAAA,IACV,KAAK,KAAK;AAAA;AAAA,IACV,KAAK,KAAK;AAAA;AAAA,IACV,KAAK,KAAK;AAAA;AAAA,IACV;AAAA;AAAA,EACF;AAKgB,WAAA,YAAe,OAAY,UAAkB;AACvD,QAAA,MAAM,SAAS,UAAU;AAC3B,YAAM,UAAe,CAAC;AACtB,YAAM,UAAU,KAAK,MAAM,MAAM,SAAS,QAAQ;AAElD,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACjC,YAAA,IAAI,YAAY,GAAG;AACb,kBAAA,KAAK,MAAM,CAAC,CAAC;AAAA,QAAA;AAAA,MACvB;AAEM,cAAA;AAAA,IAAA;AAGH,WAAA;AAAA,EACT;AAKgB,WAAA,YAAY,MAAc,WAAmB;AAC3D,UAAM,YAAY,KAAK,IAAI,MAAM,CAAC;AAC3B,WAAA,KAAK,MAAM,YAAY,SAAS;AAAA,EACzC;AAKgB,WAAA,iBAAiB,QAAQ,UAAU;AACjD,UAAM,cAAc,OAAO,CAAC,IAAI,OAAO,CAAC;AACxC,QAAI,WAA0B;AAC9B,eAAW,KAAK,qBAAqB;AAC/B,UAAA,cAAc,IAAI,UAAU;AACnB,mBAAA;AACX;AAAA,MAAA;AAAA,IACF;AAGF,QAAI,aAAa,MAAM;AACrB,YAAM,cAAc,cAAc;AAClC,YAAM,UAAU,KAAK,KAAK,cAAc,QAAQ;AAChD,iBAAW,UAAU;AAAA,IAAA;AAGvB,UAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;AACjB,WAAA,MAAM,MAAM,SAAS,CAAC,IAAI,YAAY,OAAO,CAAC,GAAG;AACtD,YAAM,KAAK,MAAM,MAAM,SAAS,CAAC,IAAI,QAAQ;AAAA,IAAA;AAGxC,WAAA;AAAA,EACT;AAKO,WAAS,SACd,OACA,YACA,MACA,WAAW,KACX,UACA;AACI,QAAA;AAEJ,QAAI,YAAY;AACL,eAAA;AAAA,IAAA,OACJ;AACL,UAAI,MAAM,OAAO;AACf,YAAI,SAAS,YAAY;AACvB,mBAAS,iBAAiB,MAAM,OAAO,GAAG,QAAQ;AAAA,mBACzC,UAAU;AACV,mBAAA,MAAM,MAAM,QAAQ;AAAA,QAAA,OACxB;AACL,cAAI,SAAS,QAAQ;AAGnB,qBAAS,MAAM,MAAM;AACZ,qBAAA,YAAY,QAAQ,QAAQ;AAAA,UAAA,OAChC;AACI,qBAAA,MAAM,MAAM,QAAQ;AAAA,UAAA;AAAA,QAC/B;AAAA,MACF,OACK;AACL,qBAAa,MAAM,OAAO;AACjB,iBAAA,YAAY,YAAY,QAAQ;AAAA,MAAA;AAAA,IAC3C;AAGK,WAAA;AAAA,EACT;AClHO,QAAM,aAAa,CAAC,YAAqB,UAAU,KAAK,KAAM,MAAM;AAE9D,QAAA,gBAAgB,CAACA,QAAe,WAAmB,MAC9D,WAAWA,OAAM,QAAQ,QAAQ,CAAC;ACQvB,QAAA,gBAAgB,CAAC,MAAc,KAAU,SAAc;AAC9D,QAAA,OAAO,QAAQ,YAAY;AAC7B,aAAO,IAAI,IAAI;AAAA,IAAA,WACN,SAAS,aAAa;AAC/B,aAAO,WAAW,GAAG;AAAA,IACZ,WAAA,QAAQ,UAAa,QAAQ,MAAM;AACrC,aAAA;AAAA,IAAA;AAGT,WAAO,CAAC;AAAA,EACV;AAEa,QAAA,yBAAyB,CACpC,OACA,UACI;AAAA,IACJ,WAAW,cAAc,aAAa,MAAM,WAAW,IAAI;AAAA,IAC3D,OAAO,cAAc,SAAS,MAAM,OAAO,IAAI;AAAA,EACjD;AC3BgB,WAAA,SAAkB,SAAc,WAA+B;AAC7E,UAAM,SAAgB,CAAC;AAEjB,UAAA,OAAO,CAAC,KAAU,UAAkB;AACxC,iBAAW,KAAK,KAAK;AACb,cAAA,MAAM,UAAU,KAAK;AAC3B,YAAI,QAAQ,QAAW;AACrB,gBAAM,IAAI,MAAM,iCAAiC,KAAK,EAAE;AAAA,QAAA;AAGpD,cAAA,MAAM,IAAI,CAAC;AACb,YAAA,MAAM,QAAQ,GAAG,GAAG;AACjB,eAAA,KAAK,QAAQ,CAAC;AAAA,QACV,WAAA,CAAC,OAAO,SAAS,GAAG,GAAG;AAChC,iBAAO,KAAK,GAAG;AAAA,QAAA;AAAA,MACjB;AAAA,IAEJ;AAEA,SAAK,MAAM,CAAC;AAEL,WAAA;AAAA,EACT;ACtBA,QAAM,QAA2C,CAAC;AAErC,QAAA,sBAAsB,CACjC,MACA,YACA,aACmB;AACnB,UAAM,MAAM,GAAG,IAAI,IAAI,UAAU,IAAI,QAAQ;AAGzC,QAAA,MAAM,GAAG,GAAG;AACd,aAAO,MAAM,GAAG;AAAA,IAAA;AAIlB,QAAI,OAAO,WAAW,eAAe,OAAO,aAAa,aAAa;AAC9D,YAAA,SAAS,SAAS,OAAO,aAAa,WAAW,WAAW,SAAS,SAAS,GAAG,EAAE;AACzF,YAAMU,cAAa;AAAA,QACjB;AAAA;AAAA,QAEA,OAAO,KAAK,SAAS;AAAA,MACvB;AAEA,YAAM,GAAG,IAAIA;AAENA,aAAAA;AAAAA,IAAA;AAIH,UAAA,UAAU,SAAS,cAAc,KAAK;AAG5C,YAAQ,MAAM,aAAa;AAC3B,YAAQ,MAAM,WAAW,OAAO,aAAa,WAAW,WAAW,GAAG,QAAQ;AAC9E,YAAQ,MAAM,WAAW;AACzB,YAAQ,MAAM,OAAO;AACrB,YAAQ,MAAM,aAAa;AAC3B,YAAQ,MAAM,SAAS;AACvB,YAAQ,MAAM,aAAa;AAC3B,YAAQ,MAAM,aAAa;AAC3B,YAAQ,MAAM,QAAQ;AACtB,YAAQ,MAAM,YAAY;AAG1B,YAAQ,cAAc;AAGb,aAAA,KAAK,YAAY,OAAO;AAGjC,UAAM,aAAa;AAAA,MACjB,QAAQ,QAAQ;AAAA,MAChB,OAAO,QAAQ;AAAA,IACjB;AAGS,aAAA,KAAK,YAAY,OAAO;AAGjC,UAAM,GAAG,IAAI;AAEN,WAAA;AAAA,EACT;AC/CO,WAAS,SAAS;AAAA,IACvB;AAAA,IACA,IAAI;AAAA,IACJ;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,EACf,GAAyD;AACvD,WAAO,QAAQ,oBAAoB,KAAK,YAAY,QAAQ;AAC5D,UAAM,QAAQ,IAAI,SAAS,EAAE,MAAM,KAAK;AAExC,QAAI,MAAM,SAAS,KAAK,KAAK,QAAQ,OAAO;AAC1C,UAAI,OAAO,CAAC;AACZ,UAAI,WAAW;AACf,UAAI,YAAY;AAChB,UAAI,UAAU;AACd,UAAI,YAAY;AAChB,UAAI,WAAW;AACf,UAAI,YAAY;AAEhB,iBAAW,QAAQ,OAAO;AACxB,mBAAW,YAAY,KAAK,OAAO,GAAG,OAAO,IAAI,IAAI;AACrD,oBAAY,oBAAoB,UAAU,YAAY,QAAQ,EAAE;AAEhE,YAAI,aAAa,SAAS,WAAW,IAAI,WAAW,IAAI;AAC5C,oBAAA;AACE,sBAAA;AAAA,QAAA,OACP;AACL,eAAK,KAAK,OAAO;AACN,qBAAA,KAAK,IAAI,UAAU,SAAS;AAC7B,oBAAA;AACV,sBAAY,oBAAoB,SAAS,YAAY,QAAQ,EAAE;AAAA,QAAA;AAAA,MACjE;AAEF,WAAK,KAAK,OAAO;AACL,kBAAA,KAAK,SAAS,KAAK;AAE/B,UAAI,eAAe,UAAU;AAC3B,YAAI,UAAU,aAAa,UAAU,WAAW,IAAI,WAAW,IAAI;AAC1D,iBAAA;AAAA,QAAA;AAGT,YAAI,SAAS,YAAY,SAAS,WAAW,IAAI,WAAW,IAAI;AACvD,iBAAA;AAAA,QAAA;AAAA,MACT;AAGF,UAAI,CAAC,QAAQ,KAAK,SAAS,GAAG;AAC5B,eAAO,KAAK,CAAC;AAAA,MAAA;AAGf,aAAO,KAAK,IAAI,CAAC,GAAG,MAClBC,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,kBAAiB;AAAA,UACjB,OAAO,EAAE,eAAe,KAAK;AAAA,UAC7B,IACE,IAAI,IACA,KAAK,SACL,SACE,KAAK,SAAS,IAAI,IAClB,CAAC,YAAY,IAAI,KAAK;AAAA,UAE9B;AAAA,UAEC,UAAA;AAAA,QAAA;AAAA,QAZI;AAAA,MAAA,CAcR;AAAA,IAAA;AAGH,QAAI,eAAe,UAAU;AAC3B,UAAI,UAAU,KAAK,SAAS,YAAY,QAAQ;AACvC,eAAA;AAAA,MAAA;AAGT,UAAI,SAAS,KAAK,QAAQ,YAAY,OAAO;AACpC,eAAA;AAAA,MAAA;AAAA,IACT;AAKA,WAAAA,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,kBAAiB;AAAA,QACjB,OAAO,EAAE,eAAe,KAAK;AAAA,QAC7B,IAAI,KAAK,SAAS,IAAI;AAAA,QACtB;AAAA,QAEC,UAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAEJ;AC9Fa,QAAA,iBAAiB,CAAC;AAAA,IAC7B,cAAc;AAAA,IACd,WAAW;AAAA,IACX,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EACF,MAAyD;AACjD,UAAA,YAAYC,aAAgB,KAAK;AACjC,UAAA,QAAQA,aAAmB,IAAI;AAC/B,UAAA,QAAQA,aAAe,CAAC;AAC9B,UAAM,SAASA,MAAAA,OAAO;AAAA,MACpB,GAAG;AAAA,MACH,GAAG;AAAA,MACH,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA,CACL;AAEK,UAAA,cAAcC,kBAAY,CAAC,UAAsB;AAC9C,aAAA,QAAQ,IAAI,MAAM;AAClB,aAAA,QAAQ,IAAI,MAAM;AAAA,IAC3B,GAAG,EAAE;AAEL,UAAM,kBAAkBA,MAAA;AAAA,MACtB,CAAC,UAAoC;AAC7B,cAAA,UAAU,aAAa,MAAM,OAAO;AAC1C,cAAM,EAAE,IAAI,GAAG,IAAI,EAAA,IAAM,OAAO;AAE5B,YAAA,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,aAAa;AACrD,gBAAM,UAAU;AAChB,wBAAc,KAAK;AAAA,QAAA,OACd;AACL,iBAAO,QAAQ,KAAK;AACpB,iBAAO,QAAQ,KAAK;AACpB,gBAAM,UAAU,WAAW,MAAM,gBAAgB,KAAK,GAAG,QAAQ;AAAA,QAAA;AAAA,MAErE;AAAA,MACA,CAAC,UAAU,eAAe,WAAW;AAAA,IACvC;AAEM,UAAA,UAAUA,MAAAA,YAAY,MAAM;AAChC,mBAAa,MAAM,OAAO;AACjB,eAAA,oBAAoB,aAAa,aAAa,KAAK;AAAA,IAAA,GAC3D,CAAC,WAAW,CAAC;AAEhB,UAAM,cAAcA,MAAA;AAAA,MAClB,CAAC,UAAoC;AACnC,YAAI,CAAC,UAAU;AACb,oBAAU,UAAU;AACZ,kBAAA;AAEJ,cAAA,MAAM,YAAY,GAAG;AAChB,mBAAA,QAAQ,KAAK,MAAM,YAAY;AAC/B,mBAAA,QAAQ,KAAK,MAAM,YAAY;AAC7B,qBAAA,iBAAiB,aAAa,aAAa,KAAK;AACzD,kBAAM,UAAU,WAAW,MAAM,gBAAgB,KAAK,GAAG,OAAO;AAAA,UAAA;AAAA,QAClE;AAAA,MAEJ;AAAA,MACA,CAAC,SAAS,iBAAiB,UAAU,aAAa,OAAO;AAAA,IAC3D;AAEA,UAAM,QAAQA,MAAA;AAAA,MACZ,CAAC,UAAoC;AAC7B,cAAA,UAAU,aAAa,MAAM,OAAO;AAC1C,cAAM,UAAU;AAChB,qBAAa,KAAK;AAAA,MACpB;AAAA,MACA,CAAC,YAAY;AAAA,IACf;AAEA,UAAM,aAAaA,MAAA;AAAA,MACjB,CAAC,UAAoC;AACnC,kBAAU,UAAU;AACZ,gBAAA;AAEJ,YAAA,MAAM,YAAY,GAAG;AACvB,gBAAM,UAAU,WAAW,MAAM,MAAM,KAAK,GAAG,OAAO;AAAA,QAAA;AAAA,MAE1D;AAAA,MACA,CAAC,SAAS,OAAO,OAAO;AAAA,IAC1B;AAEO,WAAA;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;ACtGa,QAAA,oBAAoB,MAG5B;AACG,UAAA,MAAMD,aAAU,IAAI;AAC1B,UAAM,CAAC,MAAM,OAAO,IAAIE,eAAe;AAAA,MACrC,OAAO;AAAA,MACP,QAAQ;AAAA,IAAA,CACT;AAEDC,UAAAA,UAAU,MAAM;AACd,YAAM,UAAU,IAAI;AACpB,UAAI,CAAC,QAAS;AAEd,YAAM,iBAAiB,IAAI,eAAe,CAAC,YAAY;AACjD,YAAA,QAAQ,WAAW,EAAG;AACpB,cAAAC,SAAQ,QAAQ,CAAC;AACf,gBAAA;AAAA,UACN,OAAOA,OAAM,YAAY;AAAA,UACzB,QAAQA,OAAM,YAAY;AAAA,QAAA,CAC3B;AAAA,MAAA,CACF;AAED,qBAAe,QAAQ,OAAO;AAE9B,aAAO,MAAM;AACX,uBAAe,UAAU,OAAO;AAAA,MAClC;AAAA,IACF,GAAG,EAAE;AAEE,WAAA,CAAC,KAAK,IAAI;AAAA,EACnB;AC/Ba,QAAA,oBAAoB,CAC/B,cACA,QAAoB,OACd;AACN,UAAM,gBAAgB,OAAO;AAAA,MAC3B,OAAO,QAAQ,KAAK,EAAE,OAAO,CAAC,CAAC,GAAGhB,MAAK,MAAMA,WAAU,MAAS;AAAA,IAClE;AACA,WAAO,EAAE,GAAG,cAAc,GAAG,cAAc;AAAA,EAC7C;ACCa,QAAA,iBAAmD,CAAC,UAAU;AACnE,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,IACE,kBAAkB,4BAA4B,KAAK;AACvD,UAAM,KAAKiB,UAAAA,MAAM;AACjB,UAAM,CAAC,QAAQ,MAAM,IAAI,MAAM,MAAM;AAErC,2CACGC,gBACC,EAAA,UAAA;AAAA,MAAAP,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA,IAAI,gBAAgB,aAAa,IAAI;AAAA,UAErC,IAAI,gBAAgB,aAAa,OAAU;AAAA,UAC3C,IAAI,gBAAgB,aAAa,SAAS;AAAA,UAC1C,IAAI,gBAAgB,aAAa,SAAS;AAAA,UAC1C;AAAA,UACA,QAAQ,iBAAiB,sBAAsB,EAAE,MAAM;AAAA,QAAA;AAAA,MACzD;AAAA,MACC,kBACCA,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,IAAI,iBAAiB,EAAE;AAAA,QAAA;AAAA,MAAA;AAAA,IACzB,GAEJ;AAAA,EAEJ;AAEO,QAAM,6BAA6B;AAAA,IACxC,aAAa;AAAA,IACb,aAAa;AAAA,EACf;ACxCa,QAAA,qBAA2D,CACtE,UACG;AACH,UAAM,EAAE,MAAM,UAAU,aAAa,aAAa,aAAa,cAAc;AAAA,MAC3E,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAEM,UAAAC,QAAOC,MAAAA,QAAQ,MAAM;AACzB,YAAM,aAAa,gBAAgB;AACnC,YAAM,WAAW,QAAQ;AACnB,YAAAC,SACJ,aAAa,UACT,WAAW,KACX,aAAa,WACX,WAAW,OACX;AACR,YAAMlB,OAAMkB,SAAQ;AAEb,aAAA;AAAA,QACL,IAAI,aAAalB,OAAM;AAAA,QACvB,IAAI,aAAakB,SAAQ;AAAA,QACzB,IAAI,aAAa,IAAIA;AAAA,QACrB,IAAI,aAAa,IAAIlB;AAAA,MACvB;AAAA,IACC,GAAA,CAAC,aAAa,UAAU,IAAI,CAAC;AAG9B,WAAAO,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACP,GAAGS;AAAA,MAAA;AAAA,IACN;AAAA,EAEJ;AAEO,QAAM,sCAAsC;AAAA,IACjD,aAAa;AAAA,IACb,aAAa;AAAA,IACb,MAAM;AAAA,EACR;ACvBa,QAAA,sBAA6D,CACxE,UACG;AACG,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAAG;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,IACE,kBAAkB,sCAAsC,KAAK;AAEjE,aAAS,WAAW;AAClB,WAAK,UAAU,YAAY,UAAU,cAAc,SAAS,UAAU;AAC7D,eAAA;AAAA,MAAA;AAGT,UAAI,UAAU,UAAU;AACf,eAAA,SAAS,UAAU,QAAQ;AAAA,MAAA;AAGpC,UAAI,UAAU,WAAW;AAChB,eAAA,SAAS,UAAU,UAAU;AAAA,MAAA;AAG/B,aAAA;AAAA,IAAA;AAIT,aAAS,qBAAqB;AAC5B,UAAI,CAACA,OAAM;AACF,eAAA,CAAC,GAAG,CAAC;AAAA,MAAA;AAGd,YAAM,YAAY,EAAE,GAAG,qCAAqC,GAAGA,MAAK,MAAM;AACpE,YAAA,OAAO,UAAU,QAAQ;AACzBC,YAAAA,YAAW,UAAU,YAAY;AAEvC,UAAIA,cAAa,SAAS;AACjB,eAAA,CAAC,OAAO,IAAI,CAAC;AAAA,MAAA,WACXA,cAAa,OAAO;AACtB,eAAA,CAAC,GAAG,IAAI;AAAA,MAAA,OACV;AACL,eAAO,CAAC,OAAO,MAAM,OAAO,GAAG;AAAA,MAAA;AAAA,IACjC;AAGF,aAAS,YAAY;AACb,YAAA,kBACJ,OAAO,YAAY,WACf,EAAE,UAAU,SAAS,WAAW,QAAA,IAChC;AAEN,YAAM,UAAU,mBAAmB;AACnC,YAAM,UACJ,aAAa,UACT,QAAQ,CAAC,IAAI,gBAAgB,WAC7B,aAAa,QACX,QAAQ,CAAC,IAAI,gBAAgB,WAC7B;AAER,YAAMC,SAAQ,SAAS;AACvB,UAAI,UAAU;AAEZA,iBAAAA,WAAU,WACN,IACAA,WAAU,UACR,CAAC,gBAAgB,YACjB,gBAAgB;AAExB,YAAM,OAAO,gBAAgB;AAEtB,aAAA;AAAA,QACL,CAAC,OAAO,MAAM,GAAG,GAAG;AAAA,QACpB,CAAC,OAAO,MAAM,GAAG,GAAG;AAAA,MACtB;AAAA,IAAA;AAGF,aAAS,kBAAkB;AACzB,UAAI,YAAY;AAChB,UAAI,gBAAgB;AACpB,UAAI,oBAAoB;AAExB,UAAI,UAAU,GAAG;AACf,oBAAY,UAAU,KAAK;AACX,wBAAA;AAAA,MAAA,OACX;AACL,cAAMA,SAAQ,SAAS;AACvB,YAAI,gBAAgB,cAAc;AAChC,0BACEA,WAAU,WAAW,WAAWA,WAAU,UAAU,QAAQ;AAC9D,cAAI,aAAa,SAAS;AACJ,gCAAA;AAAA,UAAA,WACX,aAAa,OAAO;AACT,gCAAA;AAAA,UAAA;AAAA,QACtB,OACK;AACL,8BACEA,WAAU,WACN,WACAA,WAAU,UACR,aACA;AACR,cAAI,aAAa,SAAS;AACR,4BAAA;AAAA,UAAA,WACP,aAAa,OAAO;AACb,4BAAA;AAAA,UAAA,OACX;AACW,4BAAA;AAAA,UAAA;AAAA,QAClB;AAAA,MACF;AAGK,aAAA;AAAA,QACL;AAAA,QACA,YAAY,cAAc;AAAA,QAC1B;AAAA,MACF;AAAA,IAAA;AAGF,UAAM,EAAE,GAAG,EAAE,IAAI,UAAU;AAC3B,UAAM,eAAe,gBAAgB;AACrC,UAAM,aACJ,OAAO,kBAAkB,aAAa,cAAc,QAAQ,IAAI;AAGhE,WAAAC,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,aAAa,CAAC,KAAK,CAAC;AAAA,QAC/B;AAAA,QACA;AAAA,QAEA,UAAA;AAAA,UAAAf,2BAAAA,IAAC,WAAO,UAAW,WAAA,CAAA;AAAA,yCAClB,QAAM,EAAA,GAAG,cAAc,MAAY,WACjC,UACH,KAAA,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAEJ;AAEO,QAAM,uCACX;AAAA,IACE,MAAM;AAAA,IACN,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,SAAS;AAAA,IACT,OAAO;AAAA,EACT;AC7IW,QAAA,uBAA+D,CAC1E,UACG;AACG,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAAgB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAAJ;AAAA,MACA;AAAA,IAAA,IACE,kBAAkB,uCAAuC,KAAK;AAElE,UAAM,aAAaF,MAAA;AAAA,MACjB,OAAO;AAAA,QACL,GAAG;AAAA,QACH,IAAIM,UAAA,gBAAAA,OAAO,UAAS,CAAA;AAAA,MAAC;AAAA,MAEvB,CAACA,UAAA,gBAAAA,OAAO,KAAK;AAAA,IACf;AAKM,UAAA,mBAAmBd,MAAAA,YAAY,MAAM;AACzC,UAAI,MAAM,WAAW;AACf,YAAA,SAAS,MAAM,UAAA,IAAc;AAC7B,YAAA,MAAM,SAAS;AACR,mBAAA,KAAK,MAAM,MAAM;AAAA,QAAA;AAG5B,eAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI;AAAA,MAAA,OACrB;AACL,eAAO,CAAC,MAAM,CAAC,MAAM,CAAC;AAAA,MAAA;AAAA,IACxB,GACC,CAAC,KAAK,CAAC;AAKV,UAAM,cAAcA,MAAA;AAAA,MAClB,CAAC,eAAuB;AACtB,YAAI,gBAAgB,cAAc;AAChC,iBAAO,EAAE,GAAG,YAAY,GAAG,EAAE;AAAA,QAAA,OACxB;AACL,iBAAO,EAAE,GAAG,GAAG,GAAG,WAAW;AAAA,QAAA;AAAA,MAEjC;AAAA,MACA,CAAC,WAAW;AAAA,IACd;AAKM,UAAAe,gBAAef,MAAAA,YAAY,MAAM;AAC9B,aAAA,gBAAgB,aAAa,SAAS;AAAA,IAC5C,GAAA,CAAC,QAAQ,aAAa,KAAK,CAAC;AAKzB,UAAA,gBAAgBQ,MAAAA,QAAQ,MAAW;AACvC,UAAI,WAAW,QAAQ;AACrB,eAAO,WAAW;AAAA,MAAA,WACT,MAAM,YAAY;AAC3B,eAAO,MAAM,WAAW,MAAM,OAAO,CAAC,CAAC,CAAC;AAAA,MAAA,OACnC;AACE,eAAA,CAAC,MAAM,YAAY,CAAC;AAAA,MAAA;AAAA,IAE5B,GAAA,CAAC,WAAW,QAAQ,KAAK,CAAC;AAMvB,UAAA,QAAQA,MAAAA,QAAQ,MAAuB;AAC3C,YAAM,YAAYO,cAAa;AACzB,YAAA,WAAW,YAAY,UAAU,SAAS;AAChD,YAAMC,SAAQ,SAAS,OAAO,YAAY,KAAK,MAAM,UAAU,QAAQ;AACvE,YAAM,gBAAgB,iBAAiB;AACvC,YAAM,SAAS;AACf,YAAM,WAAW,YAAY;AAEtBA,aAAAA,OAAM,IAAI,CAAC,SAAS;;AACnB,cAAA,WAAW,OAAO,IAAI;AACtB,cAAA,aAAa,cAAc,IAAI;AAC/B,cAAA,WAAW,YAAY,UAAU;AACjC,cAAA,OAAO,UAAU,UAAU,EAAE;AACnC,cAAM,OAAOF,SACT;AAAA,UACA;AAAA,UACA,WAAW;AAAA,WACX,gBAAW,aAAX,mBAAqB;AAAA,QAAS,IAE9B,CAAC;AAEE,eAAA;AAAA,UACL,GAAG;AAAA,UACH,GAAG;AAAA,UACH;AAAA,UACA;AAAA,UACA,MACE,eAAe,WACX,WACA,aAAa,WACX,UACA;AAAA,QACV;AAAA,MAAA,CACD;AAAA,IAAA,GACA;AAAA,MACD,KAAK;AAAA,MACL;AAAA,MACAC;AAAA,MACA;AAAA,MACA;AAAA,MACAD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAOK,UAAA,QAAQN,MAAAA,QAAQ,MAAc;AAClC,UAAI,CAACM,QAAO;AACH,eAAA;AAAA,MAAA;AAGT,YAAM,YAAYC,cAAa;AAC/B,YAAM,iBAAiB7B,QAAAA,IAAI,OAAO,CAAC,SAAS,KAAK,KAAK;AACtD,UAAI+B,SAAQ;AAEZ,UAAI,WAAW,UAAU;AACnB,YAAA,WAAW,aAAa,MAAM;AAChC,cAAI,YAAY;AAChB,gBAAM,eAAe,KAAK,MAAM,YAAY,MAAM,MAAM;AAEjD,iBAAA,YAAY,gBAAgBA,SAAQ,KAAK;AAC9CA,sBAAS;AACT,wBAAY,KAAK,IAAIA,UAAS,KAAK,KAAK,IAAI,IAAI;AAAA,UAAA;AAAA,QAClD,OACK;AACLA,mBAAQ,WAAW;AAAA,QAAA;AAAA,MACrB;AAGKA,aAAAA;AAAAA,OACN,CAACF,eAAcD,QAAO,YAAY,KAAK,CAAC;AAE3C,0CACGT,gBACE,EAAA,UAAA,MAAM,IAAI,CAAC,MAAM,MAChBQ,gCAAC,KAAU,EAAA,WAAW,aAAa,KAAK,CAAC,KAAK,KAAK,CAAC,KACjD,UAAA;AAAA,MACCH,SAAAZ,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC,SAASI;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MACF;AAAA,MAEDI,UACChB,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC,SAASQ;AAAA,UACT,MAAM,KAAK;AAAA,UACX,UAAU,KAAK;AAAA,UACf,MAAM,KAAK;AAAA,UACX;AAAA,UACA;AAAA,UACA,MAAAJ;AAAA,QAAA;AAAA,MAAA;AAAA,IACF,KAlBI,CAoBR,CACD,GACH;AAAA,EAEJ;AAEO,QAAM,wCAAwC;AAAA,IACnD,MACEZ,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAG;AAAA,QACJ,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,aAAY;AAAA,QACZ,UAAS;AAAA,MAAA;AAAA,IACX;AAAA,IAEF,OACEA,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MACEA,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACE,GAAG;AAAA,YACJ,aAAY;AAAA,YACZ,UAAS;AAAA,YACT,QAAQ;AAAA,YACR,OAAO;AAAA,UAAA;AAAA,QACT;AAAA,QAEF,MAAK;AAAA,QACL,UAAS;AAAA,QACT,OAAO;AAAA,QACP,aAAY;AAAA,QACZ,MAAK;AAAA,QACL,UAAS;AAAA,MAAA;AAAA,IACX;AAAA,IAEF,UAAU;AAAA,EACZ;ACvNa,QAAA,aAA2C,CAAC,UAAU;AAC3D,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa;AAAA,MACb;AAAA,IAAA,IACE,kBAAkB,2BAA2B,KAAK;AACtD,UAAM,kBAAkBU,MAAA;AAAA,MACtB,MACE;AAAA,QACE;AAAA,QACA,yCAAY;AAAA,MACd;AAAA,MACF,CAAC,yCAAY,KAAK;AAAA,IACpB;AAEA,UAAM,eAAeU,MAAAA,UAAuB;AAC5C,UAAM,CAAC,YAAY,aAAa,IAAIjB,eAA0B;AAAA,MAC5D;AAAA,MACA;AAAA,IAAA,CACD;AAEK,UAAA,mBAAmBD,MAAAA,YAAY,MAAM;AACzC,YAAM,eAAe,aAAa;AAE9BmB,UAAAA;AACAC,UAAAA;AACJ,UAAI,cAAc;AACV,cAAA,OAAO,aAAa,QAAS,sBAAsB;AACzDA,iBAAQ,KAAK,MAAM,KAAK,KAAK;AAC7BD,kBAAS,KAAK,MAAM,KAAK,MAAM;AAAA,MAAA;AAGjC,UAAI,gBAAgB,YAAY;AAC1B,YAAA,WAAW,UAAUC,QAAO;AAC9B,wBAAc,EAAE,GAAG,YAAY,OAAOA,QAAO;AAC1B,6BAAA,EAAE,OAAAA,QAAO;AAAA,QAAA;AAAA,MAC9B,OACK;AACD,YAAA,WAAW,WAAWD,SAAQ;AAChC,wBAAc,EAAE,GAAG,YAAY,QAAQA,SAAQ;AAC5B,6BAAA,EAAE,QAAAA,SAAQ;AAAA,QAAA;AAAA,MAC/B;AAAA,IACF,GACC,CAAC,cAAc,YAAY,oBAAoB,aAAa,QAAQ,CAAC;AAExEjB,UAAAA,UAAU,MAAM;AACG,uBAAA;AAAA,OAChB,CAAC,kBAAkB,QAAQ,OAAO,KAAK,CAAC;AAE3C,aAAS,cAAc;AACrB,UAAImB,cAAa;AACjB,UAAIC,cAAa;AAEb,UAAA,aAAa,SAAS,gBAAgB,cAAc;AACtDD,sBAAa;AAAA,MACJ,WAAA,aAAa,YAAY,gBAAgB,cAAc;AAChEA,sBAAa,SAAS;AAAA,MACb,WAAA,aAAa,SAAS,gBAAgB,YAAY;AAC3DC,sBAAa;AAAA,MACJ,WAAA,aAAa,YAAY,gBAAgB,YAAY;AAC9DA,sBAAa,QAAQ;AAAA,MAAA;AAGvB,aAAO,EAAE,YAAAA,aAAY,YAAAD,YAAW;AAAA,IAAA;AAGlC,UAAM,EAAE,YAAY,WAAW,IAAI,YAAY;AAG7C,WAAAR,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,aAAa,UAAU,KAAK,UAAU;AAAA,QACjD,KAAK;AAAA,QACL;AAAA,QAEC,UAAA;AAAA,UACC,YAAAf,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YAAA;AAAA,UACF;AAAA,WAEA,gBAAgB,QAAQ,gBAAgB,UACxCR,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,MAAM;AAAA,YAAA;AAAA,UAAA;AAAA,QACR;AAAA,MAAA;AAAA,IAEJ;AAAA,EAEJ;AAEO,QAAM,4BAA4B;AAAA,IACvC,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,yCAAW,gBAAe,EAAA;AAAA,IAC1B,oBAAoB,MAAM;AAAA,EAC5B;ACrIa,QAAA,uBAA8D,CACzE,UAEAR,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAG,kBAAkB,wCAAwC,KAAK;AAAA,IAAA;AAAA,EACrE;AAEK,QAAM,yCAAyC;AAAA,IACpD,GAAG;AAAA,IACH,UAAU;AAAA,IACV,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAEa,QAAA,sBAA4D,CACvE,UAEAA,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAG,kBAAkB,uCAAuC,KAAK;AAAA,IAAA;AAAA,EACpE;AAEK,QAAM,wCAAwC;AAAA,IACnD,GAAG;AAAA,IACH,UAAU;AAAA,EACZ;AAEa,QAAA,wBAAgE,CAC3E,UACG;;AACH,UAAM,mBAAmB;AAAA,MACvB;AAAA,MACA;AAAA,IACF;AAGE,WAAAA,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAG;AAAA,QACJ,OACE,qDAAkB,QAChBA,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACE,GAAG;AAAA,cACF;AAAA,eACA,oCAAO,SAAP,mBAAa;AAAA,YAAA;AAAA,UACf;AAAA,QAAA,IAEA;AAAA,QAEN,QACE,qDAAkB,SAChBA,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACE,GAAG;AAAA,cACF;AAAA,eACA,oCAAO,UAAP,mBAAc;AAAA,YAAA;AAAA,UAChB;AAAA,QAAA,IAEA;AAAA,MAAA;AAAA,IAER;AAAA,EAEJ;AACO,QAAM,0CAA0C;AAAA,IACrD,GAAG;AAAA,IACH,UAAU;AAAA,IACV,MAAMA,2BAAAA,IAAC,qBAAqB,EAAA,GAAG,sCAAuC,CAAA;AAAA,IACtE,OAAOA,2BAAA,IAAC,sBAAsB,EAAA,GAAG,uCAAwC,CAAA;AAAA,EAC3E;AAEa,QAAA,cAA4C,CAAC,UAAU;;AAClE,UAAM,aAAaU,MAAA;AAAA,MACjB,MAAM,kBAAkB,6BAA6B,KAAK;AAAA,MAC1D,CAAC,KAAK;AAAA,IACR;AAGE,WAAAV,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAG;AAAA,QACJ,YACE,WAAW,cACTA,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACE,GAAG;AAAA,cACF;AAAA,eACA,8CAAY,eAAZ,mBAAwB;AAAA,YAAA;AAAA,UAC1B;AAAA,QAAA;AAAA,MACF;AAAA,IAGN;AAAA,EAEJ;AACO,QAAM,8BAA8B;AAAA,IACzC,GAAG;AAAA,IACH,UAAU;AAAA,IACV,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,aAAa;AAAA,IACb,2CAAa,uBAAsB,CAAA,CAAA;AAAA,EACrC;ACjGa,QAAA,uBAA8D,CACzE,UAEAA,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAG,kBAAkB,wCAAwC,KAAK;AAAA,IAAA;AAAA,EACrE;AAEK,QAAM,yCAAyC;AAAA,IACpD,GAAG;AAAA,IACH,UAAU;AAAA,IACV,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAEa,QAAA,sBAA4D,CACvE,UAEAA,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAG,kBAAkB,uCAAuC,KAAK;AAAA,IAAA;AAAA,EACpE;AAEK,QAAM,wCAAwC;AAAA,IACnD,GAAG;AAAA,IACH,UAAU;AAAA,EACZ;AAEa,QAAA,wBAAgE,CAC3E,UACG;;AACH,UAAM,mBAAmB;AAAA,MACvB;AAAA,MACA;AAAA,IACF;AAGE,WAAAA,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAG;AAAA,QACJ,OACE,qDAAkB,QAChBA,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACE,GAAG;AAAA,cACF;AAAA,eACA,oCAAO,SAAP,mBAAa;AAAA,YAAA;AAAA,UACf;AAAA,QAAA,IAEA;AAAA,QAEN,QACE,qDAAkB,SAChBA,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACE,GAAG;AAAA,cACF;AAAA,eACA,oCAAO,UAAP,mBAAc;AAAA,YAAA;AAAA,UAChB;AAAA,QAAA,IAEA;AAAA,MAAA;AAAA,IAER;AAAA,EAEJ;AACO,QAAM,0CAA0C;AAAA,IACrD,GAAG;AAAA,IACH,UAAU;AAAA,IACV,MAAMA,2BAAAA,IAAC,qBAAqB,EAAA,GAAG,sCAAuC,CAAA;AAAA,IACtE,OAAOA,2BAAA,IAAC,sBAAsB,EAAA,GAAG,uCAAwC,CAAA;AAAA,EAC3E;AAEa,QAAA,cAA4C,CAAC,UAAU;;AAClE,UAAM,aAAaU,MAAA;AAAA,MACjB,MAAM,kBAAkB,6BAA6B,KAAK;AAAA,MAC1D,CAAC,KAAK;AAAA,IACR;AAGE,WAAAV,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAG;AAAA,QACJ,YACE,WAAW,cACTA,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACE,GAAG;AAAA,cACF;AAAA,eACA,8CAAY,eAAZ,mBAAwB;AAAA,YAAA;AAAA,UAC1B;AAAA,QAAA;AAAA,MACF;AAAA,IAGN;AAAA,EAEJ;AACO,QAAM,8BAA8B;AAAA,IACzC,GAAG;AAAA,IACH,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,MAAM;AAAA,IACN,UAAU;AAAA,IACV,2CAAa,uBAAsB,CAAA,CAAA;AAAA,EACrC;ACnHa,QAAA,gBAAgB,CAAC,SAC5B,CAAC,CAAC,KAAK,WAAW,MAAM,SAAS,CAAC,CAAC,KAAK,WAAW,MAAM;ACuB9C,QAAA,qBAA2D,CACtE,UACG;AACH,UAAM,EAAE,QAAQ,MAAM,UAAU,aAAa,gBAAgB;AAAA,MAC3D,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAEA,UAAM,KAAK,aAAa,YAAY,OAAO,EAAE,cAAc;AAGzD,WAAAA,+BAAC,QAAK,EAAA,IAAQ,IAAI,GAAG,QAAgB,OAAO,EAAE,eAAe,OAAU,EAAA,CAAA;AAAA,EAE3E;AAEO,QAAM,sCAAsC;AAAA,IACjD,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AC7CA,QAAM,UAAU,CAAC,UAAmB,QAAQ,MAAO,KAAK;AAiE3C,QAAA,sBAA6D,CAAC;AAAA,IACzE,OAAAyB;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA,OAAO;AAAA,IACP,aAAa;AAAA,IACb,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,MAAM;AACJ,UAAM,EAAE,WAAW,WAAW,IAAIf,cAAQ,MAAM;AAC1CgB,UAAAA;AACAC,UAAAA;AAEJ,UAAI,YAAY;AAEd,YACG,YAAY,MAAM,YAAY,MAC9B,YAAY,OAAO,YAAY,OAC/B,YAAY,OAAO,YAAY,OAC/B,YAAY,QAAQ,YAAY,MACjC;AACAD,wBAAa;AAAA,QAAA,WAEZ,WAAW,OAAO,WAAW,QAC7B,WAAW,MAAM,WAAW,KAC7B;AACAA,wBAAa;AAAA,QAAA,OACR;AACLA,wBAAa;AAAA,QAAA;AAGfC,qBAAY,UAAU,KAAK,QAAQF,MAAK,CAAC,KAAK,OAAO;AAAA,MAAA,OAChD;AACL,cAAM,eAAe,aAAa,WAAW,OAAO,WAAW;AACzD,cAAA,SAAS,eAAe,MAAM;AAC9B,cAAA,YAAY,eAAe,MAAM;AACvCC,sBAAa,eAAe,QAAQ;AACpCC,qBAAY,UAAU,MAAM,eAAe,SAAS;AAAA,MAAA;AAG/C,aAAA;AAAA,QACL,WAAAA;AAAAA,QACA,YAAAD;AAAAA,MACF;AAAA,OACC,CAAC,YAAY,SAASD,QAAO,QAAQ,CAAC;AAEzC,UAAM,OAAO,SAAS,OAAO,MAAM,KAAK,IAAI,YAAY,IAAI;AAC5D,UAAM,aACJ,OAAO,kBAAkB,aAAa,cAAc,MAAM,KAAK,IAAI;AAGnE,WAAAV,gCAAC,OAAE,WACD,UAAA;AAAA,MAAAf,2BAAAA,IAAC,WAAO,UAAW,WAAA,CAAA;AAAA,MACnBA,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,IAAG;AAAA,UACH,GAAG,WAAW;AAAA,UACd;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACC,GAAG;AAAA,UAEH,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACH,GACF;AAAA,EAEJ;ACzEa,QAAA,iBAAmD,CAAC;AAAA,IAC/D,MAAAY,uCAAQ,oBAAmB,EAAA;AAAA,IAC3B,OAAAI,wCAAS,qBAAoB,EAAA;AAAA,IAC7B;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA,aAAa;AAAA,IACb,WAAW,IAAI,KAAK;AAAA,EACtB,MAAM;AACJ,UAAM,YAAYN,MAAA;AAAA,MAChB,OAAO,EAAE,GAAG,qCAAqC,IAAIE,SAAA,gBAAAA,MAAM,UAAS,CAAI,EAAA;AAAA,MACxE,CAACA,SAAA,gBAAAA,MAAM,KAAK;AAAA,IACd;AACM,UAAAa,SAAQ,MAAM,IAAI;AACxB,UAAM,WAAYA,SAAQ,MAAO,KAAK,KAAK;AAC3C,UAAM,YAAY,UAAU,QAAQ,eAAe,cAAc,OAAO;AAClE,UAAA,WAAWb,QAAO,UAAU,OAAO;AAGvC,WAAAG,gCAAC,OAAE,WACA,UAAA;AAAA,MACCH,SAAAZ,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC,SAASI;AAAA,UACT;AAAA,UACA;AAAA,QAAA;AAAA,MACF;AAAA,MAEDI,UACChB,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC,SAASQ;AAAA,UACT;AAAA,UACA,OAAAS;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF,GAEJ;AAAA,EAEJ;AC7Ca,QAAA,uBAA+D,CAAC;AAAA,IAC3E;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA,sCAAQ,gBAAe,EAAA;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,aAAa;AAAA,IACb,WAAW,IAAI,KAAK;AAAA,EACtB,MAAM;AACJ,UAAM,QAAQ,SAAS,OAAO,YAAY,MAAM,OAAO,YAAY,KAAK;AAExE,0CACGlB,MACE,UAAA,EAAA,UAAA,MAAM,IAAI,CAAC,MAAM,MAAM;AAChB,YAAA,cACJ,OAAO,SAAS,aAAa,KAAK,EAAE,OAAO,EAAG,CAAA,IAAI;AAElD,aAAAP,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC,SAAS;AAAA,UAET,OAAO;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,QAPK;AAAA,MAQP;AAAA,IAEH,CAAA,GACH;AAAA,EAEJ;AClEa,QAAA,gBAAiD,CAAC,UAAU;;AACvE,UAAM,EAAE,OAAO,QAAQ,iBAAiB,OAAO,YAAY,aAAa;AAAA,MACtE,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAEM,UAAA,IAAI,MAAM,KAAK;AACrB,UAAM,cAAc,OAAO,WAAW,WAAW,SAAS,OAAO,KAAK;AACtE,UAAM,aACJ,OAAO,oBAAoB,WACvB,kBACA,gBAAgB,KAAK;AAE3B,UAAM,eAAe,KAAK,IAAI,WAAW,UAAU,KAAK,IAAI,KAAK;AAE3D,UAAA,IAAIoB,QAAAA,MAAM;AAAA,MACd,aAAa;AAAA,MACb,aAAa;AAAA,MACb;AAAA,MACA;AAAA,IAAA,CACD;AAGD,UAAM,QAAQ;AACR,UAAA,UAAU,EAAE,MAAM,KAAK;AACvB,UAAAjB,UAAQ,8CAAU,OAAV,mBAAc,MAAM,KAAK,OAAzB,mBAA8B;AACtC,UAAAlB,QAAM,8CAAU,OAAV,mBAAc,MAAM,KAAK,OAAzB,mBAA8B;AAC1C,UAAM,IAAI,IAAI,MAAMkB,MAAK,YAAYlB,IAAG;AAExC,iEAEK,UACC,eAAAO,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,iBAAiB;AAAA,QACjB,QAAQ;AAAA,QACR,OAAO,EAAE,eAAe,OAAO;AAAA,QAC/B,IAAG;AAAA,QACH,IAAG;AAAA,QACH;AAAA,MAAA;AAAA,IAAA,IAGFA,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL,iBAAiB;AAAA,QACjB,QAAQ;AAAA,QACR,OAAO,EAAE,eAAe,OAAO;AAAA,MAAA;AAAA,IAAA,GAGrC;AAAA,EAEJ;AAEO,QAAM,gCAAgC;AAAA,IAC3C,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,YAAY;AAAA,IACZ,UAAU,IAAI,KAAK;AAAA,EACrB;AC3FO,QAAM,qBAAqB,CAAC,EAAE,OAAO,aAAa,OAAO,WAAW;AACzE,UAAM,SAAiD,CAAC;AAClD,UAAA,YAAa,KAAK,KAAK,IAAK;AAElC,eAAW,SAAS,MAAM;AAClB,YAAA,MAAO,QAAQ,QAAS;AAE9B,YAAM,SAA0C,CAAC;AACjD,eAAS,SAAS,GAAG,SAAS,OAAO,UAAU;AAC7C,cAAM,QAAQ,SAAS;AACvB,eAAO,KAAK;AAAA,UACV,GAAG,MAAM,KAAK,IAAI,KAAK,KAAK,KAAK;AAAA,UACjC,GAAG,MAAM,KAAK,IAAI,KAAK,KAAK,KAAK;AAAA,QAAA,CAClC;AAAA,MAAA;AAGH,aAAO,KAAK,CAAC,GAAG,QAAQ,OAAO,CAAC,CAAC,CAAC;AAAA,IAAA;AAG7B,WAAA;AAAA,EACT;AC+Ba,QAAA,sBAA6D,CACxE,UACG;AACG,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAAY;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,IACE,kBAAkB,sCAAsC,KAAK;AAEjE,UAAM,QAAQiB,QAAAA,cACX,OAAO,CAAC,GAAG,KAAK,CAAC,EACjB,MAAM,CAAC,aAAa,WAAW,CAAC;AAE7B,UAAA,OAAO,MAAM,MAAM,KAAK;AAE9B,UAAM,SAAS,mBAAmB;AAAA,MAChC;AAAA,MACA;AAAA,MACA,OAAO,WAAW;AAAA,MAClB;AAAA,IAAA,CACD;AAED,WAEKd,2BAAA,KAAAR,qBAAA,EAAA,UAAA;AAAA,MAAAK,SAEIZ,2BAAAA,IAAAO,WAAA,UAAA,EAAA,UAAA,OAAO,IAAI,CAAC,GAAG,MACdP,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC,SAASI;AAAA,UAET,MAAM;AAAA,UACN,OAAO;AAAA,QAAA;AAAA,QAFF;AAAA,MAIR,CAAA,GACH;AAAA,MAED,OACCZ,2BAAAA,IAAAO,WAAAA,UAAA,EACG,UAAK,KAAA,IAAI,CAAC,MACTP,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC,SAAS;AAAA,UAET,OAAO;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,QAJK;AAAA,MAAA,CAMR,EACH,CAAA;AAAA,IAAA,GAEJ;AAAA,EAEJ;AAEO,QAAM,uCAAuC;AAAA,IAClD,OAAO;AAAA,IACP,oCAAM,eAAc,EAAA;AAAA,IACpB,YAAY;AAAA,IACZ,UAAU,IAAI,KAAK;AAAA,EACrB;AClGa,QAAA,oBAAyD,CACpE,UACG;AACH,UAAM,EAAE,MAAM,QAAQ,UAAU;AAAA,MAC9B,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAEA,UAAM,gBAAgBI,QAAA,KAAA,EACnB,EAAE,CAACkB,OAAWA,GAAE,CAAC,EACjB,EAAE,CAACA,OAAWA,GAAE,CAAC;AAEd,UAAA,IAAI,cAAc,IAAI;AAC5B,UAAM,cAAc,OAAO,WAAW,WAAW,SAAS,OAAO,KAAK;AAGpE,WAAA9B,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,QAAQ;AAAA,QACR,MAAK;AAAA,QACL,OAAO,EAAE,eAAe,OAAO;AAAA,MAAA;AAAA,IACjC;AAAA,EAEJ;AAEO,QAAM,qCAAqC;AAAA,IAChD,QAAQ;AAAA,EACV;ACqBa,QAAA,aAA2C,CAAC,UAAU;AAC3D,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,IACE,kBAAkB,2BAA2B,KAAK;AAEtD,UAAM,cAAc,KAAK,IAAI,QAAQ,KAAK,IAAI;AAK9C,UAAM,aAAa;AAAA,MACjB;AAAA,MACA,MAAM,MAAM;AAAA,MACZ;AAAA,MACA,MAAM,MAAM;AAAA,MACZ,MAAM,MAAM,YAAY,MAAM,MAAM;AAAA,IACtC;AAEA,2CACGO,gBACE,EAAA,UAAA;AAAA,MACC,QAAAP,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MACF;AAAA,MAED,SACCR,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,OAAO;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF,GAEJ;AAAA,EAEJ;AAEO,QAAM,4BAAsD;AAAA,IACjE,aAAa;AAAA,IACb,MAAM;AAAA,IACN,qCAAO,qBAAoB,EAAA;AAAA,IAC3B,sCAAQ,sBAAqB,EAAA;AAAA,IAC7B,YAAY;AAAA,IACZ,UAAU,IAAI,KAAK;AAAA,EACrB;AC1Ga,QAAA,OAA+B,CAAC;AAAA,IAC3C;AAAA,IACA,WAAW;AAAA,IACX,oBAAoB;AAAA,IACpB,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,cAAc,MAAM;AAAA,IACpB,SAAS,MAAM;AAAA,IACf,eAAe,MAAM;AAAA,IACrB,YAAY,MAAM;AAAA,IAClB;AAAA,EACF,MAAM;AACJ,QAAI,UAAU;AACd,QAAI,SAAS;AACb,QAAI,SAAS;AACb,QAAI,gBAAgB;AACpB,QAAI,gBAAgB;AACpB,UAAM,MAAMP,MAAAA,OAAe;AAE3BG,UAAAA,UAAU,MAAM;AACd,aAAO,MAAM;AACX,6BAAqB,IAAI,OAAO;AAChB,wBAAA;AAAA,MAClB;AAAA,IACF,GAAG,EAAE;AAEL,UAAM,kBAAkB,MAAM;AACrB,aAAA,oBAAoB,aAAa,WAAW;AAC5C,aAAA,oBAAoB,WAAW,SAAS;AACxC,aAAA,oBAAoB,aAAa,WAAW;AAC5C,aAAA,oBAAoB,YAAY,UAAU;AAEjD,gBAAU,KAAK;AACf,2BAAqB,IAAI;AAAA,IAC3B;AAEM,UAAA,uBAAuB,CAAC,kBAA2B;AACvD,UAAI,aAAa;AACf,4BAAoB,aAAa;AAAA,MAAA;AAAA,IAErC;AAEM,UAAA,YAAY,CAAC,QAAiB;AAClC,UAAI,QAAQ;AACV,iBAAS,KAAK,MAAM,SAAS,MAAM,SAAS;AAAA,MAAA;AAAA,IAEhD;AAEA,UAAM,iBAAiB,MAAM;AAEzB,aAAA,CAAC,YAAY,KAAK,IAAI,MAAM,IAAI,aAAa,KAAK,IAAI,MAAM,IAAI;AAAA,IAEpE;AAEM,UAAA,iBAAiB,CAAC,UAAU;AAChC,YAAM,EAAE,SAAS,QAAA,IAAY,MAAM,QAAQ,CAAC;AACrC,aAAA;AAAA,QACL;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEM,UAAA,cAAc,CAAC,UAA4B;AAC/C,YAAM,eAAe,MAAM,YAAY,UAAU,KAAK;AACtD,UAAI,gBAAgB,UAAU;AAC5B;AAAA,MAAA;AAGF,YAAM,eAAe;AACrB,YAAM,gBAAgB;AAEZ,gBAAA;AAGH,aAAA,iBAAiB,aAAa,WAAW;AACzC,aAAA,iBAAiB,WAAW,SAAS;AAAA,IAC9C;AAEM,UAAA,cAAc,CAAC,UAAU;AAC7B,YAAM,eAAe;AACrB,YAAM,gBAAgB;AAEhB,YAAA,EAAE,WAAW,UAAA,IAAc;AACjC,UAAI,cAAc,SAAS;AAC3B,UAAI,cAAc,SAAS;AAE3B,UAAI,kBAAkB;AACpB,6BAAqB,IAAI;AACzB,kBAAU,IAAI;AAEA,sBAAA;AACA,sBAAA;AACJ,kBAAA;AAEE,oBAAA;AAAA,UACV,aAAa;AAAA,UACb,MAAM;AAAA,QAAA,CACP;AAAA,MAAA,OACI;AACD,YAAA,UAAU,sBAAsB,MAAM;AACjC,iBAAA;AAAA,YACL,aAAa;AAAA,YACb,MAAM;AAAA,YACN,GAAG;AAAA,YACH,GAAG;AAAA,UAAA,CACJ;AAAA,QAAA,CACF;AAAA,MAAA;AAGM,eAAA;AACA,eAAA;AAAA,IACX;AAEM,UAAA,YAAY,CAAC,UAAU;AAC3B,YAAM,eAAe;AACrB,YAAM,gBAAgB;AAEN,sBAAA;AAEhB,UAAI,SAAS;AACD,kBAAA;AAAA,UACR,aAAa;AAAA,UACb,MAAM;AAAA,QAAA,CACP;AAAA,MAAA,OACI;AACQ,qBAAA;AAAA,UACX,aAAa;AAAA,UACb,MAAM;AAAA,QAAA,CACP;AAAA,MAAA;AAAA,IAEL;AAEM,UAAA,eAAe,CAAC,UAA4B;AAChD,UAAI,YAAY,MAAM,QAAQ,WAAW,GAAG;AAC1C;AAAA,MAAA;AAGF,YAAM,eAAe;AACrB,YAAM,gBAAgB;AAEZ,gBAAA;AACM,sBAAA,MAAM,QAAQ,CAAC,EAAE;AACjB,sBAAA,MAAM,QAAQ,CAAC,EAAE;AAG1B,aAAA,iBAAiB,aAAa,WAAW;AACzC,aAAA,iBAAiB,YAAY,UAAU;AAAA,IAChD;AAEM,UAAA,cAAc,CAAC,UAAsB;AACzC,YAAM,eAAe;AACrB,YAAM,gBAAgB;AAGtB,YAAM,EAAE,SAAS,YAAY,eAAe,KAAK;AACjD,UAAI,cAAc,UAAU;AAC5B,UAAI,cAAc,UAAU;AAG5B,oBAAc,cAAc;AAC5B,oBAAc,cAAc;AAE5B,UAAI,kBAAkB;AACpB,6BAAqB,IAAI;AACzB,kBAAU,IAAI;AAEA,sBAAA;AACA,sBAAA;AACJ,kBAAA;AAEE,oBAAA;AAAA,UACV,aAAa,EAAE,GAAG,OAAO,SAAS,QAAQ;AAAA,UAC1C,MAAM;AAAA,QAAA,CACP;AAAA,MAAA,OACI;AACD,YAAA,UAAU,sBAAsB,MAAM;AACjC,iBAAA;AAAA;AAAA,YAEL,aAAa;AAAA,cACX,GAAG;AAAA,cACH;AAAA,cACA;AAAA,YACF;AAAA,YACA,MAAM;AAAA,YACN,GAAG;AAAA,YACH,GAAG;AAAA,UAAA,CACJ;AAAA,QAAA,CACF;AAAA,MAAA;AAGa,sBAAA;AACA,sBAAA;AAAA,IAClB;AAEM,UAAA,aAAa,CAAC,UAAsB;AACxC,YAAM,eAAe;AACrB,YAAM,gBAAgB;AACN,sBAAA;AAEhB,UAAI,SAAS;AACD,kBAAA;AAAA,UACR,aAAa;AAAA,UACb,MAAM;AAAA,QAAA,CACP;AAAA,MAAA,OACI;AACQ,qBAAA;AAAA,UACX,aAAa;AAAA,UACb,MAAM;AAAA,QAAA,CACP;AAAA,MAAA;AAAA,IAEL;AAEA,WAAO2B,MAAS,SAAA;AAAA,MAAI;AAAA,MAAU,CAAC,UAC7BC,MAAA,aAAa,OAAO;AAAA,QAClB,GAAG,MAAM;AAAA,QACT,aAAa,CAAC,MAAM;AAClB,sBAAY,CAAC;AACT,cAAA,MAAM,MAAM,aAAa;AACrB,kBAAA,MAAM,YAAY,CAAC;AAAA,UAAA;AAAA,QAE7B;AAAA,QACA,cAAc,CAAC,MAAM;AACnB,uBAAa,CAAC;AACV,cAAA,MAAM,MAAM,cAAc;AACtB,kBAAA,MAAM,aAAa,CAAC;AAAA,UAAA;AAAA,QAC5B;AAAA,MAEH,CAAA;AAAA,IACH;AAAA,EACF;;;;;;;;;;;AChPa,QAAA,cAAoC,CAAC,UAAU;AACpD,UAAA,EAAE,QAAQ,aAAA,IAAiB;AACjC,UAAM,CAAC,YAAY,aAAa,IAAI7B,MAAAA,SAAS,KAAK;AAGhD,WAAAH,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,QAAO;AAAA,QACP,aAAa,MAAM,cAAc,IAAI;AAAA,QACrC,QAAQ,CAAC,EAAE,QAAQ,aAAa,CAAC;AAAA,QACjC,WAAW,MAAM,cAAc,KAAK;AAAA,QAEpC,0CAAC,KACC,EAAA,UAAA;AAAA,UAACA,2BAAAA,IAAA,QAAA,EAAK,WAAWiC,MAAI,MAAM,IAAG,KAAI,IAAI,QAAQ,IAAG,KAAI,IAAG,IAAI,CAAA;AAAA,UAC5DjC,2BAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW,WAAWiC,MAAI,QAAQ,EAAE,CAACA,MAAI,QAAQ,GAAG,YAAY;AAAA,cAChE,QAAQ,SAAS;AAAA,cACjB,OAAO,EAAE,QAAQ,YAAY;AAAA,cAC7B,OAAO;AAAA,cACP,GAAE;AAAA,cACF,IAAI,SAAS;AAAA,YAAA;AAAA,UACf;AAAA,UACAjC,2BAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW,iBAAiB,SAAS,IAAI,EAAE;AAAA,cAC3C,OAAO,EAAE,eAAe,OAAO;AAAA,cAE9B,wBAAM,CAAC,EAAE,IAAI,CAAC,qCACZ,UAAO,EAAA,IAAI,IAAI,GAAG,IAAG,KAAI,GAAE,MAAa,WAAWiC,MAAI,IAAA,GAAlB,CAAuB,CAC9D;AAAA,YAAA;AAAA,UAAA;AAAA,QACH,EACF,CAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAEJ;;;;;;;ACzBa,QAAA,aAAkC,CAAC,UAAU;AACxD,UAAM,EAAE,QAAQ,OAAAtB,QAAO,KAAAlB,MAAK,OAAO,kBAAkB;AACrD,UAAM,CAAC,YAAY,aAAa,IAAIU,MAAAA,SAAS,KAAK;AAClD,UAAM,aAAa,KAAK,IAAIV,OAAMkB,QAAO,CAAC;AAC1C,UAAM,gBAAgB,KAAK,IAAI,QAAQlB,MAAK,CAAC;AACvC,UAAA,aAAakB,WAAU,KAAKlB,SAAQ;AAEpC,UAAA,cAAcS,MAAAA,YAAY,MAAM;AAC9BgC,YAAAA,cAAavB,WAAU,KAAKlB,SAAQ;AAE1C,UAAI,CAACyC,aAAY;AACf,sBAAc,IAAI;AAAA,MAAA;AAAA,IAEnB,GAAA,CAACzC,MAAKkB,QAAO,KAAK,CAAC;AAEtB,UAAM,SAAST,MAAA;AAAA,MACb,CAAC,EAAE,EAAA,MAAQ;AACT,cAAM,eAAeS,SAAQ;AAC7B,cAAM,aAAalB,OAAM;AAErB,YAAA,gBAAgB,KAAK,cAAc,OAAO;AAC9B,wBAAA;AAAA,YACZ,OAAO;AAAA,YACP,KAAK;AAAA,UAAA,CACN;AAAA,QAAA;AAAA,MAEL;AAAA,MACA,CAACkB,QAAOlB,MAAK,OAAO,aAAa;AAAA,IACnC;AAEA,UAAM,eAAeS,MAAA;AAAA,MACnB,CAAC,WAA4B,WAAmB;AAC9C,cAAM,eAAe,cAAc,UAAUS,SAAQ,SAASA;AAC9D,cAAM,aAAa,cAAc,UAAUlB,OAAM,SAASA;AAE5C,sBAAA;AAAA,UACZ,OAAO;AAAA,UACP,KAAK;AAAA,QAAA,CACN;AAAA,MACH;AAAA,MACA,CAACA,MAAK,eAAekB,MAAK;AAAA,IAC5B;AAEA,2CACGJ,gBACC,EAAA,UAAA;AAAA,MAAAP,+BAAC,UAAK,WAAWiC,MAAI,UAAU,QAAgB,OAAOtB,QAAO;AAAA,MAC7DX,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAW,aAAaP,IAAG;AAAA,UAC3B,WAAWwC,MAAI;AAAA,UACf;AAAA,UACA,OAAO;AAAA,QAAA;AAAA,MACT;AAAA,MACClB,gCAAA,KAAA,EAAE,WAAW,aAAaJ,MAAK,QAC9B,UAAA;AAAA,QAAAX,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,QAAO;AAAA,YACP;AAAA,YACA;AAAA,YACA,WAAW,MAAM,cAAc,KAAK;AAAA,YAEpC,UAAAA,2BAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAWiC,MAAI;AAAA,gBACf;AAAA,gBACA,OAAO;AAAA,gBACP,OAAO;AAAA,kBACL,QAAQ,aAAa,aAAa;AAAA,kBAClC,SAAS,aAAa,IAAI;AAAA,kBAC1B,eAAe,CAAC,aAAa,YAAY;AAAA,gBAAA;AAAA,cAC3C;AAAA,YAAA;AAAA,UACF;AAAA,QACF;AAAA,QACAjC,2BAAAA,IAAC,KAAE,EAAA,WAAW,oBACZ,UAAAA,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC;AAAA,YACA,cAAc,CAAC,WAAW,aAAa,SAAS,MAAM;AAAA,UAAA;AAAA,QAAA,GAE1D;AAAA,uCACC,KAAE,EAAA,WAAW,aAAa,aAAa,CAAC,QACvC,UAAAA,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC;AAAA,YACA,cAAc,CAAC,WAAW,aAAa,OAAO,MAAM;AAAA,UAAA;AAAA,QAAA,EAExD,CAAA;AAAA,MAAA,EACF,CAAA;AAAA,IAAA,GACF;AAAA,EAEJ;ACrEa,QAAA,QAAiC,CAAC,UAAU;AACjD,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO;AAAA,MACP,KAAK;AAAA,MACL;AAAA,IAAA,IACE;AACJ,UAAM,CAAC,WAAW,YAAY,IAAIG,MAAAA,SAAS,KAAK;AAChD,UAAM,CAAC,SAAS,UAAU,IAAIA,eAAiB;AAC/C,UAAM,CAAC,OAAO,QAAQ,IAAIA,eAAqB;AAAA,MAC7C,OAAO,MAAM,SAAS;AAAA,MACtB,KAAK,MAAM,OAAO,MAAM;AAAA,IAAA,CACzB;AACK,UAAA,EAAE,OAAAQ,QAAO,KAAAlB,KAAA,IAAQ;AAEvB,UAAM,MAAMQ,MAAAA,OAAY;AAExB,UAAM,yBAAyBC,MAAA;AAAA,MAC7B,CAAC,UAAmB,WAAoB;AACtC,YAAI,eAAe;AACnB,YAAI,aAAa;AAEb,YAAA,iBAAiB,UAAa,gBAAgB,GAAG;AACpC,yBAAA;AAAA,QAAA;AAGjB,YAAIT,SAAQ,QAAW;AACR,uBAAA;AAAA,QAAA;AAGf,YAAI,eAAe,YAAY;AACd,yBAAAkB;AAAA,QAAA;AAGjB,YAAI,aAAa,cAAc;AAChB,uBAAAlB;AAAA,QAAA;AAGf,YAAI,cAAc,OAAO;AACV,uBAAA;AAAA,QAAA;AAGf,eAAO,EAAE,OAAO,cAAc,KAAK,WAAW;AAAA,MAChD;AAAA,MACA,CAACA,MAAKkB,QAAO,KAAK;AAAA,IACpB;AAEM,UAAA,0BAA0BT,kBAAY,CAAC,UAAe;AAC1D,YAAM,WAAW;AAAA,QACf,QAAQ,IAAI;AAAA,QACZ,SAAS,MAAM;AAAA,QACf,SAAS,MAAM;AAAA,MACjB;AAEA,aAAO,qBAAqB,QAAQ;AAAA,IACtC,GAAG,EAAE;AAEL,UAAM,cAAcA,MAAA;AAAA,MAClB,CAAC,UAAe;AACd,cAAM,EAAE,EAAA,IAAM,wBAAwB,KAAK;AAE3C,YAAI,IAAI,SAAS;AACR,iBAAA,uBAAuB,GAAG,OAAO;AAAA,QAAA,OACnC;AACE,iBAAA,uBAAuB,SAAS,CAAC;AAAA,QAAA;AAAA,MAE5C;AAAA,MACA,CAAC,wBAAwB,yBAAyB,OAAO;AAAA,IAC3D;AAEA,UAAM,cAAcA,MAAA;AAAA,MAClB,CAAC,UAAe;AACd,YAAI,CAAC,UAAU;AACP,gBAAA,YAAY,wBAAwB,MAAM,WAAW;AAE3D,uBAAa,IAAI;AACjB,qBAAW,UAAU,CAAC;AAAA,QAAA;AAAA,MAE1B;AAAA,MACA,CAAC,UAAU,uBAAuB;AAAA,IACpC;AAEA,UAAM,SAASA,MAAA;AAAA,MACb,CAAC,UAAe;AACd,YAAI,CAAC,UAAU;AACP,gBAAA,EAAE,OAAAS,SAAO,KAAAlB,UAAQ,YAAY,MAAM,WAAW;AAEpD,cAAI,eAAe;AACH,0BAAA;AAAA,cACZ,OAAAkB;AAAAA,cACA,KAAAlB;AAAAA,YAAA,CACD;AAAA,UAAA;AAGH,mBAAS,EAAE,OAAAkB,SAAO,KAAAlB,OAAK;AAAA,QAAA;AAAA,MAE3B;AAAA,MACA,CAAC,UAAU,aAAa,aAAa;AAAA,IACvC;AAEM,UAAA,YAAYS,MAAAA,YAAY,MAAM;AAClC,mBAAa,KAAK;AAAA,IACpB,GAAG,EAAE;AAEC,UAAA,eAAeA,MAAAA,YAAY,MAAM;AACrC,YAAM,MAAM;AAAA,QACV,OAAO;AAAA,QACP,KAAK;AAAA,MACP;AAEA,eAAS,GAAG;AAEZ,UAAI,eAAe;AACjB,sBAAc,GAAG;AAAA,MAAA;AAAA,IACnB,GACC,CAAC,eAAe,KAAK,CAAC;AAEzB,UAAM,gBAAgBA,MAAA;AAAA,MACpB,CAAC,UAA4B;AAC3B,cAAM,MAAM,uBAAuB,MAAM,OAAO,MAAM,GAAG;AAEzD,iBAAS,CAAC,WAAW,EAAE,GAAG,OAAO,GAAG,MAAM;AAE1C,YAAI,eAAe;AACjB,wBAAc,GAAG;AAAA,QAAA;AAAA,MAErB;AAAA,MACA,CAAC,wBAAwB,aAAa;AAAA,IACxC;AAEAE,UAAAA,UAAU,MAAM;AACd,UAAIX,SAAQ,OAAO;AACjB,iBAAS,CAAC,UAAU;AAAA,UAClB,GAAG;AAAA,UACH,KAAK;AAAA,QAAA,EACL;AAAA,MAAA;AAAA,IACJ,GACC,CAACA,MAAK,KAAK,CAAC;AAEfW,UAAAA,UAAU,MAAM;AAEd,UAAI,CAAC,WAAW;AACd,cAAM,eAAe,cAAcO;AACnC,cAAM,aAAa,YAAYlB;AAE/B,YAAI,gBAAgB,YAAY;AACrB,mBAAA,uBAAuBkB,QAAOlB,IAAG,CAAC;AAAA,QAAA;AAAA,MAC7C;AAAA,IACF,GACC,CAACA,MAAK,SAAS,wBAAwB,WAAWkB,QAAO,SAAS,CAAC;AAGpE,WAAAX,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,QAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QAEA,UAAAe,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,eAAe,YAAY,SAAS;AAAA,cACpC,QAAQ,WAAW,KAAK;AAAA,YAC1B;AAAA,YAEC,UAAA;AAAA,cAAA;AAAA,cACA,CAAC,YAEEA,2BAAAA,KAAAR,WAAA,UAAA,EAAA,UAAA;AAAA,gBAAAP,2BAAA,IAAC,QAAK,EAAA,KAAU,QAAgB,OAAc,SAAS,GAAG;AAAA,gBACzDW,WAAU,UAAalB,SAAQ,UAC9BO,2BAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,OAAAW;AAAA,oBACA,KAAAlB;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA,eAAe;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACjB,EAEJ,CAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAEJ;AAAA,IACF;AAAA,EAEJ;ACjNa,QAAA,aAA2C,CAAC,UAAU;AACjE,UAAM,EAAE,UAAU,QAAQ,OAAO,eAAe,OAAO,aAAa;AAE9D,UAAA,iBAAiBS,MAAAA,YAAY,MAAM;AACnC,UAAAS;AACA,UAAAlB;AAEA,UAAA,CAAC,YAAY,QAAQ;AACf,QAAAkB,SAAA,MAAM,OAAO,CAAC,CAAC;AACjB,QAAAlB,OAAA,MAAM,OAAO,CAAC,CAAC;AAAA,MAAA;AAGhB,aAAA,EAAE,OAAAkB,QAAO,KAAAlB,KAAI;AAAA,IACnB,GAAA,CAAC,UAAU,QAAQ,KAAK,CAAC;AAE5B,UAAM,uBAAuBS,MAAA;AAAA,MAC3B,CAAC,UAA4B;AAC3B,YAAI,eAAe;AACbiC,cAAAA;AAGF,cAAA,MAAM,UAAU,UAChB,MAAM,QAAQ,WACb,MAAM,UAAU,KAAK,MAAM,QAAQ,QACpC;AACA,gBAAI,MAAM,QAAQ;AAChB,oBAAMxB,SAAQ,MAAM,OAAO,MAAM,KAAK;AACtC,oBAAMlB,OAAM,MAAM,OAAO,MAAM,GAAG;AAClC0C,wBAAS,CAACxB,QAAOlB,IAAG;AAAA,YAAA,OACf;AAEC,oBAAA,OAAO,MAAM,KAAK;AACxB,oBAAMkB,SAAQ,KAAK,MAAM,MAAM,QAAQ,OAAO,KAAK,IAAI;AACvD,oBAAMlB,OAAM,KAAK,MAAM,MAAM,MAAM,OAAO,KAAK,IAAI;AAEnD0C,wBAAS,CAAC,MAAM,SAASxB,MAAK,GAAG,MAAM,SAASlB,IAAG,CAAC;AAAA,YAAA;AAAA,UACtD;AAGY,wBAAA;AAAA,YACZ,QAAA0C;AAAAA,UAAA,CACD;AAAA,QAAA;AAAA,MAEL;AAAA,MACA,CAAC,eAAe,OAAO,KAAK;AAAA,IAC9B;AAGE,WAAAnC,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAG;AAAA,QACH,GAAG,eAAe;AAAA,QACnB,eAAe;AAAA,QAEd;AAAA,MAAA;AAAA,IACH;AAAA,EAEJ;ACpDa,QAAA,eAAeoC,MAA0C,cAAA,CAAE,CAAA;AAE3D,QAAA,EAAE,UAAU,eAAe,UAAU,kBAChD;AAEW,QAAA,WAAW,MAAM;AACtB,UAAA,UAAUC,iBAAW,YAAY;AAEvC,QAAI,YAAY,QAAW;AACnB,YAAA,IAAI,MAAM,uDAAuD;AAAA,IAAA;AAGlE,WAAA;AAAA,EACT;;;;;;;ACoDa,QAAA,iBAA0C,CAAC;AAAA,IACtD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,MAAM;AACE,UAAA,QAAQ/B,gBAAM,EAAE;AACtB,UAAM,CAAC,YAAY,aAAa,IAAIH,MAAAA,SAAkB,KAAK;AAC3D,UAAM,CAAC,YAAY,aAAa,IAAIA,MAAAA,SAAkB,KAAK;AAC3D,UAAM,CAAC,SAAS,UAAU,IAAIA,MAAAA,SAAiB,CAAC;AAChD,UAAM,CAAC,SAAS,UAAU,IAAIA,MAAAA,SAAiB,CAAC;AAChD,UAAM,CAAC,KAAK,EAAE,OAAO,OAAQ,CAAA,IAAI,kBAAkC;AAE7D,UAAA,aAAaO,MAAAA,QAAQ,MAAM;AAC3B,UAAA,CAAC,UAAU,CAAC,OAAO;AACd,eAAA;AAAA,MAAA;AAIL,UAAA,gBAAgB,CAAC,YAAY;AACxB,eAAA;AAAA,MAAA;AAGL,UAAA,gBAAgB,CAAC,YAAY;AACxB,eAAA;AAAA,MAAA;AAGF,aAAA;AAAA,IAAA,GACN,CAAC,QAAQ,OAAO,YAAY,cAAc,cAAc,UAAU,CAAC;AAEtE,UAAM,eAAeR,MAAA;AAAA,MACnB,CACE,aACA,UACG;AACH,YAAI,gBAAgB,cAAc;AAChC,wBAAc,IAAI;AAAA,QAAA,OACb;AACL,wBAAc,IAAI;AAAA,QAAA;AAGpB,YAAI,MAAM,QAAQ;AAChB,qBAAW,MAAM,MAAM;AAAA,QAAA;AAGzB,YAAI,MAAM,OAAO;AACf,qBAAW,MAAM,KAAK;AAAA,QAAA;AAAA,MAE1B;AAAA,MACA,CAAA;AAAA,IACF;AAEA,UAAM,aAAuCQ,MAAA;AAAA,MAC3C,OAAO;AAAA,QACL;AAAA,QACA,IAAI;AAAA,QACJ,YAAY;AAAA,QACZ;AAAA,QACA;AAAA,QACA,GAAG,aAAa;AAAA,UACd;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACD,CAAA;AAAA,MAAA;AAAA,MAEH;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAEA,UAAM,aAAa,UAAU,UAAU,QAAQ,IAAI,WAAW;AAC9D,UAAM,aAAa,UAAU,UAAU,SAAS,IAAI,WAAW;AAEzD,UAAA,cACJ,KAAK,WAAW,UAAa,KAAK,WAAW,OAAO,KAAK,SAAS;AAC9D,UAAA,aACJ,KAAK,UAAU,UAAa,KAAK,UAAU,OAAO,KAAK,QAAQ;AAG/D,WAAAV,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,OAAO,EAAE,QAAQ,aAAa,OAAO,WAAW;AAAA,QAChD,WAAW,WAAW,oBAAoBiC,MAAI,SAAS;AAAA,QACtD,GAAG;AAAA,QAEJ,yCAAC,eAAc,EAAA,OAAO,YACnB,UAAS,SAAA,KAAK,QAAQ,KACrBjC,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA,WAAW,WAAWiC,MAAI,KAAK,SAAS;AAAA,YACxC;AAAA,YACA,UAAU;AAAA,YAEV,UAAAjC,2BAAAA,IAAC,KAAE,EAAA,WAAW,aAAa,UAAU,KAAK,UAAU,KACjD,UAAS,SAAA,UAAU,EACtB,CAAA;AAAA,UAAA;AAAA,QAAA,EAGN,CAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAEJ;AChMgB,WAAA,eACdX,QACA,WACwB;AACpB,QAAA,OAAO,WAAWA,MAAK,GAAG;AACxB,UAAA,UAAU,QAAQ,GAAO,GAAG;AACxB,cAAA,WAAW,UAAU,OAAO,GAAO;AACzC,eAAQA,OAA4B,OAAO,QAAQ,EAAE,WAAW;AAAA,MAAA,OAC3D;AACL,eAAQA,OAA4B,WAAW;AAAA,MAAA;AAAA,IACjD,OACK;AACE,aAAAA;AAAA,IAAA;AAAA,EAEX;AAEO,WAAS,4BACdA,QACwB;AACpB,QAAA,OAAO,WAAWA,MAAK,GAAG;AAC5B,aAAO,yBAAyBA,MAA0B;AAAA,IAAA;AAErD,WAAAA;AAAA,EACT;AAEO,WAAS,0BAA0B,QAAgC;AACxE,QAAI,gBAAgB,OAAO;AAC3B,eAAW,SAAS,QAAQ;AACpB,YAAA,wBAAwB,2BAA2B,MAAM,IAAW;AACtE,UAAA,sBAAsB,QAAQ,aAAa,GAAG;AAChC,wBAAA;AAAA,MAAA;AAAA,IAClB;AAEK,WAAA;AAAA,EACT;AAEO,WAAS,2BAA2B,QAAiC;AAC1E,QAAI,gBAAgB,OAAO;AAC3B,eAAWoC,UAAS,QAAQ;AAC1B,UAAI,OAAO,WAAWA,OAAM,IAAI,GAAG;AACjC,cAAM,aAAaA,OAAM;AACrB,YAAA,WAAW,QAAQ,aAAa,GAAG;AACrB,0BAAA;AAAA,QAAA;AAAA,MAClB;AAAA,IACF;AAEK,WAAA;AAAA,EACT;ACjBO,WAAS,qBACd,QACA,OAAO,OACP,YAAuB,YACS;AAChC,QAAI,SAAyC,CAAC;AACxC,UAAA,gBAAgB,0BAA0B,MAAM;AACtD,UAAM,aAAa,cAAc;AAEjC,eAAWA,UAAS,QAAQ;AACf,iBAAA,eAAeA,OAAM,MAAM;AAC9B,cAAA,MAAM,4BAA4BA,OAAM,GAAG;AACjD,YAAI,MAAM,OAAO,UAAU,CAAC,MAAM;AAChC,gBAAM,OAAO,EAAE;AACX,cAAA,gBAAgB,QAAQ,eAAe,MAAM;AAC/C,mBAAO,KAAK,cAAc,IAAI,QAAQ;AAAA,UAAA;AAExC,iBAAO,SAAS;AAAA,QAAA,CACjB;AAED,YAAI,QAAQ,IAAI;AACd,iBAAO,KAAK;AAAA,YACV;AAAA,YACA,UAAUA,OAAM;AAAA,YAChB,MAAM,CAAA;AAAA,UAAC,CACR;AAED,gBAAM,OAAO,SAAS;AAAA,QAAA;AAGxB,cAAM,IAAI;AAAA,UACR,aAAa,YAAY,MAAO,YAAY;AAAA,UAC5C;AAAA,QACF;AAEA,cAAM,IAAI;AAAA,UACR,aAAa,YAAY,OAAQ,YAAY;AAAA,UAC7C;AAAA,QACF;AAEO,eAAA,GAAG,EAAE,KAAK,KAAK;AAAA,UACpB;AAAA,UACA,OAAO,4BAA4B,YAAY,IAAW;AAAA,UAC1D,UAAU,YAAY;AAAA,UACtB,IAAIA,OAAM;AAAA,UACV;AAAA,UACA,IAAI,aAAa,IAAI;AAAA,UACrB,IAAI;AAAA,UACJ;AAAA,UACA,IAAI,aAAa,IAAI;AAAA,UACrB,IAAI;AAAA,QAAA,CACL;AAAA,MAAA;AAAA,IACH;AAIF,QAAI,MAAM;AACR,eAAS,OAAO,KAAK,CAAC,GAAG,MAAM;AAC7B,cAAM,OAAOa,QAAAA,OAAO,EAAE,MAAM,CAAC,MAAW,EAAE,CAAC;AAC3C,cAAM,OAAOA,QAAAA,OAAO,EAAE,MAAM,CAAC,MAAW,EAAE,CAAC;AACpC,eAAA,OAAO,OAAO,IAAI;AAAA,MAAA,CAC1B;AAAA,IAAA;AAGI,WAAA;AAAA,EACT;AAEA,WAAS,eACP,GACA,GACgB;AAChB,QAAI,OAAO,WAAW,CAAC,KAAK,OAAO,WAAW,CAAC,GAAG;AACxC,aAAA,EAAwB,IAAI,CAAsB;AAAA,IACjD,WAAA,aAAa,QAAQ,OAAO,MAAM,UAAU;AACrD,aAAO,IAAI,KAAK,EAAE,QAAA,IAAY,CAAC;AAAA,eACtB,OAAO,MAAM,YAAY,OAAO,MAAM,UAAU;AACzD,aAAO,IAAI;AAAA,IAAA,OACN;AACC,YAAA,IAAI,MAAM,kCAAkC;AAAA,IAAA;AAAA,EAEtD;AAKO,WAAS,sBACd,QACA,YAAuB,YACvB,UAA8B,QACG;AACjC,UAAM,SAA0C,CAAC;AAC3C,UAAA,gBAAgB,2BAA2B,MAAM;AACvD,UAAM,aAAa,cAAc;AAEjC,eAAWb,UAAS,QAAQ;AAC1B,YAAM,UAAU,MAAM,QAAQA,OAAM,IAAI;AACxC,UAAI,KAAKA,OAAM;AACf,UAAI,SAAS;AACN,aAAA,eAAeA,OAAM,KAAK,OAAO;AAAA,MAAA;AAGxC,YAAM,QAAQ;AAAA,QACZ,IAAI,eAAeA,OAAM,KAAK,aAAa;AAAA,QAC3C,IAAI,eAAe,IAAI,aAAa;AAAA,QACpC,IAAI,eAAe,UAAUA,OAAM,KAAK,CAAC,IAAI,GAAG,aAAa;AAAA,QAC7D,IAAI,eAAe,UAAUA,OAAM,KAAK,CAAC,IAAIA,OAAM,MAAM,aAAa;AAAA,MACxE;AAEM,YAAA,QAAQ,aAAa,MAAM;AAC3B,YAAA,QAAQ,aAAa,MAAM;AAEjC,aAAO,KAAK;AAAA,QACV,KAAK,4BAA4B,MAAM,EAAE;AAAA,QACzC,OAAO,4BAA4B,MAAM,EAAE;AAAA,QAC3C,UAAUA,OAAM;AAAA,QAChB,IAAIA,OAAM;AAAA,QACV,GAAG,MAAM,GAAG,KAAK,GAAG;AAAA,QACpB,IAAI,MAAM,GAAG,KAAK,GAAG;AAAA,QACrB,IAAI,MAAM,GAAG,KAAK,GAAG;AAAA,QACrB,GAAG,MAAM,GAAG,KAAK,GAAG;AAAA,QACpB,IAAI,MAAM,GAAG,KAAK,GAAG;AAAA,QACrB,IAAI,MAAM,GAAG,KAAK,GAAG;AAAA,MAAA,CACtB;AAAA,IAAA;AAGI,WAAA;AAAA,EACT;AC/JgB,WAAA,UACd,QACA,YACA,MACiC;AACjC,UAAM,SAASc,QAAAA,YACZ,MAAM,CAAC,MAAW,EAAE,CAAC,EACrB,OAAO,OAAO,QAAQ,EACtB,WAAW,OAAO,MAAM,UAAU,CAAC;AAEhC,UAAA,OAAO,OAAO,IAAW;AAExB,WAAA,KAAK,IAAI,CAAC,SAAS;AAAA,MACxB,IAAI,IAAI;AAAA,MACR,IAAI,IAAI;AAAA,MACR,GAAG,IAAI;AAAA,MACP,IAAI;AAAA,MACJ,IAAI,IAAI;AAAA,IAAA,EACR;AAAA,EACJ;ACAA,WAASC,uBAAqB,MAA8B;AAC1D,UAAM,SAAgB,CAAC;AACjB,UAAA,gBAAgB,0BAA0B,IAAI;AAEpD,eAAW,YAAY,MAAM;AAChB,iBAAAnD,UAAS,SAAS,MAAM;AACjC,YAAI,MAAM,OAAO,UAAU,CAAC,MAAM;AAChC,cAAI,EAAE,aAAa,QAAQ,SAAS,eAAe,MAAM;AACvD,mBAAO,EAAE,EAAE,QAAc,MAAA,SAAS,IAAI,QAAQ;AAAA,UAAA;AAEzC,iBAAA,EAAE,MAAM,SAAS;AAAA,QAAA,CACzB;AAED,YAAI,QAAQ,IAAI;AACd,iBAAO,KAAK;AAAA,YACV,UAAU,SAAS;AAAA,YACnB,GAAG,SAAS;AAAA,YACZ,iBAAiB,CAAA;AAAA,UAAC,CACnB;AAED,gBAAM,OAAO,SAAS;AAAA,QAAA;AAGjB,eAAA,GAAG,EAAE,WAAWA,OAAM;AAE7B,eAAO,GAAG,EAAEA,OAAM,GAAa,IAAI;AAAA,UACjCA,OAAM;AAAA,UACN;AAAA,QACF;AAEO,eAAA,GAAG,EAAE,gBAAgBA,OAAM,GAAa,IAC7C,4BAA4BA,OAAM,IAAW;AAAA,MAAA;AAAA,IACjD;AAGK,WAAA;AAAA,EACT;AAKA,WAASoD,uBACP,WACA,YAAY,YACoB;AAChC,UAAM,SAAyC,CAAC;AAChD,UAAM,aAAa,cAAc;AAGjC,eAAW,YAAY,WAAW;AAChC,iBAAWhB,UAAS,UAAU;AACtB,cAAA,MAAMA,OAAM,KAAK;AAEvB,YAAI,MAAM,OAAO,UAAU,CAAC,MAAM;AAChC,cAAI,EAAE,eAAe,QAAQ,eAAe,MAAM;AAChD,mBAAO,EAAE,IAAI,QAAQ,MAAM,IAAI,QAAQ;AAAA,UAAA;AAEzC,iBAAO,EAAE,QAAQ;AAAA,QAAA,CAClB;AAED,YAAI,QAAQ,IAAI;AACd,iBAAO,KAAK;AAAA,YACV;AAAA,YACA,MAAM,CAAA;AAAA,UAAC,CACR;AAED,gBAAM,OAAO,SAAS;AAAA,QAAA;AAGxB,cAAM,cAAc,SAAS;AACvB,cAAA,IAAIA,OAAM,KAAK,WAAW;AAC1B,cAAA,CAAC,IAAI,EAAE,IAAIA;AAEV,eAAA,GAAG,EAAE,KAAK,KAAK;AAAA,UACpB,UAAUA,OAAM,KAAK;AAAA,UACrB;AAAA,UACA,GAAG,aAAa,cAAc;AAAA,UAC9B,IAAI,aAAa,cAAc;AAAA,UAC/B,IAAI,aAAa,cAAc;AAAA,UAC/B,GAAG,aAAa,IAAI;AAAA,UACpB,IAAI,aAAa,KAAK;AAAA,UACtB,IAAI,aAAa,KAAK;AAAA,UACtB,OAAOA,OAAM,KAAK,gBAAgB,WAAW;AAAA,QAAA,CAC9C;AAAA,MAAA;AAAA,IACH;AAGK,WAAA;AAAA,EACT;AAKO,WAAS,kBACd,OAA+B,IAC/B,SAAqB,WACrB,YAAY,YACZ;AACA,UAAM,OAAO;AAAA,MACX;AAAA,MACA,CAAC,MAAM,EAAE;AAAA,MACT,CAAC,MAAM,EAAE;AAAA,IACX;AACM,UAAA,YAAYe,uBAAqB,IAAI;AAE3C,QAAI,UAAUE,QAAAA,MAAM;AACpB,QAAI,WAAW,UAAU;AACb,gBAAA,QAAQ,OAAOC,yBAAiB;AAAA,IAAA,WACjC,WAAW,aAAa;AACvB,gBAAA,QAAQ,OAAOC,4BAAoB;AAAA,IAAA;AAG/C,UAAM,SAAS,QAAQ,KAAK,IAAI,EAAE,SAAS;AAEpC,WAAAH,uBAAqB,QAAQ,SAAS;AAAA,EAC/C;ACtIgB,WAAA,mBACd,OAA+B,IACC;AAC1B,UAAA,SAAS,kBAAkB,MAAM,QAAQ;AAC/C,UAAM,OAAO,CAAC;AAGd,QAAI,WAAW;AACf,eAAW,UAAU,QAAQ;AACrB,YAAA,MAAM,OAAO,KAAK,OAAO,CAAC,KAAK,QAAQ,MAAO,IAAI,GAAc,CAAC;AAElE,WAAA,OAAO,GAAa,IAAI;AACjB,kBAAA;AAAA,IAAA;AAId,QAAI,OAAO;AACX,eAAW,UAAU,QAAQ;AAC3B,YAAM,KAAK;AACX,YAAM,KAAK,OAAO,KAAK,OAAO,GAAa,IAAI;AACxC,aAAA;AAEI,iBAAAhB,UAAS,OAAO,MAAM;AAC/B,QAAAA,OAAM,KAAK;AACX,QAAAA,OAAM,KAAK;AAAA,MAAA;AAAA,IACb;AAGK,WAAA;AAAA,EACT;ACPA,WAAS,qBAAqB,MAAM;AAClC,UAAM,SAAgB,CAAC;AACjB,UAAA,gBAAgB,0BAA0B,IAAI;AAEpD,eAAW,YAAY,MAAM;AAChB,iBAAApC,UAAS,SAAS,MAAM;AACjC,YAAI,MAAM,OAAO,UAAU,CAAC,MAAM;AAChC,cAAI,EAAE,aAAa,QAAQA,OAAM,eAAe,MAAM;AACpD,mBAAO,EAAE,EAAE,QAAc,MAAAA,OAAM,IAAI,QAAQ;AAAA,UAAA;AAEtC,iBAAA,EAAE,MAAMA,OAAM;AAAA,QAAA,CACtB;AAED,YAAI,QAAQ,IAAI;AACd,iBAAO,KAAK;AAAA,YACV,GAAGA,OAAM;AAAA,YACT,iBAAiB,CAAA;AAAA,UAAC,CACnB;AAED,gBAAM,OAAO,SAAS;AAAA,QAAA;AAGxB,eAAO,GAAG,EAAE,SAAS,GAAa,IAAI;AAAA,UACpCA,OAAM;AAAA,UACN;AAAA,QACF;AACO,eAAA,GAAG,EAAE,gBAAgB,SAAS,GAAa,IAChD,4BAA4BA,OAAM,IAAI;AAAA,MAAA;AAAA,IAC1C;AAGK,WAAA;AAAA,EACT;AAKA,WAAS,qBAAqB,WAA2C;AACvE,UAAM,SAAyC,CAAC;AAEhD,eAAW,YAAY,WAAW;AAChC,YAAM,SAA0C,CAAC;AAEjD,iBAAWoC,UAAS,UAAU;AACtB,cAAA,CAAC,IAAI,EAAE,IAAIA;AACX,cAAA,IAAIA,OAAM,KAAK;AACrB,eAAO,KAAK;AAAA,UACV,KAAK,SAAS;AAAA,UACd;AAAA,UACA,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ,GAAG,KAAK;AAAA,UACR;AAAA,UACA;AAAA,UACA,OAAOA,OAAM,KAAK,gBAAgB,SAAS,GAAG;AAAA,QAAA,CAC/C;AAAA,MAAA;AAGH,aAAO,KAAK;AAAA,QACV,KAAK,SAAS;AAAA,QACd,MAAM;AAAA,MAAA,CACP;AAAA,IAAA;AAGI,WAAA;AAAA,EACT;AAKgB,WAAA,eACd,MACA,aAAa,OACa;AAC1B,UAAM,OAAO,SAA+B,MAAM,CAAC,MAAM,EAAE,GAAG;AACxD,UAAA,YAAY,qBAAqB,IAAI;AACrC,UAAA,UAAU,CAAC,aAAaiB,QAAAA,UAAUA,cAAM,EAAE,OAAOC,yBAAiB;AAExE,UAAM,SAAS,QAAQ,KAAK,IAAI,EAAE,SAAS;AAE3C,WAAO,qBAAqB,MAAM;AAAA,EACpC;AC1GO,QAAM,iBAAiB,CAC5B,QACA,YAAuB,YACvB,UAA8B,WAC3B;AACH,UAAM,OAAO,sBAAsB,QAAQ,WAAW,OAAO;AAC7D,UAAM,aAAa,cAAc;AAC3B,UAAA,IAAI,aAAa,MAAM;AAE7B,QAAI,aAAa;AACjB,eAAWlB,UAAS,MAAM;AAClB,MAAAA,OAAA,GAAG,CAAC,GAAG,IAAI;AACjB,oBAAcA,OAAM,CAAC;AACf,MAAAA,OAAA,GAAG,CAAC,GAAG,IAAI;AACjB,MAAAA,OAAM,CAAC,IAAI;AAAA,IAAA;AAGN,WAAA;AAAA,EACT;ACwBO,QAAM,OAAN,MAAM,aAAYoB,MAAAA,UAAoB;AAAA,IAAtC,cAAA;AAAA,YAAA,GAAA,SAAA;AAcmB,WAAA,gBAAA;AACA,WAAA,gBAAA;AACL,WAAA,UAAA;AACF,WAAA,SAAA;AACA,WAAA,SAAA;AACjB,WAAA,WAAWzB,gBAAuB;AAsFlC,WAAA,cAAc,CAAC,UAAsB;AAE/B,YAAA,KAAK,MAAM,UAAU;AACvB;AAAA,QAAA;AAIE,YAAA,MAAM,UAAU,GAAG;AACrB;AAAA,QAAA;AAIF,YACE,CAAC,KAAK,MAAM,iBACZ,MAAM,UACN,CAAE,MAAM,OAAuB,UAAU,SAAS,eAAe,GACjE;AACA;AAAA,QAAA;AAGF,cAAM,eAAe;AACrB,cAAM,gBAAgB;AAEtB,4BAAoB,KAAK;AACzB,aAAK,UAAU;AAGR,eAAA,iBAAiB,aAAa,KAAK,WAAW;AAC9C,eAAA,iBAAiB,WAAW,KAAK,SAAS;AAAA,MACnD;AAEA,WAAA,cAAc,CAAC,UAAsB;AACnC,cAAM,eAAe;AACrB,cAAM,gBAAgB;AAEjB,aAAA,SAAS,KAAK,SAAS,MAAM;AAC7B,aAAA,SAAS,KAAK,SAAS,MAAM;AAE9B,YAAA,KAAK,kBAAkB;AACrB,cAAA,KAAK,MAAM,QAAQ;AACrB,qBAAS,KAAK,MAAM,QAAQ,IAAI,KAAK,MAAM;AAAA,UAAA;AAG7C,eAAK,SAAS;AACd,eAAK,SAAS;AACd,eAAK,UAAU;AAEV,eAAA,WAAW,OAAO,OAAO;AAAA,QAAA,OACzB;AACL,eAAK,IAAI,MAAM,WAAW,MAAM,WAAW,OAAO,OAAO;AAAA,QAAA;AAAA,MAE7D;AAEA,WAAA,YAAY,CAAC,UAAsB;AACjC,cAAM,eAAe;AACrB,cAAM,gBAAgB;AAEtB,aAAK,gBAAgB;AACrB,4BAAoB,IAAI;AAExB,YAAI,KAAK,SAAS;AACX,eAAA,SAAS,OAAO,OAAO;AAAA,QAAA,OACvB;AACL,eAAK,MAAM,YAAY;AAAA,YACrB,aAAa;AAAA,YACb,QAAQ;AAAA,UAAA,CACT;AAAA,QAAA;AAAA,MAEL;AAEA,WAAA,eAAe,CAAC,UAAsB;AAEhC,YAAA,KAAK,MAAM,UAAU;AACvB;AAAA,QAAA;AAIE,YAAA,MAAM,QAAQ,WAAW,GAAG;AAC9B;AAAA,QAAA;AAGF,cAAM,eAAe;AACrB,cAAM,gBAAgB;AAEtB,4BAAoB,KAAK;AACzB,aAAK,UAAU;AAEf,aAAK,gBAAgB,MAAM,QAAQ,CAAC,EAAE;AACtC,aAAK,gBAAgB,MAAM,QAAQ,CAAC,EAAE;AAG/B,eAAA,iBAAiB,aAAa,KAAK,WAAW;AAC9C,eAAA,iBAAiB,YAAY,KAAK,UAAU;AAAA,MACrD;AAEA,WAAA,cAAc,CAAC,UAAsB;AACnC,cAAM,eAAe;AACrB,cAAM,gBAAgB;AAGtB,cAAM,IAAI,MAAM,QAAQ,CAAC,EAAE;AAC3B,cAAM,IAAI,MAAM,QAAQ,CAAC,EAAE;AAErB,cAAA,SAAS,IAAI,KAAK;AAClB,cAAA,SAAS,IAAI,KAAK;AAEnB,aAAA,SAAS,KAAK,SAAS;AACvB,aAAA,SAAS,KAAK,SAAS;AAExB,YAAA,KAAK,kBAAkB;AACzB,eAAK,SAAS;AACd,eAAK,SAAS;AACd,eAAK,UAAU;AAEV,eAAA,WAAW,OAAO,OAAO;AAAA,QAAA,OACzB;AACL,gBAAM,aAAa,KAAK,IAAI,QAAQ,QAAQ,OAAO,OAAO;AAE1D,cAAI,CAAC,YAAY;AACf,iBAAK,gBAAgB;AACrB,iBAAK,gBAAgB;AAAA,UAAA;AAAA,QACvB;AAAA,MAEJ;AAEA,WAAA,aAAa,CAAC,UAAsB;AAClC,cAAM,eAAe;AACrB,cAAM,gBAAgB;AAEtB,aAAK,gBAAgB;AACrB,4BAAoB,IAAI;AAExB,YAAI,KAAK,SAAS;AACX,eAAA,SAAS,OAAO,OAAO;AAAA,QAAA,OACvB;AACL,eAAK,MAAM,YAAY;AAAA,YACrB,aAAa;AAAA,YACb,QAAQ;AAAA,UAAA,CACT;AAAA,QAAA;AAAA,MAEL;AAAA,IAAA;AAAA,IAhOA,oBAAoB;AACd,UAAA,KAAK,SAAS,SAAS;AACzB,aAAK,SAAS,QAAQ,iBAAiB,aAAa,KAAK,aAAa;AAAA,UACpE,SAAS;AAAA,QAAA,CACV;AACD,aAAK,SAAS,QAAQ,iBAAiB,cAAc,KAAK,cAAc;AAAA,UACtE,SAAS;AAAA,QAAA,CACV;AAAA,MAAA;AAAA,IACH;AAAA,IAGF,uBAAuB;AACrB,WAAK,gBAAgB;AAEjB,UAAA,KAAK,SAAS,SAAS;AACzB,aAAK,SAAS,QAAQ,oBAAoB,aAAa,KAAK,WAAW;AACvE,aAAK,SAAS,QAAQ;AAAA,UACpB;AAAA,UACA,KAAK;AAAA,QACP;AAAA,MAAA;AAAA,IACF;AAAA,IAGF,kBAAkB;AACT,aAAA,oBAAoB,aAAa,KAAK,WAAW;AACjD,aAAA,oBAAoB,WAAW,KAAK,SAAS;AAC7C,aAAA,oBAAoB,aAAa,KAAK,WAAW;AACjD,aAAA,oBAAoB,YAAY,KAAK,UAAU;AAG7C,eAAA,KAAK,MAAM,QAAQ,IAAI;AAChC,0BAAoB,IAAI;AAAA,IAAA;AAAA,IAG1B,iBAAiB;AACT,YAAA,EAAE,cAAc,KAAK;AAC3B,aACE,CAAC,KAAK,YACL,KAAK,IAAI,KAAK,MAAM,IAAI,aAAa,KAAK,IAAI,KAAK,MAAM,IAAI;AAAA,IAAA;AAAA,IAIlE,WAAW,aAAa,QAA2B;AACjD,WAAK,MAAM,WAAW;AAAA,QACpB;AAAA,QACA;AAAA,MAAA,CACD;AAAA,IAAA;AAAA,IAGH,UAAU,GAAW,GAAW,QAA2B,aAAa;AACtE,WAAK,MAAM,UAAU;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA,CACD;AAAA,IAAA;AAAA,IAGH,SAAS,aAAa,QAA2B;AACzC,YAAA,EAAE,aAAa,KAAK;AAEjB,eAAA;AAAA,QACP;AAAA,QACA;AAAA,MAAA,CACD;AAAA,IAAA;AAAA,IAGH,IAAI,GAAW,GAAW,aAAa,QAA2B;AAChE,YAAM,EAAE,OAAO,WAAW,OAAO,QAAQ,OAAA,IAAW,KAAK;AAEzD,YAAM,YAAY0B,qBAAA;AAAA,QAChBnB,+BAAU,QAAQoB,+BAAU,IAAI,OAAO,IAAI,KAAK,CAAC;AAAA,QACjD;AAAA,MACF;AAEA,YAAM,kBACJ,aAAa,gBAAgB,QAAQ,OAAO,SAAS;AACvD,UAAI,CAAC,iBAAiB;AACpB,aAAK,UAAU,UAAU,GAAG,UAAU,GAAG,QAAQ,WAAW;AAAA,MAAA;AAGvD,aAAA;AAAA,IAAA;AAAA,IAiJT,SAAS;AACP,4CAAQ,KAAE,EAAA,KAAK,KAAK,UAAW,UAAA,KAAK,MAAM,UAAS;AAAA,IAAA;AAAA,EAEvD;AAzPE,OAAO,eAAkC;AAAA,IACvC,GAAG;AAAA,IACH,GAAG;AAAA,IACH,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,IACX,eAAe;AAAA,IACf,YAAY,MAAM;AAAA,IAClB,WAAW,MAAM;AAAA,IACjB,UAAU,MAAM;AAAA,IAChB,aAAa,MAAM;AAAA,EACrB;AAZK,MAAM,MAAN;AC1CM,QAAA,cAAc,CAAC,QAAQ,YAAY;AAAA,IAC9C,IAAI,OAAO,IAAI,OAAO,KAAK;AAAA,IAC3B,IAAI,OAAO,IAAI,OAAO,KAAK;AAAA,EAC7B;AAKO,QAAM,2BAA2B,CAAC,QAAQ,WAC/C,KAAK;AAAA,IACH,KAAK,IAAI,OAAO,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO,GAAG,CAAC;AAAA,EACpE;AAKc,WAAA,eAAe,OAAOpD,OAAM;AAC1C,UAAM,EAAE,MAAM,QAAQA,MAAK,sBAAsB;AAE3C,UAAA,CAAC,QAAQ,MAAM,IAAI,CAAC,GAAG,MAAM,OAAO,EAAE,IAAI,CAAC,WAAW;AAAA,MAC1D,GAAG,MAAM,UAAU,KAAK,MAAM,IAAI;AAAA,MAClC,GAAG,MAAM,UAAU,KAAK,MAAM,GAAG;AAAA,IAAA,EACjC;AAEI,UAAA,WAAW,yBAAyB,QAAQ,MAAM;AAClD,UAAA,WAAW,YAAY,QAAQ,MAAM;AAEpC,WAAA;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;ACGO,QAAM,QAAN,MAAM,cAAakD,MAAAA,UAA4B;AAAA,IAA/C,cAAA;AAAA,YAAA,GAAA,SAAA;AAaL,WAAA,WAAWzB,gBAAuB;AA0ElC,WAAA,eAAe,CAAC,UAAU;AACxB,cAAM,EAAE,mBAAmB,qBAAqB,QAAQ,UAAA,IACtD,KAAK;AAEP,YAAI,mBAAmB;AACd,iBAAA;AAAA,QAAA;AAGH,cAAA,cAAc,MAAM,WAAW,MAAM;AACvC,YAAA,uBAAuB,CAAC,aAAa;AAChC,iBAAA;AAAA,QAAA;AAGT,cAAM,eAAe;AACrB,cAAM,gBAAgB;AAEhB,cAAAK,SAAQ,mBAAmB,OAAO,MAAM;AAC9C,YAAIA,QAAO;AACH,gBAAA,EAAE,GAAG,EAAA,IAAMA;AACjB,gBAAM,OAAO,KAAK,QAAQ,MAAM,MAAM;AAEtC,eAAK,MAAM,GAAG,GAAG,MAAM,KAAK;AAG5B,uBAAa,KAAK,OAAO;AACzB,eAAK,UAAU,WAAW,MAAM,UAAA,GAAa,GAAG;AAAA,QAAA;AAAA,MAEpD;AAEA,WAAA,eAAe,CAAC,UAAsB;AAChC,YAAA,MAAM,QAAQ,WAAW,GAAG;AAC9B,gBAAM,eAAe;AACrB,gBAAM,gBAAgB;AACtB,8BAAoB,KAAK;AAEzB,eAAK,aAAa,eAAe,OAAO,KAAK,SAAS,OAAO;AACxD,eAAA,eAAe,KAAK,WAAW;AAE7B,iBAAA,iBAAiB,aAAa,KAAK,WAAW;AAC9C,iBAAA,iBAAiB,YAAY,KAAK,UAAU;AAAA,QAAA;AAAA,MAEvD;AAEA,WAAA,cAAc,CAAC,UAAsB;AAC/B,YAAA,MAAM,QAAQ,WAAW,GAAG;AAC9B,gBAAM,eAAe;AACrB,gBAAM,gBAAgB;AAEtB,gBAAM,EAAE,SAAS,IAAI,eAAe,OAAO,KAAK,SAAS,OAAO;AAC1D,gBAAA,iBAAiB,WAAW,KAAK;AAEvC,gBAAMA,SAAQ7B,qBAAAA,aAAaC,qBAAAA,QAAQ,KAAK,MAAM,MAAM,GAAG;AAAA,YACrD,GAAG,KAAK,WAAW,SAAS;AAAA,YAC5B,GAAG,KAAK,WAAW,SAAS;AAAA,UAAA,CAC7B;AAEG,cAAA4B,OAAM,KAAKA,OAAM,GAAG;AAChB,kBAAA,UAAU,KAAK,MAAMA,OAAM,GAAGA,OAAM,GAAG,gBAAgB,KAAK;AAElE,gBAAI,CAAC,SAAS;AACZ,mBAAK,eAAe;AAAA,YAAA;AAAA,UACtB;AAAA,QACF;AAAA,MAEJ;AAEA,WAAA,aAAa,CAAC,UAAsB;AAClC,cAAM,eAAe;AACrB,cAAM,gBAAgB;AAEf,eAAA,oBAAoB,aAAa,KAAK,WAAW;AACjD,eAAA,oBAAoB,YAAY,KAAK,UAAU;AAEtD,4BAAoB,IAAI;AACxB,aAAK,MAAM,UAAU;AAAA,MACvB;AAAA,IAAA;AAAA,IAlJA,oBAAoB;AAClB,YAAM,EAAE,UAAU,kBAAkB,IAAI,KAAK;AAEvC,YAAA,MAAM,KAAK,SAAS;AACtB,UAAA,CAAC,YAAY,KAAK;AACpB,YAAI,CAAC,mBAAmB;AAClB,cAAA,iBAAiB,cAAc,KAAK,cAAc;AAAA,YACpD,SAAS;AAAA,UAAA,CACV;AAAA,QAAA;AAGH,YAAI,iBAAiB,cAAc,KAAK,cAAc,EAAE,SAAS,OAAO;AAAA,MAAA;AAAA,IAC1E;AAAA,IAGF,uBAAuB;AACd,aAAA,oBAAoB,aAAa,KAAK,WAAW;AACjD,aAAA,oBAAoB,YAAY,KAAK,UAAU;AACtD,2BAAqB,KAAK,GAAG;AAC7B,mBAAa,KAAK,OAAO;AAEnB,YAAA,MAAM,KAAK,SAAS;AAC1B,UAAI,KAAK;AACH,YAAA,oBAAoB,cAAc,KAAK,YAAY;AACnD,YAAA,oBAAoB,cAAc,KAAK,YAAY;AAAA,MAAA;AAGzD,0BAAoB,IAAI;AAAA,IAAA;AAAA,IAG1B,QAAQ,OAAe;AACf,YAAA,EAAE,gBAAgB,KAAK;AAC7B,aAAO,CAAC,QAAQ,IAAI,cAAc,IAAI,IAAI;AAAA,IAAA;AAAA,IAG5C,MAAM,GAAW,GAAW,MAAc,aAAa;AACrD,YAAM,EAAE,SAAS,SAAS,QAAQ,OAAA,IAAW,KAAK;AAElD,YAAM,UAAU;AAAA,QACd;AAAA,UACE,GAAG,OAAO;AAAA,UACV,gBAAgB;AAAA,UAChB,gBAAgB;AAAA,QAClB;AAAA,QACA;AAAA,MACF;AAEA,UAAI,CAAC,SAAS;AACZ,cAAM,YAAYqB,qBAAA;AAAA,UAChBnB,qBAAA;AAAA,YACE;AAAA,YACAoB,qBAAA,UAAU,GAAG,CAAC;AAAA,YACdC,qBAAA,MAAM,MAAM,IAAI;AAAA,YAChBD,+BAAU,CAAC,GAAG,CAAC,CAAC;AAAA,UAClB;AAAA,UACA;AAAA,QACF;AAEK,aAAA,MAAM,sBAAsB,MAAM;AAC9B,iBAAA;AAAA,YACL,OAAO,UAAU;AAAA,YACjB,GAAG,UAAU;AAAA,YACb,GAAG,UAAU;AAAA,YACb;AAAA,UAAA,CACD;AAAA,QAAA,CACF;AAAA,MAAA;AAGI,aAAA;AAAA,IAAA;AAAA,IAgFT,SAAS;AACP,YAAM,EAAE,OAAO,SAAS,IAAI,KAAK;AACjC,4CACG,KAAE,EAAA,KAAK,KAAK,UAAU,OACpB,UACH;AAAA,IAAA;AAAA,EAGN;AA3KE,QAAO,eAA0C;AAAA,IAC/C,GAAG;AAAA,IACH,GAAG;AAAA,IACH,OAAO;AAAA,IACP,aAAa;AAAA,IACb,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AARK,MAAM,OAAN;;;;;;;;;ACRM,QAAA,iBAAmD,CAAC;AAAA,IAC/D;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA;AAAA,EACF,MACE/C,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,WAAWiC,MAAI,WAAW,WAAW;AAAA,QAC9C,CAACA,MAAI,UAAU,GAAG,gBAAgB;AAAA,QAClC,CAACA,MAAI,QAAQ,GAAG,gBAAgB;AAAA,MAAA,CACjC;AAAA,MACD;AAAA,MAEC,UAAQ,QAAA,IAAI,CAAC5B,QAAO,UACnBL,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC,SAASH;AAAA,UAET;AAAA,QAAA;AAAA,QADK,OAAO,KAAK;AAAA,MAGpB,CAAA;AAAA,IAAA;AAAA,EACH;;;;;ACnCW,QAAA,uBAA+D,CAAC;AAAA,IAC3E;AAAA,IACA;AAAA,EACF,MACEL,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,WAAWiC,MAAI,QAAQ,SAAS;AAAA,MAC3C,OAAO,EAAE,YAAY,MAAM;AAAA,IAAA;AAAA,EAC7B;;;;;;;;;;;ACwCW,QAAA,sBAA6D,CAAC;AAAA,IACzE,OAAAjB;AAAA,IACA,QAAAiC,yCAAU,sBAAqB,EAAA;AAAA,IAC/B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,EACF,MACElC,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,WAAW,WAAWkB,MAAI,OAAO,WAAW;AAAA,QAC1C,CAACA,MAAI,QAAQ,GAAG,gBAAgB;AAAA,QAChC,CAACA,MAAI,UAAU,GAAG,gBAAgB;AAAA,MAAA,CACnC;AAAA,MACD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA,UAAA;AAAA,QAACjC,2BAAAA,IAAAQ,UAAAA,cAAA,EAAwC,SAASyC,SAAQ,MAAc,CAAA;AAAA,QACvEjD,2BAAA,IAAA,QAAA,EAAK,WAAWiC,MAAI,OAAQ,UAAMjB,OAAA,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACrC;;;;;;;;;;;;;;;AC9CW,QAAA,mBAA8C,CAAC;AAAA,IAC1D;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc,CAAC,0BAA0B,SAAS;AAAA,IAClD,cAAc;AAAA,EAChB,MAAM;AAEE,UAAA,QAAQ,OACX,MAAM,WAAW,EACjB,OAAO,EAAE,EACT,QACA,EAAA,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,IAAI,IAAI,EAAE,GAAG,EAC/B,KAAK,GAAG;AAGL,UAAA,CAACvB,MAAKkB,MAAK,IAAID,MAAA;AAAA,MACnB,MACEwC,QAAA;AAAA,QACE;AAAA,UACE;AAAA,UACA,CAAC,MAAM,EAAE;AAAA,UACT,CAAC,MAAM,EAAE;AAAA,QAAA;AAAA,MAEb;AAAA,MACF,CAAC,IAAI;AAAA,IACP;AAGM,UAAA,cAAc,gBAAgB,aAAa,KAAK;AAGpD,WAAAnC,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,WAAW,WAAWkB,MAAI,WAAW,WAAW;AAAA,UAC9C,CAACA,MAAI,QAAQ,GAAG,gBAAgB;AAAA,UAChC,CAACA,MAAI,UAAU,GAAG,gBAAgB;AAAA,QAAA,CACnC;AAAA,QAED,UAAA;AAAA,UAAAjC,+BAAC,SAAI,WAAWiC,MAAI,OAAQ,UAAA,YAAYtB,MAAK,GAAE;AAAA,UAC/CX,2BAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW,WAAWiC,MAAI,UAAU,iBAAiB;AAAA,cACrD,OAAO;AAAA,gBACL,YAAY,mBAAmB,WAAW,GAAG,KAAK;AAAA,cAAA;AAAA,YACpD;AAAA,UACF;AAAA,yCACC,OAAI,EAAA,WAAWA,MAAI,KAAM,UAAA,YAAYxC,IAAG,EAAE,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAC7C;AAAA,EAEJ;;;;;ACnCa,QAAA,WAAuC,CAAC,UAAU;AACvD,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,IACE,kBAAkB,yBAAyB,KAAK;AAE9C,UAAA,SAASiB,MAAAA,QAAQ,MAAM;AACrB,YAAA,MAAM,MAAM,IAAI;AAEtB,UAAI,cAAc,KAAK;AACd,eAAA;AAAA,UACL,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ,IAAI;AAAA,QACN;AAAA,MAAA,OACK;AACE,eAAA;AAAA,UACL,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ,IAAI;AAAA,QACN;AAAA,MAAA;AAAA,IACF,GACC,CAAC,WAAW,MAAM,QAAQ,OAAO,KAAK,CAAC;AAGxC,WAAAV,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAG;AAAA,QACJ,WAAW,WAAWiC,MAAI,UAAU,SAAS;AAAA,QAC7C;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR,MAAK;AAAA,MAAA;AAAA,IACP;AAAA,EAEJ;AAEO,QAAM,0BAAkD;AAAA,IAC7D,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,aAAa;AAAA,EACf;;;;;ACxDa,QAAA,aAA2C,CAAC,UAAU;AAC3D,UAAA,EAAE,MAAM,WAAW,UAAU,MAAM,QAAQ,OAAO,OAAO,UAAU;AAAA,MACvE,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AACM,UAAA,SAASvB,MAAAA,QAAQ,MAAM;AACrB,YAAA,MAAM,MAAM,IAAI;AAChB,YAAA,aAAa,QAAQ,IAAI,SAAS;AAClC,YAAA,MAAM,MAAM,UAAU;AAE5B,UAAI,aAAa,YAAY;AACpB,eAAA;AAAA,UACL,GAAG;AAAA,UACH,GAAG;AAAA,UACH;AAAA,UACA,OAAO;AAAA,UACP,MAAM;AAAA,QACR;AAAA,MAAA,OACK;AACE,eAAA;AAAA,UACL,GAAG;AAAA,UACH,GAAG;AAAA,UACH,QAAQ;AAAA,UACR;AAAA,UACA,MAAM;AAAA,QACR;AAAA,MAAA;AAAA,IACF,GACC,CAAC,OAAO,MAAM,OAAO,QAAQ,OAAO,MAAM,QAAQ,CAAC;AAE/C,WAAAV,+BAAC,UAAK,WAAW,WAAWiC,MAAI,YAAY,SAAS,GAAI,GAAG,QAAQ;AAAA,EAC7E;AAEO,QAAM,4BAA4B;AAAA,IACvC,MAAM;AAAA,EACR;ACxBa,QAAA,iBAAmD,CAAC;AAAA,IAC/D,MAAArB,QAAOZ,2BAAAA,IAAC,UAAS,EAAA,WAAU,MAAM,CAAA;AAAA,IACjC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,MAAM;AACJ,UAAM,YAAYU,MAAA;AAAA,MAChB,OAAO,EAAE,GAAG,yBAAyB,GAAGE,MAAK,MAAM;AAAA,MACnD,CAACA,MAAK,KAAK;AAAA,IACb;AACA,UAAM,cAAcF,MAAA;AAAA,MAClB,OAAO,EAAE,GAAG,2BAA2B,IAAI,iCAAQ,UAAS,CAAI,EAAA;AAAA,MAChE,CAAC,iCAAQ,KAAK;AAAA,IAChB;AAEA,UAAM,gBAAgB,CAAC,cACrB,cAAc,SAAS,cAAc;AACvC,UAAM,gBAAgB,CAAC,cACrB,cAAc,SAAS,cAAc;AAEvC,UAAM,EAAE,WAAW,UAAU,IAAIA,cAAQ,MAAM;AAC7C,YAAM,mBAAmB;AAAA,QACvB,GAAG;AAAA,QACH,GAAG,MAAM,WAAW;AAAA,MACtB;AACA,YAAM,mBAAmB;AAAA,QACvB,GAAG;AAAA,QACH,GAAG,MAAM,WAAW;AAAA,MACtB;AAEO,aAAA;AAAA,QACL,WAAW;AAAA,UACT;AAAA,UACA,iBAAiB;AAAA,UACjB,MAAM;AAAA,UACN,YAAY,iBAAiB,UAAU,MAAM;AAAA,UAC7C,iBAAiB;AAAA,QACnB;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA,iBAAiB;AAAA,UACjB,MAAM;AAAA,UACN,YAAY,iBAAiB,UAAU,KAAK;AAAA,UAC5C,iBAAiB;AAAA,QAAA;AAAA,MAErB;AAAA,IAAA,GACC,CAAC,QAAQ,OAAO,OAAO,OAAO,QAAQ,MAAM,CAAC;AAEhD,UAAM,cAAcR,MAAA;AAAA,MAClB,CACE,SACA,MACA,OACA,WACA,SACG;AACH,eAAO,KAAK,IAAI,CAACuB,QAAO,yCACrBlB,MAAAA,UACC,EAAA,UAAAP,2BAAA;AAAA,UAACQ,UAAA;AAAA,UAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA,MAAMiB;AAAA,YACN;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,QAAA,KARW,GAAG,IAAI,IAAI,SAAS,IAAI,KAAK,EAU5C,CACD;AAAA,MACH;AAAA,MACA,CAAC,QAAQ,KAAK;AAAA,IAChB;AAEA,UAAM,eAAevB,MAAA;AAAA,MACnB,CACEiD,YACAC,YACA,SACA,WACA,SACG;AACH,+CACG7C,gBACE,EAAA,UAAA;AAAA,UAAA,cAAc,SAAS,KACtB,YAAY,SAAS4C,YAAW,QAAQ,KAAK,IAAI;AAAA,UAClD,cAAc,SAAS,KACtB,YAAY,SAASC,YAAW,QAAQ,KAAK,IAAI;AAAA,QAAA,GACrD;AAAA,MAEJ;AAAA,MACA,CAAC,aAAa,QAAQ,MAAM;AAAA,IAC9B;AAEA,2CACG,KAAE,EAAA,OAAO,EAAE,eAAe,OACxB,GAAA,UAAA;AAAA,MAAAxC,SACC,aAAa,WAAW,WAAWA,OAAM,UAAU,WAAW,MAAM;AAAA,MACrE,UACC;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA,YAAY;AAAA,QACZ;AAAA,MAAA;AAAA,IACF,GACJ;AAAA,EAEJ;;;;;AClKa,QAAA,WAAuC,CAAC;AAAA,IACnD;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd,cAAc;AAAA,EAChB,MACEZ,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,QAAQ;AAAA,MACR;AAAA,MACA,IAAG;AAAA,MACH,cAAa;AAAA,MACb,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,WAAWiC,MAAI;AAAA,IAAA;AAAA,EACjB;ACjBW,QAAA,eAA+C,CAAC;AAAA,IAC3D;AAAA,IACA;AAAA,IACA,cAAc;AAAA,EAChB,MAAOjC,2BAAAA,IAAA,QAAA,EAAK,QAAgB,aAA0B,WAAW,MAAO,CAAA;ACD3D,QAAA,WAAuC,CAAC;AAAA,IACnD;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ,QAAQ;AAAA,qCACL,cAAa,EAAA,QAAO,MAAK,aAAa,OAAS,OAAQ;AAAA,qCACvD,cAAa,EAAA,QAAO,OAAM,aAAa,KAAO,MAAO;AAAA,IAAA;AAAA,EAE1D,MAAM;AACJ,QAAI,cAAc,UAAU;AAC1B,4CACG,kBAAe,EAAA,IACb,gBAAM,IAAI,CAAC,MAAM,UAChBA,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC,SAAS;AAAA,UAET,OAAO,KAAK,MAAM,SAAS;AAAA,QAAA;AAAA,QADtB,YAAY,KAAK;AAAA,MAGzB,CAAA,GACH;AAAA,IAAA;AAIE,UAAA,MACJ,cAAc,aACV;AAAA,MACA,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA,IAEJ;AAAA,MACA,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IACN;AAGF,WAAAR,2BAAA,IAAC,kBAAe,EAAA,cAAa,OAAM,IAAS,GAAG,KAC5C,UAAM,MAAA,IAAI,CAAC,MAAM,UAChBA,2BAAA;AAAA,MAACQ,UAAA;AAAA,MAAA;AAAA,QACC,SAAS;AAAA,QAET,OAAO,KAAK,MAAM,SAAS;AAAA,MAAA;AAAA,MADtB,YAAY,KAAK;AAAA,IAGzB,CAAA,GACH;AAAA,EAEJ;ACjDa,QAAA,iBAAmD,CAAC;AAAA,IAC/D;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT,QAAQ;AAAA,qCACL,cAAa,EAAA,QAAO,MAAK,aAAa,OAAS,OAAQ;AAAA,qCACvD,cAAa,EAAA,QAAO,OAAM,aAAa,OAAS,MAAO;AAAA,IAAA;AAAA,EAE5D,MACER,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,GAAG;AAAA,MACH,eAAc;AAAA,MAEb,UAAM,MAAA,IAAI,CAAC,MAAM,UAChBA,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC,SAAS;AAAA,UAET;AAAA,QAAA;AAAA,QADK,YAAY,KAAK;AAAA,MAGzB,CAAA;AAAA,IAAA;AAAA,EACH;AC3BW,QAAA,OAAsB,CAAC,EAAE,IAAI,KACxC,MAAAR,+BAAC,UAAK,IACJ,UAAAA,+BAAC,UAAK,GAAE,KAAI,GAAE,KAAI,OAAM,QAAO,QAAO,QAAO,MAAY,EAC3D,CAAA;ACFW,QAAA,UAA4B,CAAC,EAAE,IAAI,KAC9C,MAAAA,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,OAAM;AAAA,MACN,QAAO;AAAA,MACP,cAAa;AAAA,MACb,kBAAiB;AAAA,MAEjB,UAAAA,2BAAA,IAAC,UAAK,WAAU,eAAc,OAAM,KAAI,QAAO,KAAI,KAAY,CAAA;AAAA,IAAA;AAAA,EACjE;;;;;;;;;;;;;ACiBW,QAAA,kBAA4C,CAAC;AAAA,IACxD,OAAAX;AAAA,IACA;AAAA,IACA;AAAA,EACF,MAAM;AACJ,QAAI,CAACA,QAAO;AACH,aAAA;AAAA,IAAA;AAGH,UAAA,eAAe,CAAC,MAA0B,UAAkB;AAC1D,YAAA,OAAO,MAAM,MAAM,KAAK;AAE9B,aACG0B,2BAAAA,KAAA,QAAA,EAAK,WAAWkB,MAAI,UACnB,UAAA;AAAA,QAACjC,+BAAA,QAAA,EAAK,WAAWiC,MAAI,eAAe,OAAO,EAAE,iBAAiB,QAAQ;AAAA,QACrElB,2BAAA,KAAA,QAAA,EAAK,WAAWkB,MAAI,cAClB,UAAA;AAAA,UAAY,YAAA,KAAK,OAAO,KAAK,CAAC;AAAA,UAAE;AAAA,QAAA,GACnC;AAAA,uCACC,QAAM,EAAA,UAAA,YAAY,KAAK,SAAS,KAAK,CAAC,EAAE,CAAA;AAAA,MAAA,GAC3C;AAAA,IAEJ;AAEM,UAAA,iBAAiB,CAAC5C,YAAiC;AACjD,YAAA,cAAcA,QAAM,KAAK,SAAS;AACxC,YAAM,cAAcA,QAAM,KAAK,MAAM,GAAG,EAAE;AAE1C,6CACGkB,gBACE,EAAA,UAAA;AAAA,QAAY,YAAA,IAAI,CAACkB,QAAO,MACvBzB,2BAAA,IAACO,MAAkB,UAAA,EAAA,UAAA,aAAakB,QAAO,CAAC,EAAzB,GAAA,CAA2B,CAC3C;AAAA,QACA,cAAc,KAAKV,2BAAAA,KAAC,OAAI,EAAA,UAAA;AAAA,UAAA;AAAA,UAAI;AAAA,UAAY;AAAA,QAAA,EAAQ,CAAA;AAAA,MAAA,GACnD;AAAA,IAEJ;AAEA,UAAM,aAAa,MAAM,QAAS1B,OAAc,IAAI;AAEpD,WACG0B,2BAAAA,KAAA,OAAA,EAAI,WAAsB,MAAK,WAC9B,UAAA;AAAA,MAAAf,2BAAAA,IAAC,SAAI,WAAWiC,MAAI,OAAQ,UAAY,YAAA5C,OAAO,CAAC,GAAE;AAAA,MACjD0B,2BAAA,KAAA,OAAA,EAAI,WAAWkB,MAAI,OACjB,UAAA;AAAA,QAAA,cAAc,eAAe5C,MAA8B;AAAA,QAC3D,CAAC,cACAW,2BAAA,IAACO,gBACE,EAAA,UAAA;AAAA,UACElB,OAA6B,SAC3BA,OAA6B;AAAA,QAAA,EAEpC,CAAA;AAAA,MAAA,EAEJ,CAAA;AAAA,IAAA,GACF;AAAA,EAEJ;;;;;;;ACrFO,QAAM,eAA6B;AAAA,IACxC,MAAM4C,MAAI;AAAA,IACV,gBAAgBA,MAAI;AAAA,EACtB;ACyBa,QAAA,eAA+C,CAAC;AAAA,IAC3D,yCAAW,iBAAgB,EAAA;AAAA,IAC3B,OAAA5C;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,MAAM;AAEF,WAAAW,2BAAA;AAAA,MAACqD,UAAA;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,QACN,GAAG;AAAA,QACJ,SAAS,MAAM;AACT,cAAA,CAAChE,UAAS,CAAC,MAAM;AACZ,mBAAA;AAAA,UAAA;AAGF,iBAAA,OAAO,YAAY,aACtB,QAAQ,QAAQA,QAAO,KAAK,IAC5B2C,MAAA,aAAa,SAAS;AAAA,YACtB,GAAG,QAAQ;AAAA,YACX,OAAA3C;AAAA,YACA;AAAA,UAAA,CACD;AAAA,QAAA;AAAA,MACL;AAAA,IACF;AAAA,EAEJ;ACiFa,QAAA,cAAciE,MAAA;AAAA,IACzB,CACE;AAAA,MACE;AAAA,MACA,UAAU;AAAA,MACV,SAAAC,0CAAW,cAAa,EAAA;AAAA,MACxB;AAAA,MACA;AAAA,MACA,WAAW;AAAA,MACX,cAAc;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,eAAe,MAAM;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW;AAAA,MACX,eAAe,MAAM;AAAA,MACrB,aAAa;AAAA,MACb,WAAW,IAAI,KAAK;AAAA,OAEtB,aACG;AACH,YAAM,CAAC,SAAS,UAAU,IAAIpD,eAAkB;AAChD,YAAM,CAAC,WAAW,YAAY,IAAIA,eAAoB;AACtD,YAAM,CAACd,QAAO,QAAQ,IAAIc,eAAc;AACxC,YAAM,CAAC,SAAS,UAAU,IAAIA,eAAc;AAC5C,YAAM,CAAC,SAAS,UAAU,IAAIA,eAAc;AAC5C,YAAM,CAAC,OAAO,QAAQ,IAAIA,eAAiB;AAC3C,YAAM,CAAC,OAAO,QAAQ,IAAIA,eAAiB;AAC3C,YAAM,MAAMF,MAAAA,OAA8C;AACpD,YAAA,gBAAgBA,aAA8C,IAAI;AACxE,YAAM,eAAe,KAAK,IAAI,WAAW,UAAU,KAAK,IAAI,KAAK;AAEjE,YAAM,QAAQ,KAAK,IAAI,WAAW,UAAU;AAE5C,YAAM,iBAAiB;AAEvB,YAAM,YAAYC,MAAA;AAAA,QAChB,CAAC,GAAW,MAAc;AAExB,cAAI,UAAU;AACZ,kBAAM,iBAAiB,eAAe,KAAK,IAAI,OAAO,MAAM,IAAI;AAC5D,gBAAA,MACF,KAAK,MAAM,IAAI,gBAAgB,IAAI,cAAc,IACjD,iBAAiB,KAAK;AAGjB,mBAAA,MAAM,eAAe,IAAI,KAAK;AAGrC,gBAAI,MAAM,GAAG;AACX,qBAAO,KAAK,KAAK;AAAA,YAAA;AAInB,kBAAM,QAAQ2B,QAAAA,cACX,OAAO,CAAC,GAAG,KAAK,CAAC,EACjB,MAAM,CAAC,YAAY,QAAQ,CAAC;AAC/B,kBAAM,MAAM,GAAG;AAER,mBAAA;AAAA,UAAA;AAGF,iBAAA;AAAA,QACT;AAAA,QACA,CAAC,UAAU,QAAQ,UAAU,aAAa,OAAO,YAAY,KAAK;AAAA,MACpE;AAEA,YAAM,gBAAgB3B,MAAA;AAAA,QACpB,CAAC,WAAqC;AACpC,gBAAM,SAA6B,CAAC;AAEpC,cAAI,SAAS;AACX,uBAAWuB,UAAS,QAAQ;AAC1B,oBAAM,cAAcA;AACpB,kBAAI,MAAM,QAAQ,YAAY,IAAI,GAAG;AACxB,2BAAA,eAAe,YAAY,MAAM;AAC1C,wBAAM,QAAQ,YAAY;AAC1B,sBAAI,MAAM,OAAO,UAAU,CAAC,MAAM;AAChC,0BAAM,OAAO,EAAE;AACX,wBAAA,gBAAgB,QAAQ,iBAAiB,MAAM;AACjD,6BAAO,KAAK,cAAc,MAAM,QAAQ;AAAA,oBAAA;AAE1C,2BAAO,SAAS;AAAA,kBAAA,CACjB;AAED,sBAAI,QAAQ,IAAI;AACd,2BAAO,KAAK;AAAA,sBACV,GAAG,YAAY;AAAA,sBACf,MAAM,CAAA;AAAA,oBAAC,CACR;AAED,0BAAM,OAAO,SAAS;AAAA,kBAAA;AAGlB+B,wBAAAA,QAAO,OAAO,GAAG,EAAE;AAErB,sBAAA,MAAM,QAAQA,KAAI,GAAG;AACvBA,0BAAK,KAAK,WAAW;AAAA,kBAAA;AAAA,gBACvB;AAAA,cACF,OACK;AACL,uBAAO,KAAK/B,MAAK;AAAA,cAAA;AAAA,YACnB;AAAA,UACF,OACK;AACL,uBAAWA,UAAS,QAAQ;AAC1B,oBAAM,cAAcA;AACpB,kBAAI,MAAM,QAAQ,YAAY,IAAI,GAAG;AACnC,uBAAO,KAAK;AAAA,kBACV,GAAG;AAAA,kBACH,GAAG,YAAY;AAAA,kBACf,MAAM,YAAY,KAAK,IAAI,CAAC,OAAO;AAAA,oBACjC,GAAG;AAAA,oBACH,KAAK,CAAC,eAAe,EAAE,IAAI,EAAE;AAAA,oBAC7B,OAAO,CAAC,eAAe,EAAE,IAAI,EAAE;AAAA,kBAAA,EAC/B;AAAA,gBAAA,CACH;AAAA,cAAA,OACI;AACL,sBAAM,eAAeA;AACrB,uBAAO,KAAK;AAAA,kBACV,GAAG;AAAA;AAAA,kBAEH,GAAG,aAAa,QAAQ,SAAY,aAAa,KAAKA,OAAM;AAAA,kBAC5D,GACE,aAAa,UAAU,SACnB,aAAa,IACb,aAAa;AAAA,gBAAA,CACpB;AAAA,cAAA;AAAA,YACH;AAAA,UACF;AAGK,iBAAA;AAAA,QACT;AAAA,QACA,CAAC,SAAS,YAAY;AAAA,MACxB;AAEA,YAAM,cAAcvB,MAAA;AAAA,QAClB,CAAC,UAA4B;AACrB,gBAAA,cAAc,cAAc,IAAI;AAGtC,cAAI,eAAe;AACnB,cAAI,CAAC,eAAe;AAClB,gBAAI,cAAc;AACD,6BAAA;AAAA,YAAA,OACV;AACU,6BAAA;AAAA,YAAA;AAAA,UACjB;AAKE,cAAA,SAAS,cAAc,WAAW,IAAI;AAE1C,gBAAM,EAAE,GAAG,EAAE,IAAI,qBAAqB;AAAA,YACpC;AAAA;AAAA,YAEA,SAAS,MAAM;AAAA,YACf,SAAS,MAAM;AAAA,UAAA,CAChB;AAGG,cAAA;AACA,cAAA;AACA,cAAA;AACJ,cAAI,OAAO;AACX,cAAI,cAAc;AACL,uBAAA;AACE,yBAAA;AACL,oBAAA;AAAA,UAAA,OACH;AACG,oBAAA,UAAU,GAAG,CAAC;AACX,uBAAA;AACE,yBAAA;AAAA,UAAA;AAIf,cAAI,OAAO,YAAY,CAAC,EAAE,MAAM,UAAU;AACjC,mBAAA;AAAA,UAAA;AAOH,gBAAA,WAAW,SAAS,SACtB,8BAA8B;AAAA,YAC9B,KAAK;AAAA,YACL,OAAO;AAAA,YACP,MAAM;AAAA,YACN;AAAA,YACA,WAAW,CAAC;AAAA,UACb,CAAA,IACC,yBAAyB;AAAA,YACzB,KAAK;AAAA,YACL,OAAO;AAAA,YACP,MAAM;AAAA,YACN;AAAA,YACA,cAAc;AAAA,UAAA,CACf;AAEH,cAAI,CAAC,QAAQ,UAAUb,MAAK,KAAK,UAAU;AACnC,kBAAA,SAAS,SAAS,SAAS,CAAC;AAC9B,gBAAA,SAAS,WAAW,SAAS,CAAC;AAClC,gBAAI,UAAU;AACd,gBAAI,UAAU;AAEV,gBAAA,MAAM,MAAM,GAAG;AACjB,uBAAS,SAAS;AACR,wBAAA;AACV,kBAAI,CAAC,WAAW;AACC,+BAAA;AAAA,cAAA;AAAA,YACjB,OACK;AACK,wBAAA;AAAA,YAAA;AAIR,gBAAA,WAAW,SAAS,WAAW,OAAO;AACxC;AAAA,YAAA;AAGF,qBAAS,MAAM;AACf,qBAAS,MAAM;AAEf,kBAAMoE,UAAS,MAAM;AACrB,kBAAM,EAAE,KAAK,SAASA,QAAO,sBAAsB;AAEnD,gBAAIC,WAAU;AACd,gBAAIC,WAAU;AAEd,gBAAI,UAAU;AAEZ,oBAAMC,eAAc,KAAK,IAAI,OAAO,MAAM,IAAI;AAC9CF,yBACE,SAAS,KAAK,IAAI,SAAS,iBAAiB,KAAK,EAAE,IACnDE;AACFD,yBACE,SAAS,KAAK,IAAI,SAAS,iBAAiB,KAAK,EAAE,IACnDC;AAAAA,YAAA,OACG;AACLF,yBAAU;AACVC,yBAAU;AAAA,YAAA;AAGZD,wBAAW,OAAO;AAClBC,wBAAW,MAAM;AAEjB,yBAAa,YAAY;AACzB,uBAAW,IAAI;AACf,qBAAS,QAAQ;AACjB,uBAAWD,QAAO;AAClB,uBAAWC,QAAO;AAEL,yBAAA;AAAA,cACX,SAAS;AAAA,cACT,OAAO;AAAA,cACP;AAAA,cACA;AAAA,cACA,SAAAD;AAAAA,cACA,SAAAC;AAAAA,cACA,aAAa;AAAA,YAAA,CACd;AAAA,UAAA;AAAA,QAEL;AAAA,QACA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACAtE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MAEJ;AAEM,YAAA,eAAea,MAAAA,YAAY,MAAM;AACrC,iBAAS,MAAS;AAClB,iBAAS,MAAS;AAElB,iBAAS,MAAS;AAClB,mBAAW,KAAK;AAEH,qBAAA;AAAA,MAAA,GACZ,CAAC,YAAY,CAAC;AAEjB2D,YAAA,oBAAoB,UAAU,OAAO;AAAA,QACnC,iBAAiB,GAAqB;AACpC,sBAAY,CAAC;AAAA,QAAA;AAAA,MACf,EACA;AAEF,YAAM,mBAAmBnD,MAAA;AAAA,QACvB,OAAO;AAAA,UACL,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,KAAK;AAAA,UACL,MAAM;AAAA,QAAA;AAAA,QAER,CAAC,SAAS,OAAO;AAAA,MACnB;AAEM,YAAA,eAAeR,MAAAA,YAAY,MAAM;AACrC,cAAM,iBAAiB,eAAe;AACtC,cAAM,iBAAiB,eAAe,KAAK,IAAI,OAAO,MAAM,IAAI;AAE1D,cAAA,IAAI0B,QAAAA,MAAM;AAAA,UACd,aAAa;AAAA,UACb,aAAa;AAAA,UACb,YAAY,eAAe,IAAI;AAAA,UAC/B,UAAU,eAAe,IAAI,KAAK,KAAK;AAAA,QAAA,CACxC;AAMK,cAAA,aAAaA,QAAAA,MAAM;AAAA,UACvB,aAAa;AAAA,UACb,aAAa;AAAA,UACb,YAAY;AAAA,UACZ,UAAU,IAAI,KAAK;AAAA,QAAA,CACpB;AAED,eAEIb,2BAAA,KAAAR,qBAAA,EAAA,UAAA;AAAA,UAACP,2BAAAA,IAAA,QAAA,EAAK,GAAG,YAAa,SAAQ,KAAI,QAAO,QAAO,KAAK,cAAe,CAAA;AAAA,UACpEA,2BAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC;AAAA,cACA,SAAQ;AAAA,cACR,QAAO;AAAA,cACP;AAAA,cACA;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,GACF;AAAA,MAAA,GAED;AAAA,QACD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA,CACD;AAEK,YAAA,eAAeE,MAAAA,YAAY,MAAM;AAEnC,eAAAF,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA,SAAS;AAAA,YACT,QAAO;AAAA,YACP;AAAA,UAAA;AAAA,QACF;AAAA,MAED,GAAA,CAAC,QAAQ,aAAa,KAAK,CAAC;AAG7B,aAAAe,2BAAA,KAACR,gBAAA,EACE,UAAA;AAAA,QAAY,YAAA;AAAA,QACZ,CAAC,YACAQ,2BAAAA,KAAC,KAAE,EAAA,cAA4B,KAAK,UACjC,UAAA;AAAA,UAAA,YAAY,aAAa;AAAA,UACzB,CAAC,YAAY,aAAa;AAAA,UAC3Bf,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,SAAS+C;AAAA,cACT;AAAA,cACA;AAAA,cACA,WAAW,CAACO,IAAAA,OAAO,EAAE,UAAU,GAAI,CAAA,GAAGC,IAAAA,MAAM;AAAA,cAC5C,WAAW;AAAA,cACX;AAAA,cACA,OAAA1E;AAAA,YAAA;AAAA,UACF;AAAA,UACC;AAAA,QAAA,EACH,CAAA;AAAA,MAAA,GAEJ;AAAA,IAAA;AAAA,EAGN;AC/da,QAAA,UAAqC,CAAC;AAAA,IACjD,SAAS;AAAA,IACT,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,UAAU;AAAA,IACV,UAAU;AAAA,IACV,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ;AAAA,IACA,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,cAAc,MAAM;AAAA,IACpB;AAAA,IACA,gBAAgB;AAAA,IAChB,aAAa,MAAM;AAAA,IACnB,YAAY,MAAM;AAAA,IAClB,YAAY,MAAM;AAAA,IAClB,WAAW,MAAM;AAAA,IACjB,SAAS,MAAM;AAAA,IACf,YAAY,MAAM;AAAA,EACpB,MAAM;AACJ,UAAM,UAAUY,MAAAA,OAAa;AAC7B,UAAM,SAASA,MAAAA,OAAY;AAC3B,UAAM,CAAC,WAAW,YAAY,IAAIE,eAAkB;AACpD,UAAM,CAAC,WAAW,YAAY,IAAIA,eAAkB;AACpD,UAAM,CAAC,QAAQ,SAAS,IAAIA,MAAA,SAAc6D,+BAAU;AAEpD5D,UAAAA,UAAU,MAAM;AACd,YAAM,YAAYuB,qBAAA;AAAA,QAChBsC,oCAAe;AAAA,UACb,EAAE,MAAM,aAAa,IAAI,GAAG,IAAI,EAAE;AAAA,UAClC,EAAE,MAAM,SAAS,IAAI,OAAO,IAAI,MAAM;AAAA,QACvC,CAAA;AAAA,MACH;AAEA,UAAI,CAAC,QAAQ,WAAW,MAAM,GAAG;AAC/B,kBAAU,SAAS;AAAA,MAAA;AAAA,OAEpB,CAAC,GAAG,GAAG,OAAO,MAAM,CAAC;AAExB,UAAM,oBAAoB/D,MAAA;AAAA,MACxB,CAAC,UAAyB;AACxB,qBAAa,IAAI;AACjB,mBAAW,KAAK;AAAA,MAClB;AAAA,MACA,CAAC,UAAU;AAAA,IACb;AAEA,UAAM,mBAAmBA,MAAA;AAAA,MACvB,CAAC,UAAwB;AACb,kBAAA;AAAA,UACR;AAAA,UACA,GAAG,MAAM;AAAA,UACT,GAAG,MAAM;AAAA,UACT,MAAM;AAAA,UACN,aAAa,MAAM;AAAA,QAAA,CACpB;AAED,kBAAU,KAAK;AAAA,MACjB;AAAA,MACA,CAAC,WAAW,WAAW,KAAK;AAAA,IAC9B;AAEA,UAAM,kBAAkBA,MAAA;AAAA,MACtB,CAAC,UAAuB;AACtB,qBAAa,KAAK;AAClB,iBAAS,KAAK;AAAA,MAChB;AAAA,MACA,CAAC,QAAQ;AAAA,IACX;AAEA,UAAM,gBAAgBA,MAAA;AAAA,MACpB,CAAC,UAAqB;AACV,kBAAA;AAAA,UACR,GAAG,MAAM;AAAA,UACT,GAAG,MAAM;AAAA,UACT,OAAO,MAAM;AAAA,UACb,aAAa,MAAM;AAAA,UACnB,MAAM;AAAA,QAAA,CACP;AACD,eAAO,KAAK;AAAA,MACd;AAAA,MACA,CAAC,QAAQ,SAAS;AAAA,IACpB;AAEM,UAAA,mBAAmBA,MAAAA,YAAY,MAAM;AACzC,mBAAa,KAAK;AACR,gBAAA;AAAA,IAAA,GACT,CAAC,SAAS,CAAC;AAER,UAAA,SAAS,WAAW,SAAS;AAC7B,UAAA,YAAY,aAAa,YAAY,SAAS;AAC9C,UAAA,YAAYgE,gCAAW,MAAM;AAGjC,WAAAlE,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU,CAAC,YAAY;AAAA,QACvB,KAAK;AAAA,QACL;AAAA,QACA,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,UAAU;AAAA,QACV;AAAA,QAEA,UAAAe,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAK;AAAA,YACL,UAAU,CAAC,YAAY;AAAA,YACvB,aAAa;AAAA,YACb;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,OAAO,EAAE,OAAO;AAAA,YAChB;AAAA,YACA;AAAA,YACA,QAAQ;AAAA,YACR,WAAW;AAAA,YAEV,UAAA;AAAA,cAAA,CAAC,YACAf,2BAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC;AAAA,kBACA;AAAA,kBACA,SAAS;AAAA,kBACT,WAAU;AAAA,gBAAA;AAAA,cACZ;AAAA,cAEFA,2BAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,eAAe;AAAA,oBACf,YAAY;AAAA,kBACd;AAAA,kBAEC;AAAA,gBAAA;AAAA,cAAA;AAAA,YACH;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IACF;AAAA,EAEJ;ACvLO,WAAS,UAAU;AAAA,IACxB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,gBAAgB;AAAA,IAChB,cAAc;AAAA,EAChB,GAAgB;AACV,QAAA;AAEJ,QAAI,SAAS,UAAU,SAAS,cAAc,SAAS,SAAS;AAC9D,UAAI,SAAS,QAAQ;AACnB,gBAAQmE,oBAAY,WAAW,CAAC,GAAG,KAAM,CAAC;AAAA,MAAA,OACrC;AACL,gBAAQtC,sBAAc,WAAW,CAAC,GAAG,KAAM,CAAC;AAAA,MAAA;AAGtC,cAAA,MAAM,OAAO,UAAU,WAAW,EAAE,MAAM,QAAQ,YAAY,CAAC,CAAC;AAAA,IAAA,OACnE;AACL,UAAI,CAAC,QAAQ;AACX,YAAI,eAAe;AACjB,mBAAS,SAAwC,MAAM,CAAC,MAAM,EAAE,GAAG;AAAA,QAAA,OAC9D;AACL,mBAAS,SAAwC,MAAM,CAAC,MAAM,EAAE,CAAC;AAAA,QAAA;AAAA,MACnE;AAGF,cAAQuC,QAAAA,UAAU,EACf,WAAW,CAAC,GAAG,KAAM,CAAC,EACtB,QAAQ,WAAW,CAAC,EACpB,OAAO,MAA4B;AAAA,IAAA;AAGjC,WAAA,eAAe,MAAM,KAAA,IAAS;AAAA,EACvC;AAKO,WAAS,UAAU;AAAA,IACxB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf,SAAS;AAAA,IACT,UAAU;AAAA,IACV,gBAAgB;AAAA,IAChB,cAAc;AAAA,EAChB,GAAgB;AACV,QAAA;AAEJ,QAAI,SAAS,UAAU,SAAS,WAAW,SAAS,YAAY;AAC9D,cAAQvC,sBACL,MAAM,CAAC,QAAS,CAAC,CAAC,EAClB,OAAO,UAAU,WAAW,EAAE,MAAM,QAAQ,YAAa,CAAA,CAAC;AAAA,IAAA,OACxD;AACL,UAAI,CAAC,QAAQ;AACX,YAAI,eAAe;AACR,mBAAA;AAAA,YACP;AAAA,YACA,CAAC,MAAM,EAAE;AAAA,UACX;AAAA,QAAA,OACK;AACL,mBAAS,SAAwC,MAAM,CAAC,MAAM,EAAE,CAAC;AAAA,QAAA;AAAA,MACnE;AAGF,cAAQuC,QAAU,UAAA,EACf,WAAW,CAAC,QAAS,CAAC,CAAC,EACvB,QAAQ,OAAO,EACf,OAAO,MAA4B;AAAA,IAAA;AAGjC,WAAA,eAAe,MAAM,KAAA,IAAS;AAAA,EACvC;ACxFa,QAAA,oBAAoB,CAAC,OAAe,iBAA0B;AACzE,UAAM,QAAQvC,QAAAA,YAAY,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC;AAC1C,WAAA,eAAe,MAAM,KAAA,IAAS;AAAA,EACvC;AAKa,QAAA,yBAAyB,CAAC;AAAA,IACrC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,MAAyB;AACvB,UAAM,SAAS,SAAuC,MAAM,CAAC,MAAM,EAAE,GAAG;AACxE,UAAM,WAAW,KAAK;AAChB,UAAA,oBAAoB,QAAQ,WAAW,WAAW;AACxD,UAAM,cAAc,oBAAoB;AAGlC,UAAA,YAAY,CAAC,WAAW;AACtB,YAAA,CAAC,GAAG,IAAI,OAAO;AACf,YAAA,KAAK,WAAW,IAAI,EAAE;AACtB,YAAA,KAAK,WAAW,IAAI,EAAE;AACrB,aAAA,EAAE,IAAI,GAAG;AAAA,IAClB;AAEM,UAAA,QAAa,CAAC,QAAQ;AAC1B,UAAI,SAAS;AACb,YAAM,QAAQ,KAAK,UAAU,CAAC,MAAM,EAAE,QAAQ,GAAG;AAC3C,YAAA,SAAS,KAAK,KAAK;AAEzB,UAAI,UAAU,OAAO,QAAQ,OAAO,KAAK,QAAQ;AAC/C,cAAM,EAAE,IAAI,OAAO,UAAU,MAAM;AACzB,kBAAA,KAAK,MAAM,IAAI;AAEzB,YAAI,SAAS;AACF,mBAAA,SAAS,cAAc,QAAQ;AAAA,QAAA;AAAA,MAC1C;AAGK,aAAA;AAAA,IACT;AAEA,UAAM,QAAQ,MAAM,CAAC,GAAG,KAAK;AAC7B,UAAM,SAAS,MAAM;AAGf,UAAA,iBAAiB,CAAC,WAAmB;AACrC,UAAA;AAEJ,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AAChC,cAAA,OAAO,OAAO,CAAC;AACf,cAAA,SAAS,KAAK,CAAC;AACrB,cAAM,EAAE,IAAI,OAAO,UAAU,MAAM;AAEnC,YAAI,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,GAAG;AACpD,kBAAA;AACR;AAAA,QAAA;AAAA,MACF;AAGK,aAAA;AAAA,IACT;AAEO,WAAA;AAAA,EACT;AC1EO,WAAS,cAAc;AAAA,IAC5B;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY;AAAA,EACd,GAAG;AACD,UAAM,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG;AAC1C,UAAM,UAAU,OAAO,UAAU,YAAY,UAAU;AACjD,UAAA,QAAQ,cAAc,aAAa,CAAC,GAAG,SAAS,IAAI,CAAC,WAAW,CAAC;AAEvE,WAAOuC,QAAU,UAAA,EACd,WAAW,KAAY,EACvB,aAAa,OAAO,EACpB,aAAa,UAAU,CAAC,EACxB,OAAO,MAAkB;AAAA,EAC9B;AAKO,WAAS,cAAc,EAAE,YAAY,SAAS,MAAM,OAAO,OAAO;AACjE,UAAA,YAAY,WAAW,UAAU;AACvC,UAAM,SAAS;AAAA,MACb;AAAA,MACA,CAAC,MAAM,EAAE;AAAA,MACT,CAAC,MAAM,EAAE,IAAI;AAAA,IACf;AACA,UAAM,UAAU,OAAO,UAAU,YAAY,UAAU;AAEvD,WAAOA,kBAAU,EACd,WAAW,CAAC,GAAG,SAAS,CAAC,EACzB,aAAa,OAAO,EACpB,OAAO,MAAkB;AAAA,EAC9B;ACjCa,QAAA,kBAAkB,CAC7B,aACA,aACA,WACG;AACH,QAAI,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG;AAG7B,eAAA,CAAC,GAAG,CAAC;AAAA,IAAA;AAEhB,UAAM,IAAIvC,QAAAA,cACP,MAAM,CAAC,cAAc,aAAa,cAAc,WAAW,CAAC,EAC5D,OAAO,MAAM;AAEV,UAAA,SAAS,OAAO,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC;AAE/C,WAAA;AAAA,EACT;ACMa,QAAA,eAA+C,CAAC;AAAA,IAC3D;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY,MAAM;AAAA,IAClB,GAAG;AAAA,EACL,MAAM;AACJ,UAAM,mBAAmB3B,MAAA;AAAA,MACvB,CAAC,UAAwB;AACjB,cAAA,MACJ,MAAM,SAAS,UAAW,MAAM,SAAS,SAAS,MAAM,QAAQ;AAElE,YAAI,KAAK;AACP,gBAAM,QAAa,UAAU;AAAA,YAC3B;AAAA,YACA,MAAM;AAAA,YACN;AAAA,YACA;AAAA,UAAA,CACD;AAEK,gBAAA,WAAW,MAAM,KAAA,EAAO;AAAA,YAC5B,MACG,MAAM,EACN,IAAI,CAAC,OAAO,IAAI,MAAM,KAAK,MAAM,KAAK,EACtC,IAAI,MAAM,MAAM,IAAI,EAAE,QAAQ,MAAM,CAAC;AAAA,UAC1C;AAEW,oBAAA;AAAA,YACT,QAAQ,SAAS,OAAO;AAAA,YACxB,UAAU,MAAM,UAAU;AAAA,UAAA,CAC3B;AAAA,QAAA;AAAA,MAEL;AAAA,MACA,CAAC,UAAU,MAAM,WAAW,cAAc,KAAK;AAAA,IACjD;AAEM,UAAA,aAAaQ,MAAAA,QAAQ,MAAM;AAC/B,UAAI2D,cAAa;AAAA,QACf,OAAO;AAAA,QACP,GAAG;AAAA,MACL;AAEI,UAAA,CAAC,YAAY,QAAQ;AACvB,cAAM,SAAc,UAAU;AAAA,UAC5B;AAAA,UACA,MAAM;AAAA,UACN;AAAA,UACA;AAAA,QAAA,CACD;AAED,YAAI,SAAS,OAAO,OAAO,CAAC,CAAC;AAC7B,cAAM,YAAY,OAAO,OAAO,CAAC,CAAC;AAC5B,cAAA,QAAQ,SAAS,YAAY;AAGnC,iBAAS,SAAS;AAElBA,sBAAa;AAAA,UACX;AAAA,UACA,GAAG,CAAC;AAAA,QACN;AAAA,MAAA;AAGKA,aAAAA;AAAAA,IAAA,GACN,CAAC,UAAU,MAAM,UAAU,QAAQ,cAAc,KAAK,CAAC;AAGxD,WAAArE,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAG;AAAA,QACJ,OAAO,WAAW;AAAA,QAClB,GAAG,WAAW;AAAA,QACd;AAAA,QACA;AAAA,QACA,UAAU,WAAW,QAAQ;AAAA,QAC7B,WAAW;AAAA,QAEV;AAAA,MAAA;AAAA,IACH;AAAA,EAEJ;ACjHO,QAAM,qBAAqB;AAAA,IAChC,MAAM;AAAA,IACN,UAAU;AAAA,IACV,SAAS;AAAA;AAAA,IAET,WAAW;AAAA,IACX,WAAW;AAAA,EACb;ACFa,QAAA,aAAa,CAAC,EAAE,QAAQ,YAAY,GAAG,WAAW;AAC7D,UAAM,IAAIsE,QAAA,eAAe,OAAO,KAAK,CAAC;AAChC,UAAA,SAASC,QAAAA,UAAU,GAAG,kBAAkB;AAE9CnE,UAAAA,UAAU,MAAM;AACd,YAAM,eAAeoE,cAAAA,YAAY,EAAE,OAAO,OAAO,MAAM,CAAC;AAClD,YAAA,aAAa,OAAO,IAAI;AACvB,aAAA,IAAI,aAAa,CAAC;AAElB,aAAA,OAAO,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,aAAa,IAAI,UAAU,CAAC,CAAC;AAAA,IAAA,GACpE,CAAC,OAAO,MAAM,GAAG,OAAO,KAAK,GAAG,GAAG,MAAM,CAAC;AAE7C,UAAM,EAAE,GAAG,QAAQ,GAAG,cAAc,OAAO;AAC3C,UAAM,EAAE,GAAG,OAAO,GAAG,aAAa,OAAO;AAGvC,WAAAxE,2BAAA;AAAA,MAACyE,QAAAA,OAAO;AAAA,MAAP;AAAA,QACE,GAAG;AAAA,QACJ,SAAS,EAAE,SAAS,GAAG,GAAG,SAAS;AAAA,QACnC,MAAM,EAAE,SAAS,GAAG,GAAG,SAAS;AAAA,QAChC,SAAS,EAAE,SAAS,GAAG,GAAG,UAAU;AAAA,QACpC;AAAA,QACA,GAAG,WAAW,SAAS,QAAQ,IAAI;AAAA,MAAA;AAAA,IACrC;AAAA,EAEJ;ACxBO,QAAM,UAAU;AAAA,IACrB,UAAU;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,cAAc,CAAC,WAAW,WAAW,SAAS;AAAA,IAC9C,cAAc,OACX,MAAM,CAAC,WAAW,SAAS,CAAC,EAC5B,iBAAA,EACA,OAAO,CAAC;AAAA,IACX,WAAW,OAAO,MAAM,CAAC,WAAW,SAAS,CAAC,EAAE,iBAAA,EAAmB,OAAO,CAAC;AAAA,IAC3E,GAAG,OAAO;AAAA,EACZ;ACDA,WAAS,wBACP,aACsC;AACtC,WAAO,MAAM,QAAQ,WAAW,KAAK,OAAO,YAAY,CAAC,MAAM;AAAA,EACjE;AAKA,QAAM,cAAc,CAAChD,QAAY,cAC/BA,OAAM,IAAI,CAAC,GAAG,MAAM;AAClB,QAAI,GAAG;AACD,UAAA,EAAE,SAAS,MAAM,QAAW;AAC9B,eAAO,EAAE,SAAS;AAAA,MAAA,WACT,EAAE,QAAQ,EAAE,KAAK,SAAS,MAAM,QAAW;AAC7C,eAAA,EAAE,KAAK,SAAS;AAAA,MAAA;AAAA,IACzB;AAGK,WAAA;AAAA,EACT,CAAC;AAKU,QAAA,WAAW,CAAC,UAAqC;AACxD,QAAA;AAAA,MACF,OAAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,IACE;AAAA,MACF,WAAW;AAAA,MACX,eAAe;AAAA,MACf,OAAOiD,QAAA;AAAA,MACP,GAAG;AAAA,IACL;AAEA,QAAI,OAAO,gBAAgB,YAAY,QAAQ,WAAW,GAAG;AAC3D,oBAAc,QAAQ,WAAW;AAAA,IAAA;AAG/B,QAAA,MAAM,QAAQ,WAAW,GAAG;AAC9B,UAAI,CAAC,QAAQ;AACX,YAAI,iBAAiB,MAAM,QAAQ,IAAI,GAAG;AACxC,gBAAM,SAASC,QAAAA,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,MAAM;AAC5C,gBAAA,SAAS,KAAK,MAAM;AAC1B,iBAAO,OAAO;AAAA,QAAA;AAGP,iBAAA,YAAY,MAAM,SAAS;AAAA,MAAA;AAGtC,YAAM,QAAQ,SAAY,MAAMlD,OAAM,SAAS;AAE/C,aAAO,MAAM,WAAW,EAAE,OAAO,MAAM,EAAE,GAAG;AAAA,IAAA,WACnC,OAAO,gBAAgB,YAAY;AACrC,aAAA,YAAYA,QAAO,OAAQ,MAAM;AAAA,IAAA,OACnC;AACE,aAAA;AAAA,IAAA;AAAA,EAEX;AAYA,QAAM,gBAAgB,CACpB,MACA,aACA,YACA,eAC0B;AAC1B,UAAM,cAAcyB,QAAA;AAAA,MAClB;AAAA,QACE;AAAA,QACA,CAAC,MAAM,EAAE;AAAA,QACT,CAAC,MAAM,EAAE;AAAA,MAAA;AAAA,IAEb;AAEA,WAAO,CAACzB,WAAU;AAEhB,WAAIA,UAAA,gBAAAA,OAAO,WAAU,WAAaA,UAAA,gBAAAA,OAAO,WAAU,MAAM;AAChD,eAAA;AAAA,MAAA;AAIT,aAAO,SAAS;AAAA,QACd,OAAOmD,QAAA;AAAA,QACP,QAAQ;AAAA,QACR,KAAKnD,OAAM;AAAA,QACX;AAAA,QACA,OAAAA;AAAA,QACA,QAAQ;AAAA,MAAA,CACT;AAAA,IACH;AAAA,EACF;AAUa,QAAA,uBAAuB,CAClCA,QACA,gBAEA,MAAM,KAAK,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,UAAU,MAAM;AAClD,WAAA,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,WAAWA,MAAK,EAAE;AAAA,EAC5C,GAAG,CAAE,CAAA;AAUP,QAAM,4BAA4B,CAChC,aACA,wBAEA,YAAY;AAAA,IACV,CAAC,eACC,yCAAa;AAAA,EACjB;AAeW,QAAA,+BAA+B,CAC1C,MACA,aACA,YACA,eACuC;AACjC,UAAA,kCAAkB,IAAmC;AAEvD,QAAA,wBAAwB,WAAW,GAAG;AACxC,YAAM,wBAAwB;AAAA,QAC5B,GAAG,IAAI,IAAI,YAAY,QAAQ,OAAO,IAAI,CAAC;AAAA,MAC7C;AAEsB,4BAAA,QAAQ,CAAC,QAAQ;AACrC,cAAM,aAAa;AAAA,UACjB;AAAA,UACA,0BAA0B,aAAa,GAAG;AAAA,UAC1C;AAAA,UACA;AAAA,QACF;AACY,oBAAA,IAAI,KAAK,UAAU;AAAA,MAAA,CAChC;AAAA,IAAA,OACI;AACL,kBAAY,IAAI,QAAQ,cAAc,MAAM,aAAa,YAAY,UAAU,CAAC;AAAA,IAAA;AAG3E,WAAA;AAAA,EACT;ACtKO,QAAM,iBAAiB;AAAA,IAC5B,MAAM;AAAA,IACN,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,eAAe;AAAA,EACjB;AAEa,QAAA,WAAW,CAAC;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,MAAmB;AACX,UAAA,UAAUxB,aAAmB,IAAI;AAEvC,WAAO,QAAQ,eAAe;AAC9B,eAAW,YAAY,eAAe;AACtC,YAAQ,SAAS,eAAe;AAChC,aAAS,UAAU,eAAe;AAClC,oBAAgB,iBAAiB,eAAe;AAEhDG,UAAAA,UAAU,MAAM;AACd,YAAMT,QAAO,QAAQ;AAEf,YAAA,WAAWkF,QAAAA,QAAQ,MAAM,IAAI;AAAA,QACjC;AAAA,QACA;AAAA,QACA,SAASxF,QAAO;AACd,cAAI,YAA6BA;AACjC,cAAI,eAAe;AACjB,wBAAY,OAAOA,OAAM,QAAQ,aAAa,CAAC;AAAA,UAAA,OAC1C;AACL,wBAAY,OAAOA,OAAM,QAAQ,CAAC,CAAC;AAAA,UAAA;AAGrC,cAAI,QAAQ;AACV,wBAAY,UAAU,eAAe;AAAA,UAAA;AAGvC,cAAIM,OAAM;AACR,gBAAI,QAAQ;AACE,0BAAA,GAAG,MAAM,GAAG,SAAS;AAAA,YAAA;AAEnC,gBAAI,QAAQ;AACE,0BAAA,GAAG,SAAS,GAAG,MAAM;AAAA,YAAA;AAGnC,YAAAA,MAAK,cAAc;AAAA,UAAA;AAAA,QACrB;AAAA,MACF,CACD;AAEM,aAAA,MAAM,SAAS,KAAK;AAAA,IAAA,GAC1B,CAAC,MAAM,IAAI,UAAU,OAAO,eAAe,QAAQ,QAAQ,MAAM,CAAC;AAE9D,WAAA;AAAA,EACT;ACnGa,QAAA,QAAwB,CAAC,EAAE,WAAW,GAAG,WAAW;AACzD,UAAA,MAAM,SAAS,IAAI;AAClB,WAAAK,2BAAA,IAAC,QAAK,EAAA,KAAU,UAAsB,CAAA;AAAA,EAC/C;ACAa,QAAA,oBAAgD,CAAC;AAAA,IAC5D;AAAA,IACA,OAAAX;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,IACA,YAAY;AAAA,EACd,MAAM;AACE,UAAA,cACJ,cAAc,eACV,EAAE,IAAI,GAAG,IAAIA,QAAO,IAAI,MAAM,IAAIA,OAAM,IACxC,EAAE,IAAIA,QAAO,IAAI,GAAG,IAAIA,QAAO,IAAI,KAAK;AAG5C,WAAAW,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,QAAQ;AAAA,QACR,aAAa;AAAA,QACZ,GAAG;AAAA,MAAA;AAAA,IACN;AAAA,EAEJ;ACvBa,QAAA,oBAAgD,CAAC;AAAA,IAC5D;AAAA,IACA,OAAAX;AAAA,IACA;AAAA,IACA,YAAY;AAAA,EACd,MACEW,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,GAAGX;AAAA,MACH,MAAK;AAAA,MACL,QAAQ;AAAA,MACR,aAAa;AAAA,IAAA;AAAA,EACf;;;;;;;ACdK,QAAM,qBAAqB,CAAC;AAAA,IACjC;AAAA,IACA;AAAA,EACF,MAA+B;AACzB,QAAA,CAAC,KAAM,QAAO,CAAC;AAEf,QAAA;AAAA,MACF,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,QAAQ,oBAAoB;AAAA,MAC5B,UAAU;AAAA,IAAA,IACR;AAEJ,YAAQ,OAAO,KAAK,EAAE,MAAM,OAAO,EAAE,IAAI;AAEzC,WAAO,OACH,EAAE,QAAQ,eAAe,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,KAAK,QACtD,CAAC;AAAA,EACP;AC2Fa,QAAA,eAA+C,CAAC,UAAU;AAC/D,UAAA;AAAA,MACJ,QAAA4D;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAAM;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IAAA,IACD,kBAAkB,6BAA6B,KAAK;AAElD,UAAA,UAAUtD,aAAmB,IAAI;AACvC,UAAM,CAAC,gBAAgB,iBAAiB,IAAIE,MAAAA,SAAkB,KAAK;AACnE,UAAM,SAASO,MAAA;AAAA,MACb,MAAM,uBAAuB,MAAM,IAAI;AAAA,MACvC,CAAC,MAAM,IAAI;AAAA,IACb;AACA,UAAM,IAAIA,MAAA;AAAA,MACR,MAAO,OAAO,SAAS,aAAa,KAAK,IAAK,IAAI;AAAA,MAClD,CAAC,MAAM,IAAI;AAAA,IACb;AACA,UAAM,iBAAiBA,MAAA;AAAA,MACrB,MAAOuC,UAASA,QAAO,IAAK,IAAI;AAAA,MAChC,CAAC,MAAMA,OAAM;AAAA,IACf;AAEA,UAAM,kBAAkBvC,MAAA;AAAA,MACtB,MACE,WACI;AAAA,QACA,GAAG;AAAA,QACH,OAAO,QAAS;AAAA,MAAA,IAEhB;AAAA,QACA,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACJ,CAAC,OAAO,QAAQ;AAAA,IAClB;AAEM,UAAA,aAAaA,MAAAA,QAAQ,MAAM;AAC3B,UAAA,KAAK,OAAO,KAAM,EAAE;AACxB,UAAI,OAAO,WAAW;AACd,cAAA,QAAQ,OAAO,UAAU;AAC/B,aAAK,KAAK,QAAQ;AAAA,MAAA;AAGb,aAAA;AAAA,QACL,GAAG,OAAO,KAAM,CAAC;AAAA,QACjB,GAAG;AAAA,MACL;AAAA,IAAA,GAEC,CAAC,MAAM,MAAM,CAAC;AAEX,UAAA,YAAYA,MAAAA,QAAQ,MAAM;AAC9B,YAAM,CAAC,YAAY,IAAI,OAAO,OAAO;AAC9B,aAAA;AAAA,QACL,GAAG,OAAO,YAAY;AAAA,QACtB,GAAG,OAAO,KAAM,CAAC;AAAA,MACnB;AAAA,IAAA,GAEC,CAAC,MAAM,MAAM,CAAC;AAEjB,UAAM,OAAOA,MAAA;AAAA,MACX,MACE,SAAS;AAAA,QACP,aAAa;AAAA,QACb;AAAA,QACA,OAAO;AAAA,MAAA,CACR;AAAA,MACH,CAAC,MAAM,OAAO,KAAK;AAAA,IACrB;AAEM,UAAA,MAAM,UAAU,EAAE,IAAIoE,0BAAW,GAAG,KAAM,EAAE,EAAE,CAAC;AAC/C,UAAA,gBAAgBpE,MAAAA,QAAQ,MAAM,aAAa,IAAI,GAAG,CAAC,IAAI,CAAC;AAE9D,UAAM,YAAY,UAAU,mCAAU,MAAM,SAAS;AAErD,2CACGH,gBACC,EAAA,UAAA;AAAA,MAAAP,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAK;AAAA,UACL,WAAW,WAAW;AAAA,YACpB,CAACiC,MAAI,QAAQ,GAAG,CAAC;AAAA,YACjB,CAACA,MAAI,MAAM,GAAG,CAAC;AAAA,UAAA,CAChB;AAAA,UACD,cAAc,MAAM;AAClB,8BAAkB,IAAI;AACtB,yBAAa,IAAK;AAAA,UACpB;AAAA,UACA,cAAc,MAAM;AAClB,8BAAkB,KAAK;AACvB,yBAAa,IAAK;AAAA,UACpB;AAAA,UACA,SAAS,MAAM,QAAQ,IAAK;AAAA,UAC5B,UAAU;AAAA,UACV,cAAY;AAAA,UACZ,MAAK;AAAA,UAEJ,UACCgB,UAAAjD,2BAAA;AAAA,YAACyE,QAAAA,OAAO;AAAA,YAAP;AAAA,cAEE,GAAG;AAAA,cACJ,SAAS;AAAA,gBACP,YAAY,UAAU;AAAA,gBACtB,YAAY,UAAU;AAAA,gBACtB,SAAS;AAAA,cACX;AAAA,cACA,SAAS;AAAA,gBACP,YAAY,WAAW;AAAA,gBACvB,YAAY,WAAW;AAAA,gBACvB,SAAS;AAAA,cACX;AAAA,cACA,MAAM;AAAA,gBACJ,YAAY,UAAU;AAAA,gBACtB,YAAY,UAAU;AAAA,gBACtB,SAAS;AAAA,cACX;AAAA,cACA,YAAY;AAAA,cAEX,UAAA;AAAA,YAAA;AAAA,YAnBI;AAAA,UAAA,IAsBPzE,2BAAA;AAAA,YAACyE,QAAAA,OAAO;AAAA,YAAP;AAAA,cAEC,WAAW,OAAO;AAAA,cAClB,OAAO;AAAA,gBACL,GAAG,OAAO;AAAA,gBACV,GAAG,mBAAmB,EAAE,MAAM;AAAA,gBAC9B;AAAA,cACF;AAAA,cACA;AAAA,cACA,SAAS;AAAA,gBACP,IAAI,UAAU;AAAA,gBACd,IAAI,UAAU;AAAA,gBACd;AAAA,gBACA,SAAS;AAAA,cACX;AAAA,cACA,SAAS;AAAA,gBACP,IAAI,WAAW;AAAA,gBACf,IAAI,WAAW;AAAA,gBACf,SAAS;AAAA,gBACT;AAAA,cACF;AAAA,cACA,MAAM;AAAA,gBACJ,IAAI,UAAU;AAAA,gBACd,IAAI,UAAU;AAAA,gBACd;AAAA,gBACA,SAAS;AAAA,cACX;AAAA,cACA,YAAY;AAAA,YAAA;AAAA,YA1BP;AAAA,UAAA;AAAA,QA2BP;AAAA,MAEJ;AAAA,MACClB,YAAW,CAACA,SAAQ,MAAM,YACzBvD,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC,SAAS+C;AAAA,UACT,SAAS;AAAA,UACT,WAAW;AAAA,UACX,OAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IACT,GAEJ;AAAA,EAEJ;AAEO,QAAM,8BAA8B;AAAA,IACzC,QAAQ;AAAA,IACR,wCAAU,cAAa,EAAA;AAAA,IACvB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO,QAAQ,UAAU,CAAC;AAAA,IAC1B,UAAU;AAAA,IACV,SAAS,MAAM;AAAA,IACf,cAAc,MAAM;AAAA,IACpB,cAAc,MAAM;AAAA,EACtB;AC7OA,QAAMwB,YAAU;AAGH,QAAA,gBAAiD,CAAC;AAAA,IAC7D;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAAtD,wCAAS,cAAa,EAAA;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,MAAM;AACJ,UAAM,cAAcvB,MAAA;AAAA,MAClB,CAAC,WAA0C,UAAkB;AACvD,YAAA;AACJ,YAAI,UAAU,IAAI;AAChB,oBAAU,UAAU;AAAA,QAAA;AAGtB,cAAM,MAAM4E,eAAAA,WAAW,GAAG,WAAW,KAAK,EAAE;AAC5C,cAAM,SACJ,EAAE,aAAa,UAAU,WAAW,UAAU,SAAS,OAAO;AAG9D,eAAA9E,2BAAA;AAAA,UAACQ,UAAA;AAAA,UAAA;AAAA,YACC,SAASiB;AAAA,YAET;AAAA,YACA;AAAA,YACC,GAAG;AAAA,YACJ;AAAA,YACA,MAAM;AAAA,YACN;AAAA,YACA;AAAA,UAAA;AAAA,UAPK;AAAA,QAQP;AAAA,MAEJ;AAAA,MACA,CAAC,WAAWA,QAAO,QAAQ,QAAQ,MAAM,EAAE;AAAA,IAC7C;AAEA,UAAM,qBAAqBvB,MAAA;AAAA,MACzB,MAEKF,2BAAA,IAAAO,qBAAA,EAAA,WAAA,6CAAc,WACb,aAAa,IAAI,CAACyE,YAAW;;AACrB,cAAA,eAAa,KAAAA,WAAA,gBAAAA,QAAQ,UAAR,mBAAe,eAAc;AAC1C,cAAA,OAAO,aAAa,SAAS;AAC7B,cAAA3F,SAAQ,aACV,OAAO2F,QAAO,MAAM,KAAK,IACzB,OAAOA,QAAO,MAAM,KAAK;AAE3B,eAAAhF,2BAAA;AAAA,UAACQ,UAAA;AAAA,UAAA;AAAA,YAEC,SAASwE;AAAA,YACT;AAAA,YACA,OAAA3F;AAAA,UAAA;AAAA,UAHK2F,QAAO;AAAA,QAId;AAAA,MAEH,CAAA,GACL;AAAA,MAEF,CAAC,QAAQ,cAAc,OAAO,QAAQ,MAAM;AAAA,IAC9C;AAGE,WAAAjE,2BAAA,KAACR,gBAAA,EACC,UAAA;AAAA,MAAAP,2BAAAA,IAAC,UACC,UAACA,2BAAA,IAAA,YAAA,EAAS,IAAI,GAAG,EAAE,SACjB,UAAAA,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO,WAAW,QAAQ,QAAS+E;AAAAA,UACnC,QAAQ,SAAUA;AAAAA,UAClB,GAAG,WAAW,IAAI;AAAA,UAClB,GAAG;AAAA,QAAC;AAAA,SAER,EACF,CAAA;AAAA,MACC,mBAAmB;AAAA,MACpB/E,2BAAAA,IAAC,OAAE,UAAU,QAAQ,EAAE,UAAW,UAAA,KAAM,IAAI,WAAW,EAAE,CAAA;AAAA,IAAA,GAC3D;AAAA,EAEJ;;;;;ACrEa,QAAA,cAA6C,CAAC;AAAA,IACzD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,wCAAU,eAAc,EAAA;AAAA,IACxB,QAAQA,2BAAAA,IAAC,aAAY,EAAA,MAAK,OAAO,CAAA;AAAA,IACjC,QAAQA,2BAAAA,IAAC,aAAY,EAAA,MAAK,QAAQ,CAAA;AAAA,IAClC,OAAO,CAAC;AAAA,IACR,2CAAa,gBAAe,EAAA;AAAA,IAC5B;AAAA,IACA,QAAQ;AAAA,IACR,UAAU;AAAA,IACV;AAAA,EACF,MAAM;AACJ,UAAM,aAAaU,MAAA;AAAA,MACjB,OAAO,EAAE,GAAG,6BAA6B,GAAG,MAAM,MAAM;AAAA,MACxD,CAAC,MAAM,KAAK;AAAA,IACd;AACA,UAAM,aAAaA,MAAA;AAAA,MACjB,OAAO,EAAE,GAAG,6BAA6B,GAAG,MAAM,MAAM;AAAA,MACxD,CAAC,MAAM,KAAK;AAAA,IACd;AACA,UAAM,iBAAiBA,MAAA;AAAA,MACrB,MAAA;;AAEE;AAAA;AAAA,aAAC,8CAAS,UAAT,mBAAgB,WAAhB,mBAAwB,eAAe;AAAA;AAAA;AAAA,MAC1C,CAAC,OAAO;AAAA,IACV;AAEM,UAAA,UAAUT,aAAmB,IAAI;AACvC,UAAM,CAAC,kBAAkB,mBAAmB,IAAIE,MAAAA,SAAkB,KAAK;AACvE,UAAM,CAAC,YAAY,aAAa,IAAIA,MAAAA,SAElC,IAAI;AACN,UAAM,CAAC,UAAU,WAAW,IAAIA,MAAAA,SAAkB,KAAK;AACjD,UAAA,iBAAiBO,MAAAA,QAAQ,MAAM,sBAAsB,IAAI,GAAG,CAAC,IAAI,CAAC;AAExE,UAAM,YAAYR,MAAA;AAAA,MAChB,CAAC,aAAqB,eAAuB;AAC3C,cAAM,SAAS,UAAU;AAAA,UACvB,cAAc,WAAW;AAAA,UACzB,MAAM,WAAW;AAAA,UACjB,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,QAAQ,WAAW;AAAA,QAAA,CACpB;AAED,cAAM,SAAS,UAAU;AAAA,UACvB,OAAO;AAAA,UACP,MAAM,WAAW;AAAA,UACjB,cAAc,WAAW;AAAA,UACzB,MAAM;AAAA,UACN,QAAQ,cAAc,WAAW;AAAA,QAAA,CAClC;AAEM,eAAA;AAAA,UACL;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA,CAAC,YAAY,YAAY,gBAAgB,UAAU;AAAA,IACrD;AAEA,UAAM,YAAYA,MAAA;AAAA,MAChB,CAAC,UAA8B;AAC7B,YAAI,gBAAgB;AAClB,8BAAoB,IAAI;AACxB,wBAAc,MAAM,MAAM;AAC1B,sBAAY,MAAM,QAAQ;AAE1B,uBAAa,QAAQ,OAAO;AAC5B,kBAAQ,UAAU,WAAW,MAAM,oBAAoB,IAAI,GAAG,GAAG;AAAA,QAAA;AAAA,MAErE;AAAA,MACA,CAAC,cAAc;AAAA,IACjB;AAEA,UAAM,cAAcA,MAAA;AAAA,MAClB,CAAC;AAAA,QACC;AAAA,QACA;AAAA,QACA,IAAA+E;AAAAA,QACA;AAAA,QACA;AAAA,MAAA,MAC8B;AAC9B,cAAM,EAAE,QAAQ,OAAA,IAAW,UAAU,aAAa,UAAU;AAC5D,cAAM,WACJ,qBAAqB,OAAO,QAAQ,OAAO,MAAM;AAC7C,cAAA,eAAe,eAAe,UAAU;AAE9C,+CACG1E,gBACE,EAAA,UAAA;AAAA,UAAA,cAAc,aACbP,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,OAAO;AAAA,cACP;AAAA,cACA;AAAA,cACA,OAAO;AAAA,cACP,OAAO;AAAA,YAAA;AAAA,UACT;AAAA,UAEFR,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,OAAO;AAAA,cACP,OAAO;AAAA,cACP,YAAY,aAAa,YAAY;AAAA,cACrC,oBAAoB,CAAC,MAAM,WAAW,cAAc,CAAC;AAAA,YAAA;AAAA,UACvD;AAAA,UACAR,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,OAAO;AAAA,cACP,OAAO;AAAA,cACP,YAAY,aAAa,YAAY;AAAA,cACrC,oBAAoB,CAAC,MAAM,WAAW,YAAY,CAAC;AAAA,YAAA;AAAA,UACrD;AAAA,UACC,iBACC,cAAc,IAAI,CAAC,MAAM,MACvBR,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cAEC,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,OAAO;AAAA,cACP,YAAY,aAAa,YAAY;AAAA,cACrC,oBAAoB,CAAC,MAAM,WAAW,cAAc,CAAC;AAAA,YAAA;AAAA,YALhD;AAAA,UAAA,CAOR;AAAA,UACF,cACCR,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,UAAU;AAAA,cACV,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,OAAO;AAAA,cACP,OAAO;AAAA,cAEP,UAAAR,2BAAA;AAAA,gBAACQ,UAAA;AAAA,gBAAA;AAAA,kBACC,SAAS;AAAA,kBACT;AAAA,kBACA,QAAQ;AAAA,kBACR,OAAO;AAAA,kBACP,UAAU,MAAM,MAAM;AAAA,kBACtB,cAAc,MAAM,MAAM;AAAA,kBAC1B,MAAM;AAAA,kBACN,QAAQ;AAAA,kBAER,UAAAR,2BAAA;AAAA,oBAACQ,UAAA;AAAA,oBAAA;AAAA,sBACC,SAAS;AAAA,sBACT,IAAI,eAAeyE,GAAE;AAAA,sBACrB,MAAM;AAAA,sBACN,QAAQ;AAAA,sBACR,OAAO;AAAA,sBACP;AAAA,sBACA;AAAA,sBACA;AAAA,sBACA;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACF;AAAA,cAAA;AAAA,YACF;AAAA,UAAA;AAAA,QACF,GAEJ;AAAA,MAEJ;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAGE,WAAAjF,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAc,cAAc,UAAU;AAAA,QACtC,cAAc,cAAc,UAAU;AAAA,QACtC,WAAW,WAAWiC,MAAI,aAAa,SAAS;AAAA,QAE/C,UAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAEJ;;;;;ACrNa,QAAA,cAA6C,CAAC,UAAU;AAC7D,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAAR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,IACE,kBAAkB,4BAA4B,KAAK;AAEvD,UAAM,eAAevB,MAAA;AAAA,MACnB,CAACuB,SAAsC,UAA2B;AAChE,cAAM,WACJ,gBAAgBA,WAAS,QAAQ,aAAa,GAAGA,QAAM,CAAC;AAE1D,YAAI,SAAS,SAAS;AACb,iBAAA;AAAA,QAAA,WACE,SAAS,SAAS;AAC3B,cAAI,cAAc;AACT,mBAAA;AAAA,UAAA,OACF;AACL,mBAAO,UAAU;AAAA,UAAA;AAAA,QACnB,WACS,SAAS,QAAQ;AAC1B,cAAI,cAAc;AACT,mBAAA;AAAA,UAAA,OACF;AACE,mBAAA,UAAU,KAAK,SAAS;AAAA,UAAA;AAAA,QACjC;AAGF,eAAO,QAAQ,IAAI;AAAA,MACrB;AAAA,MACA,CAAC,cAAc,KAAK,QAAQ,IAAI;AAAA,IAClC;AAGE,WAAAzB,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OACEA,2BAAA;AAAA,UAACQ,UAAA;AAAA,UAAA;AAAA,YACC,SAASiB;AAAA,YACT;AAAA,YACA,WAAWQ,MAAI;AAAA,YACf,MAAM;AAAA,YACN,SAAS;AAAA,YACT,SAAS;AAAA,UAAA;AAAA,QAAA;AAAA,MACX;AAAA,IAEJ;AAAA,EAEJ;AAEO,QAAM,6BAAwD;AAAA,IACnE,MAAM;AAAA,IACN,sCAAQ,cAAa,CAAA,CAAA;AAAA,EACvB;ACnDa,QAAA,OAA+B,CAAC,UAAU;AAC/C,UAAA;AAAA,MACJ;AAAA,MACA,UAAAiD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,gBAAgB;AAAA,MAChB,GAAG;AAAA,IAAA,IACD,kBAAkB,oBAAoB,KAAK;AAEzC,UAAA,SAAS,MAAM,MAAM,KAAK;AAE1B,UAAA,SAASxE,MAAAA,QAAQ,MAAM;AACpB,aAAA,KAAK,IAAI,CAACyE,WAAe;AAAA,QAC9B,GAAG,OAAOA,MAAK,CAAC;AAAA,QAChB,IAAI,OAAOA,MAAK,CAAC,IAAI,OAAOA,MAAK,EAAE;AAAA,QACnC,GAAG,OAAOA,MAAK,CAAC;AAAA,QAChB,IAAI,OAAOA,MAAK,EAAE;AAAA,QAClB,IAAI,OAAOA,MAAK,EAAE;AAAA,MAAA,EAClB;AAAA,IACD,GAAA,CAAC,MAAM,QAAQ,MAAM,CAAC;AAEzB,UAAM,cAAcjF,MAAA;AAAA,MAClB,CAAC,MAAuC;AAGtC,YAAI,EAAE,WAAW,KAAK,UAAU,GAAG;AAC3B,gBAAA,CAACuB,MAAK,IAAI;AAGV,gBAAA,WAAW,cAAcA,OAAM,CAAW;AAC5C,cAAA,CAAC,EAAE,GAAGA,UAAS,EAAE,GAAGA,QAAO;AACzB,gBAAA,CAACd,QAAOlB,IAAG,IAAI;AACrB,UAAAkB,OAAM,IAAI;AACV,UAAAlB,KAAI,IAAI,WAAW;AAAA,QAAA;AAGrB,cAAM,KAAK2F,QAAAA,OACR,EAAE,CAACtD,OAAW,cAAcA,GAAE,CAAC,CAAC,EAChC,GAAG,CAACA,OAAW,cAAcA,GAAE,EAAE,CAAC,EAClC,GAAG,CAACA,OAAW,cAAcA,GAAE,EAAE,CAAC,EAClC,MAAM,YAAY,aAAmC,CAAC;AAEzD,eAAO,GAAG,CAAQ;AAAA,MACpB;AAAA,MACA,CAAC,eAAe,KAAK;AAAA,IACvB;AAEM,UAAA,QAAQpB,MAAAA,QAAQ,MAAM;AACpB,YAAA,WAAW,YAAY,MAAM;AAE5B,aAAA;AAAA,QACL,GAAG,aAAa,OAAO,SAAY;AAAA,MACrC;AAAA,IAAA,GACC,CAAC,QAAQ,WAAW,CAAC;AAElB,UAAA,OAAOA,MAAAA,QAAQ,MAAM;AACzB,YAAM,OAAO,KAAK,IAAI,GAAG,OAAO,OAAO;AACvC,YAAM2E,UAAS,KAAK,IAAI,CAACF,WAAe;AAAA,QACtC,GAAG,OAAOA,MAAK,CAAC;AAAA,QAChB,IAAI;AAAA,QACJ,GAAG;AAAA,QACH,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA,EACJ;AAEI,YAAA,WAAW,YAAYE,OAAM;AAE5B,aAAA;AAAA,QACL,GAAG,aAAa,OAAO,SAAY;AAAA,MACrC;AAAA,OACC,CAAC,MAAM,aAAa,QAAQ,MAAM,CAAC;AAEhC,UAAA,OAAO3E,MAAAA,QAAQ,MAAM;AACzB,UAAI,MAAM;AACR,eAAO,qBAAqB,EAAE;AAAA,MAAA,OACzB;AACL,YAAIwE,WAAU;AACZ,iBAAO,iBAAiB,EAAE;AAAA,QAAA;AAGrB,eAAA;AAAA,MAAA;AAAA,IAER,GAAA,CAACA,WAAU,IAAI,IAAI,CAAC;AAEjB,UAAA,aAAaxE,MAAAA,QAAQ,MAAM;AAC/B,UAAI,UAAU;AACL,eAAA;AAAA,UACL,GAAG;AAAA,UACH,OAAO,QAAQ;AAAA,QACjB;AAAA,MAAA,OACK;AACE,eAAA;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,QACT;AAAA,MAAA;AAAA,IACF,GACC,CAAC,UAAU,KAAK,CAAC;AAEd,UAAA,aAAaR,MAAAA,YAAY,MAAM;AACnC,YAAM,WAAW,OAAO,aAAa,EAAE,MAAM;AACvC,YAAA,SAAS,uBAAuB,MAAM,IAAI;AAG9C,aAAAF,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACE,GAAG;AAAA,UACJ;AAAA,UACA,MAAM;AAAA,UACN;AAAA,UACA;AAAA,UACA,QAAQ;AAAA,YACN;AAAA,YACA;AAAA,UACF;AAAA,UACA,OAAO;AAAA,YACL,GAAG,OAAO;AAAA,YACV,GAAG,mBAAmB,EAAE,MAAM,kBAAkB,OAAQ,CAAA;AAAA,UAAA;AAAA,QAC1D;AAAA,MACF;AAAA,IAAA,GAED;AAAA,MACD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAED,2CACGO,gBACE,EAAA,UAAA;AAAA,MAAW,WAAA;AAAA,MACX,wCACEA,gBACC,EAAA,UAAA;AAAA,QAACP,2BAAAA,IAAA,MAAA,EAAK,IAAI,QAAQ,EAAE,IAAI,MAAM,iBAAiB,EAAE,IAAK,CAAA;AAAA,QACtDA,2BAAA;AAAA,UAACQ,UAAA;AAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,IAAI,gBAAgB,EAAE;AAAA,YACtB,MAAM;AAAA,UAAA;AAAA,QAAA;AAAA,MACR,GACF;AAAA,MAED0E,aACClF,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC,SAAS0E;AAAA,UACT,IAAI,YAAY,EAAE;AAAA,UAClB,OAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IACT,GAEJ;AAAA,EAEJ;AAEO,QAAM,qBAAyC;AAAA,IACpD,yCAAW,UAAS,EAAA;AAAA,IACpB,eAAe;AAAA,EACjB;AC7Ja,QAAA,OAA+B,CAAC;AAAA,IAC3C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,iBAAiB;AAAA,IACjB;AAAA,IACA,UAAAA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,MAAM;AACJ,UAAM,CAAC,YAAY,aAAa,IAAI/E,MAAAA,SAAwB,IAAI;AAC1D,UAAA,eAAeF,aAA8B,IAAI;AAEvDG,UAAAA,UAAU,MAAM;AACd,UAAI,aAAa,SAAS;AACxB,sBAAc,cAAc,aAAa,QAAQ,eAAgB,CAAA,CAAC;AAAA,MAAA;AAAA,OAEnE,CAAC,MAAM,QAAQ,QAAQ,KAAK,CAAC;AAEhC,UAAM,cAAcF,MAAA;AAAA,MAClB,CAACuB,WAA2C;AAC1C,cAAM,KAAKb,QAAA,KAAA,EACR,EAAE,CAAC,MAAW,cAAc,EAAE,CAAC,CAAC,EAChC,EAAE,CAAC,MAAW,cAAc,EAAE,EAAE,CAAC,EACjC,QAAQ,CAAC,MAAW,kBAAkB,oBAAoB,GAAGa,MAAK,CAAC,EACnE,MAAM,YAAY,aAAa,CAAC;AAEnC,eAAO,GAAGA,MAAY;AAAA,MACxB;AAAA,MACA,CAAC,eAAe,cAAc;AAAA,IAChC;AAEM,UAAA,aAAaf,MAAAA,QAAQ,MAAM;AAC/B,UAAI,UAAU;AACL,eAAA;AAAA,UACL,GAAG;AAAA,UACH,OAAO,UAAU,IAAI,QAAQ;AAAA,QAC/B;AAAA,MAAA,OACK;AACE,eAAA;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,QACT;AAAA,MAAA;AAAA,IAED,GAAA,CAAC,UAAU,SAAS,KAAK,CAAC;AAEvB,UAAA,SAASA,MAAAA,QAAQ,MAAM;AACpB,aAAA,KAAK,IAAI,CAACyE,WAAe;AAAA,QAC9B,GAAG,OAAOA,MAAK,CAAC;AAAA,QAChB,IAAI,OAAOA,MAAK,CAAC,IAAI,OAAOA,MAAK,EAAE;AAAA,QACnC,GAAG,OAAOA,MAAK,CAAC;AAAA,QAChB,IAAI,OAAOA,MAAK,EAAE;AAAA,QAClB,IAAI,OAAOA,MAAK,EAAE;AAAA,MAAA,EAClB;AAAA,IACD,GAAA,CAAC,MAAM,QAAQ,MAAM,CAAC;AAEnB,UAAA,QAAQzE,MAAAA,QAAQ,MAAM;AACpB,YAAA,WAAW,YAAY,MAAM;AAEnC,UAAI,kBAAkB;AAClB,UAAA,CAAC,WAAW,eAAe,MAAM;AACjB,0BAAA,GAAG,UAAU,IAAI,UAAU;AAAA,MAAA;AAGxC,aAAA;AAAA,QACL,GAAG,aAAa,OAAO,SAAY;AAAA,QACnC,kBAAkB;AAAA,QAClB;AAAA,MACF;AAAA,OACC,CAAC,QAAQ,aAAa,SAAS,UAAU,CAAC;AAEvC,UAAA,OAAOA,MAAAA,QAAQ,MAAM;AACzB,UAAI,YAAY;AAChB,UAAI,SAAS;AACX,cAAM,OAAO,KAAK,IAAI,GAAG,OAAO,OAAO;AAC3B,oBAAA,KAAK,IAAI,CAACyE,WAAe;AAAA,UACnC,GAAG,OAAOA,MAAK,CAAC;AAAA,UAChB,IAAI;AAAA,UACJ,GAAG;AAAA,UACH,IAAI;AAAA,UACJ,IAAI;AAAA,QAAA,EACJ;AAAA,MAAA;AAGE,YAAA,WAAW,YAAY,SAAS;AAEtC,UAAI,kBAAkB;AACtB,UAAI,mBAAmB;AACnB,UAAA,CAAC,WAAW,eAAe,MAAM;AACjB,0BAAA,GAAG,UAAU,IAAI,UAAU;AAC1B,2BAAA;AAAA,MAAA;AAGd,aAAA;AAAA,QACL,GAAG,aAAa,OAAO,SAAY;AAAA,QACnC;AAAA,QACA;AAAA,MACF;AAAA,IAAA,GACC,CAAC,QAAQ,MAAM,aAAa,SAAS,YAAY,QAAQ,MAAM,CAAC;AAE7D,UAAA,SAAS,MAAM,MAAM,KAAK;AAC1B,UAAA,SAAS,uBAAuB,MAAM,IAAI;AAC1C,UAAA,WAAW,WAAW,eAAe;AAErC,UAAA,aAAazE,MAAAA,QAAQ,MAAM;AAC/B,UAAIwE,WAAU;AACZ,eAAO,iBAAiB,EAAE;AAAA,MAAA;AAErB,aAAA;AAAA,IAAA,GACN,CAACA,WAAU,EAAE,CAAC;AAGjB,QAAI,SAAS;AACX,aAAO,MAAM;AACb,aAAO,KAAK;AAAA,IAAA;AAGd,2CACG3E,gBACE,EAAA,UAAA;AAAA,MACC,YAAAP,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACE,GAAG;AAAA,UACJ,eAAc;AAAA,UACd,QAAQ;AAAA,UACR;AAAA,UACA,MAAK;AAAA,UACL;AAAA,UACA,QAAQ;AAAA,YACN;AAAA,YACA;AAAA,UACF;AAAA,UACA,OAAO;AAAA,YACL,GAAG,OAAO;AAAA,YACV,GAAG,mBAAmB,EAAE,MAAM,kBAAkB,WAAY,CAAA;AAAA,UAAA;AAAA,QAC9D;AAAA,MACF;AAAA,MAED,CAAC,WACCA,2BAAA,IAAA,QAAA,EAAK,SAAQ,KAAI,GAAG,MAAM,GAAG,KAAK,cAAc,eAAc,OAAO,CAAA;AAAA,MAEvEkF,aACClF,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC,SAAS0E;AAAA,UACT,IAAI,YAAY,EAAE;AAAA,UAClB,OAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IACT,GAEJ;AAAA,EAEJ;ACzHA,QAAM,UAAU;AAGH,QAAA,aAA2C,CAAC,UAAU;AAC3D,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAA3B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAA+B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAA1E;AAAA,MACA;AAAA,MACA;AAAA,IAAA,IACE,kBAAkB,2BAA2B,KAAK;AAEtD,UAAM,eAAeF,MAAA;AAAA,MACnB,OAAO;AAAA,QACL,GAAG;AAAA,QACH,IAAI,mCAAS,UAAS,CAAA;AAAA,MAAC;AAAA,MAEzB,CAAC,OAAO;AAAA,IACV;AAEA,UAAM,CAAC,cAAc,eAAe,IAAIP,MAAAA,SAAqB,IAAI;AACjE,UAAM,CAAC,aAAa,cAAc,IAAIA,MAAAA,SAAqB,IAAI;AAEzD,UAAA,eAAeD,kBAAY,CAAC,UAA4B;AAC5D,qBAAe,MAAM,MAAM;AAC3B,sBAAgB,MAAM,KAAK;AAAA,IAC7B,GAAG,EAAE;AAEC,UAAA,eAAeA,MAAAA,YAAY,MAAM;AACrC,qBAAe,MAAS;AACxB,sBAAgB,MAAS;AAAA,IAC3B,GAAG,EAAE;AAEL,UAAM,UACJ,SAAS,aAAa,SAAS,aAAa,SAAS;AAEvD,UAAM,gBAAgBA,MAAA;AAAA,MACpB,CAACuB,QAAO,UAAkB;;AAClB,cAAA,MAAM,MAAM,QAAQA,MAAK,KAAI,KAAAA,UAAA,gBAAAA,OAAQ,OAAR,mBAAY,MAAMA,UAAA,gBAAAA,OAAO;AAE5D,eAAO,SAAS;AAAA,UACd;AAAA,UACA;AAAA,UACA,QAAQ;AAAA,UACR,OAAAA;AAAA,UACA;AAAA,UACA;AAAA,QAAA,CACD;AAAA,MACH;AAAA,MACA,CAAC,cAAc,aAAa,IAAI;AAAA,IAClC;AAEA,UAAM,aAAavB,MAAA;AAAA,MACjB,CAACsD,OAAuC,QAAQ,GAAG,QAAQ,MACzDzC,2BAAA,KAACR,gBAAA,EACE,UAAA;AAAA,QACCK,SAAAZ,2BAAA;AAAA,UAACQ,UAAA;AAAA,UAAA;AAAA,YACC,SAASI;AAAA,YACT;AAAA,YACA;AAAA,YACA,MAAM4C;AAAAA,YACN;AAAA,YACA;AAAA,YACA,SAAS,SAAS;AAAA,YAClB;AAAA,YACA;AAAA,YACA,OAAO;AAAA,UAAA;AAAA,QACT;AAAA,QAED,QACCxD,2BAAA;AAAA,UAACQ,UAAA;AAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,IAAI,GAAG,EAAE,SAAS,KAAK;AAAA,YACvB;AAAA,YACA;AAAA,YACA,MAAMgD;AAAAA,YACN;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,OAAO;AAAA,UAAA;AAAA,QAAA;AAAA,MACT,GAEJ;AAAA,MAEF;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA5C;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAEA,UAAM,gBAAgBV,MAAA;AAAA,MACpB,CAACsD,OAAuC,QAAQ,MAAM;AACpD,cAAM,UAAU,YAAY;AACtB,cAAA,gBACH,WAAW,aAAa,gBAAiB;AAG5C,cAAM,aAAa,SAAS,UAAa,YAAY,CAAC;AAGpD,eAAAxD,2BAAA,IAACO,MAAA,UAAA,EACE,UACC,WAAAP,2BAAA;AAAA,UAACQ,UAAA;AAAA,UAAA;AAAA,YACC,SAAS;AAAA,YAET;AAAA,YACA;AAAA,YACA;AAAA,YACA,cAAc;AAAA,YACd;AAAA,YACA;AAAA,YACA;AAAA,YACA,MAAMgD;AAAAA,YACN,UAAU;AAAA,YACV,OAAO,MAAM,cAAcA,OAAM,KAAK;AAAA,UAAA;AAAA,UAVjC,gBAAgB,EAAE;AAAA,QAAA,GAa7B;AAAA,MAEJ;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAEA,UAAM,iBAAiBtD,MAAA;AAAA,MACrB,MAEKF,2BAAAA,IAAAO,WAAAA,UAAA,EAAA,UAAA,gBAAgB+E,aACftF,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC,SAAS8E;AAAA,UACT;AAAA,UACA,QAAQ;AAAA,QAAA;AAAA,MAAA,GAGd;AAAA,MAEF,CAAC,aAAa,cAAc,QAAQA,SAAQ;AAAA,IAC9C;AAEA,UAAM,qBAAqBpF,MAAA;AAAA,MACzB,CAACsD,UACEjD,2BAAAA,KAAAA,MAAAA,UAAA,EACE,UAAA;AAAA,QAAA,WAAWiD,KAAI;AAAA,QACf,eAAe;AAAA,QACf,cAAcA,KAAI;AAAA,MAAA,GACrB;AAAA,MAEF,CAAC,YAAY,gBAAgB,aAAa;AAAA,IAC5C;AAEA,UAAM,oBAAoBtD,MAAA;AAAA,MACxB,CAACsD,UACEjD,2BAAAA,KAAAA,MAAAA,UAAA,EACE,UAAA;AAAA,QAAAiD,MACE,IAAI,CAAC/B,QAAO,UACVlB,2BAAAA,IAAAA,MAAAA,UAAA,EACE,UAAA,WAAWkB,OAAM,MAAM,OAAO+B,MAAK,MAAM,KAD7BsB,eAAAA,WAAW,GAAGrD,OAAM,GAAG,EAAE,CAExC,CACD,EACA,QAAQ;AAAA,QACV,eAAe;AAAA,QACf+B,MACE,IAAI,CAAC/B,QAAO,UACVlB,2BAAAA,IAAAA,MAAAA,UAAA,EACE,UAAc,cAAAkB,OAAM,MAAM,KAAK,KADnBqD,eAAAA,WAAW,GAAGrD,OAAM,GAAG,EAAE,CAExC,CACD,EACA,QAAQ;AAAA,MAAA,GACb;AAAA,MAEF,CAAC,YAAY,gBAAgB,aAAa;AAAA,IAC5C;AAEA,UAAM,qBAAqBvB,MAAA;AAAA,MACzB,MAEKF,2BAAA,IAAAO,qBAAA,EAAA,WAAA,6CAAc,WACb,aAAa,IAAI,CAACyE,YAAW;;AACrB,cAAA,eAAa,KAAAA,WAAA,gBAAAA,QAAQ,UAAR,mBAAe,eAAc;AAC1C,cAAA,OAAO,aAAa,SAAS;AAC7B,cAAA3F,SAAQ,aACV,OAAO2F,QAAO,MAAM,KAAK,IACzB,OAAOA,QAAO,MAAM,KAAK;AAE3B,eAAAhF,2BAAA;AAAA,UAACQ,UAAA;AAAA,UAAA;AAAA,YAEC,SAASwE;AAAA,YACT;AAAA,YACA,OAAA3F;AAAA,UAAA;AAAA,UAHK2F,QAAO;AAAA,QAId;AAAA,MAEH,CAAA,GACL;AAAA,MAEF,CAAC,cAAc,OAAO,QAAQ,QAAQ,MAAM;AAAA,IAC9C;AAGE,WAAAjE,2BAAA,KAACR,gBAAA,EACC,UAAA;AAAA,MAAAP,2BAAAA,IAAC,UACC,UAACA,2BAAA,IAAA,YAAA,EAAS,IAAI,GAAG,EAAE,SACjB,UAAAA,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO,WAAW,QAAQ,QAAQ;AAAA,UAClC,QAAQ,SAAS;AAAA,UACjB,GAAG,WAAW,IAAI;AAAA,UAClB,GAAG;AAAA,QAAC;AAAA,SAER,EACF,CAAA;AAAA,MACAA,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC,SAAS+C;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,OAAO;AAAA,UACP;AAAA,UACA;AAAA,UAEA,UAACxC,2BAAAA,KAAA,KAAA,EAAE,UAAU,QAAQ,EAAE,UACpB,UAAA;AAAA,YAAA,WAAW,kBAAkB,IAAsC;AAAA,YACnE,CAAC,WACA,mBAAmB,IAAuC;AAAA,YAC3D,mBAAmB;AAAA,UAAA,EACtB,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF,GACF;AAAA,EAEJ;AAEO,QAAM,4BAAsD;AAAA,IACjE,aAAa;AAAA,IACb,UAAU;AAAA,IACV,eAAe;AAAA,IACf,MAAM;AAAA,IACN,qCAAO,MAAK,EAAA;AAAA,IACZ,qCAAO,MAAK,EAAA;AAAA,IACZ,yCAAW,UAAS,EAAA;AAAA,IACpB,wCAAU,aAAY,EAAA;AAAA,IACtB,wCAAU,aAAY,CAAA,CAAA;AAAA,EACxB;ACvYa,QAAA,8BAA4D,CACvE,UACG;AACH,UAAM,EAAE,eAAe,SAAS,GAAG,SAAS;AAAA,MAC1C,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAEA,UAAM,eAAeL,MAAA;AAAA,MACnB,OAAO;AAAA,QACL,GAAG;AAAA,QACH,GAAG,mCAAS;AAAA,MAAA;AAAA,MAEd,CAAC,OAAO;AAAA,IACV;AAGE,WAAAV,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAG;AAAA,QACJ;AAAA,QACA,MAAK;AAAA,QACL,SACE,WACEA,2BAAA;AAAA,UAACQ,UAAA;AAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACR,GAAG,QAAQ;AAAA,YACZ,OACER,2BAAA;AAAA,cAACQ,UAAA;AAAA,cAAA;AAAA,gBACC,SAAS,aAAa;AAAA,gBACrB,GAAG,aAAa,MAAM;AAAA,gBACvB,SAAS;AAAA,cAAA;AAAA,YAAA;AAAA,UACX;AAAA,QAEJ;AAAA,QAGJ,SACER,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SACEA,2BAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAAS,CAAC,QAAQ,UAAU;AAC1B,sBAAI,CAAC,QAAQ;AACJ,2BAAA;AAAA,kBAAA;AAGT,wBAAMX,SAAQ;AAAA,oBACZ,GAAG;AAAA,oBACH,MAAM,OAAO,KAAK,IAAI,CAAC,OAAO;AAAA,sBAC5B,GAAG;AAAA,sBACH,OAAO,GAAG,YAAY,EAAE,KAAK,CAAC,MAAM;AAAA,wBAClC,KAAK,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG;AAAA,sBAAA,CAC/B;AAAA,oBAAA,EACD;AAAA,kBACJ;AAEO,yBAAAW,2BAAA,IAAC,iBAAgB,EAAA,OAAc,OAAAX,OAAc,CAAA;AAAA,gBAAA;AAAA,cACtD;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,MAEJ;AAAA,IAEJ;AAAA,EAEJ;ACjEa,QAAA,oBAAkD,CAAC,UAAU;AACxE,UAAM,EAAE,SAAS,eAAe,GAAG,SAAS;AAAA,MAC1C,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAEA,UAAM,eAAeqB,MAAA;AAAA,MACnB,OAAO;AAAA,QACL,GAAG;AAAA,QACH,GAAG,mCAAS;AAAA,MAAA;AAAA,MAEd,CAAC,OAAO;AAAA,IACV;AAEA,UAAM,aAAaA,MAAA;AAAA,MACjB,MAAO;;AAAA;AAAA,UACL,GAAG;AAAA,UACH,IAAG,kBAAa,UAAb,mBAAoB;AAAA,QAAA;AAAA;AAAA,MAEzB,CAAC,YAAY;AAAA,IACf;AAGE,WAAAV,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAG;AAAA,QACJ;AAAA,QACA,MAAK;AAAA,QACL,SACE,WACEA,2BAAA;AAAA,UAACQ,UAAA;AAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACR,GAAG;AAAA,YACJ,OACER,2BAAA;AAAA,cAACQ,UAAA;AAAA,cAAA;AAAA,gBACC,SAAS,aAAa;AAAA,gBACrB,GAAG;AAAA,gBACJ,SAAS;AAAA,cAAA;AAAA,YAAA;AAAA,UACX;AAAA,QAAA;AAAA,MAEJ;AAAA,IAGN;AAAA,EAEJ;;;;;ACqCa,QAAA,YAAyC,CAAC,UAAU;AACzD,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,IACE,kBAAkB,0BAA0B,KAAK;AAErD,UAAM,OAAY,UAAU,QAAQ,QAAQ,CAAC;AAC7C,UAAM,CAAC,YAAY,aAAa,IAAIL,MAAAA,SAAc,KAAK,MAAM;AAC7D,UAAM,CAAC,kBAAkB,mBAAmB,IAAIA,MAAAA,SAAkB,KAAK;AACjE,UAAA,CAAC,UAAU,WAAW,IAAIA,eAAkB,CAAC,CAAC,KAAK,MAAM;AAEzD,UAAA,CAAC,cAAc,IAAIA,MAAA,SAAkB,CAAC,KAAK,eAAe,QAAQ,CAAC;AACzE,UAAM,aAAaO,MAAA;AAAA,MACjB,OAAO,EAAE,GAAG,6BAA6B,GAAG,MAAM,MAAM;AAAA,MACxD,CAAC,MAAM,KAAK;AAAA,IACd;AACA,UAAM,aAAaA,MAAA;AAAA,MACjB,OAAO,EAAE,GAAG,6BAA6B,GAAG,MAAM,MAAM;AAAA,MACxD,CAAC,MAAM,KAAK;AAAA,IACd;AACA,UAAM,cAAcA,MAAA;AAAA,MAClB,OAAO,EAAE,GAAG,2BAA2B,GAAG,OAAO,MAAM;AAAA,MACvD,CAAC,OAAO,KAAK;AAAA,IACf;AAEM,UAAA,aAAaT,aAAmB,IAAI;AAE1C,UAAM,aAAa,YAAY;AAC/B,UAAM,gBACJ,eAAe,aACf,eAAe,uBACf,eAAe;AAEjB,UAAM,WAAW,qBAAqB,OAAO,QAAQ,YAAY;AAEjEG,UAAAA,UAAU,MAAM;AACd,UAAI,SAAS;AACX,cAAMmF,QAAO,QAAQ;AACrB,YAAI,CAAC,kBAAkBA,MAAK,WAAW,YAAY;AACjD,wBAAcA,MAAK,MAAM;AACb,sBAAA,CAAC,CAACA,MAAK,MAAM;AAAA,QAAA;AAAA,MAC3B;AAAA,IAED,GAAA,CAAC,gBAAgB,YAAY,OAAO,CAAC;AAElC,UAAA,iBAAiB7E,MAAAA,QAAQ,MAAM;AAC/B,UAAA,eAAe,aAAa,eAAe,qBAAqB;AAC3D,eAAA;AAAA,UACL;AAAA,UACA,eAAe;AAAA,QACjB;AAAA,MAAA,WACS,eAAe,WAAW;AAC5B,eAAA,qBAAqB,MAAgC,IAAI;AAAA,MAAA,OAC3D;AACL,eAAO,sBAAsB,IAA+B;AAAA,MAAA;AAAA,IAC9D,GACC,CAAC,MAAM,UAAU,CAAC;AAErB,UAAM,YAAYR,MAAA;AAAA,MAChB,CAAC,YAAoB,gBAAwB;AAC3C,cAAM,SAAS,UAAU;AAAA,UACvB,OAAO;AAAA,UACP,MAAM,WAAW;AAAA,UACjB,cAAc,WAAW;AAAA,UACzB,MAAM;AAAA,UACN,QAAQ,cAAc,WAAW;AAAA,UACjC;AAAA,QAAA,CACD;AAED,cAAM,SAAS,UAAU;AAAA,UACvB,cAAc,WAAW;AAAA,UACzB,MAAM,WAAW;AAAA,UACjB,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,QAAQ,WAAW;AAAA,UACnB;AAAA,QAAA,CACD;AAEM,eAAA,EAAE,QAAQ,OAAO;AAAA,MAC1B;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX;AAAA,MAAA;AAAA,IAEJ;AAEA,UAAM,YAAYA,MAAA;AAAA,MAChB,CAAC,UAA8B;AAC7B,YAAI,gBAAgB;AAClB,wBAAc,MAAM,MAAM;AAC1B,sBAAY,MAAM,QAAQ;AAC1B,8BAAoB,IAAI;AAExB,uBAAa,WAAW,OAAO;AAC/B,qBAAW,UAAU,WAAW,MAAM,oBAAoB,KAAK,CAAC;AAAA,QAAA;AAAA,MAEpE;AAAA,MACA,CAAC,cAAc;AAAA,IACjB;AAEA,UAAM,cAAcA,MAAA;AAAA,MAClB,CAAC;AAAA,QACC;AAAA,QACA;AAAA,QACA,IAAA+E;AAAAA,QACA;AAAA,QACA;AAAA,MAAA,MAC8B;AAC9B,cAAM,EAAE,QAAQ,OAAA,IAAW,UAAU,YAAY,WAAW;AACtD,cAAA,eAAe,eAAe,UAAU;AAE9C,+CACG1E,gBACE,EAAA,UAAA;AAAA,UAAA,cAAc,aACbP,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,OAAO;AAAA,cACP;AAAA,cACA;AAAA,cACA,OAAO;AAAA,cACP,OAAO;AAAA,YAAA;AAAA,UACT;AAAA,UAEFR,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,OAAO;AAAA,cACP,OAAO;AAAA,cACP,YAAY,aAAa,YAAY;AAAA,cACrC,oBAAoB,CAAC,UAAU,WAAW,cAAc,KAAK;AAAA,YAAA;AAAA,UAC/D;AAAA,UACAR,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,OAAO;AAAA,cACP,OAAO;AAAA,cACP,YAAY,aAAa,YAAY;AAAA,cACrC,oBAAoB,CAAC,UAAU,WAAW,YAAY,KAAK;AAAA,YAAA;AAAA,UAC7D;AAAA,UACC,iBACC,cAAc,IAAI,CAAC,MAAM,MACvBR,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cAEC,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,OAAO;AAAA,cACP,YAAY,aAAa,YAAY;AAAA,cACrC,oBAAoB,CAAC,UAAU,WAAW,cAAc,KAAK;AAAA,YAAA;AAAA,YALxD;AAAA,UAAA,CAOR;AAAA,UACF,cACCR,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,UAAU;AAAA,cACV,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,OAAO;AAAA,cACP,OAAO;AAAA,cAEP,UAAAR,2BAAA;AAAA,gBAACQ,UAAA;AAAA,gBAAA;AAAA,kBACC,SAAS;AAAA,kBACT;AAAA,kBACA,QAAQ;AAAA,kBACR,OAAO;AAAA,kBACP,UAAU,WAAW;AAAA,kBACrB,cAAc,WAAW;AAAA,kBACzB,MAAM;AAAA,kBACN,QAAQ;AAAA,kBAER,UAAAR,2BAAA;AAAA,oBAACQ,UAAA;AAAA,oBAAA;AAAA,sBACC,SAAS;AAAA,sBACT,IAAI,eAAeyE,GAAE;AAAA,sBACrB,MAAM;AAAA,sBACN,QAAQ;AAAA,sBACR,OAAO;AAAA,sBACP;AAAA,sBACA;AAAA,sBACA;AAAA,sBACA;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACF;AAAA,cAAA;AAAA,YACF;AAAA,UAAA;AAAA,QACF,GAEJ;AAAA,MAEJ;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAGE,WAAAjF,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAc,cAAc,UAAU;AAAA,QACtC,cAAc,cAAc,UAAU;AAAA,QACtC,WAAW;AAAA,UACTiC,MAAI;AAAA,UACJ;AAAA,UACA,OAAO;AAAA,QACT;AAAA,QAEC,UAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAEJ;AAEO,QAAM,2BAA2B;AAAA,IACtC,MAAM,CAAC;AAAA,IACP,OAAOjC,2BAAAA,IAAC,aAAY,EAAA,MAAK,OAAO,CAAA;AAAA,IAChC,OAAOA,2BAAAA,IAAC,aAAY,EAAA,MAAK,QAAQ,CAAA;AAAA,IACjC,uCAAS,YAAW,EAAA;AAAA,IACpB,0CAAY,gBAAe,EAAA;AAAA,IAC3B,OAAO;AAAA,IACP,SAAS;AAAA,EACX;AC/Ua,QAAA,mBAAuD,CAAC;;AACnEA,sCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAG;AAAA,QACJ,uCAAS,mBAAmB,EAAA,IAAG,WAAM,WAAN,mBAAc,OAAO,MAAK,UAAU,CAAA;AAAA,MAAA;AAAA,IACrE;AAAA;ACEW,QAAA,6BAET,CAAC;;AACHA,sCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAG;AAAA,QACJ,QACEA,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACE,IAAG,WAAM,WAAN,mBAAc;AAAA,YAClB,MAAK;AAAA,UAAA;AAAA,QACP;AAAA,QAEF,OACEA,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,YACEA,2BAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OACEA,2BAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACE,GAAG;AAAA,oBACJ,UAAU;AAAA,oBACV,QAAQ,CAAC,SAAS,GAAG,OAAO,GAAG;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACjC;AAAA,YAEJ;AAAA,YAED,IAAG,WAAM,UAAN,mBAAa;AAAA,UAAA;AAAA,QAAA;AAAA,MACnB;AAAA,IAEJ;AAAA;ACwDW,QAAA,WAAuC,CAAC,UAAU;AACvD,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,IACE,kBAAkB,yBAAyB,KAAK;AAEpD,UAAM,aAAaU,MAAAA,QAAQ,MAAM,WAAW,YAAY,CAAC,MAAM,CAAC;AAC1D,UAAA,aAAa,aAAa,WAAW;AAErC,UAAA,aAAaA,MAAAA,QAAQ,MAAM;AAC/B,UAAI,OAAO;AACX,UAAI,OAAO;AAIX,YAAM,QAAQ,aAAa;AAC3B,YAAM,YAAY,aACb,KAAK,IAAe,KAAK,QACxB,WACA,WACD,KAAK,KAAgB,KAAK,QACzB,WACA;AAEN,UAAI,YAAY;AACd,YAAI,cAAc,OAAO;AACvB,iBAAO,IAAI;AAAA,QAAA,WACF,cAAc,UAAU;AACjC,iBAAO,IAAI,SAAS;AAAA,QAAA,WACX,cAAc,UAAU;AACjC,iBAAO,IAAI,SAAS;AAAA,QAAA;AAEtB,eAAO,OAAO,QAAQ;AAAA,MAAA,OACjB;AACL,YAAI,cAAc,OAAO;AACvB,iBAAO,IAAI,QAAQ;AAAA,QAAA,WACV,cAAc,UAAU;AACjC,iBAAO,IAAI,QAAQ;AAAA,QAAA,WACV,cAAc,UAAU;AACjC,iBAAO,IAAI;AAAA,QAAA;AAEb,eAAO,OAAO,SAAS;AAAA,MAAA;AAGlB,aAAA;AAAA,QACL,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,SAAS;AAAA,MACX;AAAA,IACC,GAAA,CAAC,KAAK,IAAI,KAAK,GAAG,QAAQ,YAAY,SAAS,UAAU,OAAO,GAAG,CAAC,CAAC;AAElE,UAAA,YAAYA,MAAAA,QAAQ,MAAM;AAC9B,UAAI,OAAO;AACX,UAAI,OAAO;AAEX,UAAI,YAAY;AACd,cAAM,OAAO,KAAK,IAAI,GAAG,MAAM,OAAO;AACtC,YAAI,aAAa,OAAO;AACf,iBAAA;AAAA,QAAA,OACF;AACL,iBAAO,OAAO,SAAS;AAAA,QAAA;AAGzB,eAAO,OAAO,QAAQ;AAAA,MAAA,OACjB;AACL,cAAM,OAAO,KAAK,IAAI,GAAG,MAAM,OAAO;AACtC,YAAI,aAAa,OAAO;AACf,iBAAA;AAAA,QAAA,OACF;AACL,iBAAO,OAAO,QAAQ;AAAA,QAAA;AAGxB,eAAO,OAAO,SAAS;AAAA,MAAA;AAGzB,UAAI,SAAS,oBAAoB;AAC/B,YAAI,YAAY;AACd,iBAAO,OAAO;AAAA,QAAA,OACT;AACL,iBAAO,OAAO;AAAA,QAAA;AAAA,MAChB;AAGK,aAAA;AAAA,QACL,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,SAAS;AAAA,MACX;AAAA,IACF,GAAG,CAAC,QAAQ,YAAY,SAAS,UAAU,OAAO,MAAM,OAAO,GAAG,CAAC,CAAC;AAE9D,UAAA,QAAQA,MAAAA,QAAQ,MAAM;AAC1B,UAAI8E,SAAQ;AACZ,UAAI,UAAU;AACZ,YAAI,WAAW,YAAY;AACzB,iBAAQ,QAAQ,WAAY;AAAA,QAAA,OACvB;AACI,kBAAA,WAAW,SAAS,WAAY;AAAA,QAAA;AAAA,MAC3C;AAGKA,aAAAA;AAAAA,OACN,CAAC,UAAU,UAAU,OAAO,MAAM,CAAC;AAGpC,WAAAxF,2BAAA;AAAA,MAACyE,QAAAA,OAAO;AAAA,MAAP;AAAA,QACC,SAAS;AAAA,QACT,SAAS;AAAA,QACT,MAAM;AAAA,QACN,YAAY;AAAA,UACV,GAAG;AAAA,UACH;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QAEA,UAACzE,2BAAAA,IAAA,QAAA,EAAK,MAAY,WAAsB,YACrC,UACH,KAAA,CAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAEJ;AAEO,QAAM,0BAAkD;AAAA,IAC7D,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,MAAM;AAAA,EACR;AClCa,QAAA,MAA6B,CAAC,UAAU;AAC7C,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA,UAAAkF;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAA3B;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAAvC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,IACE,kBAAkB,mBAAmB,KAAK;AAC9C,UAAM,aAAaN,MAAA;AAAA,MACjB,OAAO,EAAE,GAAG,yBAAyB,GAAGM,UAAA,gBAAAA,OAAO,MAAM;AAAA,MACrD,CAACA,UAAA,gBAAAA,OAAO,KAAK;AAAA,IACf;AAEA,UAAM,aAAaN,MAAAA,QAAQ,MAAM,WAAW,YAAY,CAAC,MAAM,CAAC;AAC1D,UAAA,OAAOT,aAA2B,IAAI;AAC5C,UAAM,CAAC,gBAAgB,iBAAiB,IAAIE,MAAAA,SAAkB,MAAM;AAEpE,UAAM,8BAA8BD,MAAA;AAAA,MAClC,CAAC8C,QAAO,QAAgB,SAAiB;AAEvC,cAAM,YAAYA,OAAM,MAAM,EAAE,CAAC;AAC3B,cAAA,mBAAmB,YAAY,WAAW,WAAW;AAC3D,cAAM,aAAa,mBAAmB;AAC7B,iBAAA,SAAS,aAAa,aAAc;AAC7C,eAAO,OAAO;AAEP,eAAA,EAAE,MAAM,OAAO;AAAA,MACxB;AAAA,MACA,CAAC,UAAU,YAAY,OAAO;AAAA,IAChC;AAEA,UAAM,UAAU9C,MAAA;AAAA,MACd,CAAC,EAAE,GAAG,GAAG,OAAAoB,QAAO,aAA6B;AACvC,YAAA,OAAO,aAAa,IAAI,KAAK,IAAI,GAAG,OAAO,OAAO;AAClD,YAAA,OAAO,aAAa,KAAK,IAAI,GAAG,OAAO,MAAO,CAAA,IAAI;AAChD,cAAA,YAAY,aAAa,IAAI;AAC7B,cAAA,WAAW,aAAaA,SAAQ;AAEtC,YAAI,SAAS,oBAAoB;AAC/B,cAAI,YAAY;AACd,mBAAO,OAAO;AAAA,UAAA,OACT;AACL,mBAAO,OAAO;AAAA,UAAA;AAAA,QAChB;AAGK,eAAA;AAAA,UACL,GAAG;AAAA,UACH,GAAG;AAAA,UACH,QAAQ;AAAA,UACR,OAAO;AAAA,QACT;AAAA,MACF;AAAA,MACA,CAAC,YAAY,MAAM,QAAQ,MAAM;AAAA,IACnC;AAEA,UAAM,eAAepB,MAAA;AAAA,MACnB,CACE,GACA,IACA,IACA8C,QACA,cACAyC,gBACAC,aACG;AACC,YAAA;AACA,YAAA;AAEJ,YAAID,gBAAe;AACjB,cAAIzC,OAAM,WAAW;AACnB,qBAASA,OAAM,CAAC;AAChB,mBAAOA,OAAM,UAAU;AAEvB,gBAAI,cAAc;AAChB,kBAAI,QAAQ;AACD,yBAAA,SAAS,OAAO,IAAI,eAAe;AAAA,cAAA,OACvC;AAEI,yBAAA,OAAO,IAAI,eAAe;AAAA,cAAA;AAG9B,qBAAA;AAAA,YAAA;AAAA,UACT,OACK;AACL,gBAAI,cAAc;AACV,oBAAA,IAAI,MAAM,wCAAwC;AAAA,YAAA;AAG1D,qBAASA,OAAM,EAAE;AACVA,mBAAAA,OAAO,KAAc,EAAU;AAEtC,gBAAI0C,UAAS;AACX,oBAAM,OAAO,4BAA4B1C,QAAO,QAAQ,IAAI;AAC5D,uBAAS,KAAK;AACd,qBAAO,KAAK;AAAA,YAAA;AAAA,UACd;AAAA,QACF,OACK;AACL,cAAI,cAAc;AACV,kBAAA,IAAI,MAAM,wCAAwC;AAAA,UAAA;AAGpD,gBAAA,KAAKA,OAAM,EAAE;AACb,gBAAA,KAAKA,OAAM,EAAE;AACnB,gBAAM,QAAQ,KAAK;AACV,mBAAA;AACT,iBAAO,KAAK,IAAI,QAAQ,GAAG,CAAC;AAAA,QAAA;AAGvB,eAAA;AAAA,UACL,QAAQ,MAAM,MAAM,IAAI,IAAI;AAAA,UAC5B,MAAM,MAAM,IAAI,IAAI,IAAI;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,CAAC,2BAA2B;AAAA,IAC9B;AAEA,UAAM,iBAAiB9C,MAAA;AAAA,MACrB,CAAC,IAAI,IAAI8C,WAAU;AACX,cAAA,KAAKA,OAAM,EAAE;AACb,cAAA,KAAKA,OAAM,EAAE;AACnB,cAAM,OAAO,KAAK,IAAI,KAAK,EAAE;AAC7B,cAAM,UAAU,KAAK,IAAI,aAAa,GAAG,IAAI;AAC7C,cAAM,SAAS,KAAK,IAAI,IAAI,EAAE;AAEvB,eAAA;AAAA,UACL,QAAQ,MAAM,MAAM,IAAI,IAAI;AAAA,UAC5B,MAAM,MAAM,OAAO,IAAI,IAAI;AAAA,QAC7B;AAAA,MACF;AAAA,MACA,CAAC,SAAS;AAAA,IACZ;AAEA,UAAM,YAAY9C,MAAA;AAAA,MAChB,CAACsD,UAAwC;AACvC,YAAI,YAAY;AAChB,YAAI,YAAY;AAEhB,YAAI,SAAS;AACX,cAAI,YAAY;AACF,wBAAA;AAAA,UAAA,OACP;AACO,wBAAA;AAAA,UAAA;AAAA,QACd;AAGF,YAAI,YAAY;AACd,gBAAM,UAAU;AAAA,YACdA,MAAK;AAAA,YACLA,MAAK;AAAA,YACLA,MAAK;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AACA,gBAAM,UAAU,eAAeA,MAAK,IAAIA,MAAK,IAAI,SAAS;AAEnD,iBAAA;AAAA,YACL,GAAG,QAAQ;AAAA,YACX,OAAO,QAAQ;AAAA,YACf,GAAG,QAAQ;AAAA,YACX,QAAQ,QAAQ;AAAA,UAClB;AAAA,QAAA,OACK;AACL,gBAAM,UAAU;AAAA,YACdA,MAAK;AAAA,YACLA,MAAK;AAAA,YACLA,MAAK;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AACA,gBAAM,UAAU,eAAeA,MAAK,IAAIA,MAAK,IAAI,SAAS;AAEnD,iBAAA;AAAA,YACL,GAAG,QAAQ;AAAA,YACX,OAAO,QAAQ;AAAA,YACf,GAAG,QAAQ;AAAA,YACX,QAAQ,QAAQ;AAAA,UAClB;AAAA,QAAA;AAAA,MAEJ;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAEA,UAAM,uBAAuBtD,MAAA;AAAA,MAC3B,CAAC,UAAU;AAET,YAAIqD,UAAS;AACX,4BAAkB,IAAI;AAAA,QAAA;AAGT,qDAAA;AAAA,UACb,OAAO;AAAA,UACP,aAAa;AAAA,QAAA;AAAA,MAEjB;AAAA,MACA,CAAC,MAAM,cAAcA,QAAO;AAAA,IAC9B;AAEA,UAAM,uBAAuBrD,MAAA;AAAA,MAC3B,CAAC,UAAU;AAET,YAAIqD,UAAS;AACX,4BAAkB,KAAK;AAAA,QAAA;AAGV,qDAAA;AAAA,UACb,OAAO;AAAA,UACP,aAAa;AAAA,QAAA;AAAA,MAEjB;AAAA,MACA,CAAC,MAAM,cAAcA,QAAO;AAAA,IAC9B;AAEA,UAAM,eAAerD,MAAA;AAAA,MACnB,CAAC,UAAU;AACC,2CAAA;AAAA,UACR,OAAO;AAAA,UACP,aAAa;AAAA,QAAA;AAAA,MAEjB;AAAA,MACA,CAAC,MAAM,OAAO;AAAA,IAChB;AAEA,UAAM,UAAUA,MAAA;AAAA,MACd,CAACyF,WAAkB;AACjB,YAAI,MAAM;AACR,iBAAO,qBAAqB,EAAE;AAAA,QAAA,OACzB;AACL,cAAIT,WAAU;AACZ,mBAAO,iBAAiB,EAAE;AAAA,UAAA;AAGrBS,iBAAAA;AAAAA,QAAA;AAAA,MAEX;AAAA,MACA,CAACT,WAAU,IAAI,IAAI;AAAA,IACrB;AAEM,UAAA,cAAcxE,MAAAA,QAAQ,MAAM;AAC1B,YAAA,QAAQ,gBAAgB,MAAM;AAChC,UAAA,IAAI,KAAK,KAAK;AAIb,UAAA,KAAK,KAAgB,GAAG;AAC3B,YAAI,KAAK;AAAA,MAAA;AAGL,YAAA,UAAU,aACZ,KAAK,OAAO,KAAK,QAAQ,IACzB,KAAK,OAAO,KAAK,QAAQ,KAAK;AAElC,UAAI,SAAS;AACX,YAAI,GAAG,KAAK,GAAG,MAAM,CAAC;AAAA,MAAA;AAGjB,aAAA;AAAA,QACL,GAAG,KAAK;AAAA,QACR;AAAA,MACF;AAAA,IACC,GAAA,CAAC,MAAM,eAAe,UAAU,CAAC;AAE9B,UAAA,gBAAgBA,MAAAA,QAAQ,MAAM,aAAa,WAAW,GAAG,CAAC,WAAW,CAAC;AAE5E,UAAM,gBAAgBR,MAAA;AAAA,MACpB,CAAC0F,WAAkB;AACjB,YAAI,UAAU;AACZ,cAAI,QAAQ;AACZ,cAAI,WAAW,YAAY;AACzB,oBAASA,SAAQ,WAAY;AAAA,UAAA,OACxB;AACK,qBAAA,WAAWA,UAAS,WAAY;AAAA,UAAA;AAGrC,iBAAA;AAAA,YACL,GAAG;AAAA,YACH;AAAA,UACF;AAAA,QAAA,OACK;AACE,iBAAA;AAAA,YACL,MAAM;AAAA,YACN,OAAO;AAAA,UACT;AAAA,QAAA;AAAA,MAEJ;AAAA,MACA,CAAC,UAAU,UAAU,MAAM;AAAA,IAC7B;AAEA,UAAM,YAAY1F,MAAA;AAAA,MAChB,CAAC2F,oBAA2BR,SAAwBO,WAAkB;AACpE,cAAM,WAAW,OAAO,aAAa,EAAE,MAAM;AACvC,cAAA,OAAO,QAAQC,kBAAiB;AAChC,cAAA,cAAc,QAAQR,OAAM;AAClC,cAAM,SAAS,uBAAuB,EAAE,WAAW,MAAA,GAAS,IAAI;AAC1D,cAAA,aAAa,cAAcO,MAAK;AAGtC,cAAM,UAAU;AAAA,UACd,GAAG;AAAA,UACH,OAAO,YAAY;AAAA,UACnB,OAAO,YAAY;AAAA,UACnB;AAAA,QACF;AAEA,eAAO,QAAQ;AACf,eAAO,QAAQ;AAEf,cAAM,UAAU;AAAA,UACd,GAAGP;AAAAA,UACH,OAAOA,QAAO;AAAA,UACd,OAAOA,QAAO;AAAA,UACd;AAAA,QACF;AAEA,eAAO,QAAQ;AACf,eAAO,QAAQ;AAKf,cAAM,QAAa,CAAC;AAChB,YAAA,KAAK,SAAS,KAAK,GAAG;AACxB,iBAAO,QAAQ;AACf,iBAAO,QAAQ;AACf,gBAAM,OAAO;AAAA,QAAA;AAIb,eAAArF,2BAAAA,IAAC,KAAE,EAAA,KAAK,MACN,UAAAA,2BAAA;AAAA,UAACyE,QAAAA,OAAO;AAAA,UAAP;AAAA,YACC,WAAW,WAAW,OAAO,SAAS;AAAA,YACtC,OAAO;AAAA,cACL,GAAG,OAAO;AAAA,cACV,GAAG,mBAAmB;AAAA,gBACpB;AAAA,gBACA,kBAAkBoB;AAAAA,cAAA,CACnB;AAAA,cACD;AAAA,YACF;AAAA,YACC,GAAG;AAAA,YACJ,MAAM;AAAA,YACN;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YACN;AAAA,YACA,cAAc;AAAA,YACd,cAAc;AAAA,YACd,SAAS;AAAA,YACT;AAAA,YACA,UAAU;AAAA,YACV,cAAY;AAAA,YACZ,MAAK;AAAA,UAAA;AAAA,QAAA,GAET;AAAA,MAEJ;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAEM,UAAA,iBAAiB3F,MAAAA,YAAY,MAAM;AACvC,UAAI,CAAC,OAAO;AACH,eAAA;AAAA,MAAA;AAIL,UAAA,SAAS,aAAa,aAAa,GAAG;AACjC,eAAA;AAAA,MAAA;AAIL,UAAA,SAAS,uBAAuB,SAAS,aAAa;AACxD,gBAAQ,MAAM,oDAAoD;AAC3D,eAAA;AAAA,MAAA;AAGH,YAAA,aAAa,aAAa,SAAS;AACzC,YAAM,CAACS,QAAOlB,IAAG,IAAI,WAAW,OAAO;AACjC,YAAA,OAAO,aAAa,MAAM;AAG1B,YAAA,YAAY,SAAS,qBAAqB,MAAM;AAChD,YAAA,WAAW,SAAS,qBAAqBkB,SAAQlB;AACvD,YAAM,aACJ,SAAS,sBAAuB,KAAK,IAAI,IAAgB,IACrDA,OACA;AAEN,YAAM4F,UAAS,UAAU;AAAA,QACvB,GAAG;AAAA,QACH,CAAC,IAAI,GAAG;AAAA,QACR,CAAC,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG;AAAA,MAAA,CAC1B;AAGC,aAAArF,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACR,GAAG6E;AAAAA,UACJ;AAAA,QAAA;AAAA,MACF;AAAA,IAAA,GAED;AAAA,MACD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAEK,UAAA,WAAW9B,WAAU,iBAAiB;AACtC,UAAA,SAAS,MAAM,MAAM,QAAQ;AAC7B,UAAA,SAAS,UAAU,IAAI;AACvB,UAAA,oBAAoB,SACtB,OAAO,MAAM,EAAE,SAAS,gBAAgB,EAAE,IAAA,IAC1C;AACJ,UAAM,iBAAkB,cAAc,WAAW,MAAM,SAAU;AACjE,UAAM,sBAAsB,SACxB,OAAO,cAAc,EAAE,SAAS,gBAAgB,IAChD;AACE,UAAA,QAAQ,eAAe,SAAY,aAAa;AAChD,UAAA,QAAQ,aAAa,SAAS;AACpC,UAAM,WAAW,aAAa,YAAY,IAAI,YAAY;AACpD,UAAA,YAAY,WAAW,aAAa,QAAQ;AAElD,2CACGhD,gBACE,EAAA,UAAA;AAAA,MAAe,eAAA;AAAA,MACf,UAAU,mBAAmB,QAAQ,KAAK;AAAA,MAC1C,cACCP,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACR,GAAG;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA,OAAO;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MACF;AAAA,MAED,wCACED,gBACC,EAAA,UAAA;AAAA,QAACP,2BAAAA,IAAA,MAAA,EAAK,IAAI,QAAQ,EAAE,IAAI,MAAM,iBAAiB,EAAE,IAAK,CAAA;AAAA,QACtDA,2BAAA;AAAA,UAACQ,UAAA;AAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,IAAI,gBAAgB,EAAE;AAAA,YACtB,MAAM;AAAA,UAAA;AAAA,QAAA;AAAA,MACR,GACF;AAAA,MAED0E,aACClF,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC,SAAS0E;AAAA,UACT,IAAI,YAAY,EAAE;AAAA,UAClB,WAAW;AAAA,UACX,OAAO;AAAA,QAAA;AAAA,MACT;AAAA,MAEDlE,UACChB,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC,SAASQ;AAAA,UACR,GAAG;AAAA,UACJ,MAAM,YAAY,QAAQ;AAAA,UAC1B;AAAA,UACA;AAAA,UACA;AAAA,UACA,MAAM,WAAW,QAAQ;AAAA,UACzB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MACF;AAAA,MAEDuC,YACCvD,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC,SAAS+C;AAAA,UACT,SAAS,CAAC,CAAC;AAAA,UACX,WAAW;AAAA,UACX;AAAA,UACA,OAAO;AAAA,UACP,WAAYA,SAAQ,MAAc,aAAa;AAAA,UAC/C;AAAA,QAAA;AAAA,MAAA;AAAA,IACF,GAEJ;AAAA,EAEJ;AAEO,QAAM,oBAAoB;AAAA,IAC/B,kBAAkB;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,yCAAW,UAAS,CAAA,CAAA;AAAA,EACtB;AC3oBa,QAAA,YAAyC,CAAC,UAAU;AACzD,UAAA;AAAA,MACJ;AAAA,MACA,SAAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAAuC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,IACE,kBAAkB,0BAA0B,KAAK;AAC/C,UAAA,MAAM7F,aAAmB,IAAI;AACnC,UAAM,CAAC,cAAc,eAAe,IAAIE,MAAAA,SAAqB,IAAI;AACjE,UAAM,aAAaO,MAAAA,QAAQ,MAAM,WAAW,YAAY,CAAC,MAAM,CAAC;AAE1D,UAAA,gBAAgBA,MAAAA,QAAQ,MAAM;AAEhC,aAAA,SAAS,aACT,SAAS,aACT,SAAS,eACT,SAAS,uBACT,SAAS;AAAA,IAAA,GAEV,CAAC,IAAI,CAAC;AAET,UAAM,eAAeR,MAAA;AAAA,MACnB,CAACsD,UAAuC;AACtC,YAAI,OAAO;AACX,YAAI,OAAO;AACX,YAAI,SAAS,aAAa;AACxB,cAAI,WAAW,YAAY;AAClB,mBAAA,OAAOA,MAAK,GAAG;AAAA,UAAA,OACjB;AACE,mBAAA,OAAOA,MAAK,GAAG;AAAA,UAAA;AAAA,QACxB;AAGK,eAAA,aAAa,IAAI,KAAK,IAAI;AAAA,MACnC;AAAA,MACA,CAAC,QAAQ,MAAM,QAAQ,MAAM;AAAA,IAC/B;AAEA,UAAM,cAActD,MAAA;AAAA,MAClB,CAACuB,QAAO,UAAkB;AACxB,YAAI,MAAM;AACV,YAAI,eAAe;AACjB,cAAI,WAAW,YAAY;AACnB,kBAAA;AAAA,UAAA,OACD;AACC,kBAAA;AAAA,UAAA;AAAA,QACR;AAIE,YAAAA,OAAM,GAAG,MAAM,QAAW;AACtB,gBAAA;AAAA,QAAA;AAGR,eAAO,SAAS;AAAA,UACd;AAAA,UACA,OAAAA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW;AAAA,QAAA,CACZ;AAAA,MACH;AAAA,MACA,CAAC,aAAa,MAAM,eAAe,MAAM;AAAA,IAC3C;AAEM,UAAA,cAAcvB,kBAAY,CAAC,UAAU;;AAErC,gBAAA,YAAA,mBAAS,iBAAiB;AAAA,IAChC,GAAG,EAAE;AAEC,UAAA,eAAeA,kBAAY,CAAC,UAA4B;AAC5D,sBAAgB,MAAM,KAAK;AAAA,IAC7B,GAAG,EAAE;AAEC,UAAA,eAAeA,MAAAA,YAAY,MAAM;AACrC,sBAAgB,IAAI;AAAA,IACtB,GAAG,EAAE;AAEL,UAAM,YAAYA,MAAA;AAAA,MAChB,CACEsD,OACA,UACA,UACA,eACG;AACH,cAAM,SAAS,gBAAgB,aAAa,MAAMA,MAAK;AAEvD,YAAI,YAAY;AAChB,YAAI,YAAY;AAEhB,YAAI,SAAS;AACX,cAAI,YAAY;AACF,wBAAA;AAAA,UAAA,OACP;AACO,wBAAA;AAAA,UAAA;AAAA,QACd;AAIE,YAAA,MAAM,SAAS,SAAS;AAC5B,YAAIA,MAAK,KAAK;AACN,gBAAA,GAAGA,MAAK,IAAK,SAAA,CAAU,IAAI,UAAU,IAAIA,MAAK,CAAC;AAAA,QAAA;AAGvD,YAAI,cAAc,MAAM,QAAQsC,IAAG,IAAIA,KAAI,QAAQ,IAAIA;AACvD,YAAI,CAACA,MAAK;AACM,wBAAA9F,2BAAAA,IAAC,KAAK,EAAA,GAAG,kBAAmB,CAAA;AAAA,QAAA;AAI1C,eAAAA,+BAACO,MAAAA,UAAA,EACC,UAAAP,2BAAA;AAAA,UAACQ,UAAA;AAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,IAAI,GAAG,EAAE,QAAQ,UAAU,IAAI,QAAQ;AAAA,YACvC;AAAA,YACA;AAAA,YACA,QAAQ;AAAA,YACR;AAAA,YACA,QAAQ;AAAA,YACR;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,MAAMgD;AAAAA,YACN;AAAA,YACA,OAAO;AAAA,YACP;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,aAlBW,GAoBf;AAAA,MAEJ;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACAsC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAEA,UAAM,iBAAiB5F,MAAA;AAAA,MACrB,CACEsD,OACA,UACA,eACG;AACH,eACGjD,2BAAAA,IAAAA,MAAAA,UAAA,EACE,UAAAiD,MAAK;AAAA,UAAI,CAAC,SAAS,aAClB,UAAU,SAAS,UAAU,UAAU,UAAU;AAAA,QAAA,GAErD;AAAA,MAEJ;AAAA,MACA,CAAC,SAAS;AAAA,IACZ;AAEA,UAAM,qBAAqBtD,MAAA;AAAA,MACzB,MAEKF,2BAAA,IAAAO,qBAAA,EAAA,WAAA,6CAAc,WACb,aAAa,IAAI,CAACyE,YAChBhF,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UAEC,SAASwE;AAAA,UACT,MAAM,WAAW,aAAa,QAAQ;AAAA,UACtC,OACE,WAAW,aACP,OAAOA,QAAO,MAAM,KAAK,IACzB,OAAOA,QAAO,MAAM,KAAK;AAAA,UAE/B,WAAW,WAAW,aAAa,eAAe;AAAA,QAAA;AAAA,QAR7CA,QAAO;AAAA,MAUf,CAAA,GACL;AAAA,MAEF,CAAC,QAAQ,QAAQ,cAAc,OAAO,QAAQ,MAAM;AAAA,IACtD;AAGE,WAAAjE,2BAAA;AAAA,MAACP,UAAA;AAAA,MAAA;AAAA,QACC,SAAS+C;AAAA,QACT,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS;AAAA,QACT,cAAc,WAAW;AAAA,QACzB,OAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA,aAAa;AAAA,QAEZ,UAAA;AAAA,UACE,iBAAA,KAAwC,IAAI,CAAC,WAAW,yCACtD,KAAE,EAAA,WAAW,aAAa,SAAS,GACjC,UAAA;AAAA,YACC,UAAU;AAAA,YACV,KAAK;AAAA,YACL;AAAA,UAJwC,EAAA,GAAA,aAAa,KAAK,EAM9D,CACD;AAAA,UACF,CAAC,iBACA,eAAe,MAAyC,KAAK,MAAM;AAAA,UACpE,mBAAmB;AAAA,QAAA;AAAA,MAAA;AAAA,IACtB;AAAA,EAEJ;AAEO,QAAM,2BAA2B;AAAA,IACtC,MAAM;AAAA,IACN,SAAS;AAAA,IACT,cAAc;AAAA,IACd,UAAU;AAAA,IACV,SACEvD,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAUA,2BAAAA,IAAA,cAAA,EAAa,cAAc,MAAM,WAAW,CAAC8D,IAAAA,OAAO,CAAC,CAAC,EAAG,CAAA;AAAA,MAAA;AAAA,IACrE;AAAA,IAEF,aAAa;AAAA,IACb,oCAAM,KAAI,EAAA;AAAA,IACV,QAAQ;AAAA,EACV;AC1Sa,QAAA,aAA2C,CAAC;AAAA,IACvD,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,MAAM;AACJ,UAAM,aAAapD,MAAAA,QAAQ,MAAM,WAAW,YAAY,CAAC,MAAM,CAAC;AAChE,UAAM,kBAAkBA,MAAA;AAAA,MACtB,MAAM,KAAK,IAAI,aAAa,aAAa,SAAS,KAAK;AAAA,MACvD,CAAC,QAAQ,YAAY,aAAa,KAAK;AAAA,IACzC;AAEM,UAAA,CAAC,UAAU,SAAS,IAAIA,MAAA;AAAA,MAC5B,MAAM;AAAA,QACJ,aAAa,QAAQ;AAAA,QACrB,aAAa,kBAAkB;AAAA,MACjC;AAAA,MACA,CAAC,QAAQ,YAAY,iBAAiB,KAAK;AAAA,IAC7C;AAEM,UAAA,aAAaA,MAAAA,QAAQ,MAAM;AAC/B,UAAI,OAAO;AACX,UAAI,OAAO;AAIX,YAAM,QAAQ,aAAa;AAC3B,YAAM,YAAY,aACb,KAAK,IAAe,KAAK,QACxB,WACA,WACD,KAAK,KAAgB,KAAK,QACzB,WACA;AAEN,UAAI,YAAY;AACd,YAAI,cAAc,OAAO;AAChB,iBAAA;AAAA,QAAA,OACF;AACL,iBAAO,IAAI,SAAS;AAAA,QAAA;AAAA,MACtB,OACK;AACL,YAAI,cAAc,OAAO;AACvB,iBAAO,IAAI,QAAQ;AAAA,QAAA,OACd;AACE,iBAAA;AAAA,QAAA;AAAA,MACT;AAGK,aAAA;AAAA,QACL,GAAG;AAAA,QACH,GAAG;AAAA,QACH,SAAS;AAAA,MACX;AAAA,IAAA,GACC;AAAA,MACD,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAEK,UAAA,YAAYA,MAAAA,QAAQ,MAAM;AAC9B,UAAI,OAAO;AACX,UAAI,OAAO;AAEX,UAAI,YAAY;AACd,cAAM,OAAO,KAAK,IAAI,GAAG,MAAM,OAAO;AACtC,YAAI,aAAa,OAAO;AACf,iBAAA;AAAA,QAAA,OACF;AACL,iBAAO,OAAO,SAAS;AAAA,QAAA;AAAA,MACzB,OACK;AACL,cAAM,OAAO,KAAK,IAAI,GAAG,MAAM,OAAO;AACtC,YAAI,aAAa,OAAO;AACf,iBAAA;AAAA,QAAA,OACF;AACL,iBAAO,OAAO,QAAQ;AAAA,QAAA;AAAA,MACxB;AAGF,UAAI,SAAS,oBAAoB;AAC/B,YAAI,YAAY;AACd,iBAAO,OAAO;AAAA,QAAA,OACT;AACL,iBAAO,OAAO;AAAA,QAAA;AAAA,MAChB;AAGK,aAAA;AAAA,QACL,GAAG;AAAA,QACH,GAAG;AAAA,QACH,SAAS;AAAA,MACX;AAAA,IACF,GAAG,CAAC,QAAQ,YAAY,UAAU,iBAAiB,OAAO,MAAM,OAAO,GAAG,CAAC,CAAC;AAEtE,UAAA,QAAQA,MAAAA,QAAQ,MAAM;AAC1B,UAAI8E,SAAQ;AACZ,UAAI,UAAU;AACZ,YAAI,WAAW,YAAY;AACzB,iBAAQ,QAAQ,WAAY;AAAA,QAAA,OACvB;AACI,kBAAA,WAAW,SAAS,WAAY;AAAA,QAAA;AAAA,MAC3C;AAGKA,aAAAA;AAAAA,OACN,CAAC,UAAU,UAAU,OAAO,MAAM,CAAC;AAGhC,UAAA,UAAU9E,MAAAA,QAAQ,MAAM;AAC5B,YAAM,IAAI;AAAA,QACR,GAAG;AAAA,QACH,OAAO,UAAU;AAAA,QACjB,OAAO,UAAU;AAAA,MACnB;AAEA,aAAO,EAAE;AACT,aAAO,EAAE;AAEF,aAAA;AAAA,IAAA,GACN,CAAC,SAAS,CAAC;AAER,UAAA,UAAUA,MAAAA,QAAQ,MAAM;AAC5B,YAAM,IAAI;AAAA,QACR,GAAG;AAAA,QACH,OAAO,WAAW;AAAA,QAClB,OAAO,WAAW;AAAA,MACpB;AAEA,aAAO,EAAE;AACT,aAAO,EAAE;AAEF,aAAA;AAAA,IAAA,GACN,CAAC,UAAU,CAAC;AAGb,WAAAV,2BAAA;AAAA,MAACyE,QAAAA,OAAO;AAAA,MAAP;AAAA,QACC,eAAc;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN,YAAY;AAAA,UACV,GAAG;AAAA,UACH;AAAA,QAAA;AAAA,MACF;AAAA,IACF;AAAA,EAEJ;AC1Oa,QAAA,mBAAgD,CAAC,UAC5DzE,2BAAA,IAAC,aAAW,GAAG,kCAAmC,GAAG,MAAO,CAAA;AAGvD,QAAM,mCAAmC;AAAA,IAC9C,GAAG;AAAA,IACH,MAAM;AAAA,IACN,KACEA,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAG;AAAA,QACJ,UACEA,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,6CACJ,cAAa,EAAA,QAAO,MAAK,aAAa,OAAS,OAAQ;AAAA,6CACvD,cAAa,EAAA,QAAO,OAAM,aAAa,OAAS,MAAO;AAAA,YAAA;AAAA,UAC1D;AAAA,QACF;AAAA,QAEF,YAAaA,2BAAA,IAAA,YAAA,EAAW,UAAS,OAAM,aAAa,EAAG,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAG7D;AClBa,QAAA,6BAA0D,CACrE,UACGA,2BAAA,IAAC,aAAW,GAAG,6CAA8C,GAAG,MAAO,CAAA;AAErE,QAAM,8CAA8C;AAAA,IACzD,GAAG;AAAA,IACH,MAAM;AAAA,IACN,SACEA,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SACEA,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,cAAc;AAAA,YACd,WAAW,CAAC8D,WAAO,CAAC,CAAC;AAAA,YACrB,SAAS,CAACrC,QAAO,UAAU;AACzB,cAAAA,OAAM,OAAOA,OAAM,KAAK,IAAI,CAAC,MAAM;AAEjC,sBAAMd,SAAQ,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;AACrC,sBAAMlB,OAAM,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;AAE5B,uBAAA;AAAA,kBACL,GAAG;AAAA,kBACH,OAAO,GAAG,YAAY,KAAK,OAAOA,OAAMkB,UAAS,GAAG,CAAC,CAAC;AAAA,gBACxD;AAAA,cAAA,CACD;AAED,qBAAQX,2BAAAA,IAAA,iBAAA,EAAgB,OAAOyB,QAAO,MAAc,CAAA;AAAA,YAAA;AAAA,UACtD;AAAA,QAAA;AAAA,MACF;AAAA,IAEJ;AAAA,IAEF,KACEzB,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAG;AAAA,QACJ,UACEA,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,6CACJ,cAAa,EAAA,QAAO,MAAK,aAAa,OAAS,OAAQ;AAAA,6CACvD,cAAa,EAAA,QAAO,OAAM,aAAa,OAAS,MAAO;AAAA,YAAA;AAAA,UAC1D;AAAA,QACF;AAAA,QAEF,YAAaA,2BAAA,IAAA,YAAA,EAAW,UAAS,OAAM,aAAa,EAAG,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAG7D;AC7Ca,QAAA,qBAAkD,CAAC,UAC9DA,2BAAA,IAAC,aAAW,GAAG,oCAAqC,GAAG,MAAO,CAAA;AAGzD,QAAM,qCAA8D;AAAA,IACzE,GAAG;AAAA,IACH,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SACEA,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SACEA,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,cAAc;AAAA,YACd,WAAW,CAAC8D,WAAO,CAAC,CAAC;AAAA,YACrB,SAAS,CAACrC,QAAO,UAAU;AACzB,oBAAM,OAAO;AAAA,gBACX,GAAGA;AAAA,gBACH,MAAMA,OAAM,KAAK,IAAI,CAAC,OAAO;AAAA,kBAC3B,GAAG;AAAA,kBACH,OAAO,GAAG,YAAY,EAAE,KAAK,CAAC,MAAM;AAAA,oBAClC,KAAK,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG;AAAA,kBAAA,CAC/B;AAAA,gBAAA,EACD;AAAA,cACJ;AAEA,qBAAQzB,2BAAAA,IAAA,iBAAA,EAAgB,OAAO,MAAM,MAAc,CAAA;AAAA,YAAA;AAAA,UACrD;AAAA,QAAA;AAAA,MACF;AAAA,IAEJ;AAAA,IAEF,KACEA,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAG;AAAA,QACJ,SAAS;AAAA,QACT,UACEA,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,6CACJ,cAAa,EAAA,QAAO,MAAK,aAAa,OAAS,OAAQ;AAAA,6CACvD,cAAa,EAAA,QAAO,OAAM,aAAa,OAAS,MAAO;AAAA,YAAA;AAAA,UAC1D;AAAA,QACF;AAAA,QAEF,YAAaA,2BAAA,IAAA,YAAA,EAAW,UAAS,OAAM,aAAa,EAAG,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAG7D;AChDa,QAAA,qBAAkD,CAAC;AAAA,IAC9D;AAAA,IACA,GAAG;AAAA,EACL,MAAOA,2BAAA,IAAA,WAAA,EAAW,GAAG,oCAAqC,GAAG,KAAM,CAAA;AAE5D,QAAM,qCAAqC;AAAA,IAChD,GAAG;AAAA,IACH,aAAa,QAAQ,UAAU,CAAC;AAAA,IAChC,SACEA,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SACEA,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,cAAc;AAAA,YACd,WAAW,CAAC8D,WAAO,CAAC,CAAC;AAAA,YACrB,SAAS,CAACrC,QAAO,UAAU;AACzB,oBAAM,OAAO;AAAA,gBACX,GAAGA;AAAA,gBACH,GAAG,GAAG,YAAYA,OAAM,EAAE,CAAC,MAAM,YAAYA,OAAM,EAAE,CAAC;AAAA,gBACtD,OAAOA,OAAM;AAAA,cACf;AAEA,qBAAQzB,2BAAAA,IAAA,iBAAA,EAAgB,OAAO,MAAM,MAAc,CAAA;AAAA,YAAA;AAAA,UACrD;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAIR;AClBa,QAAA,WAAuC,CAAC;AAAA,IACnD,OAAO;AAAA,IACP;AAAA,IACA,UAAU;AAAA,IACV,GAAG;AAAA,EACL,MAAM;AACJ,UAAM,EAAE,GAAG,GAAG,GAAG,MAAU,IAAA;AAGzB,WAAAA,2BAAA;AAAA,MAACyE,QAAAA,OAAO;AAAA,MAAP;AAAA,QACC;AAAA,QACC,GAAG;AAAA,QACJ,eAAc;AAAA,QACd,SAAQ;AAAA,QACR,SAAS,SAAS,YAAY;AAAA,QAC9B,UAAU;AAAA,UACR,QAAQ,EAAE,SAAS,GAAG,OAAO,GAAG,OAAO,EAAE;AAAA,UACzC,SAAS,EAAE,SAAS,OAAO,GAAG,OAAO,EAAE;AAAA,QAAA;AAAA,MACzC;AAAA,IACF;AAAA,EAEJ;;;;;;;;;;;AC2Ca,QAAA,WAAuC,CAAC,UAAU;AACvD,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,IACE,kBAAkB,yBAAyB,KAAK;AACpD,UAAM,cAAc/D,MAAA;AAAA,MAClB,OAAO,EAAE,GAAG,0BAA0B,GAAG,iCAAQ,MAAM;AAAA,MACvD,CAAC,iCAAQ,KAAK;AAAA,IAChB;AACA,UAAM,aAAaA,MAAA;AAAA,MACjB,OAAO,EAAE,GAAG,6BAA6B,GAAG,MAAM,MAAM;AAAA,MACxD,CAAC,MAAM,KAAK;AAAA,IACd;AACA,UAAM,aAAaA,MAAA;AAAA,MACjB,OAAO,EAAE,GAAG,6BAA6B,GAAG,MAAM,MAAM;AAAA,MACxD,CAAC,MAAM,KAAK;AAAA,IACd;AACA,UAAM,aAAaA,MAAA;AAAA,MACjB,MAAM,YAAY,WAAW;AAAA,MAC7B,CAAC,WAAW;AAAA,IACd;AACA,UAAM,eAAeA,MAAA;AAAA,MACnB,MAAO,aAAa,aAAa;AAAA,MACjC,CAAC,YAAY,YAAY,UAAU;AAAA,IACrC;AACA,UAAM,cAAcA,MAAA;AAAA,MAClB,MAAM,YAAY,SAAS;AAAA,MAC3B,CAAC,YAAY,IAAI;AAAA,IACnB;AAEA,UAAM,0BAA0BR,MAAA;AAAA,MAC9B,CAAC,gBAAgB,WAAWoB,WAAkB;AAC5C,cAAM,WAAW,kBAAkBA,QAAO,UAAU,YAAY;AAEhE,cAAM,aAAa,uBAAuB;AAAA,UACxC,OAAAA;AAAAA,UACA,SAAS,YAAY;AAAA,UACrB,MAAM;AAAA,UACN,YAAY;AAAA,QAAA,CACb;AAEM,eAAA;AAAA,UACL;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA,CAAC,YAAY,OAAO;AAAA,IACtB;AAEA,UAAM,sBAAsBpB,MAAA;AAAA,MAC1B,CAAC,gBAAgBmB,SAAgBC,WAAkB;AAC3C,cAAA,EAAE,cAAc,OAAA,IAAW;AAEjC,cAAM,aAAa,cAAc;AAAA,UAC/B,WAAW,aAAaA,SAAQD;AAAAA,UAChC,WAAW;AAAA,UACX,SAAS;AAAA,UACT,MAAM;AAAA,QAAA,CACP;AAED,cAAM,WAAW,cAAc;AAAA,UAC7B;AAAA,UACA,SAAS,YAAY;AAAA,UACrB,MAAM;AAAA,UACN,MAAM,aAAa,MAAM;AAAA,QAAA,CAC1B;AAEM,eAAA;AAAA,UACL;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA,CAAC,YAAY,WAAW;AAAA,IAC1B;AAEA,UAAM,cAAcnB,MAAA;AAAA,MAClB,CAAC,gBAAgB,WAAW,eAAwBoB,WAAkB;AACpE,eAAO,UAAU;AAAA,UACf,OAAAA;AAAAA,UACA,MAAM,UAAU;AAAA,UAChB,cAAc,UAAU;AAAA,UACxB,MAAM;AAAA,UACN,SAAS,YAAY;AAAA,UACrB,QAAQ,UAAU;AAAA,UAClB;AAAA,UACA;AAAA,QAAA,CACD;AAAA,MACH;AAAA,MACA,CAAC,aAAa,WAAW;AAAA,IAC3B;AAEA,UAAMyE,iBAAgB7F,MAAA;AAAA,MACpB,CAAC,gBAAgB,WAAW,eAAwBmB,YAAmB;AACrE,eAAO,UAAU;AAAA,UACf,cAAc,UAAU;AAAA,UACxB,SAAS,YAAY;AAAA,UACrB,MAAM,UAAU;AAAA,UAChB,QAAAA;AAAAA,UACA,MAAM;AAAA,UACN,QAAQ,UAAU;AAAA,UAClB;AAAA,UACA;AAAA,QAAA,CACD;AAAA,MACH;AAAA,MACA,CAAC,aAAa,WAAW;AAAA,IAC3B;AAEA,UAAM,mBAAmBnB,MAAA;AAAA,MACvB,CAAC,aAAqB,eAAuB;AACrC,cAAA,EAAE,MAAM,OAAA,IAAW;AACzB,cAAM,cAAc,SAAS;AAC7B,cAAM,YAAY,SAAS;AAC3B,cAAM,YACJ,SAAS,aACT,SAAS,uBACT,SAAS;AACX,cAAM,gBAAgB,aAAa;AAE/B,YAAA;AACJ,YAAI,WAAW;AACb,cAAI,aAAyB;AAC7B,cAAI,SAAS,qBAAqB;AACnB,yBAAA;AAAA,UAAA,WACJ,SAAS,oBAAoB;AACzB,yBAAA;AAAA,UAAA;AAGE,2BAAA;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QAAA,WACS,SAAS,aAAa;AACd,2BAAA;AAAA,YACf;AAAA,YACA;AAAA,YACA,YAAY;AAAA,UACd;AAAA,mBACS,aAAa;AACtB,2BAAiB,mBAAmB,IAA8B;AAAA,mBACzD,WAAW;AACH,2BAAA;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QAAA,OACK;AACY,2BAAA;AAAA,YACf;AAAA,YACA;AAAA,YACA,YAAY;AAAA,UACd;AAAA,QAAA;AAGE,YAAA;AACA,YAAA;AACA,YAAA;AAEJ,YAAI,YAAY;AACd,cAAI,WAAW;AACP,kBAAA,EAAE,UAAU,WAAA,IAAe;AAAA,cAC/B;AAAA,cACA;AAAA,cACA;AAAA,YACF;AACS,qBAAA;AACC,sBAAA;AAAA,qBACD,aAAa;AAChB,kBAAA,EAAE,UAAU,WAAA,IAAe;AAAA,cAC/B;AAAA,cACA;AAAA,cACA;AAAA,YACF;AACS,qBAAA;AACC,sBAAA;AAAA,UAAA,OACL;AACI,qBAAA;AAAA,cACP;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,UAAA;AAGO,mBAAA6F;AAAA,YACP;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QAAA,OACK;AACL,cAAI,WAAW;AACP,kBAAA,EAAE,UAAU,WAAA,IAAe;AAAA,cAC/B;AAAA,cACA;AAAA,cACA;AAAA,YACF;AACS,qBAAA;AACC,sBAAA;AACD,qBAAA;AAAA,cACP;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,qBACS,aAAa;AACtB,kBAAM,IAAI;AAAA,cACR;AAAA,YACF;AAAA,UAAA,OACK;AACI,qBAAA;AAAA,cACP;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AACS,qBAAAA;AAAA,cACP;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,UAAA;AAAA,QACF;AAGF,eAAO,EAAE,QAAQ,SAAS,QAAQ,eAAe;AAAA,MACnD;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAEA,UAAM,cAAc7F,MAAA;AAAA,MAClB,CAAC,mBAA6C;AAC5C,cAAM,EAAE,aAAa,YAAY,IAAA+E,KAAI,YAAY,eAC/C;AACF,cAAM,EAAE,QAAQ,SAAS,QAAQ,eAAmB,IAAA;AAAA,UAClD;AAAA,UACA;AAAA,QACF;AAEM,cAAA,gBAAgB,aAAa,SAAS;AACtC,cAAA,eAAe,eAAe,UAAU;AAE9C,+CACG1E,gBACE,EAAA,UAAA;AAAA,UAAA,cAAc,aACbP,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,OAAO;AAAA,cACP;AAAA,cACA;AAAA,cACA,OAAO;AAAA,cACP,OAAO;AAAA,YAAA;AAAA,UACT;AAAA,UAEFR,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,OAAO;AAAA,cACP,OAAO;AAAA,cACP,YAAY,aAAa,YAAY;AAAA,cACrC,oBAAoB,CAAC,UACnB,WAAW,aAAa,eAAe,YAAY,KAAK;AAAA,YAAA;AAAA,UAE5D;AAAA,UACAR,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,OAAO;AAAA,cACP,OAAO;AAAA,cACP,YAAY,aAAa,YAAY;AAAA,cACrC,oBAAoB,CAAC,UACnB,WAAW,aAAa,aAAa,cAAc,KAAK;AAAA,YAAA;AAAA,UAE5D;AAAA,UACC,iBACC,cAAc,IAAI,CAAC,MAAM,MACvBR,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cAEC,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,OAAO;AAAA,cACP,YAAY,aAAa,YAAY;AAAA,cACrC,oBAAoB,CAAC,UAAU,WAAW,cAAc,KAAK;AAAA,YAAA;AAAA,YALxD;AAAA,UAAA,CAOR;AAAA,UACF,cACCR,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,UAAU;AAAA,cACV,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,OAAO;AAAA,cACP,OAAO;AAAA,cAEP,UAAAR,2BAAA;AAAA,gBAACQ,UAAA;AAAA,gBAAA;AAAA,kBACC,SAAS;AAAA,kBACT,IAAI,cAAcyE,GAAE;AAAA,kBACpB,MAAM;AAAA,kBACN,QAAQ;AAAA,kBACR,OAAO;AAAA,kBACP;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,gBAAA;AAAA,cAAA;AAAA,YACF;AAAA,UAAA;AAAA,QACF,GAEJ;AAAA,MAEJ;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAGE,WAAAjF,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAc,cAAc,UAAU;AAAA,QACtC,cAAc,cAAc,UAAU;AAAA,QACtC,WAAW,WAAWiC,MAAI,UAAU,WAAWA,MAAI,YAAY,IAAI,CAAC;AAAA,QAEnE,UAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAEJ;AAEA,QAAM,0BAA0B;AAAA,IAC9B,MAAM,CAAC;AAAA,IACP,OACEjC,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,YAAYA,2BAAAA,IAAC,uBAAsB,EAAA,UAAU,GAAI,CAAA;AAAA,MAAA;AAAA,IACnD;AAAA,IAEF,OAAOA,2BAAAA,IAAC,aAAY,EAAA,MAAK,QAAQ,CAAA;AAAA,IACjC,uCAAS,WAAU,EAAA;AAAA,IACnB,0CAAY,gBAAe,EAAA;AAAA,IAC3B,OAAO;AAAA,EACT;ACpba,QAAA,iBAAmD,CAAC,UAC/DA,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAG;AAAA,MACH,GAAG;AAAA,MACJ,QACEA,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACE,GAAG;AAAA,UACH,GAAG,MAAM,OAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IACnB;AAAA,EAEJ;AAGF,QAAM,gCAAgC;AAAA,IACpC,OACEA,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,YAAYA,2BAAAA,IAAC,uBAAsB,EAAA,UAAU,GAAI,CAAA;AAAA,MAAA;AAAA,IACnD;AAAA,IAEF,OACEA,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,YACEA,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OACEA,2BAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACE,GAAG;AAAA,gBACJ,UAAU;AAAA,gBACV,QAAQ,CAAC,SAAS,GAAG,OAAO,GAAG;AAAA,cAAA;AAAA,YAAA;AAAA,UACjC;AAAA,QAAA;AAAA,MAEJ;AAAA,IAAA;AAAA,EAIR;AC9Ca,QAAA,kBAAqD,CAAC,UACjEA,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAG;AAAA,MACJ,QACEA,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACE,GAAG;AAAA,UACH,GAAG,MAAM,OAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IACnB;AAAA,EAEJ;ACHW,QAAA,4BAET,CAAC,UACHA,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAG;AAAA,MACH,GAAG;AAAA,MACJ,QACEA,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACE,GAAG;AAAA,UACH,GAAG,MAAM,OAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IACnB;AAAA,EAEJ;AAGF,QAAM,6CAA6C;AAAA,IACjD,OACEA,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,YACEA,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OACEA,2BAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACE,GAAG;AAAA,gBACJ,UAAU;AAAA,gBACV,QAAQ,CAAC,SAAS,GAAG,OAAO,GAAG;AAAA,cAAA;AAAA,YAAA;AAAA,UACjC;AAAA,QAAA;AAAA,MAEJ;AAAA,IAAA;AAAA,EAIR;ACtCa,QAAA,oBAAyD,CACpE,UAEAA,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAG;AAAA,MACJ,QACEA,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACE,GAAG;AAAA,UACH,GAAG,MAAM,OAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IACnB;AAAA,EAEJ;AClBK,QAAM,aAA2C,CAAC,UACvDA,2BAAAA,IAAC,cAAW,MAAM,MAAM,MAAMA,2BAAA,IAAC,MAAK,EAAA,aAAa,EAAG,CAAA,GAAK,GAAG,MAAO,CAAA;ACAxD,QAAA,YAAyC,CAAC,UACpDA,2BAAA,IAAA,WAAA,EAAU,QAASA,2BAAAA,IAAA,YAAA,EAAW,GAAK,GAAG,MAAO,CAAA;ACsBnCgG,QAAAA,QAAoB,CAAC;AAAA,IAChC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,aAAa;AAAA,EACf,MAAM;AACJ,UAAM,gBAAgB9F,MAAA;AAAA,MACpB,CAAC,EAAE,YAAY,kBAA4C;AACzD,YAAI,eAAe,iBAAiB;AAClC,iBAAO+F,uBAAiB,EACrB,QAAQ,CAAC,YAAY,WAAW,GAAG,IAAI,EACvC,OAAO,CAAC,GAAG,CAAC,CAAC;AAAA,QAAA;AAElB,eAAOC,kBAAY,EAChB,QAAQ,CAAC,YAAY,WAAW,GAAG,IAAI,EACvC,OAAO,CAAC,GAAG,EAAE,CAAC;AAAA,MACnB;AAAA,MACA,CAAC,MAAM,UAAU;AAAA,IACnB;AAEA,UAAM,eAAehG,MAAA;AAAA,MACnB,CAAC8E,SAAuB,OAAemB,gBAA8B;AACnE,cAAM,WAAWA,YAAWnB,QAAO,MAAM,WAAW;AAEpD,YAAI,CAAC,UAAU;AACL,kBAAA;AAAA,YACN,gBAAgBA,QAAO,MAAM,YAAY,SAAU,CAAA;AAAA,UACrD;AACO,iBAAA;AAAA,QAAA;AAIP,eAAAhF,2BAAA;AAAA,UAACQ,UAAA;AAAA,UAAA;AAAA,YACC,SAASwE;AAAA,YACT,IAAI,SAAS,CAAC;AAAA,YACd,IAAI,SAAS,CAAC;AAAA,YACd;AAAA,UAAA;AAAA,QACF;AAAA,MAEJ;AAAA,MACA,CAAA;AAAA,IACF;AAEA,UAAM,gBAAgB9E,MAAA;AAAA,MACpB,CAACuB,QAAO,OAAehB,UAAkB;AAEnC,YAAAgB,OAAM,OAAO,OAAO;AACf,iBAAA;AAAA,QAAA;AAGF,eAAAzB,+BAAC,UAA2B,GAAGS,MAAKgB,MAAK,GAAI,QAAlC,QAAQ,KAAK,EAAiC;AAAA,MAClE;AAAA,MACA,CAAC,IAAI;AAAA,IACP;AAEA,UAAM,cAAcvB,MAAA;AAAA,MAClB,CAAC,mBAA6C;AAC5C,YAAI,CAAC,MAAM;AACF,iBAAA;AAAA,QAAA;AAGH,cAAA,gBAAgB,cAAc,cAAc;AAClD,cAAMO,QAAO2F,MAAAA,UAAU,WAAW,aAAa;AAG7C,eAAArF,2BAAA;AAAA,UAAC0D,QAAAA,OAAO;AAAA,UAAP;AAAA,YACC,SAAS;AAAA,cACP,SAAS;AAAA,YACX;AAAA,YACA,SAAS;AAAA,cACP,SAAS;AAAA,YACX;AAAA,YAEC,UAAA;AAAA,cAAA,KAAK,SAAS;AAAA,gBAAI,CAAChD,QAAO,UACzB,cAAcA,QAAO,OAAOhB,KAAI;AAAA,cAClC;AAAA,cACC,WACC,QAAQ,IAAI,CAACuE,SAAQ,UAClBhF,2BAAAA,IAAAO,MAAAA,UAAA,EACE,UAAa,aAAAyE,SAAQ,OAAO,aAAa,EAAA,GAD7B,UAAU,KAAK,EAE9B,CACD;AAAA,YAAA;AAAA,UAAA;AAAA,QACL;AAAA,MAEJ;AAAA,MACA,CAAC,MAAM,eAAe,SAAS,eAAe,YAAY;AAAA,IAC5D;AAGE,WAAAhF,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAc;AAAA,QACd,cAAc;AAAA,QACd;AAAA,QAEC,UAAA,CAAC,UAAU,YAAY,KAAK;AAAA,MAAA;AAAA,IAC/B;AAAA,EAEJ;;;;;ACxHa,QAAA,YAAyC,CAAC;AAAA,IACrD,OAAO;AAAA,IACP;AAAA,IACA,SAAAuD;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,MAAM;AAAA,EAClB,MAAM;AACE,UAAA,MAAMtD,aAAgC,IAAI;AAChD,UAAM,CAAC,QAAQ,SAAS,IAAIE,MAAAA,SAAkB,KAAK;AAEnD,UAAM,gBAAgBO,MAAA;AAAA,MACpB,MAAO,OAAO6C,aAAY,WAAWA,WAAU;AAAA,MAC/C,CAACA,QAAO;AAAA,IACV;AAEA,2CACGhD,gBACC,EAAA,UAAA;AAAA,MAAAP,2BAAA;AAAA,QAACyE,QAAAA,OAAO;AAAA,QAAP;AAAA,UACC,SAAS;AAAA,YACP,SAAS;AAAA,YACT,OAAO;AAAA,UACT;AAAA,UACA,SAAS;AAAA,YACP,SAAS;AAAA,YACT,OAAO;AAAA,UACT;AAAA,UACA,YAAY;AAAA,YACV,OAAO,QAAS;AAAA,UAClB;AAAA,UACA;AAAA,UACA,WAAWxC,MAAI;AAAA,UACf;AAAA,UACA;AAAA,UACA,GAAG;AAAA,UACH,cAAc,MAAM,UAAU,IAAI;AAAA,UAClC,cAAc,MAAM,UAAU,KAAK;AAAA,UACnC;AAAA,UACA,UAAU;AAAA,UACV,cAAY;AAAA,UACZ,MAAK;AAAA,QAAA;AAAA,MACP;AAAA,MACCsB,YACCvD,2BAAA;AAAA,QAACqD,UAAA;AAAA,QAAA;AAAA,UACC,OAAO;AAAA,UACP,SAAS;AAAA,UACT,WAAW;AAAA,UACX,WAAW,CAACS,IAAAA,OAAO,EAAE,UAAU,GAAG,WAAW,EAAE,CAAC,CAAC;AAAA,UACjD,SAASP;AAAA,QAAA;AAAA,MAAA;AAAA,IACX,GAEJ;AAAA,EAEJ;ACjEO,QAAM8C,mBAAiB,CAAC,EAAE,MAAM,UAAU,UAAU;AACnD,UAAA,OAAO3F,MAAAA,QAAQ,MAAM;AACzB,YAAM,aAAa,KAAK;AAClB,YAAA,WAAW,WAAW,aAAa,KAAK;AAEvC,aAAA;AAAA,QACL,GAAG;AAAA,QACH;AAAA,QACA;AAAA,MACF;AAAA,IAAA,GACC,CAAC,MAAM,QAAQ,CAAC;AAEb,UAAA,WAAWT,aAAO,IAAI;AACtB,UAAA,IAAIqE,uBAAe,IAAI;AACvB,UAAA,SAASC,QAAAA,UAAU,GAAG,kBAAkB;AAE9CnE,UAAAA,UAAU,MAAM;AACd,YAAM,eAAeoE,cAAA,YAAY,SAAS,SAAS,IAAI;AACjD,YAAA,aAAa,OAAO,IAAI;AAEvB,aAAA,IAAI,aAAa,CAAC;AAEzB,aAAO,OAAO,GAAG,UAAU,CAAC,MAAM;AAC1B,cAAA,UAAU,aAAa,IAAI,UAAU;AAC3C,iBAAS,UAAU;AAEjB,UAAA,IAAI,IAAI,OAAO,CAAC;AAAA,MAAA,CACnB;AAAA,IAAA,GACA,CAAC,KAAK,GAAG,MAAM,MAAM,MAAM,CAAC;AAExB,WAAA;AAAA,EACT;AC8Ca,QAAA,SAA0B,CAAC;AAAA,IACtC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT,WAAW;AAAA,IACX,UAAAU;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAA3B,0CAAW,cAAa,CAAA,CAAA;AAAA,EAC1B,MAAM;;AACE,UAAA,SAAStD,aAA8B,IAAI;AACjD,UAAM,IAAIoG,iBAAe,EAAE,UAAU,KAAK,MAAM;AAChD,UAAM,CAAC,QAAQ,SAAS,IAAIlG,MAAAA,SAAkB,KAAK;AACnD,UAAM,OAAOO,MAAA;AAAA,MACX,MAAO,SAAS,OAAO,KAAK,EAAE,SAAS,GAAG,IAAI;AAAA,MAC9C,CAAC,OAAO,MAAM;AAAA,IAChB;AAEA,UAAM,EAAE,YAAY,YAAY,IAAI,eAAe;AAAA,MACjD,eAAe,CAAC,UAAU;AACxB,YAAI,CAAC,UAAU;AACb,oBAAU,IAAI;AACC,uDAAA;AAAA,YACb,OAAO,KAAK;AAAA,YACZ,aAAa;AAAA,UAAA;AAAA,QACd;AAAA,MAEL;AAAA,MACA,cAAc,CAAC,UAAU;AACvB,YAAI,CAAC,UAAU;AACb,oBAAU,KAAK;AACA,uDAAA;AAAA,YACb,OAAO,KAAK;AAAA,YACZ,aAAa;AAAA,UAAA;AAAA,QACd;AAAA,MACH;AAAA,IACF,CACD;AAEK,UAAA,eAAeA,MAAAA,QAAQ,MAAM;AACjC,UAAIwE,WAAU;AACZ,eAAO,iBAAiB,EAAE;AAAA,MAAA;AAGrB,aAAA;AAAA,IACN,GAAA,CAACA,WAAU,IAAI,KAAK,CAAC;AAExB,UAAM,cAAcxE,MAAA;AAAA,MAClB,OAAO,EAAE,GAAG,KAAK,KAAK,MAAM,GAAG,KAAK,KAAK;MACzC,CAAC,IAAI;AAAA,IACP;AACM,UAAA,gBAAgBA,MAAAA,QAAQ,MAAM,aAAa,WAAW,GAAG,CAAC,WAAW,CAAC;AAG1E,WAAAK,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAK;AAAA,QACL,UAAU;AAAA,QACV,cAAY;AAAA,QACZ,MAAK;AAAA,QAEL,UAAA;AAAA,UAAAf,2BAAA;AAAA,YAACyE,QAAAA,OAAO;AAAA,YAAP;AAAA,cACC,MAAK;AAAA,cACL;AAAA,cACA,OAAO,EAAE,OAAO;AAAA,cAChB,MAAM;AAAA,cACN,eAAe;AAAA,cACf,cAAc;AAAA,cACd,SAAS,CAAC,UAAU;AAClB,oBAAI,CAAC,UAAU;AACH,qDAAA;AAAA,oBACR,OAAO,KAAK;AAAA,oBACZ,aAAa;AAAA,kBAAA;AAAA,gBACd;AAAA,cACH;AAAA,YACF;AAAA,UACF;AAAA,UACCS,aACClF,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,SAAS0E;AAAA,cACT,IAAI,YAAY,EAAE;AAAA,cAClB,WAAU;AAAA,cACV,OAAO;AAAA,YAAA;AAAA,UACT;AAAA,UAED,GAAC,KAAA3B,YAAA,gBAAAA,SAAS,UAAT,mBAAgB,aAChBvD,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,SAAS+C;AAAA,cACT,SAAS,CAAC,CAAC;AAAA,cACX,WAAW;AAAA,cACX,OAAO;AAAA,YAAA;AAAA,UAAA;AAAA,QACT;AAAA,MAAA;AAAA,IAEJ;AAAA,EAEJ;AC9KgB,WAAA,eACd,CAAC,QAAQ,MAAM,GACf,CAAC,MAAM,IAAI,GACC;AACR,QAAA,aAAyB,CAAC,GAAG,CAAC;AAGlC,UAAM,uBAAuB,OAAO,UAAU,KAAK,KAAK,MAAM,KAAK;AAEnE,QAAI,qBAAqB;AAEvB,UAAI,QAAQ,KAAK,IAAI,OAAO,MAAM,KAAK;AACvC,YAAM,WAAW;AACjB,YAAM,WAAW,KAAK,IAAI,OAAO,MAAM,KAAK;AAE5C,cAAQ,KAAK,IAAI,KAAK,IAAI,UAAU,KAAK,GAAG,QAAQ;AAEvC,mBAAA,CAAC,SAAS,OAAO,IAAI;AAAA,IAAA,OAC7B;AAGL,UAAI,QAAQ;AACZ,YAAM,WAAW,KAAK,IAAI,SAAS,IAAI,KAAK;AAC5C,YAAM,WAAW;AAEjB,cAAQ,KAAK,IAAI,KAAK,IAAI,UAAU,KAAK,GAAG,QAAQ;AAEvC,mBAAA,CAAC,OAAO,OAAO,MAAM;AAAA,IAAA;AAG7B,WAAA;AAAA,EACT;ACuCA,QAAM,gBAAgB,CAAC,EAAE,YAAY,SAAS;AAAA;AAAA,IAE5C,cAAc,WAAW,cAAc,IAAI,KAAK,KAAK,UAAU;AAAA;AAEpD,QAAA,cAA6C,CAAC,UAAU;AAC7D,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,IACE,kBAAkB,6BAA6B,KAAK;AAElD,UAAA,aAAa,cAAc,IAAI;AACrC,UAAM,OAAwB,SAC1B,OAAO,EAAE,GAAG,KAAK,MAAM,WAAA,CAAY,IACnC,YAAY,KAAK,KAAK,GAA6B;AACjD,UAAA,CAAC,MAAM,IAAI,IAAI;AAGrB,UAAM,YAAY,cAAc;AAE1B,UAAA,aAAa,SAAS,IAAI;AAC1B,UAAA,aAAa3B,YAAa,EAC7B,YAAY,SAAS,EACrB,YAAY,SAAS,EACrB,SAAS,IAAI;AACV,UAAA,aAAa,eAAe,YAAY,QAAQ;AAGpD,WAAAb,2BAAA;AAAA,MAAC0D,QAAAA,OAAO;AAAA,MAAP;AAAA,QACC,SAAS,EAAE,SAAS,EAAE;AAAA,QACtB,SAAS,EAAE,SAAS,EAAE;AAAA,QACtB,MAAM,EAAE,SAAS,EAAE;AAAA,QACnB,YAAY;AAAA,UACV,UAAU;AAAA,QACZ;AAAA,QAEC,UAAA;AAAA,UAAO,OAAA,SAAS,WAEb1D,2BAAA,KAAAR,WAAA,UAAA,EAAA,UAAA;AAAA,YAAAP,2BAAAA,IAAC,WAAO,UAAK,KAAA,CAAA;AAAA,YACbA,2BAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,IAAI;AAAA,gBACJ,MAAM;AAAA,gBACN;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,OAAO;AAAA,kBACL,gBAAgB;AAAA,kBAChB,WAAW,eAAe,IAAI,MAAM,IAAI;AAAA,gBAC1C;AAAA,gBAEC,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UACH,EAAA,CACF,IAEAA,2BAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC;AAAA,cACA;AAAA,cACA,OAAO;AAAA,gBACL,WAAW,eACT,eAAe,UAAU,OAAO,OAAO,KACzC,MAAM,OAAO,SAAS,CAAC;AAAA,gBACvB,OAAO;AAAA,gBACP;AAAA,gBACA;AAAA,cACF;AAAA,cAEC,UAAA;AAAA,YAAA;AAAA,UACH;AAAA,UAEFA,2BAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,QAAQ;AAAA,cACR,QAAQ,GAAG,UAAU,IAAI,UAAU,IAAI,UAAU,IAAI,QAAQ;AAAA,YAAA;AAAA,UAAA;AAAA,QAC/D;AAAA,MAAA;AAAA,IACF;AAAA,EAEJ;AAEO,QAAM,8BAA8B;AAAA,IACzC,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,QAAQ;AAAA,EACV;ACvKA,QAAM,SAAS;AACf,QAAM,WAAW,CAAC,MAAe,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc;AAC9E,QAAM,eAAe,CAAC4B,SACpBA,KAAI,WAAWA,KAAI,aAAa,KAAK,KAAK;AAE5C,WAAS,mBAAmB,kBAA2B,SAAkB;AAChE,WAAA,oBAAoB,aAAa,OAAO;AAAA,EACjD;AAEO,WAAS,qBACd,aACA,MACAH,QACA,SACA;AACI,QAAA,CAAC,WAAW,SAAS,QAAW;AAC3B,aAAA;AAAA,IAAA;AAGT,UAAM,SAASrC,QAAAA,IAAI,MAAM,CAAC,MAAe,EAAE,KAAK;AAExC,WAAA,cAAcqC,OAAM,QAAS;AAAA,EACvC;AAEO,WAAS,kBACd,MACA,aACA,aACA,SACA;AACA,WAAO,CAACA,WAAmB;AACzB,YAAM,WAAW,qBAAqB,aAAa,MAAMA,QAAO,OAAO;AAEhE,aAAAG,QAAA,IAAA,EACJ,YAAY,WAAW,EACvB,YAAY,QAAQ,EACpB,SAASH,MAAK;AAAA,IACnB;AAAA,EACF;AAEO,WAAS,gBAAgB,QAAQ,OAAOT,QAAO,UAAU,UAAU;AACxE,UAAM,eAAe,KAAK,IAAI,OAAO,MAAM;AAE3C,QAAI,cAAc,eAAe;AACjC,QAAI,aAAa;AAEjB,QAAIA,QAAO;AACT,mBAAaA,OAAM,MAAM;AAEzB,UAAI,YAAY;AACR,cAAA,iBAAiB,QAAQ,IAAI;AAEnC,sBAAc,KAAK,IAAI,iBAAiB,QAAQ,SAAS,CAAC;AAAA,MAAA,OACrD;AACL,sBAAc,eAAe;AAChB,qBAAA,QAAQ,IAAI,cAAc;AAAA,MAAA;AAAA,IACzC;AAGF,UAAM,cAAc,WAAW,eAAe,IAAI,YAAY;AAEvD,WAAA;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEO,WAAS,kBACd,MACA,aACA,aACA,cACA,UACA,WACA,SACA;AACA,WAAO,CAACS,WAAmB;AACzB,YAAM,WAAW,qBAAqB,aAAa,MAAMA,QAAO,OAAO;AAEvE,aAAOG,QAAAA,IACJ,EAAA,YAAY,WAAW,EACvB,YAAY,QAAQ,EACpB,aAAa,YAAY,EACzB,UAAU,SAAS,EACnB,SAAS,QAAQ,EAAEH,MAAK;AAAA,IAC7B;AAAA,EACF;AAEO,WAAS,wBACd,MACA,aACA,aACA,cACA,UACA,WACA,kBACgC;AAChC,UAAM,iBAAiB,cAAc;AACrC,UAAM,WAAWG,QAAAA,IAAkB,EAChC,YAAY,cAAc,EAC1B,YAAY,cAAc,EAC1B,aAAa,YAAY,EACzB,SAAS,QAAQ,EACjB,UAAU,SAAS;AAEtB,UAAM,YAA4C,KAAK,IAAI,CAAC,MAAM;AAChE,UAAI,CAAC,mBAAmB,kBAAkB,CAAC,GAAG;AACrC,eAAA;AAAA,MAAA;AAGH,YAAA,MAAM,SAAS,SAAS,CAAC;AAK3B,UAAA,CAAC,IAAI,kBAAkB,SAAS,CAAC,IAAI,KAAK,KAAK,IAAI;AAEhD,aAAA;AAAA,IAAA,CACR;AAED,aAAS,IAAI,GAAG,IAAI,KAAK,SAAS,GAAG,KAAK;AACpC,UAAA,CAAC,UAAU,CAAC,GAAG;AACjB;AAAA,MAAA;AAGF,YAAM,CAAC,OAAO,KAAK,IAAI,UAAU,CAAC;AAElC,eAAS,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,YAAA,CAAC,UAAU,CAAC,GAAG;AACjB;AAAA,QAAA;AAGF,cAAM,CAAC,OAAO,KAAK,IAAI,UAAU,CAAC;AAG9B,YAAA,QAAQ,QAAQ,GAAG;AAErB,gBAAM,UAAU,cAAc,KAAK,IAAI,QAAQ,KAAK;AAEpD,cAAI,UAAU,GAAG;AAEf,sBAAU,CAAC,EAAE,CAAC,KAAK,KAAK,KAAK,KAAK,IAAI;AAAA,UAAA;AAAA,QACxC;AAAA,MACF;AAAA,IACF;AAGK,WAAA;AAAA,EACT;AC/Ca,QAAA,eAA+C,CAAC,UAAU;AAC/D,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA,OAAAZ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,IACE,kBAAkB,8BAA8B,KAAK;AAEzD,UAAM,aAAaN,MAAA;AAAA,MACjB,OAAO,EAAE,GAAG,6BAA6B,GAAGM,UAAA,gBAAAA,OAAO,MAAM;AAAA,MACzD,CAACA,MAAK;AAAA,IACR;AAEA,UAAM,EAAE,aAAa,aAAa,WAAe,IAAA;AAAA,MAC/C;AAAA,MACA;AAAA,MACAA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,UAAM,WAAW;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,UAAM,YAAYA,SACd;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA,WAAW,SAAS;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,IAEA,CAAC;AAEL,UAAM,WAAW,kBAAkB,MAAM,aAAa,aAAa,OAAO;AAEjE,aAAA,WAAW,SAAkB,OAAe;AACnD,YAAM,UAAU8D,eAAAA,WAAW,QAAQ,KAAK,IAAI,UAAU;AACtD,YAAM,QAAQ,SAAS;AAAA,QACrB;AAAA,QACA;AAAA,QACA,OAAO,QAAQ;AAAA,QACf;AAAA,MAAA,CACD;AAGC,aAAA/D,2BAAA,KAACR,gBAAA,EACE,UAAA;AAAA,QAAA,UAAU,KAAK,KACdP,2BAAA;AAAA,UAACQ,UAAA;AAAA,UAAA;AAAA,YACC;AAAA,YACA,SAASQ;AAAA,YACT,MAAM;AAAA,YACN;AAAA,YACA;AAAA,YACA,OAAO;AAAA,YACP,UAAU,UAAU,KAAK;AAAA,UAAA;AAAA,QAC3B;AAAA,QAEFhB,2BAAA;AAAA,UAACQ,UAAA;AAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,IAAI,GAAG,EAAE,QAAQ,OAAO;AAAA,YACxB,MAAM;AAAA,YACN;AAAA,YACA,KAAK;AAAA,YACL;AAAA,UAAA;AAAA,QAAA;AAAA,MACF,EAAA,GAnBa,OAoBf;AAAA,IAAA;AAIJ,WAAUR,2BAAAA,IAAAO,WAAAA,UAAA,EAAA,UAAA,KAAK,IAAI,UAAU,GAAE;AAAA,EACjC;AAEO,QAAM,+BAA+B;AAAA,IAC1C,UAAU;AAAA,IACV,aAAa;AAAA,IACb,aAAa;AAAA,IACb,cAAc;AAAA,IACd,UAAU;AAAA,IACV,WAAW;AAAA,IACX,SAAS;AAAA,IACT,kBAAkB;AAAA,IAClB,UAAU;AAAA,IACV,sCAAQ,aAAY,EAAA;AAAA,IACpB,oCAAM,QAAO,CAAA,CAAA;AAAA,EACf;AC/Ka,QAAA,WAA8B,CAAC;AAAA,IAC1C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,CAAC;AAAA,IACR,UAAU;AAAA,IACV,wCAAU,cAAa,CAAA,CAAA;AAAA,EACzB,MAAM;AACE,UAAA,QAAQD,gBAAM,EAAE;AAEhB,UAAA,eAAeI,MAAAA,QAAQ,MAAM;AAC3B,YAAA,YAAY4F,cAAmC;AAAA,QACnD,CAAC,MAA6B,OAAO,EAAE,IAAI;AAAA,MAC7C;AAGI,UAAA,CAAC,OAAO,MAAM,SAAS;AACzB,kBAAU,KAAK,IAAI;AAAA,MAAA;AAGrB,aAAO,UAAU,IAAI;AAAA,IAAA,GACpB,CAAC,MAAM,MAAM,CAAC;AAEjB,UAAM,eAAepG,MAAA;AAAA,MACnB,CAAC,EAAE,YAAY,kBAA4C;AAEvD,eAAAF,2BAAA;AAAA,UAACQ,UAAA;AAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,OAAO;AAAA,YACP;AAAA,UAAA;AAAA,QACF;AAAA,MAEJ;AAAA,MACA,CAAC,kBAAkB,cAAc,OAAO,MAAM;AAAA,IAChD;AAGE,WAAAR,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAc;AAAA,QACd,cAAc;AAAA,QACd,QAAQ;AAAA,QACR,WAAW,WAAW,SAAS;AAAA,QAE9B,UAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAEJ;AChEO,QAAM,gBAAgB;AAEtB,QAAM,wBAAwB;ACArC,QAAM,gBAAgB;AAAA,IACpB,SAASuG,SAAA;AAAA,IACT,QAAQC,SAAA;AAAA,IACR,MAAMC,SAAA;AAAA,IACN,OAAOC,SAAAA;AAAAA,EACT;AAkEa,QAAA,SAA0B,CAAC;AAAA,IACtC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,MAAM;AACE,UAAA,KAAKpG,UAAAA,MAAM,KAAK,EAAE;AACxB,UAAM,CAAC,aAAa,cAAc,IAAIH,MAAAA,SAA4B,CAAA,CAAE;AACpE,UAAM,CAAC,aAAa,cAAc,IAAIA,MAAAA,SAA4B,CAAA,CAAE;AAEpE,UAAM,eAAeD,MAAA;AAAA,MACnB,CAACP,OAAmB,UAAe;AACjC,YAAI,aAAa;AACf,iBAAO,SAAS;AAAA,YACd,MAAM;AAAA,YACN;AAAA,YACA,OAAO,MAAM,KAAK;AAAA,YAClB;AAAA,UAAA,CACD;AAAA,QAAA,OACI;AACL,iBAAOA,MAAK,MAAM;AAAA,QAAA;AAAA,MAEtB;AAAA,MACA,CAAC,aAAa,KAAK;AAAA,IACrB;AAEM,UAAA,eAAeO,kBAAY,CAACP,UAA0B;AACpDgH,YAAAA,eAAiC,CAAChH,KAAI;AAC5C,YAAMiH,eAAiC,CAAC;AAExC,UAAIjH,MAAK,aAAa;AACpBiH,qBAAY,KAAK,GAAGjH,MAAK,WAAW;AAC/B,QAAAA,MAAA,YAAY,QAAQ,CAAC,eAAe;AACvC,gBAAM,mBAAmB,WAAW;AAChC,cAAA,iBAAiB,UAAUA,MAAK,OAAO;AACzCgH,yBAAY,KAAK,gBAAgB;AAAA,UAAA;AAAA,QACnC,CACD;AAAA,MAAA;AAGH,UAAIhH,MAAK,aAAa;AACpBiH,qBAAY,KAAK,GAAGjH,MAAK,WAAW;AAC/B,QAAAA,MAAA,YAAY,QAAQ,CAAC,eAAe;AACvC,gBAAM,mBAAmB,WAAW;AAChC,cAAA,iBAAiB,UAAUA,MAAK,OAAO;AACzCgH,yBAAY,KAAK,gBAAgB;AAAA,UAAA;AAAA,QACnC,CACD;AAAA,MAAA;AAGH,qBAAeA,YAAW;AAC1B,qBAAeC,YAAW;AAAA,IAC5B,GAAG,EAAE;AAEC,UAAA,eAAe1G,kBAAY,CAAC2G,UAA0B;AAC1D,YAAMF,eAAiC;AAAA,QACrCE,MAAK;AAAA,QACLA,MAAK;AAAA,MACP;AACMD,YAAAA,eAAiC,CAACC,KAAI;AAE5C,qBAAeF,YAAW;AAC1B,qBAAeC,YAAW;AAAA,IAC5B,GAAG,EAAE;AAEC,UAAA,aAAa1G,MAAAA,YAAY,MAAM;AACnC,qBAAe,CAAA,CAAE;AACjB,qBAAe,CAAA,CAAE;AAAA,IACnB,GAAG,EAAE;AAEC,UAAA,UAAUQ,MAAAA,QAAQ,MAAM;AAEtBoG,YAAAA,+BAAc,IAAyB;AACvC,YAAA,QAAQ,CAACnH,UAAcA,SAAQmH,SAAQ,IAAInH,MAAK,MAAM,OAAOA,KAAI,CAAC;AAEjEmH,aAAAA;AAAAA,IAAA,GACN,CAAC,KAAK,CAAC;AAEV,UAAM,aAAa5G,MAAA;AAAA,MACjB,CACE,cACA,OACA,YACAP,UACG;AACH,cAAM,SAAS,YAAY;AAAA,UACzB,CAACA,WAASA,OAAK,UAAU,aAAa;AAAA,QACxC;AACA,cAAM,WAAW,YAAY,SAAS,KAAK,CAAC;AACtC,cAAA,eACJ,kBAAkB,YAAY,wBAAwB;AAGtD,eAAAK,2BAAA;AAAA,UAACQ,UAAA;AAAA,UAAA;AAAA,YACC,SAASb;AAAA,YAET;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,cAAc,MAAM,aAAa,YAAY;AAAA,YAC7C,cAAc,MAAM,WAAW;AAAA,YAC/B;AAAA,YACA;AAAA,YACC,GAAG;AAAA,UAAA;AAAA,UATC,QAAQ,KAAK;AAAA,QAUpB;AAAA,MAEJ;AAAA,MACA,CAAC,aAAa,UAAU,YAAY,cAAc,aAAa;AAAA,IACjE;AAEA,UAAM,aAAaO,MAAA;AAAA,MACjB,CAAC,cAA+B,UAAkB;AAChD,cAAM,SAAS,YAAY;AAAA,UACzB,CAAC2G,UAASA,MAAK,UAAU,aAAa;AAAA,QACxC;AACA,cAAM,WAAW,YAAY,SAAS,KAAK,CAAC;AAG1C,eAAA7G,2BAAA;AAAA,UAACQ,UAAA;AAAA,UAAA;AAAA,YACC,SAAS,MAAM,KAAK;AAAA,YACpB;AAAA,YACA;AAAA,YAEA,SAAS,UAAU,EAAE;AAAA,YACrB;AAAA,YACC,GAAG;AAAA,YACJ,cAAc,MAAM,aAAa,YAAY;AAAA,YAC7C,cAAc,MAAM,WAAW;AAAA,UAAA;AAAA,UAL1B,QAAQ,KAAK;AAAA,QAMpB;AAAA,MAEJ;AAAA,MACA,CAAC,aAAa,IAAI,UAAU,OAAO,YAAY,YAAY;AAAA,IAC7D;AAEA,UAAM,mBAAmBN,MAAA;AAAA,MACvB,CAAC,YAAoB,gBAAwB;AACrC,cAAA,eACJ,kBAAkB,YAAY,wBAAwB;AACxD,cAAM,UAAU,eAAe;AAEzB,cAAA,cAAc6G,gBAAO,EACxB,OAAO;AAAA,UACN,CAAC,IAAI,SAAS,CAAC;AAAA,UACf,CAAC,aAAa,SAAS,WAAW;AAAA,QAAA,CACnC,EACA,UAAU,SAAS,EACnB,YAAY,WAAW,EACvB,SAAS,QAAQ,EACjB,UAAU,cAAc,aAAa,CAAC,EACtC,OAAO,CAACpH,UAAcA,MAAK,MAAMA,MAAK,KAAK;AAE9C,cAAM,YAAiB,MAAM,IAAI,CAACA,OAAM,WAAW;AAAA,UACjD,IAAIA,MAAK,MAAM;AAAA,UACf,OAAOA,MAAK,MAAM;AAAA,UAClB,OAAO,aAAaA,OAAM,KAAK;AAAA,QAAA,EAC/B;AAEF,cAAM,YAAY,MAAM,IAAI,CAACkH,WAAU;AAAA,UACrC,QAAQA,MAAK,MAAM;AAAA,UACnB,QAAQA,MAAK,MAAM;AAAA,UACnB,OAAOA,MAAK,MAAM;AAAA,QAAA,EAClB;AAEF,cAAM,EAAE,OAAO,aAAa,OAAO,YAAA,IAAgB,YAAY;AAAA,UAC7D,OAAO;AAAA,UACP,OAAO;AAAA,QAAA,CACR;AAaM,eAAA,EAAE,aAAa,YAAY;AAAA,MACpC;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAEA,UAAM,cAAc3G,MAAA;AAAA,MAClB,CAAC,EAAE,IAAA+E,KAAI,YAAY,aAAa,iBAA2C;AACzE,YAAI,CAAC,YAAY;AACR,iBAAA;AAAA,QAAA;AAGH,cAAA,EAAE,aAAa,YAAA,IAAgB;AAAA,UACnC;AAAA,UACA;AAAA,QACF;AAEA,+CACG1E,gBACE,EAAA,UAAA;AAAA,UAAY,YAAA;AAAA,YAAI,CAACsG,OAAM,UACtB,WAAWA,OAAyB,KAAK;AAAA,UAC3C;AAAA,UACC,YAAY;AAAA,YAAI,CAAClH,OAAuB,UACvC,WAAWA,OAAM,OAAO,YAAY,QAAQ,IAAIA,MAAK,KAAK,CAAC;AAAA,UAAA;AAAA,QAC7D,EAAA,GANY,OAOd;AAAA,MAEJ;AAAA,MACA,CAAC,kBAAkB,SAAS,YAAY,UAAU;AAAA,IACpD;AAGE,WAAAK,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QAEC,UAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAEJ;;;;;AC9PA,QAAM,gBAAgB;AACtB,QAAM,wBAAwB;AAEjB,QAAA,cAA6C,CAAC;AAAA,IACzD,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA,MAAAL;AAAA,IACA,WAAW;AAAA,IACX,UAAU,CAACqH,SAAQC,cAAcD,UAAS,IAAIC,YAAW,MAAM;AAAA,IAC/D;AAAA,IACA,UAAU;AAAA,IACV,WAAW;AAAA,IACX;AAAA,EACF,MAAM;AACE,UAAA,MAAKtH,SAAA,gBAAAA,MAAM,OAAM;AACjB,UAAA,MAAKA,SAAA,gBAAAA,MAAM,OAAM;AACjB,UAAA,MAAKA,SAAA,gBAAAA,MAAM,OAAM;AACjB,UAAA,MAAKA,SAAA,gBAAAA,MAAM,OAAM;AACvB,UAAM,cAAc,YAAY;AAEhC,UAAM,QAAQ,cAAc;AACtB,UAAA,gBAAgB,KAAK,QAAQ;AACnC,QAAI,IAAI,gBAAgB,KAAK,cAAc,KAAK;AAC1C,UAAA,KAAK,KAAK,MAAM;AAElB,QAAA,aAAa,gBAAgB,UAAU;AAC3C,QAAI,aAAa,WAAW;AAC1B,mBAAa,gBAAgB,QAAQ;AACjC,UAAA,gBAAgB,KAAK,cAAc,KAAK;AAAA,IAAA;AAG1C,QAAA,CAAC,WAAW,CAACA,OAAM;AACd,aAAA;AAAA,IAAA;AAGT,QAAI,iBAAiB;AACrB,QAAI,aAAa,QAAQ;AAEjB,YAAA,kBAAkB,gBAAgB,IAAI,QAAQ;AACnC,uBAAA;AAAA,QACfA,MAAK;AAAA,QACL,KAAK,IAAI,uBAAuB,mBAAmB,eAAe,IAAI;AAAA,MACxE;AAAA,IAAA,WACS,aAAa,QAAQ;AAC9B,uBAAiBA,MAAK;AAAA,IAAA,OACjB;AACY,uBAAA,UAAUA,MAAK,OAAO,QAAQ;AAAA,IAAA;AAI/C,WAAAK,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,WAAWiC,MAAI,OAAO,SAAS;AAAA,QAC1C;AAAA,QACA;AAAA,QACA,IAAG;AAAA,QACH;AAAA,QACA;AAAA,QACA,SAAS,QAAQ,QAAQ,QAAQ;AAAA,QACjC,OAAO,EAAE,QAAQ;AAAA,QAEhB,UAAA,OAAO,WAAW,aACf,OAAO,EAAE,GAAG,GAAG,YAAY,MAAAtC,MAAK,CAAC,IACjC;AAAA,MAAA;AAAA,IACN;AAAA,EAEJ;;;;;;;;;;;AC/Da,QAAA,aAA2C,CAAC;AAAA,IACvD,UAAAuF,YAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAA3B,WACEvD,2BAAAA,IAACqD,UAAAA,SAAQ,EAAA,OAAO,cAAc,cAAc,MAAM,WAAW,CAACS,IAAAA,OAAO,CAAC,CAAC,EAAG,CAAA;AAAA,IAE5E;AAAA,IACA,OAAAzE;AAAA,IACA,SAAS;AAAA,IACT,WAAW;AAAA,IACX;AAAA,IACA,WAAW;AAAA,IACX,UAAU,CAAC2H,SAAQC,cAAcD,UAAS,MAAMC,YAAW,MAAM;AAAA,IACjE;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,MAAM;;AACJ,UAAM,aAAa;AACnB,UAAM,aAAa;AAEnB,UAAM,CAAC,SAAS,UAAU,IAAI9G,MAAAA,SAAkB,KAAK;AAC/C,UAAA,UAAUF,aAA8B,IAAI;AAE5C,UAAA,UAAUC,MAAAA,YAAY,MAAM;AAChC,aAAO,EAAE,OAAO,IAAI,IAAI,OAAAb,QAAO,OAAO,QAAQ,OAAO;AAAA,IAAA,GACpD,CAAC,OAAO,QAAQ,QAAQA,QAAO,OAAO,IAAI,EAAE,CAAC;AAE1C,UAAA,SAASqB,MAAAA,QAAQ,MAAM;AAC3B,UAAIwE,WAAU;AACL,eAAA,QAAQ,OAAO,aAAa,KAAK;AAAA,iBAC/B,OAAO;AACT,eAAA;AAAA,MAAA;AAGF,aAAA;AAAA,OACN,CAAC,SAASA,WAAU,OAAO,KAAK,CAAC;AAE9B,UAAA,aAAaxE,MAAAA,QAAQ,MAAM;AAC/B,YAAMD,QAAOyG,SAAAA,qBAAqB;AAC5B,YAAA,IAAIzG,MAAK,SAAS;AACxB,YAAM,cAAc,KAAK,IAAI,GAAG,KAAK;AAC9B,aAAA,EAAE,GAAG,YAAY;AAAA,IAAA,GACvB,CAAC,SAAS,KAAK,CAAC;AAEb,UAAA,YAAYC,MAAAA,QAAQ,MAAM;AAC9B,YAAMD,QAAOyG,SAAAA,qBAAqB;AAC5B,YAAA,IAAIzG,MAAK,EAAE,GAAG,WAAW,OAAO,GAAG;AAClC,aAAA,EAAE,GAAG,aAAa,EAAE;AAAA,IAAA,GAC1B,CAAC,OAAO,CAAC;AAEN,UAAA,uBAAuBP,MAAAA,YAAY,MAAM;AAC7C,aACGa,2BAAAA,KAAA,OAAA,EAAI,WAAWkB,MAAI,SAClB,UAAA;AAAA,QAACjC,2BAAAA,IAAA,OAAA,EAAI,WAAWiC,MAAI,cACjB,UAAA,GAAI,OAAqB,KAAK,MAAO,OAAqB,KAAK,GAClE,CAAA;AAAA,uCACC,OAAI,EAAA,WAAWA,MAAI,cAAe,UAAA,YAAY5C,MAAK,EAAE,CAAA;AAAA,MAAA,GACxD;AAAA,IAED,GAAA,CAAC,QAAQ,QAAQA,MAAK,CAAC;AAE1B,UAAM,EAAE,YAAY,YAAY,IAAI,eAAe;AAAA,MACjD,eAAe,CAAC,UAAU;AACxB,mBAAW,IAAI;AACf,qDAAe;AAAA,MACjB;AAAA,MACA,cAAc,CAAC,UAAU;AACvB,mBAAW,KAAK;AAChB,qDAAe;AAAA,MAAY;AAAA,IAC7B,CACD;AAED,UAAM,gBAAgBqB,MAAA;AAAA,MACpB,MACE,GAAI,OAAqB,KAAK,MAC3B,OAAqB,KACxB,KAAK,YAAYrB,MAAK,CAAC;AAAA,MACzB,CAAC,QAAQ,QAAQA,MAAK;AAAA,IACxB;AAEA,2CACGkB,gBACE,EAAA,UAAA;AAAA,MACC2E,aAAAnE,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,IAAI,GAAG,OAAO,aAAa,KAAK;AAAA,UAChC,eAAc;AAAA,UACd,IAAI,WAAW;AAAA,UACf,IAAI,WAAW;AAAA,UAEf,UAAA;AAAA,YAAAf,2BAAA,IAAC,QAAK,EAAA,QAAO,MAAK,WAAW,WAAW,OAAO;AAAA,2CAC9C,QAAK,EAAA,QAAO,QAAO,WAAW,WAAW,MAAO,CAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACnD;AAAA,MAEFA,2BAAAA,IAAC,KAAE,EAAA,KAAK,SACN,UAAAA,2BAAA;AAAA,QAACyE,QAAAA,OAAO;AAAA,QAAP;AAAA,UAEC,WAAW,WAAWxC,MAAI,MAAM,SAAS;AAAA,UACzC;AAAA,UACA,SAAS;AAAA,UACT,SAAS;AAAA,UACT,MAAM;AAAA,UACN,YAAY;AAAA,YACV,UAAU,WAAW,MAAM;AAAA,UAC7B;AAAA,UACA;AAAA,UACA,eAAe,QAAQ,QAAQ,QAAQ;AAAA,UACvC;AAAA,UACA,eAAe;AAAA,UACf,cAAc;AAAA,UACd,cAAY;AAAA,UACZ,MAAK;AAAA,QAAA;AAAA,QAfA,eAAe,WAAW,CAAC,IAAI,KAAK;AAAA,MAAA,GAiB7C;AAAA,MACC,GAAC,KAAAsB,YAAA,gBAAAA,SAAS,UAAT,mBAAgB,aAChBvD,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,SAAS+C;AAAA,UACT,SAAS;AAAA,UACT,WAAW;AAAA,QAAA;AAAA,MAAA;AAAA,IACb,GAEJ;AAAA,EAEJ;;;;;;;;;;;AC5Ga,QAAA,aAA2C,CAAC;AAAA,IACvD,SAAS;AAAA,IACT,WAAW;AAAA,IACX;AAAA,IACA,OAAAvC,wCAAS,aAAY,EAAA;AAAA,IACrB;AAAA,IACA;AAAA,IACA,SAAAuC,WACEvD,2BAAAA,IAACqD,UAAAA,SAAQ,EAAA,OAAO,cAAc,cAAc,MAAM,WAAW,CAACS,IAAAA,OAAO,CAAC,CAAC,EAAG,CAAA;AAAA,IAE5E;AAAA,IACA,OAAAzE;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR,WAAW;AAAA,IACX;AAAA,IACA,UAAU,CAAC2H,SAAQC,cAAcD,UAAS,IAAIC,YAAW,MAAM;AAAA,IAC/D;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,MAAM;;AACJ,UAAMtH,QAAO;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAAN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACM,UAAA,YAAY,UAAU,MAAM,MAAM,KAAK,KAAK,IAAI,KAAK,KAAK;AAChE,UAAM,aAAa,MAAM,MAAM,KAAK,KAAK,IAAI,KAAK,KAAK;AAEvD,UAAM,CAAC,SAAS,UAAU,IAAIc,MAAAA,SAAkB,KAAK;AAC/C,UAAA,UAAUF,aAA8B,IAAI;AAE5C,UAAA,uBAAuBC,MAAAA,YAAY,MAAM;AAC7C,aACGa,2BAAAA,KAAA,OAAA,EAAI,WAAWkB,MAAI,SAClB,UAAA;AAAA,QAAAjC,2BAAA,IAAC,OAAI,EAAA,WAAWiC,MAAI,cAAe,UAAM,OAAA;AAAA,uCACxC,OAAI,EAAA,WAAWA,MAAI,cACjB,UAAA,YAAY5C,MAA+B,EAC9C,CAAA;AAAA,MAAA,GACF;AAAA,IAAA,GAED,CAAC,OAAOA,MAAK,CAAC;AAEjB,UAAM,EAAE,YAAY,YAAY,IAAI,eAAe;AAAA,MACjD,eAAe,CAAC,UAAU;AACxB,mBAAW,IAAI;AACf,qDAAe;AAAA,MACjB;AAAA,MACA,cAAc,CAAC,UAAU;AACvB,mBAAW,KAAK;AAChB,qDAAe;AAAA,MAAY;AAAA,IAC7B,CACD;AAED,UAAM,gBAAgBqB,MAAA;AAAA,MACpB,MAAM,GAAG,KAAK,KAAK,YAAYrB,MAA+B,CAAC;AAAA,MAC/D,CAAC,OAAOA,MAAK;AAAA,IACf;AAEA,2CACGkB,gBACC,EAAA,UAAA;AAAA,MAAAP,2BAAA;AAAA,QAACyE,QAAAA,OAAO;AAAA,QAAP;AAAA,UACC,KAAK;AAAA,UACL,UAAU;AAAA,UACV,cAAY;AAAA,UACZ,MAAK;AAAA,UAEL,UAAAzE,2BAAA;AAAA,YAACyE,QAAAA,OAAO;AAAA,YAAP;AAAA,cAEC,WAAW,WAAWxC,MAAI,MAAM,SAAS;AAAA,cACzC,aAAa,QAAQ,QAAQ,QAAQ;AAAA,cACrC;AAAA,cACA,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,MAAM;AAAA,cACN,SAAS;AAAA,gBACP,SAAS;AAAA,gBACT,OAAO;AAAA,gBACP,OAAO;AAAA,cACT;AAAA,cACA,SAAS;AAAA,gBACP,SAAS;AAAA,gBACT,OAAO;AAAA,gBACP,OAAO;AAAA,cACT;AAAA,cACA,MAAM;AAAA,gBACJ,SAAS;AAAA,gBACT,OAAO;AAAA,gBACP,OAAO;AAAA,cACT;AAAA,cACA,YAAY;AAAA,gBACV,UAAU,WAAW,MAAM;AAAA,cAC7B;AAAA,cACA;AAAA,cACA,eAAe;AAAA,cACf,cAAc;AAAA,YAAA;AAAA,YA3BT,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK;AAAA,UAAA;AAAA,QA4BnD;AAAA,MACF;AAAA,MACCjB,WAAU,QACThB,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC;AAAA,UACA,SAASQ;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA,MAAArB;AAAA,UACA,UAAU;AAAA,UACV;AAAA,QAAA;AAAA,MACF;AAAA,MAED,GAAC,KAAA4D,YAAA,gBAAAA,SAAS,UAAT,mBAAgB,aAChBvD,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,SAAS+C;AAAA,UACT,SAAS;AAAA,UACT,WAAW;AAAA,QAAA;AAAA,MAAA;AAAA,IACb,GAEJ;AAAA,EAEJ;ACjPa,QAAA,iBAAmD,CAAC,UAC/DvD,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,MACX,QACEA,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAASA,2BAAAA,IAAC,aAAY,EAAA,MAAK,QAAQ,CAAA;AAAA,UACnC,eAAc;AAAA,UACd,UAAU;AAAA,UACV,MAAM;AAAA,UACN,MAAMA,2BAAAA,IAAC,MAAK,EAAA,aAAa,EAAG,CAAA;AAAA,QAAA;AAAA,MAC9B;AAAA,MAEF,OACEA,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,QAAQ;AAAA,UACR,MAAK;AAAA,UACL,UAAU;AAAA,UACV,YAAaA,2BAAA,IAAA,uBAAA,EAAsB,MAAM,MAAM,OAAO,KAAM,CAAA;AAAA,QAAA;AAAA,MAC9D;AAAA,MAEF,OACEA,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,YAAaA,2BAAA,IAAA,uBAAA,EAAsB,MAAM,MAAM,OAAO,KAAM,CAAA;AAAA,QAAA;AAAA,MAC9D;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EACN;AC5BW,QAAA,qBAA2D,CACtE,UAEAA,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,MACX,QACEA,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAASA,2BAAAA,IAAC,aAAY,EAAA,MAAK,QAAQ,CAAA;AAAA,UACnC,eAAc;AAAA,UACd,UAAU;AAAA,UACV,MACEA,2BAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,qCAAO,SAAQ,EAAA;AAAA,cACf,UACEA,2BAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,mDACJ,cAAa,EAAA,QAAO,OAAM,aAAa,KAAO,OAAQ;AAAA,mDACtD,cAAa,EAAA,QAAO,OAAM,aAAa,KAAO,MAAO;AAAA,kBAAA;AAAA,gBACxD;AAAA,cAAA;AAAA,YACF;AAAA,UAEJ;AAAA,UAEF,MAAMA,2BAAAA,IAAC,MAAK,EAAA,aAAa,EAAG,CAAA;AAAA,QAAA;AAAA,MAC9B;AAAA,MAEF,OACEA,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,YAAaA,2BAAA,IAAA,uBAAA,EAAsB,MAAM,MAAM,OAAO,KAAM,CAAA;AAAA,QAAA;AAAA,MAC9D;AAAA,MAEF,OACEA,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,YAAaA,2BAAA,IAAA,uBAAA,EAAsB,MAAM,MAAM,OAAO,KAAM,CAAA;AAAA,QAAA;AAAA,MAC9D;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EACN;AC5CW,QAAA,oBAAyD,CACpE,UAEAA,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,MACX,QAASA,2BAAAA,IAAA,WAAA,EAAU,aAAa,QAAQ,UAAU,CAAC,GAAG;AAAA,MACtD,OACEA,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,UAAU;AAAA,UACV,YAAaA,2BAAA,IAAA,uBAAA,EAAsB,MAAM,MAAM,OAAO,KAAM,CAAA;AAAA,QAAA;AAAA,MAC9D;AAAA,MAEF,OACEA,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,UAAU;AAAA,UACV,YAAaA,2BAAA,IAAA,uBAAA,EAAsB,MAAM,MAAM,OAAO,KAAM,CAAA;AAAA,QAAA;AAAA,MAC9D;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EACN;ACVW,QAAA,aAA2C,CAAC,UACvDA,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAG;AAAA,MACJ,SAAS;AAAA,MACT,WAAW;AAAA,MACX,QACEA,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,aAAY;AAAA,UACZ,SACEA,2BAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SACEA,2BAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,cAAc;AAAA,kBACd,WAAW,CAAC8D,WAAO,CAAC,CAAC;AAAA,kBACrB,SAAS,CAAC,MAAM,UACd9D,2BAAA;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC;AAAA,sBACA,OAAO;AAAA,wBACL,GAAG,YAAY,KAAK,CAAC;AAAA,wBACrB,GAAG,GAAG,YAAY,KAAK,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AAAA,sBAAA;AAAA,oBAC7C;AAAA,kBAAA;AAAA,gBACF;AAAA,cAAA;AAAA,YAEJ;AAAA,UAEJ;AAAA,UAEF,KAAK;AAAA,YACHmH,sBAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACE,GAAG;AAAA,gBACJ,KAAI;AAAA,gBACJ,OAAO;AAAA,gBACP,YAAY;AAAA,gBACZ,WAAW;AAAA,gBACX,UACEnH,2BAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,OAAO;AAAA,qDACJ,cAAa,EAAA,QAAO,MAAK,aAAa,OAAS,OAAQ;AAAA,qDACvD,cAAa,EAAA,QAAO,OAAM,aAAa,KAAO,MAAO;AAAA,oBAAA;AAAA,kBACxD;AAAA,gBAAA;AAAA,cACF;AAAA,YAEJ;AAAA,YACAA,2BAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,OAAO;AAAA,gBACP,YAAY;AAAA,gBACZ,WAAW;AAAA,gBACX,UACEA,2BAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,OAAO;AAAA,qDACJ,cAAa,EAAA,QAAO,MAAK,aAAa,KAAO,MAAO;AAAA,qDACpD,cAAa,EAAA,QAAO,OAAM,aAAa,OAAS,OAAQ;AAAA,oBAAA;AAAA,kBAC3D;AAAA,gBAAA;AAAA,cACF;AAAA,cAVE;AAAA,YAAA;AAAA,UAYN;AAAA,QACF;AAAA,MACF;AAAA,MAEF,OACEA,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,UAAU;AAAA,UACV,YAAaA,2BAAA,IAAA,uBAAA,EAAsB,MAAM,MAAM,OAAO,KAAM,CAAA;AAAA,QAAA;AAAA,MAC9D;AAAA,MAEF,OACEA,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,UAAU;AAAA,UACV,YAAaA,2BAAA,IAAA,uBAAA,EAAsB,MAAM,MAAM,OAAO,KAAM,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAC9D;AAAA,EAEJ;ACrBW,QAAA,aAA2C,CAAC;AAAA,IACvD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAAkF,2CAAY,gBAAe,EAAA;AAAA,IAC3B,gBAAgB;AAAA,EAClB,MAAM;AACJ,UAAM,aAAaxE,MAAA;AAAA,MACjB,MACE,WACI;AAAA,QACA,GAAG;AAAA,QACH,OAAO,QAAQ;AAAA,MAAA,IAEf;AAAA,QACA,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACJ,CAAC,UAAU,KAAK;AAAA,IAClB;AAEA,UAAM,UAAUR,MAAA;AAAA,MACd,CAAC,MAAc;AACb,YAAI,CAACgF,WAAU;AACN,iBAAA;AAAA,QAAA;AAGT,eAAO,QAAQ,EAAE;AAAA,MACnB;AAAA,MACA,CAAC,IAAIA,SAAQ;AAAA,IACf;AAEA,UAAM,UAAUhF,MAAA;AAAA,MACd,CAAC,MAAuC;AACtC,cAAM,QACJ,kBAAkB,WACd,gBACEkH,QAAAA,sBACAC,QAAA,gBACF,gBACEC,QAAAA,oBACA9H,QAAA;AAEF,cAAA,WAAW+H,mBAAW,EACzB,MAAM,CAAC,OAAY,OAAO,GAAG,CAAC,CAAC,EAC/B,YAAY,CAAC,MAAM,WAAY,EAC/B,YAAY,CAACzF,OAAW,OAAOA,GAAE,CAAC,CAAC,EACnC,MAAM,KAAK;AAEd,eAAO,SAAS,CAAQ;AAAA,MAC1B;AAAA,MACA,CAAC,eAAe,eAAe,QAAQ,aAAa,MAAM;AAAA,IAC5D;AAEA,UAAM,QAAQpB,MAAA;AAAA,MACZ,OAAO;AAAA,QACL,GAAG,QAAQ,IAAK;AAAA,QAChB,SAAS;AAAA,MAAA;AAAA,MAEX,CAAC,MAAM,OAAO;AAAA,IAChB;AAEM,UAAA,OAAOA,MAAAA,QAAQ,MAAM;AACzB,YAAM,CAAC,MAAM,IAAI,OAAO,OAAO;AACxB,aAAA;AAAA,QACL,GAAG,QAAQ,KAAM,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,GAAG,OAAO,EAAE,CAAC;AAAA,QAClD,SAAS;AAAA,MACX;AAAA,IACC,GAAA,CAAC,MAAM,SAAS,MAAM,CAAC;AAEpB,UAAA,OAAO,MAAM,MAAM,CAAC;AAE1B,2CACGH,gBACC,EAAA,UAAA;AAAA,MAAAP,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,QAAQ;AAAA,YACN;AAAA,YACA;AAAA,UACF;AAAA,UACA;AAAA,UACA,eAAc;AAAA,UACd;AAAA,UACA,MAAM,QAAQ,KAAK;AAAA,QAAA;AAAA,MACrB;AAAA,MACCkF,aACClF,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC,SAAS0E;AAAA,UACT,IAAI,GAAG,EAAE;AAAA,UACT,QAAQ;AAAA,UACR,OAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IACT,GAEJ;AAAA,EAEJ;AClHa,QAAA,aAA2C,CAAC;AAAA,IACvD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd,WAAW;AAAA,IACX,gBAAgB;AAAA,EAClB,MAAM;AACE,UAAA,OAAO,MAAM,MAAM,KAAK;AAE9B,UAAM,UAAUhF,MAAA;AAAA,MACd,CAAC,YAA6C;AAC5C,cAAM,QACJ,kBAAkB,WACd,gBACEkH,QAAAA,sBACAC,QAAA,gBACF,gBACEC,QAAAA,oBACA9H,QAAA;AAEF,cAAA,WAAWgI,QAAAA,aACd,MAAM,CAAC,MAAW,OAAO,EAAE,CAAC,CAAC,EAC7B,OAAO,CAAC,MAAW,OAAO,EAAE,CAAC,CAAC,EAC9B,MAAM,KAAK;AAEd,eAAO,SAAS,OAAc;AAAA,MAChC;AAAA,MACA,CAAC,eAAe,eAAe,QAAQ,MAAM;AAAA,IAC/C;AAEA,UAAM,aAAa9G,MAAA;AAAA,MACjB,MACE,WACI;AAAA,QACA,GAAG;AAAA,QACH,OAAO,UAAU,IAAI,QAAQ;AAAA,MAAA,IAE7B;AAAA,QACA,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACJ,CAAC,UAAU,OAAO,OAAO;AAAA,IAC3B;AAEA,UAAM,QAAQA,MAAA;AAAA,MACZ,OAAO;AAAA,QACL,GAAG,QAAQ,IAAK;AAAA,QAChB,SAAS;AAAA,MAAA;AAAA,MAEX,CAAC,MAAM,OAAO;AAAA,IAChB;AAEM,UAAA,OAAOA,MAAAA,QAAQ,MAAM;AACzB,YAAM,CAAC,MAAM,IAAI,OAAO,OAAO;AACxB,aAAA;AAAA,QACL,GAAG,QAAQ,KAAM,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,GAAG,OAAO,EAAE,CAAC;AAAA,QAClD,SAAS;AAAA,MACX;AAAA,IACC,GAAA,CAAC,MAAM,QAAQ,OAAO,CAAC;AAGxB,WAAAV,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,QAAQ;AAAA,UACN;AAAA,UACA;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA,eAAc;AAAA,QACd,QAAQ;AAAA,QACR,MAAK;AAAA,QACL;AAAA,MAAA;AAAA,IACF;AAAA,EAEJ;ACzGa,QAAA,oBAAyD,CAAC;AAAA,IACrE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,MAAM;AACJ,UAAM,YAAYE,MAAA;AAAA,MAChB,CACE,gBACA,OACA,UACG;AACC,YAAA;AACA,aAAA,6BAAM,MAAM,UAAS,YAAY;AACnC,gBAAM,UAAU;AAAA,YACd;AAAA,YACA,CAAC,OAAO,GAAG;AAAA,UACb;AACS,mBAAAkE,QAAA,UAAA,EACN,MAAM,CAAC,GAAG,IAAI,KAAK,EAAE,CAAC,EACtB,OAAO,OAAgB;AAAA,QAAA,OACrB;AACL,gBAAM,UAAU,WAAW,EAAE,MAAM,gBAAgB;AAC1C,mBAAAD,QAAA,UAAA,EACN,MAAM,CAAC,GAAG,IAAI,KAAK,EAAE,CAAC,EACtB,OAAO,OAAO;AAAA,QAAA;AAGnB,cAAM,UAAU,WAAW,EAAE,MAAM,gBAAgB,QAAQ,OAAO;AAClE,cAAM,SAAS,gBAAgB,OAAO,OAAO,OAAO;AAE7C,eAAA;AAAA,UACL;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA,CAAA;AAAA,IACF;AAEA,UAAM,cAAcjE,MAAA;AAAA,MAClB,CAAC,mBAA6C;AAC5C,cAAM,EAAE,YAAY,aAAa,IAAA+E,IAAO,IAAA;AACxC,cAAM,cAAc,KAAK,IAAI,YAAY,WAAW,IAAI;AAClD,cAAA,iBAAiB,sBAAsB,IAAI;AAC3C,cAAA,EAAE,QAAQ,OAAA,IAAW;AAAA,UACzB;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAEA,+CACG1E,gBACE,EAAA,UAAA;AAAA,UACC,QAAAP,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT;AAAA,cACA,QAAQ;AAAA,cACR,OAAO;AAAA,cACP;AAAA,YAAA;AAAA,UACF;AAAA,UAEFR,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT,IAAIyE;AAAAA,cACJ,MAAM;AAAA,cACN;AAAA,cACA;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,GACF;AAAA,MAEJ;AAAA,MACA,CAAC,MAAM,WAAW,aAAa,QAAQ,IAAI;AAAA,IAC7C;AAGE,WAAAjF,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAc;AAAA,QACd,cAAc;AAAA,QACd,QAAQ;AAAA,QACR;AAAA,QAEC,UAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAEJ;;;;;;;AChCa,QAAA,qBAA2D,CACtE,UACG;AACG,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAAiD;AAAA,MACA;AAAA,MACA,SAAAM;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IAAA,IACD,kBAAkB,oCAAoC,KAAK;AAEzD,UAAA,MAAMtD,aAAY,IAAI;AAC5B,UAAM,CAAC,SAAS,UAAU,IAAIE,MAAAA,SAAkB,KAAK;AAErD,aAAS,aAAa,OAAyB;AAC7C,iBAAW,IAAI;AACf,WAAK,aAAa;AAAA,QAChB,OAAO;AAAA,QACP,aAAa;AAAA,MAAA,CACd;AAAA,IAAA;AAGH,aAAS,aAAa,OAAyB;AAC7C,iBAAW,KAAK;AAChB,WAAK,aAAa;AAAA,QAChB,OAAO;AAAA,QACP,aAAa;AAAA,MAAA,CACd;AAAA,IAAA;AAGH,aAAS,QAAQ,OAAyB;AACxC,WAAK,QAAQ;AAAA,QACX,OAAO;AAAA,QACP,aAAa;AAAA,MAAA,CACd;AAAA,IAAA;AAGH,aAAS,aAAaqD,OAAqC;AACzD,YAAM,KAAKgE,QAAAA,WAAW,EACnB,OAAO,CAAC,MAAW,OAAO,EAAE,CAAC,CAAC,EAC9B,MAAM,CAAC,MAAW,OAAO,EAAE,CAAC,CAAC;AAIhC,YAAM/G,QAAO,GAAG,CAAC+C,KAAI,CAAQ;AAE7B,UAAI/C,OAAM;AACR,cAAM,CAAC,YAAY,UAAU,IAAIA,MAAK,MAAM,CAAC,EAAE,MAAM,GAAG,EAAE,EAAE,MAAM,GAAG;AAE9D,eAAA;AAAA,UACL,YAAY,WAAW,UAAU;AAAA,UACjC,YAAY,WAAW,UAAU;AAAA,QACnC;AAAA,MAAA;AAAA,IACF;AAGF,aAAS,gBAAgB;AACvB,UAAI,UAAU;AACL,eAAA;AAAA,UACL,GAAG;AAAA,UACH,OAAO,QAAQ;AAAA,QACjB;AAAA,MAAA,OACK;AACE,eAAA;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,QACT;AAAA,MAAA;AAAA,IACF;AAGF,UAAM,OAAO,OAAO,UAAU,aAAa,MAAM,MAAM,KAAK,IAAI;AAC1D,UAAA,YAAY,aAAa,IAAI;AACnC,UAAM,UAAU,OAAO,SAAS,aAAa,KAAK,IAAI,IAAI;AAC1D,UAAM,aAAa,cAAc;AAEjC,UAAM,CAAC,MAAM,IAAI,OAAO,OAAO;AAC/B,UAAM,gBAAgB,aAAa,EAAE,GAAG,MAAM,GAAG,QAAQ;AAEnD,UAAA,gBAAgBC,MAAAA,QAAQ,MAAM,aAAa,IAAI,GAAG,CAAC,IAAI,CAAC;AAE9D,UAAM,YAAY,UAAU,mCAAU,MAAM,SAAS;AAErD,2CACGH,gBACC,EAAA,UAAA;AAAA,MAAAQ,2BAAA;AAAA,QAAC0D,QAAAA,OAAO;AAAA,QAAP;AAAA,UACC,SAAS,EAAE,GAAG,eAAe,SAAS,EAAE;AAAA,UACxC,SAAS,EAAE,GAAG,WAAW,SAAS,EAAE;AAAA,UACpC,MAAM,EAAE,GAAG,eAAe,SAAS,EAAE;AAAA,UACrC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW,WAAW,WAAW;AAAA,YAC/B,CAACxC,MAAI,QAAQ,GAAG,CAAC;AAAA,YACjB,CAACA,MAAI,MAAM,GAAG,CAAC;AAAA,UAAA,CAChB;AAAA,UACD,UAAU;AAAA,UACV,cAAY;AAAA,UACZ,MAAK;AAAA,UAEJ,UAAA;AAAA,YAAAgB,WAAUA,QAAO,IAAI;AAAA,YACrB,CAACA,WAAUjD,2BAAAA,IAAC,UAAO,EAAA,GAAG,SAAS,KAAY,CAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAC9C;AAAA,MACCuD,YACCvD,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC,SAAS+C;AAAA,UACT,SAAS;AAAA,UACT,WAAW;AAAA,UACX,OAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IACT,GAEJ;AAAA,EAEJ;AAEO,QAAM,qCAAqC;AAAA,IAChD,MAAM;AAAA,IACN,OAAO,QAAQ,UAAU,CAAC;AAAA,IAC1B,wCAAU,cAAa,EAAA;AAAA,IACvB,QAAQ;AAAA,IACR,SAAS,MAAM;AAAA,IACf,cAAc,MAAM;AAAA,IACpB,cAAc,MAAM;AAAA,EACtB;AC3Ka,QAAA,sBAA6D,CAAC;AAAA,IACzE;AAAA,IACA,OAAA9B,wCAAS,oBAAmB,EAAA;AAAA,IAC5B;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA,OAAO;AAAA,IACP;AAAA,EACF,MAAM;AACJ,UAAM,aAAaf,MAAA;AAAA,MACjB,OAAO,EAAE,GAAG,oCAAoC,IAAIe,UAAA,gBAAAA,OAAO,UAAS,CAAI,EAAA;AAAA,MACxE,CAACA,UAAA,gBAAAA,OAAO,KAAK;AAAA,IACf;AACM,UAAA,CAAC,mBAAmB,oBAAoB,IAAItB,MAAA;AAAA,MAChD;AAAA,IACF;AAEAC,UAAAA,UAAU,MAAM;AACO,2BAAA,aAAa,EAAE;AAAA,IAAA,GACnC,CAAC,SAAS,CAAC;AAEd,UAAM,eAAeF,MAAA;AAAA,MACnB,CAAC,EAAE,OAAAb,OAAA,MAAY;AAEb,YAAI,CAAC,WAAW;AACO,+BAAA,CAACA,OAAM,EAAE,CAAC;AAAA,QAAA;AAAA,MAEnC;AAAA,MACA,CAAC,SAAS;AAAA,IACZ;AAEM,UAAA,eAAea,MAAAA,YAAY,MAAM;AAErC,UAAI,CAAC,WAAW;AACd,6BAAqB,CAAA,CAAE;AAAA,MAAA;AAAA,IACzB,GACC,CAAC,SAAS,CAAC;AAEd,UAAM,YAAYA,MAAY,YAAA,MAAM,MAAM,CAAC,IAAI,CAAC;AAEhD,UAAM,cAAcA,MAAA;AAAA,MAClB,CAAC,GAAkC,UAAkB;AAC/C,YAAA;AACJ,YAAI,EAAE,IAAI;AACR,mBAAS,EAAE;AAAA,QAAA,OACN;AACG,kBAAA;AAAA,YACN;AAAA,UACF;AAAA,QAAA;AAGF,cAAM,MAAM4E,eAAAA,WAAW,GAAG,UAAU,KAAK,EAAE;AAC3C,cAAM,SACJ,EAAE,qBAAqB,kBAAkB,WACzC,kBAAkB,SAAS,MAAM;AAEnC,cAAM,eAAe,yCAAY;AAG/B,eAAAqC,sBAAA;AAAA,UAAC3G,UAAA;AAAA,UAAA;AAAA,YAEE,GAAI,eAAe,CAAA,IAAK,EAAE,SAAS,UAAU;AAAA,YAC9C,SAASiB;AAAA,YACT;AAAA,YACA,MAAM;AAAA,YACN;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,QACF;AAAA,MAEJ;AAAA,MACA;AAAA,QACE;AAAA,QACAA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAEA,UAAM,qBAAqBvB,MAAA;AAAA,MACzB,MAEKF,2BAAA,IAAAO,qBAAA,EAAA,WAAA,6CAAc,WACb,aAAa,IAAI,CAACyE,YAChBhF,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UAEC,SAASwE;AAAA,UACT,OAAO,OAAOA,QAAO,MAAM,KAAK;AAAA,QAAA;AAAA,QAF3BA,QAAO;AAAA,MAIf,CAAA,GACL;AAAA,MAEF,CAAC,cAAc,MAAM;AAAA,IACvB;AAGE,WAAAjE,2BAAA,KAACR,gBAAA,EACE,UAAA;AAAA,MAAmB,mBAAA;AAAA,MACnB,KAAK,IAAI,WAAW;AAAA,IAAA,GACvB;AAAA,EAEJ;AC1Ha,QAAA,oBAAyD,CACpE,UACG;AACG,UAAA,EAAE,MAAM,QAAQ,QAAQ,UAAU,OAAO,cAAc,MAAM,OAAAkB,WAAU;AAAA,MAC3E,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAEA,UAAM,YAAYvB,MAAA;AAAA,MAChB,CAACuB,SAAsC,UAA2B;AAChE,cAAM,WACJ,gBAAgBA,WAAS,QAAQ,aAAa,GAAGA,QAAM,CAAC;AAE1D,YAAI,SAAS,SAAS;AACb,iBAAA;AAAA,QAAA,WACE,SAAS,SAAS;AAC3B,cAAI,cAAc;AACT,mBAAA;AAAA,UAAA,OACF;AACL,mBAAO,UAAU;AAAA,UAAA;AAAA,QACnB,WACS,SAAS,QAAQ;AAC1B,cAAI,cAAc;AACT,mBAAA;AAAA,UAAA,OACF;AACE,mBAAA,UAAU,KAAM,SAAS;AAAA,UAAA;AAAA,QAClC;AAGF,eAAO,QAAQ,IAAI;AAAA,MACrB;AAAA,MACA,CAAC,MAAM,cAAc,IAAI;AAAA,IAC3B;AAGE,WAAAzB,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OACEA,2BAAA;AAAA,UAACQ,UAAA;AAAA,UAAA;AAAA,YACC,SAASiB;AAAA,YACT;AAAA,YACA,SAAS;AAAA,YACT,SAAS;AAAA,UAAA;AAAA,QAAA;AAAA,MACX;AAAA,IAEJ;AAAA,EAEJ;AAEO,QAAM,oCAAoC;AAAA,IAC/C,MAAM;AAAA,IACN,sCAAQ,oBAAmB,CAAA,CAAA;AAAA,EAC7B;AC0Ba,QAAA,mBAAuD,CAAC,UAAU;AACvE,UAAA;AAAA,MACJ;AAAA,MACA,MAAAb;AAAA,MACA;AAAA,MACA,SAAA2C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,IACE,kBAAkB,kCAAkC,KAAK;AAE7D,UAAM,eAAe7C,MAAA;AAAA,MACnB,OAAO;AAAA,QACL,GAAG;AAAA,QACH,GAAG,mCAAS;AAAA,MAAA;AAAA,MAEd,CAAC,OAAO;AAAA,IACV;AACA,UAAM,CAAC,cAAc,eAAe,IAAIP,MAAAA,SAAqB,IAAI;AACjE,UAAM,UAAU,SAAS;AAEzB,UAAM,mBAAmBD,MAAA;AAAA,MACvB,CAACuB,QAAsC,UAAkB;;AACjD,cAAA,MAAM,MAAM,QAAQA,MAAK,KAAI,KAAAA,UAAA,gBAAAA,OAAQ,OAAR,mBAAY,MAAMA,UAAA,gBAAAA,OAAO;AAE5D,eAAO,SAAS;AAAA,UACd;AAAA,UACA;AAAA,UACA;AAAA,UACA,OAAAA;AAAA,UACA;AAAA,QAAA,CACD;AAAA,MACH;AAAA,MACA,CAAC,aAAa,IAAI;AAAA,IACpB;AAEA,UAAM,aAAavB,MAAA;AAAA,MACjB,CAACuB,QAAwC,QAAQ,MAE5CV,2BAAAA,KAAAR,WAAAA,UAAA,EAAA,UAAA;AAAA,QACC,QAAAP,2BAAA;AAAA,UAACQ,UAAA;AAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,IAAI,GAAG,EAAE,gBAAgB,KAAK;AAAA,YAC9B;AAAA,YACA;AAAA,YACA;AAAA,YACA,OAAO;AAAA,YACP;AAAA,YACA,MAAMiB;AAAA,YACN;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,QACF;AAAA,QAEDb,SACCZ,2BAAA;AAAA,UAACQ,UAAA;AAAA,UAAA;AAAA,YACC,SAASI;AAAA,YACT;AAAA,YACA;AAAA,YACA,SAAS,SAAS;AAAA,YAClB;AAAA,YACA;AAAA,YACA;AAAA,YACA,OAAO;AAAA,YACP,MAAMa;AAAA,YACN;AAAA,UAAA;AAAA,QAAA;AAAA,MACF,GAEJ;AAAA,MAEF;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAEA,UAAM,gBAAgBV,MAAA;AAAA,MACpB,CAACsD,OAAuC,QAAQ,MAAM;AAE9C,cAAA,gBACH,WAAW,aAAa,gBAAiB;AAC5C,cAAM,aAAa,SAAS,UAAa,YAAY,CAAC;AAGpD,eAAAxD,2BAAA;AAAA,UAACQ,UAAA;AAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,MAAMgD;AAAAA,YACN,UAAU;AAAA,YACV,OAAO;AAAA,UAAA;AAAA,QACT;AAAA,MAEJ;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAEA,UAAM,qBAAqBtD,MAAA;AAAA,MACzB,CAAC,WACEK,2BAAAA,KAAAA,MAAAA,UAAA,EACE,UAAA;AAAA,QAAA,WAAW,MAAM;AAAA,QACjB,WAAW,cAAc,MAAM;AAAA,MAAA,GAClC;AAAA,MAEF,CAAC,YAAY,eAAe,OAAO;AAAA,IACrC;AAEA,UAAM,oBAAoBL,MAAA;AAAA,MACxB,CAAC,WACEK,2BAAAA,KAAAA,MAAAA,UAAA,EACE,UAAA;AAAA,QACE,OAAA,IAAI,CAACkB,QAAO,yCACVlB,gBAAA,EACE,qBAAWkB,OAAM,MAAM,KAAK,EADhB,GAAA,GAAGA,OAAM,IAAK,UAAU,EAEvC,CACD,EACA,QAAQ;AAAA,QACV,OACE,IAAI,CAACA,QAAO,UACVlB,2BAAAA,IAAAA,MAAAA,UAAA,EACE,UAAc,cAAAkB,OAAM,MAAM,KAAK,KADnB,GAAGA,OAAM,IAAK,SAAU,CAAA,EAEvC,CACD,EACA,QAAQ;AAAA,MAAA,GACb;AAAA,MAEF,CAAC,YAAY,aAAa;AAAA,IAC5B;AAEA,UAAM,qBAAqBvB,MAAA;AAAA,MACzB,MAEKF,2BAAA,IAAAO,qBAAA,EAAA,WAAA,6CAAc,WACb,aAAa,IAAI,CAACyE,YAChBhF,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UAEC,SAASwE;AAAA,UACT,OAAO,OAAOA,QAAO,MAAM,KAAK;AAAA,QAAA;AAAA,QAF3BA,QAAO;AAAA,MAIf,CAAA,GACL;AAAA,MAEF,CAAC,cAAc,MAAM;AAAA,IACvB;AAGE,WAAAhF,2BAAA;AAAA,MAACQ,UAAA;AAAA,MAAA;AAAA,QACC,SAAS+C;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA,OAAO;AAAA,QACP,cAAc,CAAC,UAAU,gBAAgB,MAAM,KAAK;AAAA,QACpD,cAAc,MAAM,gBAAgB,IAAI;AAAA,QACxC;AAAA,QACA;AAAA,QAEA,UAACxC,2BAAAA,KAAA,KAAA,EAAE,UAAU,QAAQ,EAAE,UACpB,UAAA;AAAA,UAAA,WACC,kBAAkB,IAAiD;AAAA,UACpE,CAAC,WACA,mBAAmB,IAAuC;AAAA,UAC3D,mBAAmB;AAAA,QAAA,EACtB,CAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAEJ;AAEO,QAAM,mCACX;AAAA,IACE,aAAa,QAAQ;AAAA,IACrB,eAAe;AAAA,IACf,MAAM;AAAA,IACN,UAAU;AAAA,IACV,qCAAO,YAAW,EAAA;AAAA,IAClB,qCAAO,YAAW,EAAA;AAAA,IAClB,wCAAU,mBAAkB,EAAA;AAAA,IAC5B,wCAAU,aAAY,EAAA;AAAA,IACtB,YAAY;AAAA,IACZ,UAAU,IAAI,KAAK;AAAA,IACnB,eAAe;AAAA,EACjB;ACnSW,QAAA,kBAAqD,CAAC;AAAA,IACjE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd,wCAAU,kBAAiB,EAAA;AAAA,IAC3B,sCAAQ,YAAW,EAAA;AAAA,IACnB,UAAU;AAAA,IACV,aAAa;AAAA,IACb,WAAW,IAAI,KAAK;AAAA,IACpB,gBAAgB;AAAA,EAClB,MAAM;AACJ,UAAM,cAAcL,MAAA;AAAA,MAClB,OAAO,EAAE,GAAG,kCAAkC,GAAG,OAAO,MAAM;AAAA,MAC9D,CAAC,OAAO,KAAK;AAAA,IACf;AACA,UAAM,YAAYA,MAAA;AAAA,MAChB,OAAO,EAAE,GAAG,2BAA2B,IAAI,6BAAM,UAAS,CAAI,EAAA;AAAA,MAC9D,CAAC,6BAAM,KAAK;AAAA,IACd;AAEA,UAAM+G,aAAYvH,MAAA;AAAA,MAChB,CAAC,WAAW;AACV,cAAM,eAAe,KAAK,IAAI,WAAW,UAAU,KAAK,IAAI,KAAK;AAC7D,YAAA;AACA,YAAA,UAAU,SAAS,YAAY;AAC3B,gBAAA,gBAAgB,YAAY,SAAS;AAEvC,cAAA;AACJ,cAAI,eAAe;AACP,sBAAA;AAAA,cACR;AAAA,cACA,CAAC,OAAO,GAAG;AAAA,cACX,CAAC,OAAO,GAAG;AAAA,YACb;AAAA,UAAA,OACK;AACK,sBAAA;AAAA,cACR;AAAA,cACA,CAAC,OAAO,GAAG;AAAA,YACb;AAAA,UAAA;AAGF,cAAI,cAAc;AACP,qBAAAkE,QAAA,UAAA,EACN,MAAM,CAAC,GAAG,IAAI,KAAK,EAAE,CAAC,EACtB,OAAO,OAAgB;AAAA,UAAA,OACrB;AAGI,qBAAAsD,QAAAA,aACN,MAAM,CAAC,YAAY,QAAQ,CAAC,EAC5B,OAAO,OAAgB;AAAA,UAAA;AAAA,QAC5B,OACK;AACL,gBAAM,UAAU,WAAW,EAAE,MAAM,QAAQ;AAElC,mBAAAvD,QAAAA,YAAY,MAAM,CAAC,YAAY,QAAQ,CAAC,EAAE,OAAO,OAAO;AAAA,QAAA;AAG5D,eAAA;AAAA,MACT;AAAA,MACA,CAAC,UAAU,MAAM,UAAU,YAAY,MAAM,UAAU;AAAA,IACzD;AAEA,UAAM,YAAYjE,MAAA;AAAA,MAChB,CAAC,SAA2B,aAAqByH,iBAAwB;AACjE,cAAA,gBAAgB,YAAY,SAAS;AAEvC,YAAA;AACJ,YAAI,eAAe;AACb,cAAA,qBAAqB,SAAmC,IAAI;AAAA,QAAA,OAC3D;AACL,cAAI,sBAAsB,OAAkC;AAAA,QAAA;AAGxD,cAAA,SAASF,WAAU,CAAC;AAC1B,cAAM,UAAU,WAAW,EAAE,MAAM,GAAG,QAAQ,OAAO;AACrD,cAAM,SAAS,gBAAgBE,cAAa,aAAa,OAAO;AAEzD,eAAA;AAAA,UACL;AAAA,UACA;AAAA,UACA,QAAQ;AAAA,QACV;AAAA,MACF;AAAA,MACA,CAACF,YAAW,YAAY,IAAI;AAAA,IAC9B;AAEA,UAAM,cAAcvH,MAAA;AAAA,MAClB,CAAC,mBAA6C;AAC5C,cAAM,EAAE,YAAY,aAAa,IAAA+E,IAAO,IAAA;AACxC,cAAM,cAAc,KAAK,IAAI,YAAY,WAAW,IAAI;AACxD,cAAM,EAAE,QAAQ,QAAQ,OAAW,IAAA;AAAA,UACjC;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAEA,+CACG1E,gBACE,EAAA,UAAA;AAAA,UACC,QAAAP,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT;AAAA,cACA,QAAQ;AAAA,cACR,OAAO;AAAA,cACP;AAAA,cACA;AAAA,cACA;AAAA,YAAA;AAAA,UACF;AAAA,UAEFR,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT,IAAIyE;AAAAA,cACJ,MAAM;AAAA,cACN;AAAA,cACA;AAAA,cACA,QAAQ;AAAA,cACR,OAAO;AAAA,cACP;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,GACF;AAAA,MAEJ;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAGE,WAAAjF,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAc;AAAA,QACd,cAAc;AAAA,QACd,QAAQ;AAAA,QACR;AAAA,QAEC,UAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAEJ;ACjOA,QAAM,KAAK,KAAK,IACZ,MAAM,IAAI,IACV,UAAU,MACV,aAAa,MAAM;AAEvB,WAAS,OAAO,SAAS;AACvB,SAAK,KAAK,QAAQ,CAAC;AACnB,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,IAAI,GAAG,EAAE,GAAG;AAC9C,WAAK,KAAK,UAAU,CAAC,IAAI,QAAQ,CAAC;AAAA,IACtC;AAAA,EACA;AAEA,WAAS,YAAY,QAAQ;AAC3B,QAAI,IAAI,KAAK,MAAM,MAAM;AACzB,QAAI,EAAE,KAAK,GAAI,OAAM,IAAI,MAAM,mBAAmB,MAAM,EAAE;AAC1D,QAAI,IAAI,GAAI,QAAO;AACnB,UAAM,IAAI,MAAM;AAChB,WAAO,SAAS,SAAS;AACvB,WAAK,KAAK,QAAQ,CAAC;AACnB,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,IAAI,GAAG,EAAE,GAAG;AAC9C,aAAK,KAAK,KAAK,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC;AAAA,MAC5D;AAAA,IACG;AAAA,EACH;AAAA,EAEO,MAAM,KAAK;AAAA,IAChB,YAAY,QAAQ;AAClB,WAAK,MAAM,KAAK;AAAA,MAChB,KAAK,MAAM,KAAK,MAAM;AACtB,WAAK,IAAI;AACT,WAAK,UAAU,UAAU,OAAO,SAAS,YAAY,MAAM;AAAA,IAC/D;AAAA,IACE,OAAO,GAAG,GAAG;AACX,WAAK,WAAW,KAAK,MAAM,KAAK,MAAM,CAAC,CAAC,IAAI,KAAK,MAAM,KAAK,MAAM,CAAC,CAAC;AAAA,IACxE;AAAA,IACE,YAAY;AACV,UAAI,KAAK,QAAQ,MAAM;AACrB,aAAK,MAAM,KAAK,KAAK,KAAK,MAAM,KAAK;AACrC,aAAK;AAAA,MACX;AAAA,IACA;AAAA,IACE,OAAO,GAAG,GAAG;AACX,WAAK,WAAW,KAAK,MAAM,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;AAAA,IAClD;AAAA,IACE,iBAAiB,IAAI,IAAI,GAAG,GAAG;AAC7B,WAAK,WAAW,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;AAAA,IAChE;AAAA,IACE,cAAc,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG;AAClC,WAAK,WAAW,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;AAAA,IAC9E;AAAA,IACE,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG;AACvB,WAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC;AAG7C,UAAI,IAAI,EAAG,OAAM,IAAI,MAAM,oBAAoB,CAAC,EAAE;AAElD,UAAI,KAAK,KAAK,KACV,KAAK,KAAK,KACV,MAAM,KAAK,IACX,MAAM,KAAK,IACX,MAAM,KAAK,IACX,MAAM,KAAK,IACX,QAAQ,MAAM,MAAM,MAAM;AAG9B,UAAI,KAAK,QAAQ,MAAM;AACrB,aAAK,WAAW,KAAK,MAAM,EAAE,IAAI,KAAK,MAAM,EAAE;AAAA,MACpD,WAGa,EAAE,QAAQ,SAAS;AAAA,eAKnB,EAAE,KAAK,IAAI,MAAM,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,GAAG;AAC3D,aAAK,WAAW,KAAK,MAAM,EAAE,IAAI,KAAK,MAAM,EAAE;AAAA,MACpD,OAGS;AACH,YAAI,MAAM,KAAK,IACX,MAAM,KAAK,IACX,QAAQ,MAAM,MAAM,MAAM,KAC1B,QAAQ,MAAM,MAAM,MAAM,KAC1B,MAAM,KAAK,KAAK,KAAK,GACrB,MAAM,KAAK,KAAK,KAAK,GACrB,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,MAAM,QAAQ,QAAQ,UAAU,IAAI,MAAM,IAAI,KAAK,CAAC,GAChF,MAAM,IAAI,KACV,MAAM,IAAI;AAGd,YAAI,KAAK,IAAI,MAAM,CAAC,IAAI,SAAS;AAC/B,eAAK,WAAW,KAAK,MAAM,GAAG,IAAI,KAAK,MAAM,GAAG;AAAA,QACxD;AAEM,aAAK,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,MAAM,MAAM,IAAI,IAAI,KAAK,MAAM,KAAK,MAAM,GAAG,IAAI,KAAK,MAAM,KAAK,MAAM,GAAG;AAAA,MACtH;AAAA,IACA;AAAA,IACE,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,KAAK;AACxB,UAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;AAGhC,UAAI,IAAI,EAAG,OAAM,IAAI,MAAM,oBAAoB,CAAC,EAAE;AAElD,UAAI,KAAK,IAAI,KAAK,IAAI,EAAE,GACpB,KAAK,IAAI,KAAK,IAAI,EAAE,GACpB,KAAK,IAAI,IACT,KAAK,IAAI,IACT,KAAK,IAAI,KACT,KAAK,MAAM,KAAK,KAAK,KAAK;AAG9B,UAAI,KAAK,QAAQ,MAAM;AACrB,aAAK,WAAW,EAAE,IAAI,EAAE;AAAA,MAC9B,WAGa,KAAK,IAAI,KAAK,MAAM,EAAE,IAAI,WAAW,KAAK,IAAI,KAAK,MAAM,EAAE,IAAI,SAAS;AAC/E,aAAK,WAAW,EAAE,IAAI,EAAE;AAAA,MAC9B;AAGI,UAAI,CAAC,EAAG;AAGR,UAAI,KAAK,EAAG,MAAK,KAAK,MAAM;AAG5B,UAAI,KAAK,YAAY;AACnB,aAAK,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,IAAI,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,KAAK,MAAM,EAAE,IAAI,KAAK,MAAM,EAAE;AAAA,MAChH,WAGa,KAAK,SAAS;AACrB,aAAK,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;AAAA,MACzH;AAAA,IACA;AAAA,IACE,KAAK,GAAG,GAAG,GAAG,GAAG;AACf,WAAK,WAAW,KAAK,MAAM,KAAK,MAAM,CAAC,CAAC,IAAI,KAAK,MAAM,KAAK,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAAA,IAC9F;AAAA,IACE,WAAW;AACT,aAAO,KAAK;AAAA,IAChB;AAAA,EACA;AAEO,WAAS,OAAO;AACrB,WAAO,IAAI;AAAA,EACb;AAGA,OAAK,YAAY,KAAK;AClJT,QAAA,YAAY,CAAC,EAAE,QAAQ,YAAY,KAAK,GAAG,WAAW;AAC3D,UAAA,IAAIsE,uBAAe,EAAE;AAC3B,UAAM,cAAcrE,MAAA,OAAO,OAAO,KAAK,CAAC;AAClC,UAAA,SAASsE,QAAAA,UAAU,GAAG,kBAAkB;AAE9CnE,UAAAA,UAAU,MAAM;AACd,YAAM,eAAeoE,cAAAA,YAAY,YAAY,SAAS,OAAO,MAAM,CAAC;AAC9D,YAAA,aAAa,OAAO,IAAI;AAC1B,UAAA;AAEJ,UAAI,yCAAY,OAAO;AACrB,oBAAY,WAAW,MAAM;AACpB,iBAAA,IAAI,aAAa,CAAC;AAAA,QAAA,GACxB,WAAW,QAAQ,GAAI;AAAA,MAAA,OACrB;AACE,eAAA,IAAI,aAAa,CAAC;AAAA,MAAA;AAG3B,YAAM,cAAc,OAAO,SAAS,CAAC,MAAM;AAC7B,oBAAA,UAAU,aAAa,IAAI,UAAU;AAC/C,UAAA,IAAI,IAAI,EAAE,GAAG,OAAO,OAAO,GAAG,YAAY,QAAQ,CAAC,CAAC;AAAA,MAAA,CACvD;AAED,aAAO,MAAM;AACX,YAAI,WAAW;AACb,uBAAa,SAAS;AAAA,QAAA;AAEZ,oBAAA;AAAA,MACd;AAAA,IAAA,GACC,CAAC,KAAK,OAAO,OAAO,GAAG,QAAQ,WAAW,KAAK,CAAC;AAEnD,UAAM,EAAE,GAAG,QAAQ,GAAG,cAAc,OAAO;AAC3C,UAAM,EAAE,GAAG,OAAO,GAAG,aAAa,OAAO;AAGvC,WAAAxE,2BAAA;AAAA,MAACyE,QAAAA,OAAO;AAAA,MAAP;AAAA,QACE,GAAG;AAAA,QACJ,SAAS;AAAA,QACT,MAAM;AAAA,QACN,SAAS;AAAA,QACT;AAAA,QACA,GAAG,WAAW,SAAS,QAAQ,IAAI;AAAA,QACnC,UAAU;AAAA,MAAA;AAAA,IACZ;AAAA,EAEJ;ACxCa,QAAA,iBAAmD,CAAC;AAAA,IAC/D;AAAA,IACA,MAAAhE;AAAA,IACA,OAAO;AAAA,IACP,UAAU;AAAA,EACZ,MACET,2BAAA;AAAA,IAACyE,QAAAA,OAAO;AAAA,IAAP;AAAA,MACC,GAAGhE;AAAA,MACH;AAAA,MACA,eAAc;AAAA,MACd,SAAQ;AAAA,MACR,SAAS,SAAS,YAAY;AAAA,MAC9B,UAAU;AAAA,QACR,QAAQ,EAAE,SAAS,EAAE;AAAA,QACrB,SAAS,EAAE,QAAQ;AAAA,MAAA;AAAA,IACrB;AAAA,EACF;AC0FW,QAAA,YAAyC,CAAC;AAAA,IACrD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAAyE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,MAAM;AACE,UAAA,gBAAgBjF,aAAmB,IAAI;AACvC,UAAA,OAAO,MAAM,MAAM,KAAK;AAC9B,UAAM,oBAAoB,SAAS,OAAO,IAAI,EAAE,SAAS,GAAG,IAAI;AAE1D,UAAA,aAAaS,MAAAA,QAAQ,MAAM;AAC/B,UAAI,UAAU;AACL,eAAA;AAAA,UACL,GAAG;AAAA,UACH,OAAQ,QAAQ,WAAY;AAAA,QAC9B;AAAA,MAAA,OACK;AACE,eAAA;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,QACT;AAAA,MAAA;AAAA,IAED,GAAA,CAAC,UAAU,UAAU,KAAK,CAAC;AAE9B,UAAM,UAAUR,MAAA;AAAA,MACd,CAACyF,WAAkB;AACjB,YAAI,CAACT,WAAU;AACNS,iBAAAA;AAAAA,QAAA;AAGT,eAAO,QAAQ,EAAE;AAAA,MACnB;AAAA,MACA,CAACT,WAAU,EAAE;AAAA,IACf;AAEA,UAAM,SAAShF,MAAA;AAAA,MACb,CAACsD,UAAwC;AACjC,cAAA,cAAc,OAAOA,MAAK,CAAC;AAEjC,YAAI,QAAQ;AACJ,gBAAA,aAAa,OAAOA,MAAK,CAAC;AAC1B,gBAAA,WAAW,aAAa,OAAO,UAAU;AAE/C,gBAAM,QAAQ5B,QAAAA,MACX,YAAY,WAAW,EACvB,YAAY,WAAW,EACvB,WAAW,UAAU,EACrB,SAAS,QAAQ,EACjB,SAAS,IAAI,EACb,UAAU,WAAW;AAExB,iBAAO,MAAM4B,KAAW;AAAA,QAAA,OACnB;AACL,gBAAM,gBAAgB,eAAe;AAC/B,gBAAA,eAAe,OAAO,OAAO;AAC7B,gBAAA,cAAc,OAAO,MAAM;AAC3B,gBAAA,eACJ,KAAK,IAAI,YAAY,CAAC,IAAI,YAAY,CAAC,CAAC,KAAK,IAAI,KAAK;AAEpD,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACJ,cAAI,cAAc;AAChB,8BAAkB,OAAO,UAAU;AAIjC,wBAAA,iBAAiB,kBAAkB,kBAAkB,IAAI;AAC3D,yBAAa,OAAOA,MAAK,CAAC,IAAI,KAAK,KAAK,MAAM;AAC9C,uBAAW,aAAa;AAAA,UAAA,OACnB;AACa,8BAAAY,QAAAA,YACf,OAAO,YAAY,EACnB,MAAM,WAAW,EACjB,UAAU;AAEX,wBAAA,iBAAiB,kBAAkB,kBAAkB,IAAI;AAE3D,gBAAI,UAAU,GAAG;AAEf,2BAAa,OAAOZ,MAAK,CAAC,IAAI,KAAK,KAAK;AACxC,yBAAW,aAAa,kBAAkB;AAAA,YAAA,WACjC,UAAU,WAAW,GAAG;AAEjC,yBAAW,YAAY,CAAC,IAAI,KAAK,KAAK;AACtC,2BAAa,WAAW,kBAAkB;AAAA,YAAA,OACrC;AAEL,2BAAa,OAAOA,MAAK,CAAC,IAAI,KAAK,KAAK,MAAM;AAC9C,yBAAW,aAAa;AAAA,YAAA;AAAA,UAC1B;AAGF,gBAAM,qBAAqB,WAAW;AACtC,gBAAM,YAAY,cAAc;AAChC,gBAAM,qBAAqB,YAAY;AACjC,gBAAA,0BACH,qBAAqB,sBAAsB;AAE9C,gBAAM,YAAY,qBAAqB;AACvC,gBAAM,aAAa,gBACf,aAAa,aAAa,YAC1B;AACE,gBAAA,WAAW,gBAAgB,aAAa,YAAY;AAC1D,gBAAM,YAAY,qBAAqB;AACvC,gBAAM,6BAA6B,iBAC9B,YAAY,aAAa,IAC1B;AAEJ,gBAAM,SAAS,KAAK;AACpB,iBAAO,IAAI,GAAG,GAAG,aAAa,YAAY,QAAQ;AAC3C,iBAAA;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA,WAAW;AAAA,YACX,aAAa;AAAA,YACb;AAAA,UACF;AAEA,iBAAO,OAAO,SAAS;AAAA,QAAA;AAAA,MAE3B;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAEA,UAAM,YAAYtD,MAAA;AAAA,MAChB,CAACyF,WAAkB;AACXiC,cAAAA,QAAO,QAAQjC,MAAK;AAG1B,cAAM,OAAO,cAAc,UACvB,EAAE,GAAG,cAAc,YACnB;AACU,sBAAA,UAAU,EAAE,GAAG,KAAK;AAElC,cAAM,CAAC,QAAQ,IAAI,IAAI,OAAO,OAAO;AACrC,cAAM,OAAO;AAAA,UACX,GAAG;AAAA,UACH,GAAG;AAAA,QACL;AAEA,cAAM,YAAY,OAAO;AAAA,UACvB,GAAG;AAAA,UACH,GAAG;AAAA,QAAA,CACJ;AAED,+CACGpF,gBACE,EAAA,UAAA;AAAA,UACC,SAAAP,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT;AAAA,cACA,MAAM;AAAA,YAAA;AAAA,UACR;AAAA,UAEFR,2BAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAK;AAAA,cACL,QAAQ;AAAA,gBACN,OAAO;AAAA,gBACP;AAAA,gBACA,eAAe;AAAA,cACjB;AAAA,cACA;AAAA,cACA,MAAM4H;AAAAA,cACN;AAAA,cACA,cAAc,CAAC,UACb,6CAAe;AAAA,gBACb,OAAO;AAAA,gBACP,aAAa;AAAA,cAAA;AAAA,cAGjB,cAAc,CAAC,UACb,6CAAe;AAAA,gBACb,OAAO;AAAA,gBACP,aAAa;AAAA,cAAA;AAAA,cAGjB,SAAS,CAAC,UACR,mCAAU;AAAA,gBACR,OAAO;AAAA,gBACP,aAAa;AAAA,cACd;AAAA,YAAA;AAAA,UAAA;AAAA,QAEL,GACF;AAAA,MAEJ;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAEA,2CACGrH,gBACE,EAAA,UAAA;AAAA,MAAA,UAAU,iBAAiB;AAAA,MAC3B2E,4CAAa,UAAS,EAAA,IAAI,GAAG,EAAE,aAAa,OAAO,kBAAmB,CAAA;AAAA,IAAA,GACzE;AAAA,EAEJ;AAEA,YAAU,eAAe;AAAA,IACvB,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,sCAAQ,gBAAe,EAAA;AAAA,IACvB,SAAS,MAAM;AAAA,IACf,cAAc,MAAM;AAAA,IACpB,cAAc,MAAM;AAAA,EACtB;AC7Pa,QAAA,kBAAqD,CAAC;AAAA,IACjE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAA3B;AAAA,IACA;AAAA,IACA,KAAAuC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,MAAM;AACJ,UAAM,CAAC,cAAc,eAAe,IAAI3F,MAAAA,SAAqB,IAAI;AACjE,UAAM,gBAAgBO,MAAAA,QAAQ,MAAM,SAAS,WAAW,CAAC,IAAI,CAAC;AAE9D,UAAM,YAAYR,MAAA;AAAA,MAChB,CACEuB,QACA,eACA,OACA,UACA,eACG;AACH,cAAM,SAAS,gBAAgB,QAAQ,QAAQ,aAAa,GAAGA,OAAM,CAAC;AAGpE,eAAAzB,+BAACO,MAAAA,UAAA,EACC,UAAAP,2BAAA;AAAA,UAACQ,UAAA;AAAA,UAAA;AAAA,YACC,SAASsF;AAAA,YACT,IAAI,aAAa,EAAE,IAAI,KAAK;AAAA,YAC5B;AAAA,YACA,MAAMrE;AAAA,YACN;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,OAAO,CAACA,YAAU,SAAS,EAAE,MAAM,OAAAA,SAAO,OAAO,GAAG,aAAa;AAAA,YACjE;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,aAhBW,KAkBf;AAAA,MAEJ;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACAqE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAEA,UAAM,iBAAiB5F,MAAA;AAAA,MACrB,CACEsD,OACA,eACA,UACA,eACG;AACH,eACGjD,2BAAAA,IAAAA,MAAAA,UAAA,EACE,UAAAiD,MAAK;AAAA,UAAI,CAAC,SAAS,aAClB,UAAU,SAAS,eAAe,UAAU,UAAU,UAAU;AAAA,QAAA,GAEpE;AAAA,MAEJ;AAAA,MACA,CAAC,SAAS;AAAA,IACZ;AAEA,UAAM,qBAAqBtD,MAAA;AAAA,MACzB,MAEKF,2BAAA,IAAAO,qBAAA,EAAA,WAAA,6CAAc,WACb,aAAa,IAAI,CAACyE,YAChBhF,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UAEC,SAASwE;AAAA,UACT,OAAO,OAAOA,QAAO,MAAM,KAAK;AAAA,QAAA;AAAA,QAF3BA,QAAO;AAAA,MAIf,CAAA,GACL;AAAA,MAEF,CAAC,cAAc,MAAM;AAAA,IACvB;AAGE,WAAAjE,2BAAA;AAAA,MAACP,UAAA;AAAA,MAAA;AAAA,QACC,SAAS+C;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA,cAAc,CAAC,UAAU,gBAAgB,MAAM,KAAK;AAAA,QACpD,cAAc,MAAM,gBAAgB,IAAI;AAAA,QACxC,OAAO,CAAC9B,QAAO,UAAU,SAAS,EAAE,MAAM,OAAAA,QAAO,OAAO,aAAa;AAAA,QACrE;AAAA,QACA;AAAA,QAEC,UAAA;AAAA,UAAA,gBACI,KAAwC,IAAI,CAAC,WAAW,yCACxD,KACE,EAAA,UAAA;AAAA,YACG,UAAU;AAAA,YACV,KAAK;AAAA,YACL,UAAU,KAAK;AAAA,YACf;AAAA,UALE,EAAA,GAAA,aAAa,KAAK,EAO1B,CACD,IACC;AAAA,YACE;AAAA,YACA;AAAA,YACA,KAAK;AAAA,UACT;AAAA,UACD,mBAAmB;AAAA,QAAA;AAAA,MAAA;AAAA,IACtB;AAAA,EAEJ;AAEA,kBAAgB,eAAe;AAAA,IAC7B,aAAa,QAAQ,UAAU,CAAC;AAAA,IAChC,wCAAU,aAAY,EAAA,wCAAU,cAAa,EAAA,cAAc,KAAM,CAAA,GAAI;AAAA,IACrE,oCAAM,WAAU,EAAA;AAAA,IAChB,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,UAAU,IAAI,KAAK;AAAA,IACnB,MAAM;AAAA,EACR;ACpMa,QAAA,iBAAmD,CAAC;AAAA,IAC/D;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd,wCAAU,iBAAgB,EAAA;AAAA,IAC1B,sCAAQ,YAAW,EAAA;AAAA,IACnB,aAAa;AAAA,IACb,WAAW,IAAI,KAAK;AAAA,EACtB,MAAM;AACJ,UAAM,YAAYf,MAAA;AAAA,MAChB,OAAO,EAAE,GAAG,2BAA2B,IAAI,6BAAM,UAAS,CAAI,EAAA;AAAA,MAC9D,CAAC,6BAAM,KAAK;AAAA,IACd;AAEA,UAAM,cAAcA,MAAA;AAAA,MAClB,OAAO,EAAE,GAAG,2BAA2B,IAAI,iCAAQ,UAAS,CAAI,EAAA;AAAA,MAChE,CAAC,iCAAQ,KAAK;AAAA,IAChB;AAEA,UAAM+G,aAAYvH,MAAA;AAAA,MAChB,CAAC,WAAW;AACV,cAAM,eAAe,KAAK,IAAI,WAAW,UAAU,KAAK,IAAI,KAAK;AAC7D,YAAA;AACA,YAAA,UAAU,SAAS,YAAY;AAC3B,gBAAA,gBAAgB,YAAY,SAAS;AAEvC,cAAA;AACJ,cAAI,eAAe;AACP,sBAAA;AAAA,cACR;AAAA,cACA,CAAC,OAAO,GAAG;AAAA,cACX,CAAC,OAAO,GAAG;AAAA,YACb;AAAA,UAAA,OACK;AACK,sBAAA;AAAA,cACR;AAAA,cACA,CAAC,OAAO,GAAG;AAAA,YACb;AAAA,UAAA;AAGF,cAAI,cAAc;AACP,qBAAAkE,QAAA,UAAA,EACN,MAAM,CAAC,GAAG,IAAI,KAAK,EAAE,CAAC,EACtB,OAAO,OAAgB;AAAA,UAAA,OACrB;AAGI,qBAAAsD,QAAAA,aACN,MAAM,CAAC,YAAY,QAAQ,CAAC,EAC5B,OAAO,OAAgB;AAAA,UAAA;AAAA,QAC5B,OACK;AACL,gBAAM,UAAU,SAAS,QAAQ,CAAC,MAAM,EAAE,CAAC;AAElC,mBAAAtD,QAAAA,YACN,MAAM,CAAC,YAAY,QAAQ,CAAC,EAC5B,OAAO,OAAgB;AAAA,QAAA;AAGrB,eAAA;AAAA,MACT;AAAA,MACA,CAAC,UAAU,MAAM,UAAU,YAAY,MAAM,UAAU;AAAA,IACzD;AAEA,UAAM,YAAYlE,MAAA;AAAA,MAChB,CAAC,SAA2ByH,cAAqB,gBAAwB;AACjE,cAAA,gBAAgB,YAAY,SAAS;AACvC,YAAA;AACJ,YAAI,eAAe;AACP,oBAAA,qBAAqB,SAAmC,IAAI;AAAA,QAAA,OACjE;AACL,oBAAU,sBAAsB,OAAkC;AAAA,QAAA;AAGpE,cAAM,UAAU,WAAW,EAAE,MAAM,SAAS,QAAQ,OAAO;AAE3D,cAAM,SAAS,gBAAgBA,cAAa,aAAa,OAAO;AAE1D,cAAA,SAASF,WAAU,OAAO;AAEzB,eAAA;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA,CAACA,YAAW,YAAY,IAAI;AAAA,IAC9B;AAEA,UAAM,cAAcvH,MAAA;AAAA,MAClB,CAAC,EAAE,YAAY,aAAa,IAAA+E,UAAmC;AAC7D,cAAM,cAAc,KAAK,IAAI,YAAY,WAAW,IAAI;AACxD,cAAM,EAAE,QAAQ,QAAQ,QAAY,IAAA;AAAA,UAClC;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAEA,+CACG1E,gBACE,EAAA,UAAA;AAAA,UACC,QAAAP,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT;AAAA,cACA,QAAQ;AAAA,cACR,OAAO;AAAA,cACP;AAAA,cACA;AAAA,cACA;AAAA,YAAA;AAAA,UACF;AAAA,UAEFR,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT,IAAIyE;AAAAA,cACJ,MAAM;AAAA,cACN,QAAQ;AAAA,cACR,OAAO;AAAA,cACP;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,GACF;AAAA,MAEJ;AAAA,MACA,CAAC,MAAM,MAAM,UAAU,WAAW,aAAa,QAAQ,UAAU;AAAA,IACnE;AAGE,WAAAjF,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAc;AAAA,QACd,cAAc;AAAA,QACd,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,QAEC,UAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAEJ;AC7Ga,QAAA,iBAAmD,CAAC;AAAA,IAC/D;AAAA,IACA,UAAAkF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAA3B,0CAAW,cAAa,CAAA,CAAA;AAAA,EAC1B,MAAM;AAKE,UAAA,eAAe7C,MAAAA,QAAQ,MAAM;AAC1B,aAAAkB,QAAA,IAAA,EACJ,YAAY,WAAW,EACvB,YAAY,WAAW,EACvB,aAAa,YAAY;AAAA,IAC3B,GAAA,CAAC,aAAa,aAAa,YAAY,CAAC;AAErC,UAAA,aAAalB,MAAAA,QAAQ,MAAM;AAC/B,YAAM,UAAmB;AAAA;AAAA,QAEvB,MAAM,QAAQ,CAAC;AAAA,QACf;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAGE,aAAAV,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA,KAAK;AAAA,UACL,MAAM;AAAA,UACN;AAAA,UACA;AAAA,UACA,UAAAkF;AAAA,UACA;AAAA,UACA,SAAA3B;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA,GAED;AAAA,MACD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA2B;AAAA,MACA;AAAA,MACA3B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAED,2CACG,KACE,EAAA,UAAA;AAAA,MAAA,QAASvD,2BAAA,IAAA,UAAA,EAAO,MAAY,GAAG,aAAa;AAAA,MAC5C;AAAA,IAAA,GACH;AAAA,EAEJ;;;;;ACpJa,QAAA,mBAAuD,CAAC;AAAA,IACnE;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,MAAM;AAAA,EAClB,MAAM;AACE,UAAAgB,SAAQ,YAAY,KAAK,GAA6B;AAG1D,WAAAhB,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,GAAE;AAAA,QACF,GAAG;AAAA,QACH,YAAW;AAAA,QAEX,mBAAmB;AAAA,QACnB,SAAS,CAAC,gBAAgB,QAAQ,EAAE,MAAM,aAAa;AAAA,QACvD,WAAW,WAAW,WAAWiC,MAAI,UAAU;AAAA,QAE9C,UAAAjB;AAAA,MAAA;AAAA,IACH;AAAA,EAEJ;;;;;AC/Ba,QAAA,wBAAiE,CAAC;AAAA,IAC7E;AAAA,IACA;AAAA,EACF,MAAM;AACJ,UAAM,MAAM,SAAS;AAAA,MACnB,IAAI,KAAK;AAAA,IAAA,CACV;AAGC,WAAAhB,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAG;AAAA,QACH,GAAE;AAAA,QACF,GAAE;AAAA,QACF,YAAW;AAAA,QACX,WAAW,WAAW,WAAWiC,MAAI,UAAU;AAAA,QAC/C;AAAA,MAAA;AAAA,IACF;AAAA,EAEJ;ACjCa,QAAA,sBAAwD,CACnE,UACIjC,2BAAA,IAAA,gBAAA,EAAe,UAAU,OAAO,UAAU,MAAO,GAAG,MAAO,CAAA;ACgGpD,QAAA,oBAAyD,CAAC;AAAA,IACrE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,0CAAY,qBAAoB,EAAA;AAAA,IAChC,0CAAY,gBAAe,EAAA;AAAA,IAC3B,OAAAgB,wCAAS,kBAAiB,EAAA;AAAA,IAC1B,YAAA6G,6CAAc,uBAAsB,EAAA;AAAA,IACpC,cAAc,CAAC,SAAS;AAAA,IACxB;AAAA,IACA,UAAU;AAAA,IACV,gBAAgB;AAAA,IAChB,GAAG;AAAA,EACL,MAAM;AACE,UAAA,EAAE,SAAS,OAAO,QAAQ,QAAQ,OAAO,IAAInH,MAAAA,QAAQ,MAAM;AAC/D,UAAI,OAAO;AACX,UAAIoH,WAAU,KAAK;AAEnB,UAAI,MAAM,QAAQ,KAAK,SAAS,eAAe;AACtC,eAAA,MAAM,QAAQA,WAAU,eAAe;AACpC,kBAAA;AACRA,qBAAU,KAAK,KAAK,KAAK,SAAS,IAAI;AAAA,QAAA;AAAA,MACxC;AAGF,YAAMC,UAAc3D,QAAAA,UAAU;AAC9B2D,cAAO,OAAOC,cAAMF,QAAO,CAAC;AAC5BC,cAAO,WAAW,CAAC,GAAG,MAAM,KAAK,GAAG,GAAG;AAEvC,YAAME,UAAc7D,QAAAA,UAAU;AAC9B6D,cAAO,OAAOD,cAAM,IAAI,CAAC;AACzBC,cAAO,WAAW,CAAC,GAAG,MAAM,MAAM,GAAG,GAAG;AAEjC,aAAA;AAAA,QACL,SAAAH;AAAAA,QACA,QAAAC;AAAAA,QACA,QAAAE;AAAAA,QACA,OAAOF,QAAO,UAAU;AAAA,QACxB,QAAQE,QAAO,UAAU;AAAA,MAC3B;AAAA,IAAA,GACC,CAAC,KAAK,QAAQ,eAAe,MAAM,QAAQ,MAAM,KAAK,CAAC;AAE1D,UAAM,cAAc/H,MAAA;AAAA,MAClB,CAACuB,QAA8B,UAAkB;;AACzC,cAAA,eAAe,MAAMA,OAAM,IAAc;AAEzC,cAAA,cACHtC,QAAAA,IAAI,CAAC,QAAQ,UAAU,GAAG,SAAS,UAAU,CAAC,CAAC,IAAe;AAEjE,cAAM,cAAc,cAAc;AAElC,cAAM,cAAc,SAAS;AAEvB,cAAA,IAAI,OAAO,QAAQ,OAAO;AAChC,cAAM,IAAI,OAAO,KAAK,MAAM,QAAQ,OAAO,CAAC;AAEtC,cAAA,UAAU,IAAI,QAAQ;AACtB,cAAA,UAAU,IAAI,SAAS;AAC7B,cAAM,MAAM2F,eAAA,YAAW,KAAArD,OAAM,QAAN,mBAAW,gBAAgB;AAElD,+CACG,KAAY,EAAA,WAAW,aAAa,OAAO,KAAK,OAAO,KACrD,UAAA;AAAA,UAAA,YACCO,mBAAa,UAAU;AAAA,YACrB,IAAI,GAAG,EAAE,IAAI,GAAG;AAAA,YAChB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UAAA,CACD;AAAA,UACF,YACCA,mBAAa,UAAU;AAAA,YACrB,IAAI,GAAG,EAAE,IAAI,GAAG;AAAA,YAChB;AAAA,YACA;AAAA,YACA;AAAA,YACA,UAAU;AAAA,YACV,MAAMP;AAAA,YACN,OAAO,SAAS;AAAA,cACd;AAAA,cACA;AAAA,cACA,OAAAA;AAAA,cACA;AAAA,YACD,CAAA;AAAA,UAAA,CACF;AAAA,UACFoG,eAAc7F,MAAAA,aAAa6F,aAAY,EAAE,MAAMpG,QAAO;AAAA,UACtDT,UAASgB,mBAAahB,QAAO,EAAE,MAAMS,QAAO,QAAQ,YAAa,CAAA;AAAA,QAAA,EAAA,GAzB5D,GA0BR;AAAA,MAEJ;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA6G;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAEA,WAAQ7H,2BAAAA,IAAAO,MAAAA,UAAA,EAAU,UAAK,KAAA,IAAI,WAAW,GAAE;AAAA,EAC1C;ACtLa,QAAA,wBAAiE,CAAC;AAAA,IAC7E;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf,WAAW;AAAA,IACX,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,WAAW;AAAA,IACX,SAAAgD,0CAAW,cAAa,EAAA;AAAA,IACxB,GAAG;AAAA,EACL,MAAM;AACE,UAAA,eAAe7C,MAAAA,QAAQ,MAAM;AAC1B,aAAAkB,QAAA,IAAA,EACJ,YAAY,WAAW,EACvB,YAAY,WAAW,EACvB,aAAa,YAAY;AAAA,IAC3B,GAAA,CAAC,aAAa,aAAa,YAAY,CAAC;AAErC,UAAA,cAAclB,MAAAA,QAAQ,MAAM;AAChC,UAAI,eAAe;AAEV,eAAA,UACPe,QACA,OACa;AACb,cAAMpC,SAAQoC,OAAM;AACpB,cAAM,gBAAgB;AACtB,cAAM,cAAc,gBAAgB,MAAMpC,MAAK,IAAI;AACpC,uBAAA;AAEf,cAAM,UAAmB;AAAA,UACvB,MAAMoC;AAAA,UACN,YAAY;AAAA,UACZ,UAAU;AAAA,UACV;AAAA,UACA,OAAApC;AAAA,UACA;AAAA,QACF;AAEA,cAAM,QAAQ,SAAS;AAAA,UACrB;AAAA,UACA,MAAM,CAAC,IAAI;AAAA,UACX,OAAAoC;AAAA,UACA;AAAA,UACA,QAAQ,CAAC,IAAI;AAAA,UACb,eAAe;AAAA,QAAA,CAChB;AAGC,eAAA0F,sBAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA,SAAA5D;AAAA,YACC,GAAG;AAAA,YACJ,IAAI9B,OAAM,IAAI,eAAe;AAAA,YAC7B,KAAKA,OAAM,IAAI,eAAe;AAAA,YAC9B,KAAK;AAAA,YACL,MAAM;AAAA,YACN;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAIG,aAAA,KAAK,KAAK,IAAI,SAAgB;AAAA,IAAA,GACpC;AAAA,MACD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA8B;AAAA,IAAA,CACD;AAEM,WAAAvD,2BAAAA,IAAC,KAAY,EAAA,UAAA,YAAA,GAAL,EAAiB;AAAA,EAClC;;;;;AC/Fa,QAAA,+BAET,CAAC,EAAE,OAAAgB,QAAO,WAAW,UAAU,QACjChB,2BAAAA,IAAAO,WAAA,UAAA,EACG,UACCS,UAAAhB,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,GAAE;AAAA,MACF,GAAG;AAAA,MACH,YAAW;AAAA,MACX,mBAAkB;AAAA,MAClB,WAAW,WAAW,WAAWiC,MAAI,iBAAiB;AAAA,MAErD,UAAAjB;AAAA,IAAA;AAAA,EACH,EAEJ,CAAA;ACoEF,QAAM,oBAAoB,CACxBS,WACkC;AAC3B,WAAA,MAAM,QAAQA,OAAM,IAAI;AAAA,EACjC;AAEa,QAAA,2BAET,CAAC;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAYzB,2BAAA,IAAA,gBAAA,EAAe,UAAU,MAAM,UAAU,OAAO;AAAA,IAC5D,WAAWA,2BAAAA,IAAC,gBAAe,EAAA,UAAU,KAAM,CAAA;AAAA,IAC3C,kBAAkBA,2BAAAA,IAAC,uBAAsB,EAAA,UAAU,KAAM,CAAA;AAAA,IACzD,OAAAgB,wCAAS,8BAA6B,EAAA;AAAA,IACtC;AAAA,IACA,cAAc,CAAC,SAAS;AAAA,IACxB,aAAa;AAAA,IACb,aAAa;AAAA,EACf,MAAM;AACJ,UAAM,SAAS,KAAK,IAAI,OAAO,MAAM,IAAI;AACzC,UAAM,cAAc,UAAU,IAAI,KAAK,IAAI,YAAY,CAAC;AAExD,UAAM,QAAQoD,QAAAA,UAAU,EACrB,OAAO4D,QAAA,MAAM,KAAK,MAAM,CAAC,EACzB,MAAM,CAAC,aAAa,MAAM,CAAC,EAC3B,aAAa,UAAU;AAE1B,UAAM,iBAAiB9H,MAAA;AAAA,MACrB,CAAC,aAAqByH,iBAAwB;AAE1C,eAAA,YACA3F,mBAAa,UAAU;AAAA,UACrB;AAAA,UACA,aAAA2F;AAAAA,UACA;AAAA,UACA;AAAA,QAAA,CACD;AAAA,MAEL;AAAA,MACA,CAAC,UAAU,YAAY,QAAQ;AAAA,IACjC;AAEA,UAAM,iBAAiBzH,MAAA;AAAA,MACrB,CACE,aACAyH,cACA,cACAlG,QACA,UACG;AACH,cAAM,QAAQ,SAAS,EAAE,MAAM,aAAa,OAAAA,QAAO,OAAO;AAGxD,eAAA,YACAO,mBAAa,UAAU;AAAA,UACrB;AAAA,UACA,aAAA2F;AAAAA,UACA;AAAA,UACA,UAAU;AAAA,UACV,MAAMlG;AAAA,UACN;AAAA,QAAA,CACD;AAAA,MAEL;AAAA,MACA,CAAC,UAAU,YAAY,MAAM,WAAW;AAAA,IAC1C;AAEA,UAAM,mBAAmBvB,MAAA;AAAA,MACvB,CACE,aACAyH,cACAlG,QACA,UACG;AAED,eAAAzB,2BAAAA,IAAAO,WAAAA,UAAA,EACG,UACC,mBAAAyB,MAAA,aAAa,iBAAiB;AAAA,UAC5B;AAAA,UACA,aAAA2F;AAAAA,UACA;AAAA,UACA;AAAA,UACA,QAAO,+BAAQ,YAAU,+BAAQ,WAAU;AAAA,UAC3C,MAAMlG;AAAA,QACP,CAAA,GACL;AAAA,MAEJ;AAAA,MACA,CAAC,iBAAiB,aAAa,YAAY,KAAK;AAAA,IAClD;AAEA,UAAM,sBAAsBvB,MAAA;AAAA,MAC1B,CAACuB,QAAuB,UAAkB;;AAClC,cAAA,cAAc,MAAM,KAAY;AAChCkG,cAAAA,eAAc,cAAc,MAAM,UAAU;AAElD,+CACG,KACE,EAAA,UAAA;AAAA,UAAA,eAAe,aAAaA,YAAW;AAAA,UACvC,kBAAkBlG,MAAK,IACpB,iBAAiB,aAAakG,cAAalG,QAAO,KAAK,IACvD;AAAA,YACA;AAAA,YACAkG;AAAAA,cACA,oCAAQ,WAAR,+BAAiBlG,OAAM,YACnB,oCAAQ,OAAR,+BAAaA,OAAM,UACnB,MAAMA,OAAM,IAAI;AAAA,YACpBA;AAAA,YACA;AAAA,UAAA;AAAA,QAXE,EAAA,GAAAA,OAAM,IAAI,gBAalB;AAAA,MAEJ;AAAA,MACA,CAAC,OAAO,gBAAgB,kBAAkB,gBAAgB,KAAK;AAAA,IACjE;AAGE,WAAAzB,2BAAAA,IAAAO,WAAAA,UAAA,EACE,UAACQ,2BAAAA,KAAA,KAAA,EAAE,WAAW,aAAa,QAAQ,CAAC,KAAK,SAAS,CAAC,KAChD,UAAA;AAAA,MAAA,KAAK,IAAI,mBAAmB;AAAA,MAC5B;AAAA,MACAC;AAAA,IAAA,EAAA,CACH,EACF,CAAA;AAAA,EAEJ;;;;;ACrNa,QAAA,qCAET,CAAC,EAAE,OAAAA,QAAO,WAAW,UAAU,QACjChB,2BAAAA,IAAAO,WAAA,UAAA,EACG,UACCS,UAAAhB,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,GAAE;AAAA,MACF,GAAG,UAAU;AAAA,MACb,YAAW;AAAA,MACX,mBAAkB;AAAA,MAClB,WAAW,WAAW,WAAWiC,MAAI,uBAAuB;AAAA,MAE3D,UAAAjB;AAAA,IAAA;AAAA,EACH,EAEJ,CAAA;ACeW,QAAA,cAAoC,CAAC;AAAA,IAChD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,WAAW;AAAA,IACX,aAAa;AAAA,IACb,WAAW,KAAK,KAAK;AAAA,IACrB,wCAAU,mBAAkB,EAAA;AAAA,IAC5B;AAAA,EACF,MAAM;AACE,UAAA,QAAQV,gBAAM,EAAE;AAEtB,UAAM,eAAeJ,MAAA;AAAA,MACnB,CAAC,EAAE,aAAa,iBAAoC;AAC9C,YAAA;AAEA,YAAA,MAAM,QAAQ,QAAQ,GAAG;AAC3B,kBAAQ,SAAS;AAAA,YAAI,CAAC,KAAK,UACzB2B,QAAA,YAAA,EACG,OAAO,EAAC,qCAAW,YAAU,qCAAW,OAAM,UAAU,GAAG,CAAC,EAC5D,MAAM,CAAC,YAAY,QAAQ,CAAC;AAAA,UACjC;AAAA,QACS,WAAA,MAAM,QAAQ,QAAQ,GAAG;AAClC,kBAAQ,SAAS;AAAA,YAAI,CAAC,KAAK,UACzBA,QAAA,YAAA,EACG,OAAO,CAAC,MAAK,qCAAW,YAAU,qCAAW,OAAM,QAAQ,CAAC,EAC5D,MAAM,CAAC,YAAY,QAAQ,CAAC;AAAA,UACjC;AAAA,QAAA,OACK;AACL,kBAAQA,QAAY,YAAA,EACjB,OAAO,CAAC,UAAU,QAAQ,CAAC,EAC3B,MAAM,CAAC,YAAY,QAAQ,CAAC;AAAA,QAAA;AAGjC,eAAOG,MAAAA,aAAa,QAAQ;AAAA,UAC1B,IAAI;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,OAAO;AAAA,UACP,QAAQ;AAAA,QAAA,CACT;AAAA,MACH;AAAA,MACA,CAAC,MAAM,UAAU,UAAU,UAAU,QAAQ,YAAY,KAAK;AAAA,IAChE;AAGE,WAAAhC,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAc;AAAA,QACd,cAAc;AAAA,QACd;AAAA,QACA;AAAA,QAEC,UAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAEJ;;;;;ACGA,QAAM,YAAY,CAAC8D,IAAAA,OAAO,EAAE,UAAU,GAAG,WAAW,EAAE,CAAC,CAAC;AAE3C,QAAA,cAA6C,CAAC;AAAA,IACzD,KAAK;AAAA,IACL,KAAK;AAAA,IACL,SAAS;AAAA,IACT,SAAAP,0CAAW,cAAa,EAAA;AAAA,IACxB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAAN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,MAAM;AACJ,UAAM,CAAC,QAAQ,SAAS,IAAI9C,MAAAA,SAAS,KAAK;AACpC,UAAA,OAAOF,aAA8B,IAAI;AAE/C,UAAM,EAAE,YAAY,YAAY,IAAI,eAAe;AAAA,MACjD,eAAe,CAAC,UAAU;AACxB,kBAAU,IAAI;AACD,qBAAA;AAAA,UACX,OAAO;AAAA,UACP,aAAa;AAAA,QAAA,CACd;AAAA,MACH;AAAA,MACA,cAAc,CAAC,UAAU;AACvB,kBAAU,KAAK;AACF,qBAAA;AAAA,UACX,OAAO;AAAA,UACP,aAAa;AAAA,QAAA,CACd;AAAA,MAAA;AAAA,IACH,CACD;AAEK,UAAA,eAAe,CAAC,UAAsB;AAClC,cAAA;AAAA,QACN,OAAO;AAAA,QACP,aAAa;AAAA,MAAA,CACd;AAAA,IACH;AAEA,UAAM,cAAcS,MAAA;AAAA,MAClB,OAAO;AAAA,QACL,GAAG,KAAK;AAAA,QACR,GAAG,GAAG,KAAK,GAAG,MAAM,KAAK,CAAC;AAAA,QAC1B;AAAA,MAAA;AAAA,MAEF,CAAC,IAAI;AAAA,IACP;AAEM,UAAA,aAAaA,MAAAA,QAAQ,MAAM;AAC/B,UAAI,UAAU;AACL,eAAA;AAAA,UACL,GAAG;AAAA,UACH,OAAQ,YAAY,YAAa;AAAA,QACnC;AAAA,MAAA,OACK;AACE,eAAA;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,QACT;AAAA,MAAA;AAAA,IAED,GAAA,CAAC,UAAU,WAAW,SAAS,CAAC;AAEnC,UAAM,SAAS,uBAAuB,EAAE,OAAO,UAAA,GAAa,IAAI;AAChE,UAAM,gBAAgB,SAAS;AACzB,UAAA,gBACJ,UAAU,CAAC,gBACP,OAAO,UAAU,IAAI,EAAE,SAAS,CAAC,IACjC,UAAU;AAEhB,UAAM,gBAAgBA,MAAA;AAAA,MACpB,MAAM,aAAa,EAAE,GAAG,aAAa,MAAM,MAAM;AAAA,MACjD,CAAC,WAAW;AAAA,IACd;AAEA,UAAM,iBAAiBA,MAAA;AAAA,MACrB,MAAOuC,UAASA,QAAO,IAAK,IAAI;AAAA,MAChC,CAAC,MAAMA,OAAM;AAAA,IACf;AAEA,2CACG1C,gBACC,EAAA,UAAA;AAAA,MAACP,2BAAA,IAAA,KAAA,EAAE,KAAK,MACL,UACC,iBAAAA,2BAAA;AAAA,QAACyE,QAAAA,OAAO;AAAA,QAAP;AAAA,UACE,GAAG;AAAA,UACJ;AAAA,UACA,QAAQ;AAAA,UACR,OAAO,EAAE,GAAG,OAAO,OAAO,OAAO;AAAA,UACjC,WAAW,iCAAQ;AAAA,UACnB,WAAW,aAAa,CAAC,KAAK,CAAC;AAAA,UAC/B,SAAS;AAAA,YACP,SAAS;AAAA,UACX;AAAA,UACA,SAAS;AAAA,YACP,SAAS;AAAA,UACX;AAAA,UACA,MAAM;AAAA,YACJ,SAAS;AAAA,UACX;AAAA,UACA;AAAA,UACA,eAAe;AAAA,UACf,cAAc;AAAA,UACd,SAAS;AAAA,UACT,UAAU;AAAA,UACV,cAAY;AAAA,UACZ,MAAK;AAAA,UAEJ,UAAA;AAAA,QAAA;AAAA,MAAA,IAGHzE,2BAAA;AAAA,QAACyE,QAAAA,OAAO;AAAA,QAAP;AAAA,UACE,GAAG;AAAA,UACJ;AAAA,UACA,QAAQ;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,OAAO,EAAE,GAAG,OAAO,OAAO,OAAO;AAAA,UACjC,WAAW,WAAWxC,MAAI,MAAM,OAAO,SAAS;AAAA,UAChD,SAAS;AAAA,YACP,SAAS;AAAA,UACX;AAAA,UACA,SAAS;AAAA,YACP,SAAS;AAAA,UACX;AAAA,UACA,MAAM;AAAA,YACJ,SAAS;AAAA,UACX;AAAA,UACA;AAAA,UACA,eAAe;AAAA,UACf,cAAc;AAAA,UACd,SAAS;AAAA,UACT,UAAU;AAAA,UACV,cAAY;AAAA,UACZ,MAAK;AAAA,QAAA;AAAA,MAAA,GAGX;AAAA,MACCsB,YAAW,CAAEA,SAAQ,MAAc,YAAY,CAAC,iBAC/CvD,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC,SAAS+C;AAAA,UACT,SAAS;AAAA,UACT,WAAYA,SAAQ,MAAc,aAAa;AAAA,UAC/C,WAAW;AAAA,UACX,OAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IACT,GAEJ;AAAA,EAEJ;ACxNa,QAAA,gBAAiD,CAAC,UAAU;AACjE,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,IACE,kBAAkB,8BAA8B,KAAK;AAEzD,UAAM,cAAc;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACM,UAAA,SAAS,OAAO,UAAU;AAC1B,UAAA,QAAQ,OAAO,UAAU;AACzB,UAAA,YAAY,CAAC,GAAG,OAAO,UAAU,GAAG,OAAO,OAAQ,CAAA,EAAE;AAE3D,UAAM,aAAa,CAAC;AAAA,MAClB;AAAA,MACA,MAAA2E;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAA5G;AAAAA,MACA,QAAAD;AAAAA,MACA,WAAA8G;AAAAA,IAAA,MACI;AACE,YAAA,IAAI,OAAO,IAAI,GAAG;AAClB,YAAA,IAAI,OAAOD,MAAK,CAAC;AACjB,YAAA,QAAQ,qBAAqBA,OAAM,WAAW;AAGlD,aAAAlI,2BAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UAEC,SAAS;AAAA,UACT;AAAA,UACA,WAAW,WAAW;AAAA,UACtB,WAAW2H;AAAAA,UACX;AAAA,UACA;AAAA,UACA,MAAM,+BAAO;AAAA,UACb,QAAQ,+BAAO;AAAA,UACf,OAAO7G;AAAAA,UACP,QAAQD;AAAAA,UACR,MAAM6G;AAAA,UACN;AAAA,QAAA;AAAA,QAZK,GAAG,EAAE,IAAI,QAAQ,IAAI,SAAS;AAAA,MAarC;AAAA,IAEJ;AAGE,WAAAlI,2BAAA,IAACO,kBACE,UAAK,KAAA;AAAA,MAAI,CAAC,KAAK,aACd,IAAI,KAAK;AAAA,QAAI,CAAC2H,OAAM,cAClB,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,MAAAA;AAAA,UACA;AAAA,UACA;AAAA,QACD,CAAA;AAAA,MAAA;AAAA,IACH,GAEJ;AAAA,EAEJ;AAEO,QAAM,+BAA4D;AAAA,IACvE,SAAS;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,aAAa,CAAC,0BAA0B,SAAS;AAAA,IACjD,qCAAO,aAAY,CAAA,CAAA;AAAA,EACrB;ACtFa,QAAA,UAAqC,CAAC;AAAA,IACjD,OAAO,CAAC;AAAA,IACR,UAAU;AAAA,IACV,SAASlI,2BAAAA,IAAC,eAAc,EAAA,SAAS,IAAK,CAAA;AAAA,IACtC,QACEA,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,UAAU;AAAA,QACV,YACEA,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAM;AAAA,YACN,OACEA,2BAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACE,GAAG;AAAA,gBACJ,SAAS;AAAA,cAAA;AAAA,YAAA;AAAA,UACX;AAAA,QAAA;AAAA,MAEJ;AAAA,IAEJ;AAAA,IAEF,QACEA,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,UAAU;AAAA,QACV,YACEA,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAM;AAAA,YACN,OACEA,2BAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACE,GAAG;AAAA,gBACJ,SAAS;AAAA,cAAA;AAAA,YAAA;AAAA,UACX;AAAA,QAAA;AAAA,MAEJ;AAAA,IAEJ;AAAA,IAEF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,MAAM;AACJ,UAAM,aAAaU,MAAA;AAAA,MACjB,OAAO,EAAE,GAAG,6BAA6B,GAAG,MAAM,MAAM;AAAA,MACxD,CAAC,MAAM,KAAK;AAAA,IACd;AACA,UAAM,aAAaA,MAAA;AAAA,MACjB,OAAO,EAAE,GAAG,6BAA6B,GAAG,MAAM,MAAM;AAAA,MACxD,CAAC,MAAM,KAAK;AAAA,IACd;AACA,UAAM,cAAcA,MAAA;AAAA,MAClB,OAAO,EAAE,GAAG,8BAA8B,GAAG,OAAO,MAAM;AAAA,MAC1D,CAAC,OAAO,KAAK;AAAA,IACf;AAEA,UAAM,gBAAgBR,MAAA;AAAA,MACpB,CAAC,aAAqB,eAAuB;AACrC,cAAA,aAAa,qBAAqB,IAAI;AAEtC,cAAA,UACJ,WAAW,UAAU,SAAS,YAAY,CAAC,MAAM,EAAE,GAAG;AAExD,cAAM,SAASkE,QAAA,UAAA,EACZ,MAAM,CAAC,GAAG,UAAU,CAAC,EACrB,OAAO,OAAO,EACd,aAAa,YAAY,WAAW,GAAG;AAEpC,cAAA,UACJ,WAAW,UACX;AAAA,UACE;AAAA,UACA,CAAC,MAAM,EAAE;AAAA,UACT,CAAC,MAAM,EAAE;AAAA,QACX;AAEF,cAAM,SAASA,QAAA,UAAA,EACZ,OAAO,OAAO,EACd,MAAM,CAAC,aAAa,CAAC,CAAC,EACtB,aAAa,YAAY,WAAW,GAAG;AAEnC,eAAA;AAAA,UACL;AAAA,UACA;AAAA,UACA,MAAM;AAAA,QACR;AAAA,MACF;AAAA,MACA,CAAC,MAAM,WAAW,QAAQ,YAAY,SAAS,WAAW,MAAM;AAAA,IAClE;AAEA,UAAM,cAAclE,MAAA;AAAA,MAClB,CAAC,mBAA6C;AAC5C,cAAM,EAAE,YAAY,aAAa,YAAY,IAAA+E,KAAI,eAC/C;AACI,cAAA;AAAA,UACJ;AAAA,UACA;AAAA,UACA,MAAM;AAAA,QAAA,IACJ,cAAc,aAAa,UAAU;AAEzC,+CACG1E,gBACC,EAAA,UAAA;AAAA,UAAAP,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,OAAO;AAAA,cACP,OAAO;AAAA,cACP,YAAY,aAAa,YAAY;AAAA,cACrC,oBAAoB,CAAC,UAAU,WAAW,cAAc,KAAK;AAAA,YAAA;AAAA,UAC/D;AAAA,UACAR,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,OAAO;AAAA,cACP,OAAO;AAAA,cACP,YAAY,aAAa,YAAY;AAAA,cACrC,oBAAoB,CAAC,UAAU,WAAW,YAAY,KAAK;AAAA,YAAA;AAAA,UAC7D;AAAA,UACC,iBACC,cAAc,IAAI,CAAC,MAAM,MACvBR,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cAEC,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,OAAO;AAAA,cACP,YAAY,aAAa,YAAY;AAAA,cACrC,oBAAoB,CAAC,UAAU,WAAW,cAAc,KAAK;AAAA,YAAA;AAAA,YALxD;AAAA,UAAA,CAOR;AAAA,UACF,cACCR,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT,IAAI,eAAeyE,GAAE;AAAA,cACrB,MAAM;AAAA,cACN;AAAA,cACA;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,GAEJ;AAAA,MAEJ;AAAA,MACA,CAAC,eAAe,eAAe,QAAQ,OAAO,KAAK;AAAA,IACrD;AAGE,WAAAjF,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAc,cAAc,UAAU;AAAA,QACtC,cAAc,cAAc,UAAU;AAAA,QACtC;AAAA,QAEC,UAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAEJ;AC1LO,WAAS,OAAO,UAAU;AAC/B,UAAM,SAAS,OAAO,UAAU,SAAS,KAAK,QAAQ;AAGtD,QACE,oBAAoB,QACnB,OAAO,aAAa,YAAY,WAAW,iBAC5C;AAEA,aAAO,IAAI,SAAS,YAAY,CAAC,QAAQ;AAAA,IAC7C,WACI,OAAO,aAAa,YACpB,WAAW,qBACX,OAAO,aAAa,YACpB,WAAW,mBACX;AAEA,aAAO,IAAI,KAAK,QAAQ;AAAA,IAC5B,OAAS;AAEL,aAAO,oBAAI,KAAK,GAAG;AAAA,IACvB;AAAA,EACA;ACxBO,WAAS,cAAc,MAAMX,QAAO;AACzC,QAAI,gBAAgB,MAAM;AACxB,aAAO,IAAI,KAAK,YAAYA,MAAK;AAAA,IACrC,OAAS;AACL,aAAO,IAAI,KAAKA,MAAK;AAAA,IACzB;AAAA,EACA;ACbO,WAAS,QAAQ,MAAM,QAAQ;AACpC,UAAM,QAAQ,OAAO,IAAI;AACzB,QAAI,MAAM,MAAM,EAAG,QAAO,cAAc,MAAM,GAAG;AAKjD,UAAM,QAAQ,MAAM,QAAO,IAAK,MAAM;AACtC,WAAO;AAAA,EACT;ACVO,WAAS,QAAQ,MAAM,QAAQ;AACpC,WAAO,QAAQ,MAAM,IAAO;AAAA,EAC9B;AClBA,QAAM,kBAAkB,CAAC,SACvB,IAAI,KAAK,KAAK,YAAA,GAAe,KAAK,SAAS,GAAG,CAAC;AAEpC,QAAA,iBAAiB,CAAC,MAAY,UAAkB;AAC3D,UAAM,IAAI,IAAI,KAAK,KAAK,SAAS;AACjC,MAAE,QAAQ,EAAE,QAAQ,IAAI,QAAQ,CAAC;AAC1B,WAAA;AAAA,EACT;AAEA,QAAM,gBAAgB,CAAC,SAAe;AACpC,UAAM,IAAI,IAAI,KAAK,KAAK,SAAS;AACjC,MAAE,SAAS,GAAG,GAAG,GAAG,CAAC;AACd,WAAA;AAAA,EACT;AAEA,QAAM,mBAAmB,CAAC,MAAY,QAAgB;AACpD,UAAM,IAAI,IAAI,KAAK,KAAK,SAAS;AACjC,MAAE,QAAQ,EAAE,QAAQ,IAAI,GAAG;AACpB,WAAA;AAAA,EACT;AAEa,QAAA,YAAsB,MAAM;AACjC,UAAA+I,QAAO,IAAI,KAAK,KAAK,IAAI,MAAM,GAAG,CAAC,CAAC;AAC1C,WAAOJ,cAAM,CAAC,EAAE,IAAI,MAAM;AACxB,YAAM,OAAOI,MAAK,mBAAmB,WAAW,EAAE,SAAS,SAAS;AACpE,MAAAA,MAAK,QAAQA,MAAK,QAAQ,IAAI,CAAC;AACxB,aAAA;AAAA,IAAA,CACR;AAAA,EACH,GAAG;AAEU,QAAA,kBAAkB,CAC7B,SACA,SACG;AAIG,UAAA,YAAYjJ,YAAI,SAAS,CAAC,MAAM,EAAE,GAAG,KAAK,oBAAI,KAAK;AACnD,UAAA,YAAY,SAAS,SAAS,KAAK;AAEzC,QAAIM,MAAKkB;AACT,QAAI,SAAS,QAAQ;AAEb,MAAAlB,OAAA,cAAcL,QAAI,IAAA,SAAS,CAAC,MAAM,EAAE,GAAG,KAAS,oBAAA,MAAM;AAC5D,MAAAuB,SAAQ,cAAc,QAAQlB,IAAQ,CAAC;AAAA,IAAA,OAClC;AAEL,MAAAkB,SAAQ,gBAAgB,SAAS;AAC3B,MAAAlB,OAAA,eAAekB,QAAO,SAAS;AAAA,IAAA;AAIjC,UAAA,eAAe,SAAS,SAAS,KAAK;AAG5C,UAAM,UAAUqH,QAAAA,MAAM,CAAC,EAAE,QAAQ;AAC3B,UAAA,UAAUA,cAAM,YAAY;AAIlC,UAAM,QAAQ,QACX;AAAA,MACC,CAAC,MACE,EAAE,IAAa,QAAY,IAAArH,OAAM,QAAQ,KACzC,EAAE,IAAa,QAAQ,IAAIlB,KAAI,QAAQ;AAAA,IAAA,EAE3C,IAAI,CAAC,OAAO;AAAA,MACX,KAAK,cAAc,EAAE,GAAW;AAAA,MAChC,MAAM,EAAE;AAAA,IAAA,EACR;AAGE,UAAA,kBAAkBkB,OAAM,OAAO;AACrC,UAAM,UAAU,iBAAiBA,QAAO,CAAC,eAAe;AACxD,UAAM,OAAc,CAAC;AAGrB,aAAS,OAAO,GAAG,OAAO,cAAc,QAAQ;AAC9C,YAAM,MAAM;AAAA,QACV,KAAK;AAAA,QACL,MAAM,CAAA;AAAA,MACR;AAEA,eAAS,MAAM,GAAG,OAAO,GAAG,OAAO;AAC3B,cAAA,WAAW,MAAM,KAAK,CAAC,MAAM,EAAE,IAAI,QAAQ,MAAM,QAAQ,QAAA,CAAS;AAExE,YAAI,KAAK,KAAK;AAAA,UACZ,KAAK;AAAA,UACL,OAAM,qCAAU,SAAQ;AAAA,UACxB,UAAU;AAAA,YACR,MAAM,IAAI,KAAK,QAAQ,SAAS;AAAA,YAChC,OAAAA;AAAA,YACA,KAAAlB;AAAA,UAAA;AAAA,QACF,CACD;AAED,gBAAQ,QAAQ,QAAQ,QAAQ,IAAI,CAAC;AAAA,MAAA;AAGvC,WAAK,KAAK,GAAG;AAAA,IAAA;AAGR,WAAA;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,OAAAkB;AAAA,IACF;AAAA,EACF;ACrEa,QAAA,kBAAqD,CAAC;AAAA,IACjE,OAAO;AAAA,IACP;AAAA,IACA,SACEX,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,YAAW;AAAA,QACX,MACEA,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SACEA,2BAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAAS,CAAC,MACR,GAAG,YAAY,EAAE,KAAK,SAAS,IAAI,CAAC,MAAM;AAAA,kBACxC,EAAE,KAAK;AAAA,gBAAA,CACR;AAAA,cAAA;AAAA,YAAA;AAAA,UAEL;AAAA,QAAA;AAAA,MAEJ;AAAA,IAEJ;AAAA,IAEF,GAAG;AAAA,EACL,MAAM;AACE,UAAA;AAAA,MACJ,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,OAAAW;AAAA,IAAA,IACED,MAAQ,QAAA,MAAM,gBAAgB,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;AAG3D,UAAM,cAAc,SAAS,SAAS,SAAY,CAAC,CAAC;AAE9C,UAAA,eAAeR,MAAAA,YAAY,CAAC,QAAgB,SAAS,GAAG,GAAG,EAAE;AAGnE,UAAM,mBAAmBQ,MAAA;AAAA,MACvB,MAAO,SAAS,SAAS,eAAe,MAAM;AAAA,MAC9C,CAAC,cAAc,IAAI;AAAA,IACrB;AAGA,UAAM,mBAAmBR,MAAA;AAAA,MACvB,CAAC,UACC,eAAeS,QAAO,KAAK,EAAE,eAAe,WAAW,EAAE,OAAO,QAAQ;AAAA,MAC1E,CAACA,MAAK;AAAA,IACR;AAGE,WAAAX,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAG;AAAA,QACJ;AAAA,QACA,MAAM;AAAA,QACN,OACEA,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,UAAU;AAAA,YACV,QAAQ;AAAA,YACR,YACEA,2BAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,UAAU;AAAA,gBACV,MAAM;AAAA,gBACN,OACGA,2BAAA,IAAA,sBAAA,EAAqB,SAAS,GAAG,QAAQ,iBAAkB,CAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAEhE;AAAA,QAEJ;AAAA,QAEF,OACEA,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,UAAU;AAAA,YACV,QAAQ;AAAA,YACR,YACEA,2BAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAM;AAAA,gBACN,YAAY;AAAA,gBACZ,OACEA,2BAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,SAAS;AAAA,oBACT,OAAM;AAAA,oBACN,QAAQ;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACV;AAAA,YAAA;AAAA,UAEJ;AAAA,QAAA;AAAA,MAEJ;AAAA,IAEJ;AAAA,EAEJ;ACnIa,QAAA,iBAAmD,CAAC,UAC/DA,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,SACEA,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,SAAS,CAAC,SACRA,+BAAC,iBAAgB,EAAA,OAAO,EAAE,GAAG,KAAK,OAAO,GAAG,KAAK,IAAK,CAAA;AAAA,QAAA;AAAA,MAE1D;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EACN;ACEW,QAAA,sBAA6D,CAAC;AAAA,IACzE;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,GAAG;AAAA,EACL,MACEA,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAG;AAAA,MACJ;AAAA,MACA,OAAO,KAAK,IAAI,OAAQ,CAAC;AAAA,MACzB,QAAQ,KAAK,IAAI,QAAS,CAAC;AAAA,IAAA;AAAA,EAC7B;ACMW,QAAA,oBAAyD,CAAC;AAAA,IACrE;AAAA,IACA;AAAA,IACA,KAAA8F,sCAAO,gBAAe,EAAA;AAAA,IACtB,UAAAuC,2CAAY,qBAAoB,EAAA;AAAA,IAChC;AAAA,IACA,GAAG;AAAA,EACL,sCACG9H,gBACE,EAAA,UAAA;AAAA,IAAA,CAAC,iBAAiB8H,aACjBrI,2BAAA;AAAA,MAACQ,UAAA;AAAA,MAAA;AAAA,QACC,SAAS6H;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,IACF;AAAA,IAEFrI,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAG;AAAA,QACJ,QAAO;AAAA,QACP,SAAS;AAAA,QACT,KAAKA,2BAAAA,IAACQ,UAAAA,cAAuC,EAAA,SAASsF,KAAK,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAC7D,EACF,CAAA;ACnBW,QAAA,cAA6C,CAAC;AAAA,IACzD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,wCAAU,mBAAkB,EAAA;AAAA,IAC5B;AAAA,IACA,WAAW;AAAA,IACX,WAAW;AAAA,EACb,MAAM;AACE,UAAA,kBAAkBpF,MAAAA,QAAQ,MAAM;AAChC,UAAA,MAAM,QAAQ,IAAI,GAAG;AAChB,eAAA;AAAA,UACL;AAAA,YACE;AAAA,cACE,KAAK;AAAA,cACL;AAAA,YAAA;AAAA,UAEJ;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MAAA,OACK;AACL,eAAO,sBAAsB,CAAC,IAAI,GAAG,YAAY;AAAA,MAAA;AAAA,IACnD,GACC,CAAC,IAAI,CAAC;AAET,UAAM,YAAYR,MAAA;AAAA,MAChB,CACE,eACAsD,OACAlC,QACAD,SACAiH,WACAC,cACG;AACH,cAAM,SAAS,CAAC,gBAAgB,CAACD,WAAUC,SAAQ,IAAI;AAEvD,cAAM,WAAW,UAAU;AAAA,UACzB,OAAAjH;AAAAA,UACA,MAAM;AAAA,UACN,MAAAkC;AAAAA,UACA;AAAA,UACA;AAAA,QAAA,CACD;AAED,cAAM,aAAa,UAAU;AAAA,UAC3B,MAAM;AAAA,UACN,QAAAnC;AAAAA,UACA,MAAAmC;AAAAA,UACA;AAAA,QAAA,CACD;AAEM,eAAA;AAAA,UACL;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA,CAAA;AAAA,IACF;AAEA,UAAM,cAActD,MAAA;AAAA,MAClB,CAAC,EAAE,aAAa,YAAY,IAAA+E,KAAI,iBAA2C;AACnE,cAAA,gBAAgB,MAAM,QAAQ,IAAI;AAClC,cAAA,OAAO,gBAAgB,sBAAsB;AAC7C,cAAA,EAAE,UAAU,WAAA,IAAe;AAAA,UAC/B;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAGE,eAAAjF,2BAAA,IAACO,kBACE,UACC,cAAAP,2BAAA;AAAA,UAACQ,UAAA;AAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,IAAI,uBAAuByE,GAAE;AAAA,YAC7B,MAAM;AAAA,YACN,eAAe;AAAA,YACf,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR;AAAA,YACA,QAAQ;AAAA,YACR,OAAO;AAAA,YACP;AAAA,UAAA;AAAA,QAAA,GAGN;AAAA,MAEJ;AAAA,MACA,CAAC,MAAM,WAAW,UAAU,UAAU,QAAQ,eAAe;AAAA,IAC/D;AAGE,WAAAjF,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QAEC,UAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAEJ;AChJO,QAAMqG,mBAAiB,CAAC,EAAE,MAAM,eAAe;AACpD,UAAM,aAAa,WACf,EAAE,GAAG,uBACL;AAAA,MACA,OAAO;AAAA,MACP,MAAM;AAAA,IACR;AAEI,UAAA,IAAI/B,QAAAA,eAAe,KAAK,IAAI;AAC5B,UAAA,SAASC,kBAAU,GAAG,EAAE,WAAW,KAAK,SAAS,IAAI;AAE3DnE,UAAAA,UAAU,MAAM;AACd,YAAM,eAAeoE,cAAAA,YAAY,EAAE,IAAI,GAAG,KAAK,IAAI;AAC7C,YAAA,aAAa,OAAO,IAAI;AACvB,aAAA,IAAI,IAAI,UAAU;AAElB,aAAA,OAAO,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,aAAa,IAAI,UAAU,CAAC,CAAC;AAAA,OACpE,CAAC,GAAG,KAAK,MAAM,MAAM,CAAC;AAElB,WAAA,EAAE,YAAY,EAAE;AAAA,EACzB;ACkGa,QAAA,UAAqC,CAAC;AAAA,IACjD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT,gBAAgB,EAAE,SAAS,IAAI;AAAA,IAC/B,cAAc,EAAE,SAAS,IAAI;AAAA,IAC7B,eAAe,EAAE,SAAS,IAAI;AAAA,IAC9B,cAAc;AAAA,IACd,UAAAU,2CAAY,UAAS,EAAA;AAAA,IACrB;AAAA,IACA,SAAA3B,0CAAW,cAAa,EAAA;AAAA,IACxB,UAAU,MAAM;AAAA,IAChB,eAAe,MAAM;AAAA,IACrB,eAAe,MAAM;AAAA,EACvB,MAAM;AACJ,UAAM,CAAC,gBAAgB,iBAAiB,IAAIpD,MAAAA,SAAkB,KAAK;AAC7D,UAAA,SAASF,aAAmB,IAAI;AAChC,UAAA,EAAE,YAAY,EAAE,IAAIoG,iBAAe,EAAE,UAAU,MAAM;AAC3D,UAAM,eAAe,SACjB,cACA,WAAW,OACT,gBACA;AAEA,UAAA,UACJnB,aAAY,CAAC,OACT,iBAAiB,EAAE,MACnB,OACE,qBAAqB,EAAE,MACvB;AAER,UAAM,EAAE,YAAY,YAAY,IAAI,eAAe;AAAA,MACjD,eAAe,CAAC,UAAU;AACxB,YAAI,CAAC,UAAU;AACb,4BAAkB,IAAI;AACP,uDAAA;AAAA,YACb,OAAO,KAAK;AAAA,YACZ,aAAa;AAAA,UAAA;AAAA,QACd;AAAA,MAEL;AAAA,MACA,cAAc,CAAC,UAAU;AACvB,YAAI,CAAC,UAAU;AACb,4BAAkB,KAAK;AACR,uDAAA;AAAA,YACb,OAAO,KAAK;AAAA,YACZ,aAAa;AAAA,UAAA;AAAA,QACd;AAAA,MACH;AAAA,IACF,CACD;AAED,UAAM,cAAcxE,MAAA;AAAA,MAClB,MAAA;;AAAO,iBAAE,GAAG,KAAK,KAAK,MAAM,IAAG,gBAAK,SAAL,mBAAW,SAAX,mBAAiB,KAAK,OAAO;AAAA;AAAA,MAC5D,CAAC,IAAI;AAAA,IACP;AACM,UAAA,gBAAgBA,MAAAA,QAAQ,MAAM,aAAa,WAAW,GAAG,CAAC,WAAW,CAAC;AAG1E,WAAAK,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO,KAAK,KAAK;AAAA,QACjB,eAAe;AAAA,QACf,cAAc;AAAA,QACd,SAAS,CAAC,UAAU;AAClB,cAAI,CAAC,UAAU;AACH,+CAAA;AAAA,cACR,OAAO,KAAK;AAAA,cACZ,aAAa;AAAA,YAAA;AAAA,UACd;AAAA,QAEL;AAAA,QACA,UAAU;AAAA,QACV,cAAY;AAAA,QACZ,MAAK;AAAA,QAEL,UAAA;AAAA,UAAAf,2BAAA;AAAA,YAACyE,QAAAA,OAAO;AAAA,YAAP;AAAA,cACC,KAAK;AAAA,cACL,MAAM;AAAA,cACN,IAAI,GAAG,EAAE;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,SAAS;AAAA,cACT,SAAS;AAAA,cACT,OAAO;AAAA,gBACL,GAAG;AAAA,gBACH,GAAG,mBAAmB;AAAA,kBACpB;AAAA,kBACA,kBAAkB,OAAO,WAAW,WAAW,SAAS;AAAA,gBACzD,CAAA;AAAA,cAAA;AAAA,YACH;AAAA,UACF;AAAA,UACC,wCACElE,gBACC,EAAA,UAAA;AAAA,YAACP,2BAAAA,IAAA,MAAA,EAAK,IAAI,QAAQ,EAAE,IAAI,MAAM,iBAAiB,EAAE,IAAK,CAAA;AAAA,YACtDA,2BAAA;AAAA,cAACQ,UAAA;AAAA,cAAA;AAAA,gBACC,SAAS;AAAA,gBACT,IAAI,gBAAgB,EAAE;AAAA,gBACtB;AAAA,cAAA;AAAA,YAAA;AAAA,UACF,GACF;AAAA,UAED0E,aACClF,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,SAAS0E;AAAA,cACT,IAAI,YAAY,EAAE;AAAA,cAClB,OAAO;AAAA,YAAA;AAAA,UACT;AAAA,UAED3B,YAAW,CAACA,SAAQ,MAAM,YACzBvD,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,SAAS+C;AAAA,cACT,SAAS,CAAC,CAAC;AAAA,cACX,WAAW;AAAA,cACX,OAAO;AAAA,YAAA;AAAA,UAAA;AAAA,QACT;AAAA,MAAA;AAAA,IAEJ;AAAA,EAEJ;AC3La,QAAA,YAAyC,CAAC;AAAA,IACrD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,IACX;AAAA,IACA,WAAW;AAAA,IACX,aAAa;AAAA,EACf,MAAM;;AAEA,QAAA,CAAC,WAAW,GAAC,UAAK,SAAL,mBAAW,OAAO,CAAC,MAAM,EAAE,OAAO,SAAQ;AAClD,aAAA;AAAA,IAAA;AAGH,UAAA,MACJ,cAAc,SAAQ,gBAAK,SAAL,mBAAW,SAAX,mBAAiB,KAAK,SAAS,KAAK,KAAK;AAEjE,UAAM,aAAa,WAAW,qBAAqB,EAAE,OAAO,GAAG,MAAM,MAAM;AACrE,UAAA,OAAO,OACT,SAAS;AAAA,MACT;AAAA,MACA,GAAG,KAAK,KAAK;AAAA,MACb;AAAA,MACA;AAAA,MACA,QAAO,wCAAM,YAAN,mBAAgB,OAAhB,mBAAoB;AAAA,IAC5B,CAAA,IACC;AAGF,WAAAvD,2BAAA;AAAA,MAACyE,QAAAA,OAAO;AAAA,MAAP;AAAA,QACC,IAAI,GAAG,EAAE;AAAA,QACT;AAAA,QACA,eAAc;AAAA,QACd;AAAA,QACA;AAAA,QACA,SACE;AAAA,UACE,OAAO,KAAK,KAAK;AAAA,UACjB,OAAO,KAAK,KAAK;AAAA,UACjB,SAAS;AAAA,QACX;AAAA,QAEF,SACE;AAAA,UACE,OAAO,KAAK,KAAK;AAAA,UACjB,OAAO,KAAK,KAAK;AAAA,UACjB,SAAS,WAAW,OAAO,MAAM;AAAA,QACnC;AAAA,QAEF;AAAA,QACA,YAAW;AAAA,QAEV,UAAA,SAAS,OAAO,IAAI,IAAI;AAAA,MAAA;AAAA,IAC3B;AAAA,EAEJ;ACrFa,QAAA,iBAAmD,CAAC;AAAA,IAC/D;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,OAAO;AAAA,IACP,WAAW;AAAA,IACX,aAAa;AAAA,EACf,MAAM;AACJ,UAAM,aAAa,WAAW,qBAAqB,EAAE,OAAO,GAAG,MAAM,MAAM;AACrE,UAAA,OAAO,KAAK,IAAI,KAAK;AAE3B,UAAMzD,SAAQ,SAAS,OAAO,IAAI,IAAI;AAChC,UAAA,YAAYwH,qBAAexH,MAAK;AAChC,UAAA,WAAW,aAAa,KAAK,IAAI;AAIvC,UAAM,MAAM;AAAA,MACV,GAAG,WAAW,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK;AAAA,MAC9C,GAAG,WAAW,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK;AAAA,IAChD;AAEA,0CACGT,gBACE,EAAA,UAAA,YACEP,2BAAA,IAAA,KAAA,EAAE,OAAO,EAAE,WAAW,aAAa,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,GACxD,iBACH,CAAA,IAEAA,2BAAA;AAAA,MAACyE,QAAAA,OAAO;AAAA,MAAP;AAAA,QACC;AAAA,QACA,OAAO,EAAE,eAAe,QAAQ,YAAY,SAAS;AAAA,QACrD,YAAY,KAAK,IAAI,UAAU,WAAW,WAAW,KAAK,IAAI;AAAA,QAC9D,mBAAmB,KAAK,IAAI;AAAA,QAC5B,SACE;AAAA,UACE,OAAO,IAAI;AAAA,UACX,OAAO,IAAI;AAAA,QACb;AAAA,QAEF,SACE;AAAA,UACE,OAAO,IAAI;AAAA,UACX,OAAO,IAAI;AAAA,QACb;AAAA,QAEF;AAAA,QAEC,UAAAzD;AAAA,MAAA;AAAA,IAAA,GAGP;AAAA,EAEJ;ACtBa,QAAA,aAA2C,CAAC;AAAA,IACvD;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,WAAW;AAAA,IACX,cAAc;AAAA,IACd,4CAAc,gBAAe,EAAA;AAAA,IAC7B,qCAAO,SAAQ,EAAA;AAAA,IACf,OAAAA,wCAAS,WAAU,CAAA,CAAA;AAAA,EACrB,MAAM;AACJ,UAAM,aAAa,WAAW,qBAAqB,EAAE,MAAM,OAAO,OAAO,EAAE;AAC3E,UAAM,CAAC,SAAS,UAAU,IAAIb,MAAAA,SAAmB,CAAA,CAAE;AACnD,UAAM,CAAC,SAAS,UAAU,IAAIA,MAAAA,SAAwB,IAAI;AAE1D,UAAM,aAAaD,MAAA;AAAA,MACjB,CAACuB,WAAkB;AACjB,mBAAWA,MAAK;AAEhB;AAAA,UACE,KACG,OAAO,CAAC,MAAM;;AAAA,4BAAE,SAAF,mBAAQ,IAAI,QAAQA,WAAS;AAAA,WAAE,EAC7C,IAAI,CAAC,MAAM;;AAAA,2BAAE,SAAF,mBAAQ;AAAA,WAAG;AAAA,QAC3B;AAAA,MACF;AAAA,MACA,CAAC,IAAI;AAAA,IACP;AAEA,UAAM,YAAYvB,MAAA;AAAA,MAChB,CAAC,GAAqC,UAAkB;;AAEtD,cAAM,OAAO,SAAS;AAAA,UACpB;AAAA,UACA;AAAA,UACA,OAAO,EAAE;AAAA,UACT;AAAA,QAAA,CACD;AAED,cAAM,WAAW,OACb,OAAO,OAAO,IAAI,EAAE,OAAO,GAAG,EAAE,OAAO,IAAI,IAC3C;AAEE,cAAA,UAAU,IAAI,MAAM,QAAQ;AAE5B,cAAA,OAAM,4BAAG,SAAH,mBAAS;AACrB,cAAM,UAAU4E,eAAA,YAAW,OAAE,SAAF,mBAAQ,GAAG;AAChC,cAAA,aAAa,yCAAY,SAAS;AAGlC,cAAA,YAAY,YAAY,OAAO;AAC/B,cAAA,WACJ,cACA,QAAQ,SAAS,GAAG,MACnB,QAAQ,SAAS,IAAI,OAAO;AAE/B,cAAM,iBAAiB,MAAM;AAC3B,cAAI,OAAO,IAAI,MAAM,WAAW,YAAY;AAC1C,mBAAO,IAAI,MAAM,OAAO,MAAM,OAAO,UAAU,SAAS;AAAA,UAAA;AAEtD,cAAA,IAAI,MAAM,WAAW,QAAW;AAClC,mBAAO,IAAI,MAAM;AAAA,UAAA;AAIZ,iBAAA;AAAA,QACT;AAEA,cAAM,SAAS,eAAe;AAExB,cAAA,YACJ,UACA,OAAO,OAAO,EACX,OAAO,WAAW,MAAM,GAAG,EAC3B,IAAI;AAET,+CACGvE,gBACC,EAAA,UAAA;AAAA,UAAAP,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT,IAAI,GAAG,EAAE,IAAI,OAAO;AAAA,cACpB,MAAM;AAAA,cACN,MAAM;AAAA,cACN,QAAQ;AAAA,cACR;AAAA,cACA;AAAA,cACA,QAAQ;AAAA,cACR,cAAc,MAAM,WAAW,GAAG;AAAA,cAClC,cAAc,MAAM;AAClB,2BAAW,CAAA,CAAE;AACb,2BAAW,IAAI;AAAA,cAAA;AAAA,YACjB;AAAA,UACF;AAAA,UACCQ,UACChB,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,SAASQ;AAAA,cACT,MAAM;AAAA,cACN,IAAI,GAAG,EAAE,IAAI,OAAO;AAAA,cACpB,QAAQ;AAAA,cACR;AAAA,cACA,MAAM;AAAA,cACL,GAAGA,OAAM;AAAA,YAAA;AAAA,UACZ;AAAA,UAED,EAAE,OAAO,cACRhB,2BAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT,MAAM;AAAA,cACN;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,EAAA,GAhCW,OAkCf;AAAA,MAEJ;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAQ;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAEM,UAAA,UAAUN,MAAAA,QAAQ,MAAM;AAC5B,YAAM,SAAS,CAAC;AAEZ,UAAA,QAAQ,SAAS,GAAG;AACf,eAAA,KAAK,GAAG,QAAQ,OAAO,CAAC,MAAM,MAAM,OAAO,CAAC;AAAA,MAAA;AAGrD,UAAI,yCAAY,QAAQ;AACf,eAAA;AAAA,UACL,GAAG,WAAW,OAAO,CAAC,MAAM,CAAC,QAAQ,SAAS,CAAC,KAAK,MAAM,OAAO;AAAA,QACnE;AAAA,MAAA;AAGF,UAAI,SAAS;AACX,eAAO,KAAK,OAAO;AAAA,MAAA;AAGd,aAAA;AAAA,IACN,GAAA,CAAC,SAAS,SAAS,UAAU,CAAC;AAG/B,WAAAK,2BAAA;AAAA,MAAC0D,QAAAA,OAAO;AAAA,MAAP;AAAA,QACC,SAAS,EAAE,SAAS,GAAG,OAAO,EAAE;AAAA,QAChC,SAAS,EAAE,SAAS,GAAG,OAAO,EAAE;AAAA,QAChC;AAAA,QAEC,UAAA;AAAA,UAAA,KAAK,IAAI,SAAS;AAAA,UAClB,QAAQ,SAAS,KAChB,QAAQ,IAAI,CAAC,MACXzE,2BAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,WAAW,IAAI,EAAE,IAAI,CAAC;AAAA,cACtB,OAAO,EAAE,eAAe,OAAO;AAAA,YAAA;AAAA,YAF1B;AAAA,UAAA,CAIR;AAAA,UACF,KAAK,IAAI,CAAC,GAAG,UACZ;;AAAAA,8CAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,WAAW,IAAI,EAAE,IAAI8E,2BAAW,OAAE,SAAF,mBAAQ,GAAG,CAAC;AAAA,gBAC5C,OAAO,EAAE,eAAe,OAAO;AAAA,cAAA;AAAA,cAF1B;AAAA,YAIR;AAAA,WAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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","x_google_ignoreList":[137,156,157,158,159]}