{"version":3,"file":"react-virtual.min.mjs","sources":["../node_modules/@reach/observe-rect/dist/observe-rect.esm.js","../src/useIsomorphicLayoutEffect.js","../src/useRect.js","../src/index.js"],"sourcesContent":["var props = ['bottom', 'height', 'left', 'right', 'top', 'width'];\n\nvar rectChanged = function rectChanged(a, b) {\n  if (a === void 0) {\n    a = {};\n  }\n\n  if (b === void 0) {\n    b = {};\n  }\n\n  return props.some(function (prop) {\n    return a[prop] !== b[prop];\n  });\n};\n\nvar observedNodes =\n/*#__PURE__*/\nnew Map();\nvar rafId;\n\nvar run = function run() {\n  var changedStates = [];\n  observedNodes.forEach(function (state, node) {\n    var newRect = node.getBoundingClientRect();\n\n    if (rectChanged(newRect, state.rect)) {\n      state.rect = newRect;\n      changedStates.push(state);\n    }\n  });\n  changedStates.forEach(function (state) {\n    state.callbacks.forEach(function (cb) {\n      return cb(state.rect);\n    });\n  });\n  rafId = window.requestAnimationFrame(run);\n};\n\nfunction observeRect(node, cb) {\n  return {\n    observe: function observe() {\n      var wasEmpty = observedNodes.size === 0;\n\n      if (observedNodes.has(node)) {\n        observedNodes.get(node).callbacks.push(cb);\n      } else {\n        observedNodes.set(node, {\n          rect: undefined,\n          hasRectChanged: false,\n          callbacks: [cb]\n        });\n      }\n\n      if (wasEmpty) run();\n    },\n    unobserve: function unobserve() {\n      var state = observedNodes.get(node);\n\n      if (state) {\n        // Remove the callback\n        var index = state.callbacks.indexOf(cb);\n        if (index >= 0) state.callbacks.splice(index, 1); // Remove the node reference\n\n        if (!state.callbacks.length) observedNodes[\"delete\"](node); // Stop the loop\n\n        if (!observedNodes.size) cancelAnimationFrame(rafId);\n      }\n    }\n  };\n}\n\nexport default observeRect;\n//# sourceMappingURL=observe-rect.esm.js.map\n","import React from 'react'\n\nexport default typeof window !== 'undefined'\n  ? React.useLayoutEffect\n  : React.useEffect\n","import React from 'react'\nimport observeRect from '@reach/observe-rect'\nimport useIsomorphicLayoutEffect from './useIsomorphicLayoutEffect'\n\nexport default function useRect(\n  nodeRef,\n  initialRect = { width: 0, height: 0 }\n) {\n  const [element, setElement] = React.useState(nodeRef.current)\n  const [rect, dispatch] = React.useReducer(rectReducer, initialRect)\n  const initialRectSet = React.useRef(false)\n\n  useIsomorphicLayoutEffect(() => {\n    if (nodeRef.current !== element) {\n      setElement(nodeRef.current)\n    }\n  })\n\n  useIsomorphicLayoutEffect(() => {\n    if (element && !initialRectSet.current) {\n      initialRectSet.current = true\n      const rect = element.getBoundingClientRect()\n      dispatch({ rect })\n    }\n  }, [element])\n\n  React.useEffect(() => {\n    if (!element) {\n      return\n    }\n\n    const observer = observeRect(element, rect => {\n      dispatch({ rect })\n    })\n\n    observer.observe()\n\n    return () => {\n      observer.unobserve()\n    }\n  }, [element])\n\n  return rect\n}\n\nfunction rectReducer(state, action) {\n  const rect = action.rect\n  if (state.height !== rect.height || state.width !== rect.width) {\n    return rect\n  }\n  return state\n}\n","import React from 'react'\nimport useRect from './useRect'\nimport useIsomorphicLayoutEffect from './useIsomorphicLayoutEffect'\n\nconst defaultEstimateSize = () => 50\n\nconst defaultKeyExtractor = index => index\n\nconst defaultMeasureSize = (el, horizontal) => {\n  const key = horizontal ? 'offsetWidth' : 'offsetHeight'\n\n  return el[key]\n}\n\nexport const defaultRangeExtractor = range => {\n  const start = Math.max(range.start - range.overscan, 0)\n  const end = Math.min(range.end + range.overscan, range.size - 1)\n\n  const arr = []\n\n  for (let i = start; i <= end; i++) {\n    arr.push(i)\n  }\n\n  return arr\n}\n\nexport function useVirtual({\n  size = 0,\n  estimateSize = defaultEstimateSize,\n  overscan = 1,\n  paddingStart = 0,\n  paddingEnd = 0,\n  parentRef,\n  horizontal,\n  scrollToFn,\n  useObserver,\n  initialRect,\n  onScrollElement,\n  scrollOffsetFn,\n  keyExtractor = defaultKeyExtractor,\n  measureSize = defaultMeasureSize,\n  rangeExtractor = defaultRangeExtractor,\n}) {\n  const sizeKey = horizontal ? 'width' : 'height'\n  const scrollKey = horizontal ? 'scrollLeft' : 'scrollTop'\n\n  const latestRef = React.useRef({\n    scrollOffset: 0,\n    measurements: [],\n  })\n\n  const [scrollOffset, setScrollOffset] = React.useState(0)\n  latestRef.current.scrollOffset = scrollOffset\n\n  const useMeasureParent = useObserver || useRect\n\n  const { [sizeKey]: outerSize } = useMeasureParent(parentRef, initialRect)\n\n  latestRef.current.outerSize = outerSize\n\n  const defaultScrollToFn = React.useCallback(\n    offset => {\n      if (parentRef.current) {\n        parentRef.current[scrollKey] = offset\n      }\n    },\n    [parentRef, scrollKey]\n  )\n\n  const resolvedScrollToFn = scrollToFn || defaultScrollToFn\n\n  scrollToFn = React.useCallback(\n    offset => {\n      resolvedScrollToFn(offset, defaultScrollToFn)\n    },\n    [defaultScrollToFn, resolvedScrollToFn]\n  )\n\n  const [measuredCache, setMeasuredCache] = React.useState({})\n\n  const measure = React.useCallback(() => setMeasuredCache({}), [])\n\n  const pendingMeasuredCacheIndexesRef = React.useRef([])\n\n  const measurements = React.useMemo(() => {\n    const min =\n      pendingMeasuredCacheIndexesRef.current.length > 0\n        ? Math.min(...pendingMeasuredCacheIndexesRef.current)\n        : 0\n    pendingMeasuredCacheIndexesRef.current = []\n\n    const measurements = latestRef.current.measurements.slice(0, min)\n\n    for (let i = min; i < size; i++) {\n      const key = keyExtractor(i)\n      const measuredSize = measuredCache[key]\n      const start = measurements[i - 1] ? measurements[i - 1].end : paddingStart\n      const size =\n        typeof measuredSize === 'number' ? measuredSize : estimateSize(i)\n      const end = start + size\n      measurements[i] = { index: i, start, size, end, key }\n    }\n    return measurements\n  }, [estimateSize, measuredCache, paddingStart, size, keyExtractor])\n\n  const totalSize = (measurements[size - 1]?.end || paddingStart) + paddingEnd\n\n  latestRef.current.measurements = measurements\n  latestRef.current.totalSize = totalSize\n\n  const element = onScrollElement ? onScrollElement.current : parentRef.current\n\n  const scrollOffsetFnRef = React.useRef(scrollOffsetFn)\n  scrollOffsetFnRef.current = scrollOffsetFn\n\n  useIsomorphicLayoutEffect(() => {\n    if (!element) {\n      setScrollOffset(0)\n\n      return\n    }\n\n    const onScroll = event => {\n      const offset = scrollOffsetFnRef.current\n        ? scrollOffsetFnRef.current(event)\n        : element[scrollKey]\n\n      setScrollOffset(offset)\n    }\n\n    onScroll()\n\n    element.addEventListener('scroll', onScroll, {\n      capture: false,\n      passive: true,\n    })\n\n    return () => {\n      element.removeEventListener('scroll', onScroll)\n    }\n  }, [element, scrollKey])\n\n  const { start, end } = calculateRange(latestRef.current)\n\n  const indexes = React.useMemo(\n    () =>\n      rangeExtractor({\n        start,\n        end,\n        overscan,\n        size: measurements.length,\n      }),\n    [start, end, overscan, measurements.length, rangeExtractor]\n  )\n\n  const measureSizeRef = React.useRef(measureSize)\n  measureSizeRef.current = measureSize\n\n  const virtualItems = React.useMemo(() => {\n    const virtualItems = []\n\n    for (let k = 0, len = indexes.length; k < len; k++) {\n      const i = indexes[k]\n      const measurement = measurements[i]\n\n      const item = {\n        ...measurement,\n        measureRef: el => {\n          if (el) {\n            const measuredSize = measureSizeRef.current(el, horizontal)\n\n            if (measuredSize !== item.size) {\n              const { scrollOffset } = latestRef.current\n\n              if (item.start < scrollOffset) {\n                defaultScrollToFn(scrollOffset + (measuredSize - item.size))\n              }\n\n              pendingMeasuredCacheIndexesRef.current.push(i)\n\n              setMeasuredCache(old => ({\n                ...old,\n                [item.key]: measuredSize,\n              }))\n            }\n          }\n        },\n      }\n\n      virtualItems.push(item)\n    }\n\n    return virtualItems\n  }, [indexes, defaultScrollToFn, horizontal, measurements])\n\n  const mountedRef = React.useRef(false)\n\n  useIsomorphicLayoutEffect(() => {\n    if (mountedRef.current) {\n      setMeasuredCache({})\n    }\n    mountedRef.current = true\n  }, [estimateSize])\n\n  const scrollToOffset = React.useCallback(\n    (toOffset, { align = 'start' } = {}) => {\n      const { scrollOffset, outerSize } = latestRef.current\n\n      if (align === 'auto') {\n        if (toOffset <= scrollOffset) {\n          align = 'start'\n        } else if (toOffset >= scrollOffset + outerSize) {\n          align = 'end'\n        } else {\n          align = 'start'\n        }\n      }\n\n      if (align === 'start') {\n        scrollToFn(toOffset)\n      } else if (align === 'end') {\n        scrollToFn(toOffset - outerSize)\n      } else if (align === 'center') {\n        scrollToFn(toOffset - outerSize / 2)\n      }\n    },\n    [scrollToFn]\n  )\n\n  const tryScrollToIndex = React.useCallback(\n    (index, { align = 'auto', ...rest } = {}) => {\n      const { measurements, scrollOffset, outerSize } = latestRef.current\n\n      const measurement = measurements[Math.max(0, Math.min(index, size - 1))]\n\n      if (!measurement) {\n        return\n      }\n\n      if (align === 'auto') {\n        if (measurement.end >= scrollOffset + outerSize) {\n          align = 'end'\n        } else if (measurement.start <= scrollOffset) {\n          align = 'start'\n        } else {\n          return\n        }\n      }\n\n      const toOffset =\n        align === 'center'\n          ? measurement.start + measurement.size / 2\n          : align === 'end'\n          ? measurement.end\n          : measurement.start\n\n      scrollToOffset(toOffset, { align, ...rest })\n    },\n    [scrollToOffset, size]\n  )\n\n  const scrollToIndex = React.useCallback(\n    (...args) => {\n      // We do a double request here because of\n      // dynamic sizes which can cause offset shift\n      // and end up in the wrong spot. Unfortunately,\n      // we can't know about those dynamic sizes until\n      // we try and render them. So double down!\n      tryScrollToIndex(...args)\n      requestAnimationFrame(() => {\n        tryScrollToIndex(...args)\n      })\n    },\n    [tryScrollToIndex]\n  )\n\n  return {\n    virtualItems,\n    totalSize,\n    scrollToOffset,\n    scrollToIndex,\n    measure,\n  }\n}\n\nconst findNearestBinarySearch = (low, high, getCurrentValue, value) => {\n  while (low <= high) {\n    let middle = ((low + high) / 2) | 0\n    let currentValue = getCurrentValue(middle)\n\n    if (currentValue < value) {\n      low = middle + 1\n    } else if (currentValue > value) {\n      high = middle - 1\n    } else {\n      return middle\n    }\n  }\n\n  if (low > 0) {\n    return low - 1\n  } else {\n    return 0\n  }\n}\n\nfunction calculateRange({ measurements, outerSize, scrollOffset }) {\n  const size = measurements.length - 1\n  const getOffset = index => measurements[index].start\n\n  let start = findNearestBinarySearch(0, size, getOffset, scrollOffset)\n  let end = start\n\n  while (end < size && measurements[end].end < scrollOffset + outerSize) {\n    end++\n  }\n\n  return { start, end }\n}\n"],"names":["props","rectChanged","b","observedNodes","run","changedStates","newRect","node","state","rafId","window","observeRect","cb","observe","wasEmpty","rect","hasRectChanged","callbacks","unobserve","index","cancelAnimationFrame","React","useLayoutEffect","useEffect","useRect","nodeRef","initialRect","width","height","useState","current","element","setElement","useReducer","rectReducer","dispatch","initialRectSet","useRef","useIsomorphicLayoutEffect","getBoundingClientRect","observer","action","defaultEstimateSize","defaultKeyExtractor","defaultMeasureSize","el","horizontal","key","defaultRangeExtractor","range","start","Math","max","overscan","end","min","size","arr","i","push","useVirtual","estimateSize","paddingStart","paddingEnd","parentRef","scrollToFn","useObserver","onScrollElement","scrollOffsetFn","keyExtractor","measureSize","rangeExtractor","sizeKey","scrollKey","latestRef","scrollOffset","measurements","setScrollOffset","useMeasureParent","outerSize","defaultScrollToFn","useCallback","offset","resolvedScrollToFn","measuredCache","setMeasuredCache","measure","pendingMeasuredCacheIndexesRef","useMemo","length","slice","measuredSize","totalSize","scrollOffsetFnRef","onScroll","event","addEventListener","capture","passive","removeEventListener","calculateRange","indexes","measureSizeRef","virtualItems","k","len","measurement","item","measureRef","old","mountedRef","scrollToOffset","toOffset","align","tryScrollToIndex","rest","scrollToIndex","args","requestAnimationFrame","findNearestBinarySearch","low","high","getCurrentValue","value","middle","currentValue","getOffset"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAIA,KAAK,GAAsB,CAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,OAAA,EAAA,KAAA,EAA/B,OAA+B,CAA/B;;AASA,IAAIC,WAAW,GAAG,SAAdA,WAAc,CAAA,CAAA,EAAA,CAAA,EAAA;AAAC,MAAA,CAAA,KAAA,KAAA,CAAA,EAAA;AAAA,IAAA,CAAA,GAAA,EAAA;;;AAA4B,MAAA,CAAA,KAAA,KAAA,CAAA,EAAA;AAAA,IAAA,CAAA,GAAA,EAAA;;;AAC7C,SAAA,KAAK,CAAL,IAAA,CAAW,UAAA,IAAA,EAAA;AAAQ,WAAA,CAAC,CAAD,IAAC,CAAD,KAAYC,CAAC,CAAb,IAAa,CAAb;AAAnB,GAAA,CAAA;AADF,CAAA;;AAGA,IAAIC,aAAa,gBAAG,IAApB,GAAoB,EAApB;AACA,IAAA,KAAA;;AAEA,IAAIC,GAAG,GAAG,SAANA,GAAM,GAAA;AACR,MAAMC,aAAa,GAAnB,EAAA;AACAF,EAAAA,aAAa,CAAbA,OAAAA,CAAsB,UAAA,KAAA,EAAA,IAAA,EAAA;AACpB,QAAIG,OAAO,GAAGC,IAAI,CAAlB,qBAAcA,EAAd;;AACA,QAAIN,WAAW,CAAA,OAAA,EAAUO,KAAK,CAA9B,IAAe,CAAf,EAAsC;AACpCA,MAAAA,KAAK,CAALA,IAAAA,GAAAA,OAAAA;AACAH,MAAAA,aAAa,CAAbA,IAAAA,CAAAA,KAAAA;AACD;AALHF,GAAAA;AAQAE,EAAAA,aAAa,CAAbA,OAAAA,CAAsB,UAAA,KAAA,EAAA;AACpBG,IAAAA,KAAK,CAALA,SAAAA,CAAAA,OAAAA,CAAwB,UAAA,EAAA,EAAA;AAAM,aAAA,EAAE,CAACA,KAAK,CAAR,IAAE,CAAF;AAA9BA,KAAAA;AADFH,GAAAA;AAIAI,EAAAA,KAAK,GAAGC,MAAM,CAANA,qBAAAA,CAARD,GAAQC,CAARD;AAdF,CAAA;;SAiBwBE,YACtBJ,MACAK,IAAAA;AAEA,SAAO;AACLC,IAAAA,OAAO,EAAPA,SAAAA,OAAAA,GAAAA;AACE,UAAIC,QAAQ,GAAGX,aAAa,CAAbA,IAAAA,KAAf,CAAA;;AACA,UAAIA,aAAa,CAAbA,GAAAA,CAAJ,IAAIA,CAAJ,EAA6B;AAC3BA,QAAAA,aAAa,CAAbA,GAAAA,CAAAA,IAAAA,EAAAA,SAAAA,CAAAA,IAAAA,CAAAA,EAAAA;AADF,OAAA,MAEO;AACLA,QAAAA,aAAa,CAAbA,GAAAA,CAAAA,IAAAA,EAAwB;AACtBY,UAAAA,IAAI,EADkB,SAAA;AAEtBC,UAAAA,cAAc,EAFQ,KAAA;AAGtBC,UAAAA,SAAS,EAAE,CAAA,EAAA;AAHW,SAAxBd;AAKD;;AACD,UAAA,QAAA,EAAcC,GAAG;AAZd,KAAA;AAeLc,IAAAA,SAAS,EAAA,SAAA,SAAA,GAAA;AACP,UAAIV,KAAK,GAAGL,aAAa,CAAbA,GAAAA,CAAZ,IAAYA,CAAZ;;AACA,UAAA,KAAA,EAAW;AACT;AACA,YAAMgB,KAAK,GAAGX,KAAK,CAALA,SAAAA,CAAAA,OAAAA,CAAd,EAAcA,CAAd;AACA,YAAIW,KAAK,IAAT,CAAA,EAAgBX,KAAK,CAALA,SAAAA,CAAAA,MAAAA,CAAAA,KAAAA,EAHP,CAGOA,EAHP;;AAMT,YAAI,CAACA,KAAK,CAALA,SAAAA,CAAL,MAAA,EAA6BL,aAAa,CAAbA,QAAa,CAAbA,CANpB,IAMoBA,EANpB;;AAST,YAAI,CAACA,aAAa,CAAlB,IAAA,EAAyBiB,oBAAoB,CAApBA,KAAoB,CAApBA;AAC1B;AACF;AA5BI,GAAP;AA8BD;;AChED,gCAAe,OAAOV,MAAP,KAAkB,WAAlB,GACXW,KAAK,CAACC,eADK,GAEXD,KAAK,CAACE,SAFV;;ACEe,SAASC,OAAT,CACbC,OADa,EAEbC,WAFa,EAGb;AAAA,MADAA,WACA;AADAA,IAAAA,WACA,GADc;AAAEC,MAAAA,KAAK,EAAE,CAAT;AAAYC,MAAAA,MAAM,EAAE;AAApB,KACd;AAAA;;AAAA,wBAC8BP,KAAK,CAACQ,QAAN,CAAeJ,OAAO,CAACK,OAAvB,CAD9B;AAAA,MACOC,OADP;AAAA,MACgBC,UADhB;;AAAA,0BAEyBX,KAAK,CAACY,UAAN,CAAiBC,WAAjB,EAA8BR,WAA9B,CAFzB;AAAA,MAEOX,IAFP;AAAA,MAEaoB,QAFb;;AAGA,MAAMC,cAAc,GAAGf,KAAK,CAACgB,MAAN,CAAa,KAAb,CAAvB;AAEAC,EAAAA,yBAAyB,CAAC,YAAM;AAC9B,QAAIb,OAAO,CAACK,OAAR,KAAoBC,OAAxB,EAAiC;AAC/BC,MAAAA,UAAU,CAACP,OAAO,CAACK,OAAT,CAAV;AACD;AACF,GAJwB,CAAzB;AAMAQ,EAAAA,yBAAyB,CAAC,YAAM;AAC9B,QAAIP,OAAO,IAAI,CAACK,cAAc,CAACN,OAA/B,EAAwC;AACtCM,MAAAA,cAAc,CAACN,OAAf,GAAyB,IAAzB;;AACA,UAAMf,KAAI,GAAGgB,OAAO,CAACQ,qBAAR,EAAb;;AACAJ,MAAAA,QAAQ,CAAC;AAAEpB,QAAAA,IAAI,EAAJA;AAAF,OAAD,CAAR;AACD;AACF,GANwB,EAMtB,CAACgB,OAAD,CANsB,CAAzB;AAQAV,EAAAA,KAAK,CAACE,SAAN,CAAgB,YAAM;AACpB,QAAI,CAACQ,OAAL,EAAc;AACZ;AACD;;AAED,QAAMS,QAAQ,GAAG7B,WAAW,CAACoB,OAAD,EAAU,UAAAhB,IAAI,EAAI;AAC5CoB,MAAAA,QAAQ,CAAC;AAAEpB,QAAAA,IAAI,EAAJA;AAAF,OAAD,CAAR;AACD,KAF2B,CAA5B;AAIAyB,IAAAA,QAAQ,CAAC3B,OAAT;AAEA,WAAO,YAAM;AACX2B,MAAAA,QAAQ,CAACtB,SAAT;AACD,KAFD;AAGD,GAdD,EAcG,CAACa,OAAD,CAdH;AAgBA,SAAOhB,IAAP;AACD;;AAED,SAASmB,WAAT,CAAqB1B,KAArB,EAA4BiC,MAA5B,EAAoC;AAClC,MAAM1B,IAAI,GAAG0B,MAAM,CAAC1B,IAApB;;AACA,MAAIP,KAAK,CAACoB,MAAN,KAAiBb,IAAI,CAACa,MAAtB,IAAgCpB,KAAK,CAACmB,KAAN,KAAgBZ,IAAI,CAACY,KAAzD,EAAgE;AAC9D,WAAOZ,IAAP;AACD;;AACD,SAAOP,KAAP;AACD;;AC/CD,IAAMkC,mBAAmB,GAAG,SAAtBA,mBAAsB;AAAA,SAAM,EAAN;AAAA,CAA5B;;AAEA,IAAMC,mBAAmB,GAAG,SAAtBA,mBAAsB,CAAAxB,KAAK;AAAA,SAAIA,KAAJ;AAAA,CAAjC;;AAEA,IAAMyB,kBAAkB,GAAG,SAArBA,kBAAqB,CAACC,EAAD,EAAKC,UAAL,EAAoB;AAC7C,MAAMC,GAAG,GAAGD,UAAU,GAAG,aAAH,GAAmB,cAAzC;AAEA,SAAOD,EAAE,CAACE,GAAD,CAAT;AACD,CAJD;;AAMA,IAAaC,qBAAqB,GAAG,SAAxBA,qBAAwB,CAAAC,KAAK,EAAI;AAC5C,MAAMC,KAAK,GAAGC,IAAI,CAACC,GAAL,CAASH,KAAK,CAACC,KAAN,GAAcD,KAAK,CAACI,QAA7B,EAAuC,CAAvC,CAAd;AACA,MAAMC,GAAG,GAAGH,IAAI,CAACI,GAAL,CAASN,KAAK,CAACK,GAAN,GAAYL,KAAK,CAACI,QAA3B,EAAqCJ,KAAK,CAACO,IAAN,GAAa,CAAlD,CAAZ;AAEA,MAAMC,GAAG,GAAG,EAAZ;;AAEA,OAAK,IAAIC,CAAC,GAAGR,KAAb,EAAoBQ,CAAC,IAAIJ,GAAzB,EAA8BI,CAAC,EAA/B,EAAmC;AACjCD,IAAAA,GAAG,CAACE,IAAJ,CAASD,CAAT;AACD;;AAED,SAAOD,GAAP;AACD,CAXM;AAaP,AAAO,SAASG,UAAT,OAgBJ;AAAA;;AAAA,uBAfDJ,IAeC;AAAA,MAfDA,IAeC,0BAfM,CAeN;AAAA,+BAdDK,YAcC;AAAA,MAdDA,YAcC,kCAdcnB,mBAcd;AAAA,2BAbDW,QAaC;AAAA,MAbDA,QAaC,8BAbU,CAaV;AAAA,+BAZDS,YAYC;AAAA,MAZDA,YAYC,kCAZc,CAYd;AAAA,6BAXDC,UAWC;AAAA,MAXDA,UAWC,gCAXY,CAWZ;AAAA,MAVDC,SAUC,QAVDA,SAUC;AAAA,MATDlB,UASC,QATDA,UASC;AAAA,MARDmB,UAQC,QARDA,UAQC;AAAA,MAPDC,WAOC,QAPDA,WAOC;AAAA,MANDxC,WAMC,QANDA,WAMC;AAAA,MALDyC,eAKC,QALDA,eAKC;AAAA,MAJDC,cAIC,QAJDA,cAIC;AAAA,+BAHDC,YAGC;AAAA,MAHDA,YAGC,kCAHc1B,mBAGd;AAAA,8BAFD2B,WAEC;AAAA,MAFDA,WAEC,iCAFa1B,kBAEb;AAAA,iCADD2B,cACC;AAAA,MADDA,cACC,oCADgBvB,qBAChB;AACD,MAAMwB,OAAO,GAAG1B,UAAU,GAAG,OAAH,GAAa,QAAvC;AACA,MAAM2B,SAAS,GAAG3B,UAAU,GAAG,YAAH,GAAkB,WAA9C;AAEA,MAAM4B,SAAS,GAAGrD,KAAK,CAACgB,MAAN,CAAa;AAC7BsC,IAAAA,YAAY,EAAE,CADe;AAE7BC,IAAAA,YAAY,EAAE;AAFe,GAAb,CAAlB;;AAJC,wBASuCvD,KAAK,CAACQ,QAAN,CAAe,CAAf,CATvC;AAAA,MASM8C,YATN;AAAA,MASoBE,eATpB;;AAUDH,EAAAA,SAAS,CAAC5C,OAAV,CAAkB6C,YAAlB,GAAiCA,YAAjC;AAEA,MAAMG,gBAAgB,GAAGZ,WAAW,IAAI1C,OAAxC;;AAZC,0BAcgCsD,gBAAgB,CAACd,SAAD,EAAYtC,WAAZ,CAdhD;AAAA,MAckBqD,SAdlB,qBAcQP,OAdR;;AAgBDE,EAAAA,SAAS,CAAC5C,OAAV,CAAkBiD,SAAlB,GAA8BA,SAA9B;AAEA,MAAMC,iBAAiB,GAAG3D,KAAK,CAAC4D,WAAN,CACxB,UAAAC,MAAM,EAAI;AACR,QAAIlB,SAAS,CAAClC,OAAd,EAAuB;AACrBkC,MAAAA,SAAS,CAAClC,OAAV,CAAkB2C,SAAlB,IAA+BS,MAA/B;AACD;AACF,GALuB,EAMxB,CAAClB,SAAD,EAAYS,SAAZ,CANwB,CAA1B;AASA,MAAMU,kBAAkB,GAAGlB,UAAU,IAAIe,iBAAzC;AAEAf,EAAAA,UAAU,GAAG5C,KAAK,CAAC4D,WAAN,CACX,UAAAC,MAAM,EAAI;AACRC,IAAAA,kBAAkB,CAACD,MAAD,EAASF,iBAAT,CAAlB;AACD,GAHU,EAIX,CAACA,iBAAD,EAAoBG,kBAApB,CAJW,CAAb;;AA7BC,yBAoCyC9D,KAAK,CAACQ,QAAN,CAAe,EAAf,CApCzC;AAAA,MAoCMuD,aApCN;AAAA,MAoCqBC,gBApCrB;;AAsCD,MAAMC,OAAO,GAAGjE,KAAK,CAAC4D,WAAN,CAAkB;AAAA,WAAMI,gBAAgB,CAAC,EAAD,CAAtB;AAAA,GAAlB,EAA8C,EAA9C,CAAhB;AAEA,MAAME,8BAA8B,GAAGlE,KAAK,CAACgB,MAAN,CAAa,EAAb,CAAvC;AAEA,MAAMuC,YAAY,GAAGvD,KAAK,CAACmE,OAAN,CAAc,YAAM;AACvC,QAAMjC,GAAG,GACPgC,8BAA8B,CAACzD,OAA/B,CAAuC2D,MAAvC,GAAgD,CAAhD,GACItC,IAAI,CAACI,GAAL,OAAAJ,IAAI,EAAQoC,8BAA8B,CAACzD,OAAvC,CADR,GAEI,CAHN;AAIAyD,IAAAA,8BAA8B,CAACzD,OAA/B,GAAyC,EAAzC;AAEA,QAAM8C,YAAY,GAAGF,SAAS,CAAC5C,OAAV,CAAkB8C,YAAlB,CAA+Bc,KAA/B,CAAqC,CAArC,EAAwCnC,GAAxC,CAArB;;AAEA,SAAK,IAAIG,CAAC,GAAGH,GAAb,EAAkBG,CAAC,GAAGF,IAAtB,EAA4BE,CAAC,EAA7B,EAAiC;AAC/B,UAAMX,GAAG,GAAGsB,YAAY,CAACX,CAAD,CAAxB;AACA,UAAMiC,YAAY,GAAGP,aAAa,CAACrC,GAAD,CAAlC;;AACA,UAAMG,MAAK,GAAG0B,YAAY,CAAClB,CAAC,GAAG,CAAL,CAAZ,GAAsBkB,YAAY,CAAClB,CAAC,GAAG,CAAL,CAAZ,CAAoBJ,GAA1C,GAAgDQ,YAA9D;;AACA,UAAMN,KAAI,GACR,OAAOmC,YAAP,KAAwB,QAAxB,GAAmCA,YAAnC,GAAkD9B,YAAY,CAACH,CAAD,CADhE;;AAEA,UAAMJ,IAAG,GAAGJ,MAAK,GAAGM,KAApB;;AACAoB,MAAAA,YAAY,CAAClB,CAAD,CAAZ,GAAkB;AAAEvC,QAAAA,KAAK,EAAEuC,CAAT;AAAYR,QAAAA,KAAK,EAALA,MAAZ;AAAmBM,QAAAA,IAAI,EAAJA,KAAnB;AAAyBF,QAAAA,GAAG,EAAHA,IAAzB;AAA8BP,QAAAA,GAAG,EAAHA;AAA9B,OAAlB;AACD;;AACD,WAAO6B,YAAP;AACD,GAnBoB,EAmBlB,CAACf,YAAD,EAAeuB,aAAf,EAA8BtB,YAA9B,EAA4CN,IAA5C,EAAkDa,YAAlD,CAnBkB,CAArB;AAqBA,MAAMuB,SAAS,GAAG,CAAC,kBAAAhB,YAAY,CAACpB,IAAI,GAAG,CAAR,CAAZ,mCAAwBF,GAAxB,KAA+BQ,YAAhC,IAAgDC,UAAlE;AAEAW,EAAAA,SAAS,CAAC5C,OAAV,CAAkB8C,YAAlB,GAAiCA,YAAjC;AACAF,EAAAA,SAAS,CAAC5C,OAAV,CAAkB8D,SAAlB,GAA8BA,SAA9B;AAEA,MAAM7D,OAAO,GAAGoC,eAAe,GAAGA,eAAe,CAACrC,OAAnB,GAA6BkC,SAAS,CAAClC,OAAtE;AAEA,MAAM+D,iBAAiB,GAAGxE,KAAK,CAACgB,MAAN,CAAa+B,cAAb,CAA1B;AACAyB,EAAAA,iBAAiB,CAAC/D,OAAlB,GAA4BsC,cAA5B;AAEA9B,EAAAA,yBAAyB,CAAC,YAAM;AAC9B,QAAI,CAACP,OAAL,EAAc;AACZ8C,MAAAA,eAAe,CAAC,CAAD,CAAf;AAEA;AACD;;AAED,QAAMiB,QAAQ,GAAG,SAAXA,QAAW,CAAAC,KAAK,EAAI;AACxB,UAAMb,MAAM,GAAGW,iBAAiB,CAAC/D,OAAlB,GACX+D,iBAAiB,CAAC/D,OAAlB,CAA0BiE,KAA1B,CADW,GAEXhE,OAAO,CAAC0C,SAAD,CAFX;AAIAI,MAAAA,eAAe,CAACK,MAAD,CAAf;AACD,KAND;;AAQAY,IAAAA,QAAQ;AAER/D,IAAAA,OAAO,CAACiE,gBAAR,CAAyB,QAAzB,EAAmCF,QAAnC,EAA6C;AAC3CG,MAAAA,OAAO,EAAE,KADkC;AAE3CC,MAAAA,OAAO,EAAE;AAFkC,KAA7C;AAKA,WAAO,YAAM;AACXnE,MAAAA,OAAO,CAACoE,mBAAR,CAA4B,QAA5B,EAAsCL,QAAtC;AACD,KAFD;AAGD,GAzBwB,EAyBtB,CAAC/D,OAAD,EAAU0C,SAAV,CAzBsB,CAAzB;;AAzEC,wBAoGsB2B,cAAc,CAAC1B,SAAS,CAAC5C,OAAX,CApGpC;AAAA,MAoGOoB,KApGP,mBAoGOA,KApGP;AAAA,MAoGcI,GApGd,mBAoGcA,GApGd;;AAsGD,MAAM+C,OAAO,GAAGhF,KAAK,CAACmE,OAAN,CACd;AAAA,WACEjB,cAAc,CAAC;AACbrB,MAAAA,KAAK,EAALA,KADa;AAEbI,MAAAA,GAAG,EAAHA,GAFa;AAGbD,MAAAA,QAAQ,EAARA,QAHa;AAIbG,MAAAA,IAAI,EAAEoB,YAAY,CAACa;AAJN,KAAD,CADhB;AAAA,GADc,EAQd,CAACvC,KAAD,EAAQI,GAAR,EAAaD,QAAb,EAAuBuB,YAAY,CAACa,MAApC,EAA4ClB,cAA5C,CARc,CAAhB;AAWA,MAAM+B,cAAc,GAAGjF,KAAK,CAACgB,MAAN,CAAaiC,WAAb,CAAvB;AACAgC,EAAAA,cAAc,CAACxE,OAAf,GAAyBwC,WAAzB;AAEA,MAAMiC,YAAY,GAAGlF,KAAK,CAACmE,OAAN,CAAc,YAAM;AACvC,QAAMe,YAAY,GAAG,EAArB;;AADuC,+BAG9BC,CAH8B,EAGvBC,GAHuB;AAIrC,UAAM/C,CAAC,GAAG2C,OAAO,CAACG,CAAD,CAAjB;AACA,UAAME,WAAW,GAAG9B,YAAY,CAAClB,CAAD,CAAhC;;AAEA,UAAMiD,IAAI,yBACLD,WADK;AAERE,QAAAA,UAAU,EAAE,oBAAA/D,EAAE,EAAI;AAChB,cAAIA,EAAJ,EAAQ;AACN,gBAAM8C,YAAY,GAAGW,cAAc,CAACxE,OAAf,CAAuBe,EAAvB,EAA2BC,UAA3B,CAArB;;AAEA,gBAAI6C,YAAY,KAAKgB,IAAI,CAACnD,IAA1B,EAAgC;AAAA,kBACtBmB,aADsB,GACLD,SAAS,CAAC5C,OADL,CACtB6C,YADsB;;AAG9B,kBAAIgC,IAAI,CAACzD,KAAL,GAAayB,aAAjB,EAA+B;AAC7BK,gBAAAA,iBAAiB,CAACL,aAAY,IAAIgB,YAAY,GAAGgB,IAAI,CAACnD,IAAxB,CAAb,CAAjB;AACD;;AAED+B,cAAAA,8BAA8B,CAACzD,OAA/B,CAAuC6B,IAAvC,CAA4CD,CAA5C;AAEA2B,cAAAA,gBAAgB,CAAC,UAAAwB,GAAG;AAAA;;AAAA,6CACfA,GADe,kCAEjBF,IAAI,CAAC5D,GAFY,IAEN4C,YAFM;AAAA,eAAJ,CAAhB;AAID;AACF;AACF;AArBO,QAAV;;AAwBAY,MAAAA,YAAY,CAAC5C,IAAb,CAAkBgD,IAAlB;AA/BqC;;AAGvC,SAAK,IAAIH,CAAC,GAAG,CAAR,EAAWC,GAAG,GAAGJ,OAAO,CAACZ,MAA9B,EAAsCe,CAAC,GAAGC,GAA1C,EAA+CD,CAAC,EAAhD,EAAoD;AAAA,YAA3CA,CAA2C,AAAA;AA6BnD;;AAED,WAAOD,YAAP;AACD,GAnCoB,EAmClB,CAACF,OAAD,EAAUrB,iBAAV,EAA6BlC,UAA7B,EAAyC8B,YAAzC,CAnCkB,CAArB;AAqCA,MAAMkC,UAAU,GAAGzF,KAAK,CAACgB,MAAN,CAAa,KAAb,CAAnB;AAEAC,EAAAA,yBAAyB,CAAC,YAAM;AAC9B,QAAIwE,UAAU,CAAChF,OAAf,EAAwB;AACtBuD,MAAAA,gBAAgB,CAAC,EAAD,CAAhB;AACD;;AACDyB,IAAAA,UAAU,CAAChF,OAAX,GAAqB,IAArB;AACD,GALwB,EAKtB,CAAC+B,YAAD,CALsB,CAAzB;AAOA,MAAMkD,cAAc,GAAG1F,KAAK,CAAC4D,WAAN,CACrB,UAAC+B,QAAD,SAAwC;AAAA,mCAAP,EAAO;AAAA,4BAA3BC,KAA2B;AAAA,QAA3BA,KAA2B,4BAAnB,OAAmB;;AAAA,6BACFvC,SAAS,CAAC5C,OADR;AAAA,QAC9B6C,YAD8B,sBAC9BA,YAD8B;AAAA,QAChBI,SADgB,sBAChBA,SADgB;;AAGtC,QAAIkC,KAAK,KAAK,MAAd,EAAsB;AACpB,UAAID,QAAQ,IAAIrC,YAAhB,EAA8B;AAC5BsC,QAAAA,KAAK,GAAG,OAAR;AACD,OAFD,MAEO,IAAID,QAAQ,IAAIrC,YAAY,GAAGI,SAA/B,EAA0C;AAC/CkC,QAAAA,KAAK,GAAG,KAAR;AACD,OAFM,MAEA;AACLA,QAAAA,KAAK,GAAG,OAAR;AACD;AACF;;AAED,QAAIA,KAAK,KAAK,OAAd,EAAuB;AACrBhD,MAAAA,UAAU,CAAC+C,QAAD,CAAV;AACD,KAFD,MAEO,IAAIC,KAAK,KAAK,KAAd,EAAqB;AAC1BhD,MAAAA,UAAU,CAAC+C,QAAQ,GAAGjC,SAAZ,CAAV;AACD,KAFM,MAEA,IAAIkC,KAAK,KAAK,QAAd,EAAwB;AAC7BhD,MAAAA,UAAU,CAAC+C,QAAQ,GAAGjC,SAAS,GAAG,CAAxB,CAAV;AACD;AACF,GArBoB,EAsBrB,CAACd,UAAD,CAtBqB,CAAvB;AAyBA,MAAMiD,gBAAgB,GAAG7F,KAAK,CAAC4D,WAAN,CACvB,UAAC9D,KAAD,UAA6C;AAAA,oCAAP,EAAO;AAAA,4BAAnC8F,KAAmC;AAAA,QAAnCA,KAAmC,4BAA3B,MAA2B;AAAA,QAAhBE,IAAgB;;AAAA,8BACOzC,SAAS,CAAC5C,OADjB;AAAA,QACnC8C,YADmC,uBACnCA,YADmC;AAAA,QACrBD,YADqB,uBACrBA,YADqB;AAAA,QACPI,SADO,uBACPA,SADO;AAG3C,QAAM2B,WAAW,GAAG9B,YAAY,CAACzB,IAAI,CAACC,GAAL,CAAS,CAAT,EAAYD,IAAI,CAACI,GAAL,CAASpC,KAAT,EAAgBqC,IAAI,GAAG,CAAvB,CAAZ,CAAD,CAAhC;;AAEA,QAAI,CAACkD,WAAL,EAAkB;AAChB;AACD;;AAED,QAAIO,KAAK,KAAK,MAAd,EAAsB;AACpB,UAAIP,WAAW,CAACpD,GAAZ,IAAmBqB,YAAY,GAAGI,SAAtC,EAAiD;AAC/CkC,QAAAA,KAAK,GAAG,KAAR;AACD,OAFD,MAEO,IAAIP,WAAW,CAACxD,KAAZ,IAAqByB,YAAzB,EAAuC;AAC5CsC,QAAAA,KAAK,GAAG,OAAR;AACD,OAFM,MAEA;AACL;AACD;AACF;;AAED,QAAMD,QAAQ,GACZC,KAAK,KAAK,QAAV,GACIP,WAAW,CAACxD,KAAZ,GAAoBwD,WAAW,CAAClD,IAAZ,GAAmB,CAD3C,GAEIyD,KAAK,KAAK,KAAV,GACAP,WAAW,CAACpD,GADZ,GAEAoD,WAAW,CAACxD,KALlB;AAOA6D,IAAAA,cAAc,CAACC,QAAD;AAAaC,MAAAA,KAAK,EAALA;AAAb,OAAuBE,IAAvB,EAAd;AACD,GA5BsB,EA6BvB,CAACJ,cAAD,EAAiBvD,IAAjB,CA7BuB,CAAzB;AAgCA,MAAM4D,aAAa,GAAG/F,KAAK,CAAC4D,WAAN,CACpB,YAAa;AAAA,sCAAToC,IAAS;AAATA,MAAAA,IAAS;AAAA;;AACX;AACA;AACA;AACA;AACA;AACAH,IAAAA,gBAAgB,MAAhB,SAAoBG,IAApB;AACAC,IAAAA,qBAAqB,CAAC,YAAM;AAC1BJ,MAAAA,gBAAgB,MAAhB,SAAoBG,IAApB;AACD,KAFoB,CAArB;AAGD,GAXmB,EAYpB,CAACH,gBAAD,CAZoB,CAAtB;AAeA,SAAO;AACLX,IAAAA,YAAY,EAAZA,YADK;AAELX,IAAAA,SAAS,EAATA,SAFK;AAGLmB,IAAAA,cAAc,EAAdA,cAHK;AAILK,IAAAA,aAAa,EAAbA,aAJK;AAKL9B,IAAAA,OAAO,EAAPA;AALK,GAAP;AAOD;;AAED,IAAMiC,uBAAuB,GAAG,SAA1BA,uBAA0B,CAACC,GAAD,EAAMC,IAAN,EAAYC,eAAZ,EAA6BC,KAA7B,EAAuC;AACrE,SAAOH,GAAG,IAAIC,IAAd,EAAoB;AAClB,QAAIG,MAAM,GAAI,CAACJ,GAAG,GAAGC,IAAP,IAAe,CAAhB,GAAqB,CAAlC;AACA,QAAII,YAAY,GAAGH,eAAe,CAACE,MAAD,CAAlC;;AAEA,QAAIC,YAAY,GAAGF,KAAnB,EAA0B;AACxBH,MAAAA,GAAG,GAAGI,MAAM,GAAG,CAAf;AACD,KAFD,MAEO,IAAIC,YAAY,GAAGF,KAAnB,EAA0B;AAC/BF,MAAAA,IAAI,GAAGG,MAAM,GAAG,CAAhB;AACD,KAFM,MAEA;AACL,aAAOA,MAAP;AACD;AACF;;AAED,MAAIJ,GAAG,GAAG,CAAV,EAAa;AACX,WAAOA,GAAG,GAAG,CAAb;AACD,GAFD,MAEO;AACL,WAAO,CAAP;AACD;AACF,CAnBD;;AAqBA,SAASpB,cAAT,QAAmE;AAAA,MAAzCxB,YAAyC,SAAzCA,YAAyC;AAAA,MAA3BG,SAA2B,SAA3BA,SAA2B;AAAA,MAAhBJ,YAAgB,SAAhBA,YAAgB;AACjE,MAAMnB,IAAI,GAAGoB,YAAY,CAACa,MAAb,GAAsB,CAAnC;;AACA,MAAMqC,SAAS,GAAG,SAAZA,SAAY,CAAA3G,KAAK;AAAA,WAAIyD,YAAY,CAACzD,KAAD,CAAZ,CAAoB+B,KAAxB;AAAA,GAAvB;;AAEA,MAAIA,KAAK,GAAGqE,uBAAuB,CAAC,CAAD,EAAI/D,IAAJ,EAAUsE,SAAV,EAAqBnD,YAArB,CAAnC;AACA,MAAIrB,GAAG,GAAGJ,KAAV;;AAEA,SAAOI,GAAG,GAAGE,IAAN,IAAcoB,YAAY,CAACtB,GAAD,CAAZ,CAAkBA,GAAlB,GAAwBqB,YAAY,GAAGI,SAA5D,EAAuE;AACrEzB,IAAAA,GAAG;AACJ;;AAED,SAAO;AAAEJ,IAAAA,KAAK,EAALA,KAAF;AAASI,IAAAA,GAAG,EAAHA;AAAT,GAAP;AACD;;;;"}