{"version":3,"file":"util.mjs","sources":["../../../../../../../packages/components/table/src/util.ts"],"sourcesContent":["import { createVNode, isVNode, render } from 'vue'\nimport { flatMap, get, isNull, merge } from 'lodash-unified'\nimport {\n  ensureArray,\n  getProp,\n  hasOwn,\n  isArray,\n  isBoolean,\n  isFunction,\n  isNumber,\n  isObject,\n  isString,\n  isUndefined,\n  throwError,\n} from '@hd-front-end/utils'\nimport ElTooltip, {\n  type ElTooltipProps,\n} from '@hd-front-end/components/tooltip'\n\nimport type { DefaultRow, Table, TreeProps } from './table/defaults'\nimport type { TableColumnCtx } from './table-column/defaults'\nimport type { CSSProperties, VNode } from 'vue'\n\nexport type TableOverflowTooltipOptions = Partial<\n  Pick<\n    ElTooltipProps,\n    | 'appendTo'\n    | 'effect'\n    | 'enterable'\n    | 'hideAfter'\n    | 'offset'\n    | 'placement'\n    | 'popperClass'\n    | 'popperOptions'\n    | 'showAfter'\n    | 'showArrow'\n    | 'transition'\n  >\n>\n\nexport type TableOverflowTooltipFormatter<T extends DefaultRow> = (data: {\n  row: T\n  column: TableColumnCtx<T>\n  cellValue: any\n}) => VNode | string\n\ntype RemovePopperFn = (() => void) & {\n  trigger?: HTMLElement\n  vm?: VNode\n}\n\ntype CompareValue<T> = {\n  value: T\n  index: number\n  key: any[] | null\n}\n\nexport const getCell = function (event: Event) {\n  return (event.target as HTMLElement)?.closest('td')\n}\n\nexport const orderBy = function <T extends DefaultRow>(\n  array: T[],\n  sortKey: string | null,\n  reverse: string | number | null,\n  sortMethod: TableColumnCtx<T>['sortMethod'] | null,\n  sortBy: string | string[] | ((a: T, index: number, array?: T[]) => string)\n) {\n  if (\n    !sortKey &&\n    !sortMethod &&\n    (!sortBy || (isArray(sortBy) && !sortBy.length))\n  ) {\n    return array\n  }\n  if (isString(reverse)) {\n    reverse = reverse === 'descending' ? -1 : 1\n  } else {\n    reverse = reverse && reverse < 0 ? -1 : 1\n  }\n  const getKey = sortMethod\n    ? null\n    : function (value: T, index: number) {\n        if (sortBy) {\n          return flatMap(ensureArray(sortBy), (by) => {\n            if (isString(by)) {\n              return get(value, by)\n            } else {\n              return by(value, index, array)\n            }\n          })\n        }\n        if (sortKey !== '$key') {\n          if (isObject(value) && '$value' in value) value = value.$value\n        }\n        return [\n          isObject(value) ? (sortKey ? get(value, sortKey) : null) : value,\n        ]\n      }\n  const compare = function (a: CompareValue<T>, b: CompareValue<T>) {\n    if (sortMethod) {\n      return sortMethod(a.value, b.value)\n    }\n    for (let i = 0, len = a.key?.length ?? 0; i < len; i++) {\n      if (a.key?.[i] < b.key?.[i]) {\n        return -1\n      }\n      if (a.key?.[i] > b.key?.[i]) {\n        return 1\n      }\n    }\n    return 0\n  }\n  return array\n    .map<CompareValue<T>>((value: T, index) => {\n      return {\n        value,\n        index,\n        key: getKey ? getKey(value, index) : null,\n      }\n    })\n    .sort((a, b) => {\n      let order = compare(a, b)\n      if (!order) {\n        // make stable https://en.wikipedia.org/wiki/Sorting_algorithm#Stability\n        order = a.index - b.index\n      }\n      return order * +reverse\n    })\n    .map((item) => item.value)\n}\n\nexport const getColumnById = function <T extends DefaultRow>(\n  table: {\n    columns: TableColumnCtx<T>[]\n  },\n  columnId: string\n): null | TableColumnCtx<T> {\n  let column = null\n  table.columns.forEach((item) => {\n    if (item.id === columnId) {\n      column = item\n    }\n  })\n  return column\n}\n\nexport const getColumnByKey = function <T extends DefaultRow>(\n  table: {\n    columns: TableColumnCtx<T>[]\n  },\n  columnKey: string\n): TableColumnCtx<T> {\n  let column = null\n  for (let i = 0; i < table.columns.length; i++) {\n    const item = table.columns[i]\n    if (item.columnKey === columnKey) {\n      column = item\n      break\n    }\n  }\n  if (!column)\n    throwError('ElTable', `No column matching with column-key: ${columnKey}`)\n  return column\n}\n\nexport const getColumnByCell = function <T extends DefaultRow>(\n  table: {\n    columns: TableColumnCtx<T>[]\n  },\n  cell: HTMLElement,\n  namespace: string\n): null | TableColumnCtx<T> {\n  const matches = (cell.className || '').match(\n    new RegExp(`${namespace}-table_[^\\\\s]+`, 'gm')\n  )\n  if (matches) {\n    return getColumnById(table, matches[0])\n  }\n  return null\n}\n\nexport const getRowIdentity = <T extends DefaultRow>(\n  row: T,\n  rowKey: string | ((row: T) => string) | null\n): string => {\n  if (!row) throw new Error('Row is required when get row identity')\n  if (isString(rowKey)) {\n    if (!rowKey.includes('.')) {\n      return `${row[rowKey]}`\n    }\n    const key = rowKey.split('.')\n    let current: any = row\n    for (const element of key) {\n      current = current[element]\n    }\n    //TODO: \"current\" is now any, we just satisfies typecheck here\n    // but this function can actually return a number\n    return `${current}`\n  } else if (isFunction(rowKey)) {\n    return rowKey.call(null, row)\n  }\n  return ''\n}\n\nexport const getKeysMap = function <T extends DefaultRow>(\n  array: T[],\n  rowKey: string | null,\n  flatten = false,\n  childrenKey = 'children'\n): Record<PropertyKey, { row: T; index: number }> {\n  const data = array || []\n  const arrayMap: Record<string, { row: T; index: number }> = {}\n\n  data.forEach((row, index) => {\n    arrayMap[getRowIdentity(row, rowKey)] = { row, index }\n\n    if (flatten) {\n      const children = row[childrenKey]\n      if (isArray(children)) {\n        Object.assign(arrayMap, getKeysMap(children, rowKey, true, childrenKey))\n      }\n    }\n  })\n\n  return arrayMap\n}\n\nexport function mergeOptions<T extends DefaultRow, K extends DefaultRow>(\n  defaults: T,\n  config: K\n): T & K {\n  const options = {} as T & K\n  let key: keyof T & keyof K\n  for (key in defaults) {\n    options[key] = defaults[key]\n  }\n  for (key in config) {\n    if (hasOwn(config, key)) {\n      const value = config[key]\n      if (!isUndefined(value)) {\n        options[key as keyof K] = value\n      }\n    }\n  }\n  return options\n}\n\nexport function parseWidth(width?: number | string): number | string {\n  if (width === '') return width\n  if (!isUndefined(width)) {\n    width = Number.parseInt(width as string, 10)\n    if (Number.isNaN(width)) {\n      width = ''\n    }\n  }\n  return width!\n}\n\nexport function parseMinWidth(minWidth: number | string): number | string {\n  if (minWidth === '') return minWidth\n  if (!isUndefined(minWidth)) {\n    minWidth = parseWidth(minWidth)\n    if (Number.isNaN(minWidth)) {\n      minWidth = 80\n    }\n  }\n  return minWidth\n}\n\nexport function parseHeight(height: number | string | null) {\n  if (isNumber(height)) {\n    return height\n  }\n  if (isString(height)) {\n    if (/^\\d+(?:px)?$/.test(height)) {\n      return Number.parseInt(height, 10)\n    } else {\n      return height\n    }\n  }\n  return null\n}\n\n// https://github.com/reduxjs/redux/blob/master/src/compose.ts\nexport function compose(...funcs: ((...args: any[]) => void)[]) {\n  if (funcs.length === 0) {\n    return <T>(arg: T) => arg\n  }\n  if (funcs.length === 1) {\n    return funcs[0]\n  }\n  return funcs.reduce(\n    (a, b) =>\n      (...args: any[]) =>\n        a(b(...args))\n  )\n}\n\nexport function toggleRowStatus<T extends DefaultRow>(\n  statusArr: T[],\n  row: T,\n  newVal?: boolean,\n  tableTreeProps?: TreeProps,\n  selectable?: ((row: T, index: number) => boolean) | null,\n  rowIndex?: number,\n  rowKey?: string | null\n): boolean {\n  let _rowIndex = rowIndex ?? 0\n  let changed = false\n\n  const getIndex = () => {\n    if (!rowKey) {\n      return statusArr.indexOf(row)\n    }\n\n    const id = getRowIdentity(row, rowKey)\n\n    return statusArr.findIndex((item) => getRowIdentity(item, rowKey) === id)\n  }\n\n  const index = getIndex()\n\n  const included = index !== -1\n  const isRowSelectable = selectable?.call(null, row, _rowIndex)\n\n  const toggleStatus = (type: 'add' | 'remove') => {\n    if (type === 'add') {\n      statusArr.push(row)\n    } else {\n      statusArr.splice(index, 1)\n    }\n    changed = true\n  }\n  const getChildrenCount = <T extends DefaultRow>(row: T) => {\n    let count = 0\n    const children = tableTreeProps?.children && row[tableTreeProps.children]\n    if (children && isArray(children)) {\n      count += children.length\n      children.forEach((item) => {\n        count += getChildrenCount(item)\n      })\n    }\n    return count\n  }\n\n  if (!selectable || isRowSelectable) {\n    if (isBoolean(newVal)) {\n      if (newVal && !included) {\n        toggleStatus('add')\n      } else if (!newVal && included) {\n        toggleStatus('remove')\n      }\n    } else {\n      included ? toggleStatus('remove') : toggleStatus('add')\n    }\n  }\n\n  if (\n    !tableTreeProps?.checkStrictly &&\n    tableTreeProps?.children &&\n    isArray(row[tableTreeProps.children])\n  ) {\n    row[tableTreeProps.children].forEach((item: T) => {\n      const childChanged = toggleRowStatus(\n        statusArr,\n        item,\n        newVal ?? !included,\n        tableTreeProps,\n        selectable,\n        _rowIndex + 1,\n        rowKey\n      )\n      _rowIndex += getChildrenCount(item) + 1\n      if (childChanged) {\n        changed = childChanged\n      }\n    })\n  }\n  return changed\n}\n\nexport function walkTreeNode<T extends DefaultRow>(\n  root: T[],\n  cb: (parent: any, children: T | T[] | null, level: number) => void,\n  childrenKey = 'children',\n  lazyKey = 'hasChildren',\n  lazy = false\n) {\n  const isNil = (array: any): array is null => !(isArray(array) && array.length)\n\n  function _walker(parent: any, children: T | T[], level: number) {\n    cb(parent, children, level)\n    children.forEach((item: any) => {\n      if (item[lazyKey] && lazy) {\n        cb(item, null, level + 1)\n        return\n      }\n      const children = item[childrenKey]\n      if (!isNil(children)) {\n        _walker(item, children, level + 1)\n      }\n    })\n  }\n\n  root.forEach((item: any) => {\n    if (item[lazyKey] && lazy) {\n      cb(item, null, 0)\n      return\n    }\n    const children = item[childrenKey]\n    if (!isNil(children)) {\n      _walker(item, children, 0)\n    }\n  })\n}\n\nconst getTableOverflowTooltipProps = <T extends DefaultRow>(\n  props: TableOverflowTooltipOptions,\n  innerText: string,\n  row: T,\n  column: TableColumnCtx<T> | null\n) => {\n  // merge popperOptions\n  const popperOptions = {\n    strategy: 'fixed',\n    ...props.popperOptions,\n  }\n\n  const tooltipFormatterContent = isFunction(column?.tooltipFormatter)\n    ? column.tooltipFormatter({\n        row,\n        column,\n        cellValue: getProp(row, column.property).value,\n      })\n    : undefined\n\n  if (isVNode(tooltipFormatterContent)) {\n    return {\n      slotContent: tooltipFormatterContent,\n      content: null,\n      ...props,\n      popperOptions,\n    }\n  }\n\n  return {\n    slotContent: null,\n    content: tooltipFormatterContent ?? innerText,\n    ...props,\n    popperOptions,\n  }\n}\n\nexport let removePopper: RemovePopperFn | null = null\n\nexport function createTablePopper<T extends DefaultRow>(\n  props: TableOverflowTooltipOptions,\n  popperContent: string,\n  row: T,\n  column: TableColumnCtx<T> | null,\n  trigger: HTMLElement | null,\n  table: Table<DefaultRow>\n) {\n  const tableOverflowTooltipProps = getTableOverflowTooltipProps(\n    props,\n    popperContent,\n    row,\n    column\n  )\n  const mergedProps = {\n    ...tableOverflowTooltipProps,\n    slotContent: undefined,\n  }\n  if (removePopper?.trigger === trigger) {\n    const comp = removePopper.vm?.component\n    merge(comp?.props, mergedProps)\n    if (comp && tableOverflowTooltipProps.slotContent) {\n      comp.slots.content = () => [tableOverflowTooltipProps.slotContent]\n    }\n    return\n  }\n  removePopper?.()\n  const parentNode = table?.refs.tableWrapper\n  const ns = parentNode?.dataset.prefix\n  const vm = createVNode(\n    ElTooltip,\n    {\n      virtualTriggering: true,\n      virtualRef: trigger,\n      appendTo: parentNode,\n      placement: 'top',\n      transition: 'none', // Default does not require transition\n      offset: 0,\n      hideAfter: 0,\n      ...mergedProps,\n    },\n    tableOverflowTooltipProps.slotContent\n      ? {\n          content: () => tableOverflowTooltipProps.slotContent,\n        }\n      : undefined\n  )\n  vm.appContext = { ...table.appContext, ...table }\n  const container = document.createElement('div')\n  render(vm, container)\n  vm.component!.exposed!.onOpen()\n  const scrollContainer = parentNode?.querySelector(`.${ns}-scrollbar__wrap`)\n  removePopper = () => {\n    if (vm.component?.exposed?.onClose) {\n      vm.component.exposed.onClose()\n    }\n    render(null, container)\n    const currentRemovePopper = removePopper as RemovePopperFn\n    scrollContainer?.removeEventListener('scroll', currentRemovePopper)\n    currentRemovePopper.trigger = undefined\n    currentRemovePopper.vm = undefined\n    removePopper = null\n  }\n  removePopper.trigger = trigger ?? undefined\n  removePopper.vm = vm\n  scrollContainer?.addEventListener('scroll', removePopper)\n}\n\nfunction getCurrentColumns<T extends DefaultRow>(\n  column: TableColumnCtx<T>\n): TableColumnCtx<T>[] {\n  if (column.children) {\n    return flatMap(column.children, getCurrentColumns)\n  } else {\n    return [column]\n  }\n}\n\nfunction getColSpan<T extends DefaultRow>(\n  colSpan: number,\n  column: TableColumnCtx<T>\n) {\n  return colSpan + column.colSpan\n}\n\nexport const isFixedColumn = <T extends DefaultRow>(\n  index: number,\n  fixed: string | boolean | undefined,\n  store: any,\n  realColumns?: TableColumnCtx<T>[]\n) => {\n  let start = 0\n  let after = index\n  const columns = store.states.columns.value\n  if (realColumns) {\n    // fixed column supported in grouped header\n    const curColumns = getCurrentColumns(realColumns[index])\n    const preColumns = columns.slice(0, columns.indexOf(curColumns[0]))\n\n    start = preColumns.reduce(getColSpan, 0)\n    after = start + curColumns.reduce(getColSpan, 0) - 1\n  } else {\n    start = index\n  }\n  let fixedLayout\n  switch (fixed) {\n    case 'left':\n      if (after < store.states.fixedLeafColumnsLength.value) {\n        fixedLayout = 'left'\n      }\n      break\n    case 'right':\n      if (\n        start >=\n        columns.length - store.states.rightFixedLeafColumnsLength.value\n      ) {\n        fixedLayout = 'right'\n      }\n      break\n    default:\n      if (after < store.states.fixedLeafColumnsLength.value) {\n        fixedLayout = 'left'\n      } else if (\n        start >=\n        columns.length - store.states.rightFixedLeafColumnsLength.value\n      ) {\n        fixedLayout = 'right'\n      }\n  }\n  return fixedLayout\n    ? {\n        direction: fixedLayout,\n        start,\n        after,\n      }\n    : {}\n}\n\nexport const getFixedColumnsClass = <T extends DefaultRow>(\n  namespace: string,\n  index: number,\n  fixed: string | boolean | undefined,\n  store: any,\n  realColumns?: TableColumnCtx<T>[],\n  offset = 0\n) => {\n  const classes: string[] = []\n  const { direction, start, after } = isFixedColumn(\n    index,\n    fixed,\n    store,\n    realColumns\n  )\n  if (direction) {\n    const isLeft = direction === 'left'\n    classes.push(`${namespace}-fixed-column--${direction}`)\n    if (\n      isLeft &&\n      after + offset === store.states.fixedLeafColumnsLength.value - 1\n    ) {\n      classes.push('is-last-column')\n    } else if (\n      !isLeft &&\n      start - offset ===\n        store.states.columns.value.length -\n          store.states.rightFixedLeafColumnsLength.value\n    ) {\n      classes.push('is-first-column')\n    }\n  }\n  return classes\n}\n\nfunction getOffset<T extends DefaultRow>(\n  offset: number,\n  column: TableColumnCtx<T>\n) {\n  return (\n    offset +\n    (isNull(column.realWidth) || Number.isNaN(column.realWidth)\n      ? Number(column.width)\n      : column.realWidth)\n  )\n}\n\nexport const getFixedColumnOffset = <T extends DefaultRow>(\n  index: number,\n  fixed: string | boolean | undefined,\n  store: any,\n  realColumns?: TableColumnCtx<T>[]\n) => {\n  const {\n    direction,\n    start = 0,\n    after = 0,\n  } = isFixedColumn(index, fixed, store, realColumns)\n  if (!direction) {\n    return\n  }\n  const styles: CSSProperties = {}\n  const isLeft = direction === 'left'\n  const columns = store.states.columns.value\n  if (isLeft) {\n    styles.left = columns.slice(0, start).reduce(getOffset, 0)\n  } else {\n    styles.right = columns\n      .slice(after + 1)\n      .reverse()\n      .reduce(getOffset, 0)\n  }\n  return styles\n}\n\nexport const ensurePosition = (\n  style: CSSProperties | undefined,\n  key: keyof CSSProperties\n) => {\n  if (!style) return\n  if (!Number.isNaN(style[key])) {\n    style[key] = `${style[key]}px` as any\n  }\n}\n"],"names":["ensureArray","row","children","_a"],"mappings":";;;;;;;;AAyDa,MAAA,OAAA,GAAU,SAAU,KAAc,EAAA;AAzD/C,EAAA,IAAA,EAAA,CAAA;AA0DE,EAAQ,OAAA,CAAA,EAAA,GAAA,KAAA,CAAM,MAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA8B,OAAQ,CAAA,IAAA,CAAA,CAAA;AAChD,EAAA;AAEO,MAAM,UAAU,SACrB,KAAA,EACA,OACA,EAAA,OAAA,EACA,YACA,MACA,EAAA;AACA,EACE,IAAA,CAAC,OACD,IAAA,CAAC,UACA,KAAA,CAAC,MAAW,IAAA,OAAA,CAAQ,MAAM,CAAA,IAAK,CAAC,MAAA,CAAO,MACxC,CAAA,EAAA;AACA,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACA,EAAI,IAAA,QAAA,CAAS,OAAO,CAAG,EAAA;AACrB,IAAU,OAAA,GAAA,OAAA,KAAY,eAAe,CAAK,CAAA,GAAA,CAAA,CAAA;AAAA,GACrC,MAAA;AACL,IAAU,OAAA,GAAA,OAAA,IAAW,OAAU,GAAA,CAAA,GAAI,CAAK,CAAA,GAAA,CAAA,CAAA;AAAA,GAC1C;AACA,EAAA,MAAM,MAAS,GAAA,UAAA,GACX,IACA,GAAA,SAAU,OAAU,KAAe,EAAA;AACjC,IAAA,IAAI,MAAQ,EAAA;AACV,MAAA,OAAO,OAAQ,CAAAA,SAAA,CAAY,MAAM,CAAA,EAAG,CAAC,EAAO,KAAA;AAC1C,QAAI,IAAA,QAAA,CAAS,EAAE,CAAG,EAAA;AAChB,UAAO,OAAA,GAAA,CAAI,OAAO,EAAE,CAAA,CAAA;AAAA,SACf,MAAA;AACL,UAAO,OAAA,EAAA,CAAG,KAAO,EAAA,KAAA,EAAO,KAAK,CAAA,CAAA;AAAA,SAC/B;AAAA,OACD,CAAA,CAAA;AAAA,KACH;AACA,IAAA,IAAI,YAAY,MAAQ,EAAA;AACtB,MAAI,IAAA,QAAA,CAAS,KAAK,CAAA,IAAK,QAAY,IAAA,KAAA;AAAO,QAAA,KAAA,GAAQ,KAAM,CAAA,MAAA,CAAA;AAAA,KAC1D;AACA,IAAO,OAAA;AAAA,MACL,QAAA,CAAS,KAAK,CAAK,GAAA,OAAA,GAAU,IAAI,KAAO,EAAA,OAAO,IAAI,IAAQ,GAAA,KAAA;AAAA,KAC7D,CAAA;AAAA,GACF,CAAA;AACJ,EAAM,MAAA,OAAA,GAAU,SAAU,CAAA,EAAoB,CAAoB,EAAA;AAnGpE,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAoGI,IAAA,IAAI,UAAY,EAAA;AACd,MAAA,OAAO,UAAW,CAAA,CAAA,CAAE,KAAO,EAAA,CAAA,CAAE,KAAK,CAAA,CAAA;AAAA,KACpC;AACA,IAAS,KAAA,IAAA,CAAA,GAAI,CAAG,EAAA,GAAA,GAAA,CAAM,EAAE,GAAA,CAAA,EAAA,GAAA,CAAA,CAAA,GAAA,KAAF,IAAO,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA,KAAP,IAAiB,GAAA,EAAA,GAAA,CAAA,EAAG,CAAI,GAAA,GAAA,EAAK,CAAK,EAAA,EAAA;AACtD,MAAA,IAAA,CAAA,CAAI,OAAE,GAAF,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAQ,QAAK,EAAE,GAAA,CAAA,CAAA,GAAA,KAAF,mBAAQ,CAAI,CAAA,CAAA,EAAA;AAC3B,QAAO,OAAA,CAAA,CAAA,CAAA;AAAA,OACT;AACA,MAAA,IAAA,CAAA,CAAI,OAAE,GAAF,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAQ,QAAK,EAAE,GAAA,CAAA,CAAA,GAAA,KAAF,mBAAQ,CAAI,CAAA,CAAA,EAAA;AAC3B,QAAO,OAAA,CAAA,CAAA;AAAA,OACT;AAAA,KACF;AACA,IAAO,OAAA,CAAA,CAAA;AAAA,GACT,CAAA;AACA,EAAA,OAAO,KACJ,CAAA,GAAA,CAAqB,CAAC,KAAA,EAAU,KAAU,KAAA;AACzC,IAAO,OAAA;AAAA,MACL,KAAA;AAAA,MACA,KAAA;AAAA,MACA,GAAK,EAAA,MAAA,GAAS,MAAO,CAAA,KAAA,EAAO,KAAK,CAAI,GAAA,IAAA;AAAA,KACvC,CAAA;AAAA,GACD,CAAA,CACA,IAAK,CAAA,CAAC,GAAG,CAAM,KAAA;AACd,IAAI,IAAA,KAAA,GAAQ,OAAQ,CAAA,CAAA,EAAG,CAAC,CAAA,CAAA;AACxB,IAAA,IAAI,CAAC,KAAO,EAAA;AAEV,MAAQ,KAAA,GAAA,CAAA,CAAE,QAAQ,CAAE,CAAA,KAAA,CAAA;AAAA,KACtB;AACA,IAAA,OAAO,QAAQ,CAAC,OAAA,CAAA;AAAA,GACjB,CACA,CAAA,GAAA,CAAI,CAAC,IAAA,KAAS,KAAK,KAAK,CAAA,CAAA;AAC7B,EAAA;AAEa,MAAA,aAAA,GAAgB,SAC3B,KAAA,EAGA,QAC0B,EAAA;AAC1B,EAAA,IAAI,MAAS,GAAA,IAAA,CAAA;AACb,EAAM,KAAA,CAAA,OAAA,CAAQ,OAAQ,CAAA,CAAC,IAAS,KAAA;AAC9B,IAAI,IAAA,IAAA,CAAK,OAAO,QAAU,EAAA;AACxB,MAAS,MAAA,GAAA,IAAA,CAAA;AAAA,KACX;AAAA,GACD,CAAA,CAAA;AACD,EAAO,OAAA,MAAA,CAAA;AACT,EAAA;AAEa,MAAA,cAAA,GAAiB,SAC5B,KAAA,EAGA,SACmB,EAAA;AACnB,EAAA,IAAI,MAAS,GAAA,IAAA,CAAA;AACb,EAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,KAAM,CAAA,OAAA,CAAQ,QAAQ,CAAK,EAAA,EAAA;AAC7C,IAAM,MAAA,IAAA,GAAO,MAAM,OAAQ,CAAA,CAAA,CAAA,CAAA;AAC3B,IAAI,IAAA,IAAA,CAAK,cAAc,SAAW,EAAA;AAChC,MAAS,MAAA,GAAA,IAAA,CAAA;AACT,MAAA,MAAA;AAAA,KACF;AAAA,GACF;AACA,EAAA,IAAI,CAAC,MAAA;AACH,IAAW,UAAA,CAAA,SAAA,EAAW,uCAAuC,SAAW,CAAA,CAAA,CAAA,CAAA;AAC1E,EAAO,OAAA,MAAA,CAAA;AACT,EAAA;AAEO,MAAM,eAAkB,GAAA,SAC7B,KAGA,EAAA,IAAA,EACA,SAC0B,EAAA;AAC1B,EAAM,MAAA,OAAA,GAAA,CAAW,IAAK,CAAA,SAAA,IAAa,EAAI,EAAA,KAAA;AAAA,IACrC,IAAI,MAAA,CAAO,CAAG,EAAA,SAAA,CAAA,cAAA,CAAA,EAA2B,IAAI,CAAA;AAAA,GAC/C,CAAA;AACA,EAAA,IAAI,OAAS,EAAA;AACX,IAAO,OAAA,aAAA,CAAc,KAAO,EAAA,OAAA,CAAQ,CAAE,CAAA,CAAA,CAAA;AAAA,GACxC;AACA,EAAO,OAAA,IAAA,CAAA;AACT,EAAA;AAEa,MAAA,cAAA,GAAiB,CAC5B,GAAA,EACA,MACW,KAAA;AACX,EAAA,IAAI,CAAC,GAAA;AAAK,IAAM,MAAA,IAAI,MAAM,uCAAuC,CAAA,CAAA;AACjE,EAAI,IAAA,QAAA,CAAS,MAAM,CAAG,EAAA;AACpB,IAAA,IAAI,CAAC,MAAA,CAAO,QAAS,CAAA,GAAG,CAAG,EAAA;AACzB,MAAA,OAAO,GAAG,GAAI,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA;AAAA,KAChB;AACA,IAAM,MAAA,GAAA,GAAM,MAAO,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAC5B,IAAA,IAAI,OAAe,GAAA,GAAA,CAAA;AACnB,IAAA,KAAA,MAAW,WAAW,GAAK,EAAA;AACzB,MAAA,OAAA,GAAU,OAAQ,CAAA,OAAA,CAAA,CAAA;AAAA,KACpB;AAGA,IAAA,OAAO,CAAG,EAAA,OAAA,CAAA,CAAA,CAAA;AAAA,GACZ,MAAA,IAAW,UAAW,CAAA,MAAM,CAAG,EAAA;AAC7B,IAAO,OAAA,MAAA,CAAO,IAAK,CAAA,IAAA,EAAM,GAAG,CAAA,CAAA;AAAA,GAC9B;AACA,EAAO,OAAA,EAAA,CAAA;AACT,EAAA;AAEO,MAAM,aAAa,SACxB,KAAA,EACA,QACA,OAAU,GAAA,KAAA,EACV,cAAc,UACkC,EAAA;AAChD,EAAM,MAAA,IAAA,GAAO,SAAS,EAAC,CAAA;AACvB,EAAA,MAAM,WAAsD,EAAC,CAAA;AAE7D,EAAK,IAAA,CAAA,OAAA,CAAQ,CAAC,GAAA,EAAK,KAAU,KAAA;AAC3B,IAAA,QAAA,CAAS,eAAe,GAAK,EAAA,MAAM,CAAK,CAAA,GAAA,EAAE,KAAK,KAAM,EAAA,CAAA;AAErD,IAAA,IAAI,OAAS,EAAA;AACX,MAAA,MAAM,WAAW,GAAI,CAAA,WAAA,CAAA,CAAA;AACrB,MAAI,IAAA,OAAA,CAAQ,QAAQ,CAAG,EAAA;AACrB,QAAA,MAAA,CAAO,OAAO,QAAU,EAAA,UAAA,CAAW,UAAU,MAAQ,EAAA,IAAA,EAAM,WAAW,CAAC,CAAA,CAAA;AAAA,OACzE;AAAA,KACF;AAAA,GACD,CAAA,CAAA;AAED,EAAO,OAAA,QAAA,CAAA;AACT,EAAA;AAEgB,SAAA,YAAA,CACd,UACA,MACO,EAAA;AACP,EAAA,MAAM,UAAU,EAAC,CAAA;AACjB,EAAI,IAAA,GAAA,CAAA;AACJ,EAAA,KAAK,OAAO,QAAU,EAAA;AACpB,IAAA,OAAA,CAAQ,OAAO,QAAS,CAAA,GAAA,CAAA,CAAA;AAAA,GAC1B;AACA,EAAA,KAAK,OAAO,MAAQ,EAAA;AAClB,IAAI,IAAA,MAAA,CAAO,MAAQ,EAAA,GAAG,CAAG,EAAA;AACvB,MAAA,MAAM,QAAQ,MAAO,CAAA,GAAA,CAAA,CAAA;AACrB,MAAI,IAAA,CAAC,WAAY,CAAA,KAAK,CAAG,EAAA;AACvB,QAAA,OAAA,CAAQ,GAAkB,CAAA,GAAA,KAAA,CAAA;AAAA,OAC5B;AAAA,KACF;AAAA,GACF;AACA,EAAO,OAAA,OAAA,CAAA;AACT,CAAA;AAEO,SAAS,WAAW,KAA0C,EAAA;AACnE,EAAA,IAAI,KAAU,KAAA,EAAA;AAAI,IAAO,OAAA,KAAA,CAAA;AACzB,EAAI,IAAA,CAAC,WAAY,CAAA,KAAK,CAAG,EAAA;AACvB,IAAQ,KAAA,GAAA,MAAA,CAAO,QAAS,CAAA,KAAA,EAAiB,EAAE,CAAA,CAAA;AAC3C,IAAI,IAAA,MAAA,CAAO,KAAM,CAAA,KAAK,CAAG,EAAA;AACvB,MAAQ,KAAA,GAAA,EAAA,CAAA;AAAA,KACV;AAAA,GACF;AACA,EAAO,OAAA,KAAA,CAAA;AACT,CAAA;AAEO,SAAS,cAAc,QAA4C,EAAA;AACxE,EAAA,IAAI,QAAa,KAAA,EAAA;AAAI,IAAO,OAAA,QAAA,CAAA;AAC5B,EAAI,IAAA,CAAC,WAAY,CAAA,QAAQ,CAAG,EAAA;AAC1B,IAAA,QAAA,GAAW,WAAW,QAAQ,CAAA,CAAA;AAC9B,IAAI,IAAA,MAAA,CAAO,KAAM,CAAA,QAAQ,CAAG,EAAA;AAC1B,MAAW,QAAA,GAAA,EAAA,CAAA;AAAA,KACb;AAAA,GACF;AACA,EAAO,OAAA,QAAA,CAAA;AACT,CAAA;AAEO,SAAS,YAAY,MAAgC,EAAA;AAC1D,EAAI,IAAA,QAAA,CAAS,MAAM,CAAG,EAAA;AACpB,IAAO,OAAA,MAAA,CAAA;AAAA,GACT;AACA,EAAI,IAAA,QAAA,CAAS,MAAM,CAAG,EAAA;AACpB,IAAI,IAAA,cAAA,CAAe,IAAK,CAAA,MAAM,CAAG,EAAA;AAC/B,MAAO,OAAA,MAAA,CAAO,QAAS,CAAA,MAAA,EAAQ,EAAE,CAAA,CAAA;AAAA,KAC5B,MAAA;AACL,MAAO,OAAA,MAAA,CAAA;AAAA,KACT;AAAA,GACF;AACA,EAAO,OAAA,IAAA,CAAA;AACT,CAAA;AAGO,SAAS,WAAW,KAAqC,EAAA;AAC9D,EAAI,IAAA,KAAA,CAAM,WAAW,CAAG,EAAA;AACtB,IAAA,OAAO,CAAI,GAAW,KAAA,GAAA,CAAA;AAAA,GACxB;AACA,EAAI,IAAA,KAAA,CAAM,WAAW,CAAG,EAAA;AACtB,IAAA,OAAO,KAAM,CAAA,CAAA,CAAA,CAAA;AAAA,GACf;AACA,EAAA,OAAO,KAAM,CAAA,MAAA;AAAA,IACX,CAAC,GAAG,CACF,KAAA,CAAA,GAAI,SACF,CAAE,CAAA,CAAA,CAAE,GAAG,IAAI,CAAC,CAAA;AAAA,GAClB,CAAA;AACF,CAAA;AAEO,SAAS,gBACd,SACA,EAAA,GAAA,EACA,QACA,cACA,EAAA,UAAA,EACA,UACA,MACS,EAAA;AACT,EAAA,IAAI,YAAY,QAAY,IAAA,IAAA,GAAA,QAAA,GAAA,CAAA,CAAA;AAC5B,EAAA,IAAI,OAAU,GAAA,KAAA,CAAA;AAEd,EAAA,MAAM,WAAW,MAAM;AACrB,IAAA,IAAI,CAAC,MAAQ,EAAA;AACX,MAAO,OAAA,SAAA,CAAU,QAAQ,GAAG,CAAA,CAAA;AAAA,KAC9B;AAEA,IAAM,MAAA,EAAA,GAAK,cAAe,CAAA,GAAA,EAAK,MAAM,CAAA,CAAA;AAErC,IAAO,OAAA,SAAA,CAAU,UAAU,CAAC,IAAA,KAAS,eAAe,IAAM,EAAA,MAAM,MAAM,EAAE,CAAA,CAAA;AAAA,GAC1E,CAAA;AAEA,EAAA,MAAM,QAAQ,QAAS,EAAA,CAAA;AAEvB,EAAA,MAAM,WAAW,KAAU,KAAA,CAAA,CAAA,CAAA;AAC3B,EAAA,MAAM,eAAkB,GAAA,UAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAY,IAAK,CAAA,IAAA,EAAM,GAAK,EAAA,SAAA,CAAA,CAAA;AAEpD,EAAM,MAAA,YAAA,GAAe,CAAC,IAA2B,KAAA;AAC/C,IAAA,IAAI,SAAS,KAAO,EAAA;AAClB,MAAA,SAAA,CAAU,KAAK,GAAG,CAAA,CAAA;AAAA,KACb,MAAA;AACL,MAAU,SAAA,CAAA,MAAA,CAAO,OAAO,CAAC,CAAA,CAAA;AAAA,KAC3B;AACA,IAAU,OAAA,GAAA,IAAA,CAAA;AAAA,GACZ,CAAA;AACA,EAAM,MAAA,gBAAA,GAAmB,CAAuBC,IAAW,KAAA;AACzD,IAAA,IAAI,KAAQ,GAAA,CAAA,CAAA;AACZ,IAAA,MAAM,QAAW,GAAA,CAAA,cAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAgB,QAAYA,KAAAA,IAAAA,CAAI,cAAe,CAAA,QAAA,CAAA,CAAA;AAChE,IAAI,IAAA,QAAA,IAAY,OAAQ,CAAA,QAAQ,CAAG,EAAA;AACjC,MAAA,KAAA,IAAS,QAAS,CAAA,MAAA,CAAA;AAClB,MAAS,QAAA,CAAA,OAAA,CAAQ,CAAC,IAAS,KAAA;AACzB,QAAA,KAAA,IAAS,iBAAiB,IAAI,CAAA,CAAA;AAAA,OAC/B,CAAA,CAAA;AAAA,KACH;AACA,IAAO,OAAA,KAAA,CAAA;AAAA,GACT,CAAA;AAEA,EAAI,IAAA,CAAC,cAAc,eAAiB,EAAA;AAClC,IAAI,IAAA,SAAA,CAAU,MAAM,CAAG,EAAA;AACrB,MAAI,IAAA,MAAA,IAAU,CAAC,QAAU,EAAA;AACvB,QAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAAA,OACpB,MAAA,IAAW,CAAC,MAAA,IAAU,QAAU,EAAA;AAC9B,QAAA,YAAA,CAAa,QAAQ,CAAA,CAAA;AAAA,OACvB;AAAA,KACK,MAAA;AACL,MAAA,QAAA,GAAW,YAAa,CAAA,QAAQ,CAAI,GAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAAA,KACxD;AAAA,GACF;AAEA,EACE,IAAA,EAAC,iDAAgB,aACjB,CAAA,KAAA,cAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAgB,aAChB,OAAQ,CAAA,GAAA,CAAI,cAAe,CAAA,QAAA,CAAS,CACpC,EAAA;AACA,IAAA,GAAA,CAAI,cAAe,CAAA,QAAA,CAAA,CAAU,OAAQ,CAAA,CAAC,IAAY,KAAA;AAChD,MAAA,MAAM,YAAe,GAAA,eAAA;AAAA,QACnB,SAAA;AAAA,QACA,IAAA;AAAA,QACA,0BAAU,CAAC,QAAA;AAAA,QACX,cAAA;AAAA,QACA,UAAA;AAAA,QACA,SAAY,GAAA,CAAA;AAAA,QACZ,MAAA;AAAA,OACF,CAAA;AACA,MAAa,SAAA,IAAA,gBAAA,CAAiB,IAAI,CAAI,GAAA,CAAA,CAAA;AACtC,MAAA,IAAI,YAAc,EAAA;AAChB,QAAU,OAAA,GAAA,YAAA,CAAA;AAAA,OACZ;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AACA,EAAO,OAAA,OAAA,CAAA;AACT,CAAA;AAEgB,SAAA,YAAA,CACd,MACA,EACA,EAAA,WAAA,GAAc,YACd,OAAU,GAAA,aAAA,EACV,OAAO,KACP,EAAA;AACA,EAAA,MAAM,QAAQ,CAAC,KAAA,KAA8B,EAAE,OAAQ,CAAA,KAAK,KAAK,KAAM,CAAA,MAAA,CAAA,CAAA;AAEvE,EAAS,SAAA,OAAA,CAAQ,MAAa,EAAA,QAAA,EAAmB,KAAe,EAAA;AAC9D,IAAG,EAAA,CAAA,MAAA,EAAQ,UAAU,KAAK,CAAA,CAAA;AAC1B,IAAS,QAAA,CAAA,OAAA,CAAQ,CAAC,IAAc,KAAA;AAC9B,MAAI,IAAA,IAAA,CAAK,YAAY,IAAM,EAAA;AACzB,QAAG,EAAA,CAAA,IAAA,EAAM,IAAM,EAAA,KAAA,GAAQ,CAAC,CAAA,CAAA;AACxB,QAAA,OAAA;AAAA,OACF;AACA,MAAA,MAAMC,YAAW,IAAK,CAAA,WAAA,CAAA,CAAA;AACtB,MAAI,IAAA,CAAC,KAAMA,CAAAA,SAAQ,CAAG,EAAA;AACpB,QAAQ,OAAA,CAAA,IAAA,EAAMA,SAAU,EAAA,KAAA,GAAQ,CAAC,CAAA,CAAA;AAAA,OACnC;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AAEA,EAAK,IAAA,CAAA,OAAA,CAAQ,CAAC,IAAc,KAAA;AAC1B,IAAI,IAAA,IAAA,CAAK,YAAY,IAAM,EAAA;AACzB,MAAG,EAAA,CAAA,IAAA,EAAM,MAAM,CAAC,CAAA,CAAA;AAChB,MAAA,OAAA;AAAA,KACF;AACA,IAAA,MAAM,WAAW,IAAK,CAAA,WAAA,CAAA,CAAA;AACtB,IAAI,IAAA,CAAC,KAAM,CAAA,QAAQ,CAAG,EAAA;AACpB,MAAQ,OAAA,CAAA,IAAA,EAAM,UAAU,CAAC,CAAA,CAAA;AAAA,KAC3B;AAAA,GACD,CAAA,CAAA;AACH,CAAA;AAEA,MAAM,4BAA+B,GAAA,CACnC,KACA,EAAA,SAAA,EACA,KACA,MACG,KAAA;AAEH,EAAA,MAAM,aAAgB,GAAA;AAAA,IACpB,QAAU,EAAA,OAAA;AAAA,IACV,GAAG,KAAM,CAAA,aAAA;AAAA,GACX,CAAA;AAEA,EAAA,MAAM,0BAA0B,UAAW,CAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,gBAAgB,CAAA,GAC/D,OAAO,gBAAiB,CAAA;AAAA,IACtB,GAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAW,EAAA,OAAA,CAAQ,GAAK,EAAA,MAAA,CAAO,QAAQ,CAAE,CAAA,KAAA;AAAA,GAC1C,CACD,GAAA,KAAA,CAAA,CAAA;AAEJ,EAAI,IAAA,OAAA,CAAQ,uBAAuB,CAAG,EAAA;AACpC,IAAO,OAAA;AAAA,MACL,WAAa,EAAA,uBAAA;AAAA,MACb,OAAS,EAAA,IAAA;AAAA,MACT,GAAG,KAAA;AAAA,MACH,aAAA;AAAA,KACF,CAAA;AAAA,GACF;AAEA,EAAO,OAAA;AAAA,IACL,WAAa,EAAA,IAAA;AAAA,IACb,SAAS,uBAA2B,IAAA,IAAA,GAAA,uBAAA,GAAA,SAAA;AAAA,IACpC,GAAG,KAAA;AAAA,IACH,aAAA;AAAA,GACF,CAAA;AACF,CAAA,CAAA;AAEO,IAAI,YAAsC,GAAA,KAAA;AAE1C,SAAS,kBACd,KACA,EAAA,aAAA,EACA,GACA,EAAA,MAAA,EACA,SACA,KACA,EAAA;AA/cF,EAAA,IAAA,EAAA,CAAA;AAgdE,EAAA,MAAM,yBAA4B,GAAA,4BAAA;AAAA,IAChC,KAAA;AAAA,IACA,aAAA;AAAA,IACA,GAAA;AAAA,IACA,MAAA;AAAA,GACF,CAAA;AACA,EAAA,MAAM,WAAc,GAAA;AAAA,IAClB,GAAG,yBAAA;AAAA,IACH,WAAa,EAAA,KAAA,CAAA;AAAA,GACf,CAAA;AACA,EAAI,IAAA,CAAA,YAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,YAAA,CAAc,aAAY,OAAS,EAAA;AACrC,IAAM,MAAA,IAAA,GAAA,CAAO,EAAa,GAAA,YAAA,CAAA,EAAA,KAAb,IAAiB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAA,CAAA;AAC9B,IAAM,KAAA,CAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAM,OAAO,WAAW,CAAA,CAAA;AAC9B,IAAI,IAAA,IAAA,IAAQ,0BAA0B,WAAa,EAAA;AACjD,MAAA,IAAA,CAAK,KAAM,CAAA,OAAA,GAAU,MAAM,CAAC,0BAA0B,WAAW,CAAA,CAAA;AAAA,KACnE;AACA,IAAA,OAAA;AAAA,GACF;AACA,EAAA,YAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,YAAA,EAAA,CAAA;AACA,EAAM,MAAA,UAAA,GAAa,+BAAO,IAAK,CAAA,YAAA,CAAA;AAC/B,EAAM,MAAA,EAAA,GAAK,yCAAY,OAAQ,CAAA,MAAA,CAAA;AAC/B,EAAA,MAAM,EAAK,GAAA,WAAA;AAAA,IACT,SAAA;AAAA,IACA;AAAA,MACE,iBAAmB,EAAA,IAAA;AAAA,MACnB,UAAY,EAAA,OAAA;AAAA,MACZ,QAAU,EAAA,UAAA;AAAA,MACV,SAAW,EAAA,KAAA;AAAA,MACX,UAAY,EAAA,MAAA;AAAA,MACZ,MAAQ,EAAA,CAAA;AAAA,MACR,SAAW,EAAA,CAAA;AAAA,MACX,GAAG,WAAA;AAAA,KACL;AAAA,IACA,0BAA0B,WACtB,GAAA;AAAA,MACE,OAAA,EAAS,MAAM,yBAA0B,CAAA,WAAA;AAAA,KAE3C,GAAA,KAAA,CAAA;AAAA,GACN,CAAA;AACA,EAAA,EAAA,CAAG,aAAa,EAAE,GAAG,KAAM,CAAA,UAAA,EAAY,GAAG,KAAM,EAAA,CAAA;AAChD,EAAM,MAAA,SAAA,GAAY,QAAS,CAAA,aAAA,CAAc,KAAK,CAAA,CAAA;AAC9C,EAAA,MAAA,CAAO,IAAI,SAAS,CAAA,CAAA;AACpB,EAAG,EAAA,CAAA,SAAA,CAAW,QAAS,MAAO,EAAA,CAAA;AAC9B,EAAM,MAAA,eAAA,GAAkB,UAAY,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAA,aAAA,CAAc,CAAI,CAAA,EAAA,EAAA,CAAA,gBAAA,CAAA,CAAA,CAAA;AACtD,EAAA,YAAA,GAAe,MAAM;AA5fvB,IAAA,IAAAC,GAAA,EAAA,EAAA,CAAA;AA6fI,IAAI,IAAA,CAAA,EAAA,GAAA,CAAAA,MAAA,EAAG,CAAA,SAAA,KAAH,gBAAAA,GAAc,CAAA,OAAA,KAAd,mBAAuB,OAAS,EAAA;AAClC,MAAG,EAAA,CAAA,SAAA,CAAU,QAAQ,OAAQ,EAAA,CAAA;AAAA,KAC/B;AACA,IAAA,MAAA,CAAO,MAAM,SAAS,CAAA,CAAA;AACtB,IAAA,MAAM,mBAAsB,GAAA,YAAA,CAAA;AAC5B,IAAA,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAiB,oBAAoB,QAAU,EAAA,mBAAA,CAAA,CAAA;AAC/C,IAAA,mBAAA,CAAoB,OAAU,GAAA,KAAA,CAAA,CAAA;AAC9B,IAAA,mBAAA,CAAoB,EAAK,GAAA,KAAA,CAAA,CAAA;AACzB,IAAe,YAAA,GAAA,IAAA,CAAA;AAAA,GACjB,CAAA;AACA,EAAA,YAAA,CAAa,UAAU,OAAW,IAAA,IAAA,GAAA,OAAA,GAAA,KAAA,CAAA,CAAA;AAClC,EAAA,YAAA,CAAa,EAAK,GAAA,EAAA,CAAA;AAClB,EAAA,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAiB,iBAAiB,QAAU,EAAA,YAAA,CAAA,CAAA;AAC9C,CAAA;AAEA,SAAS,kBACP,MACqB,EAAA;AACrB,EAAA,IAAI,OAAO,QAAU,EAAA;AACnB,IAAO,OAAA,OAAA,CAAQ,MAAO,CAAA,QAAA,EAAU,iBAAiB,CAAA,CAAA;AAAA,GAC5C,MAAA;AACL,IAAA,OAAO,CAAC,MAAM,CAAA,CAAA;AAAA,GAChB;AACF,CAAA;AAEA,SAAS,UAAA,CACP,SACA,MACA,EAAA;AACA,EAAA,OAAO,UAAU,MAAO,CAAA,OAAA,CAAA;AAC1B,CAAA;AAEO,MAAM,aAAgB,GAAA,CAC3B,KACA,EAAA,KAAA,EACA,OACA,WACG,KAAA;AACH,EAAA,IAAI,KAAQ,GAAA,CAAA,CAAA;AACZ,EAAA,IAAI,KAAQ,GAAA,KAAA,CAAA;AACZ,EAAM,MAAA,OAAA,GAAU,KAAM,CAAA,MAAA,CAAO,OAAQ,CAAA,KAAA,CAAA;AACrC,EAAA,IAAI,WAAa,EAAA;AAEf,IAAM,MAAA,UAAA,GAAa,iBAAkB,CAAA,WAAA,CAAY,KAAM,CAAA,CAAA,CAAA;AACvD,IAAM,MAAA,UAAA,GAAa,QAAQ,KAAM,CAAA,CAAA,EAAG,QAAQ,OAAQ,CAAA,UAAA,CAAW,EAAE,CAAC,CAAA,CAAA;AAElE,IAAQ,KAAA,GAAA,UAAA,CAAW,MAAO,CAAA,UAAA,EAAY,CAAC,CAAA,CAAA;AACvC,IAAA,KAAA,GAAQ,KAAQ,GAAA,UAAA,CAAW,MAAO,CAAA,UAAA,EAAY,CAAC,CAAI,GAAA,CAAA,CAAA;AAAA,GAC9C,MAAA;AACL,IAAQ,KAAA,GAAA,KAAA,CAAA;AAAA,GACV;AACA,EAAI,IAAA,WAAA,CAAA;AACJ,EAAQ,QAAA,KAAA;AAAA,IACD,KAAA,MAAA;AACH,MAAA,IAAI,KAAQ,GAAA,KAAA,CAAM,MAAO,CAAA,sBAAA,CAAuB,KAAO,EAAA;AACrD,QAAc,WAAA,GAAA,MAAA,CAAA;AAAA,OAChB;AACA,MAAA,MAAA;AAAA,IACG,KAAA,OAAA;AACH,MAAA,IACE,SACA,OAAQ,CAAA,MAAA,GAAS,KAAM,CAAA,MAAA,CAAO,4BAA4B,KAC1D,EAAA;AACA,QAAc,WAAA,GAAA,OAAA,CAAA;AAAA,OAChB;AACA,MAAA,MAAA;AAAA,IAAA;AAEA,MAAA,IAAI,KAAQ,GAAA,KAAA,CAAM,MAAO,CAAA,sBAAA,CAAuB,KAAO,EAAA;AACrD,QAAc,WAAA,GAAA,MAAA,CAAA;AAAA,iBAEd,KACA,IAAA,OAAA,CAAQ,SAAS,KAAM,CAAA,MAAA,CAAO,4BAA4B,KAC1D,EAAA;AACA,QAAc,WAAA,GAAA,OAAA,CAAA;AAAA,OAChB;AAAA,GAAA;AAEJ,EAAA,OAAO,WACH,GAAA;AAAA,IACE,SAAW,EAAA,WAAA;AAAA,IACX,KAAA;AAAA,IACA,KAAA;AAAA,MAEF,EAAC,CAAA;AACP,EAAA;AAEa,MAAA,oBAAA,GAAuB,CAClC,SACA,EAAA,KAAA,EACA,OACA,KACA,EAAA,WAAA,EACA,SAAS,CACN,KAAA;AACH,EAAA,MAAM,UAAoB,EAAC,CAAA;AAC3B,EAAA,MAAM,EAAE,SAAA,EAAW,KAAO,EAAA,KAAA,EAAU,GAAA,aAAA;AAAA,IAClC,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,GACF,CAAA;AACA,EAAA,IAAI,SAAW,EAAA;AACb,IAAA,MAAM,SAAS,SAAc,KAAA,MAAA,CAAA;AAC7B,IAAQ,OAAA,CAAA,IAAA,CAAK,CAAG,EAAA,SAAA,CAAA,eAAA,EAA2B,SAAW,CAAA,CAAA,CAAA,CAAA;AACtD,IAAA,IACE,UACA,KAAQ,GAAA,MAAA,KAAW,MAAM,MAAO,CAAA,sBAAA,CAAuB,QAAQ,CAC/D,EAAA;AACA,MAAA,OAAA,CAAQ,KAAK,gBAAgB,CAAA,CAAA;AAAA,KAE7B,MAAA,IAAA,CAAC,MACD,IAAA,KAAA,GAAQ,MACN,KAAA,KAAA,CAAM,MAAO,CAAA,OAAA,CAAQ,KAAM,CAAA,MAAA,GACzB,KAAM,CAAA,MAAA,CAAO,4BAA4B,KAC7C,EAAA;AACA,MAAA,OAAA,CAAQ,KAAK,iBAAiB,CAAA,CAAA;AAAA,KAChC;AAAA,GACF;AACA,EAAO,OAAA,OAAA,CAAA;AACT,EAAA;AAEA,SAAS,SAAA,CACP,QACA,MACA,EAAA;AACA,EAAA,OACE,MACC,IAAA,MAAA,CAAO,MAAO,CAAA,SAAS,KAAK,MAAO,CAAA,KAAA,CAAM,MAAO,CAAA,SAAS,CACtD,GAAA,MAAA,CAAO,MAAO,CAAA,KAAK,IACnB,MAAO,CAAA,SAAA,CAAA,CAAA;AAEf,CAAA;AAEO,MAAM,oBAAuB,GAAA,CAClC,KACA,EAAA,KAAA,EACA,OACA,WACG,KAAA;AACH,EAAM,MAAA;AAAA,IACJ,SAAA;AAAA,IACA,KAAQ,GAAA,CAAA;AAAA,IACR,KAAQ,GAAA,CAAA;AAAA,GACN,GAAA,aAAA,CAAc,KAAO,EAAA,KAAA,EAAO,OAAO,WAAW,CAAA,CAAA;AAClD,EAAA,IAAI,CAAC,SAAW,EAAA;AACd,IAAA,OAAA;AAAA,GACF;AACA,EAAA,MAAM,SAAwB,EAAC,CAAA;AAC/B,EAAA,MAAM,SAAS,SAAc,KAAA,MAAA,CAAA;AAC7B,EAAM,MAAA,OAAA,GAAU,KAAM,CAAA,MAAA,CAAO,OAAQ,CAAA,KAAA,CAAA;AACrC,EAAA,IAAI,MAAQ,EAAA;AACV,IAAO,MAAA,CAAA,IAAA,GAAO,QAAQ,KAAM,CAAA,CAAA,EAAG,KAAK,CAAE,CAAA,MAAA,CAAO,WAAW,CAAC,CAAA,CAAA;AAAA,GACpD,MAAA;AACL,IAAO,MAAA,CAAA,KAAA,GAAQ,OACZ,CAAA,KAAA,CAAM,KAAQ,GAAA,CAAC,EACf,OAAQ,EAAA,CACR,MAAO,CAAA,SAAA,EAAW,CAAC,CAAA,CAAA;AAAA,GACxB;AACA,EAAO,OAAA,MAAA,CAAA;AACT,EAAA;AAEa,MAAA,cAAA,GAAiB,CAC5B,KAAA,EACA,GACG,KAAA;AACH,EAAA,IAAI,CAAC,KAAA;AAAO,IAAA,OAAA;AACZ,EAAA,IAAI,CAAC,MAAA,CAAO,KAAM,CAAA,KAAA,CAAM,IAAI,CAAG,EAAA;AAC7B,IAAM,KAAA,CAAA,GAAA,CAAA,GAAO,GAAG,KAAM,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,CAAA;AAAA,GACxB;AACF;;;;"}