{
  "version": 3,
  "sources": ["/cdn/shop/t/21/assets/theme-perf.js?build=20261017-first-order-popup-v144"],
  "sourcesContent": ["(() => {\n  function escapeHtml(value = '') {\n    return String(value).replace(/[&<>'\"]/g, char => ({'&':'&amp;','<':'&lt;','>':'&gt;',\"'\":'&#039;','\"':'&quot;'}[char]));\n  }\n\n  function numberOrNull(value) {\n    if (value === undefined || value === null || value === '') return null;\n    const number = Number(value);\n    return Number.isFinite(number) ? number : null;\n  }\n\n  function getCopyValue(copy, key) {\n    if (!key) return '';\n    if (Object.prototype.hasOwnProperty.call(copy, key)) return copy[key];\n    return key.split('.').reduce((value, part) => value && value[part], copy);\n  }\n\n  const root = document.documentElement;\n  const qs = (selector, scope = document) => scope.querySelector(selector);\n  const qsa = (selector, scope = document) => [...scope.querySelectorAll(selector)];\n  const runtimeCopy = JSON.parse(qs('[data-runtime-translations]').textContent);\n  const configNode = qs('[data-cart-config]');\n  const config = configNode ? JSON.parse(configNode.textContent) : { root: '/', moneyFormat: 'AED {{amount}}', bacVariant: null, bacAvailable: false, bacProductHandle: 'bacteriostatic-water', offerApi: 'https://offer.peptique.ae/api' };\n  const cartDrawer = qs('[data-cart-drawer]');\n  const scrim = qs('[data-cart-scrim]');\n  const mobileDock = qs('[data-mobile-dock]');\n  const mobileDockMenu = qs('[data-mobile-dock-menu]');\n  const mobileDockMenuButton = qs('[data-mobile-dock-menu-toggle]');\n  const mobileDockMedia = window.matchMedia('(max-width: 700px)');\n  const liveRegion = qs('[data-live-region]');\n  let hashScrollToken = 0;\n  let scrollAnimationToken = 0;\n  let revealObserver = null;\n  let productsObserver = null;\n  const variantInventoryLimits = new Map();\n  const desiredVariantQuantities = new Map();\n  const pendingCartStorageKey = 'pq_pending_cart_quantities';\n  // Let Back/Forward restore each history entry; homepage reload reset is separate.\n  if ('scrollRestoration' in history) {\n    history.scrollRestoration = performance.getEntriesByType('navigation')[0]?.type === 'reload' ? 'manual' : 'auto';\n    window.addEventListener('pagehide', () => {\n      const savedY = root.classList.contains('pq-modal-open')\n        ? -parseFloat(root.style.getPropertyValue('--pq-modal-scroll-top') || '0')\n        : window.scrollY;\n      history.replaceState({ ...history.state, pqReturnY: Math.max(0, savedY) }, '');\n      history.scrollRestoration = 'auto';\n    });\n    window.addEventListener('pageshow', event => {\n      const isHistoryReturn = event.persisted || performance.getEntriesByType('navigation')[0]?.type === 'back_forward';\n      if (!isHistoryReturn || !Number.isFinite(history.state?.pqReturnY)) return;\n      const y = history.state.pqReturnY;\n      requestAnimationFrame(() => window.scrollTo(0, y));\n    });\n  }\n  function clearHashScroll() {\n    hashScrollToken += 1;\n    try { sessionStorage.removeItem('pq_scroll_hash'); } catch (_) {}\n  }\n\n  function pendingHomeSectionHash() {\n    let hash = '';\n    try { hash = sessionStorage.getItem('pq_scroll_hash') || ''; } catch (_) {}\n    if (!hash) hash = window.location.hash || '';\n    if (hash === '#products' || hash === '#faq') return hash;\n    try {\n      const pqnav = new URL(window.location.href).searchParams.get('pqnav');\n      if (pqnav === 'products' || pqnav === 'faq') return `#${pqnav}`;\n    } catch (_) {}\n    return '';\n  }\n\n  if (pendingHomeSectionHash()) root.classList.add('pq-home-section-entry');\n\n  function armHomeProductSequence() {\n    const products = qs('#products');\n    if (!products || products.dataset.sequenceReady === 'true') return;\n    products.dataset.sequenceReady = 'true';\n    products.classList.add('pq-products-pending');\n    const reveal = () => {\n      if (products.classList.contains('pq-products-visible')) return;\n      requestAnimationFrame(() => {\n        products.classList.add('pq-products-visible');\n        const finish = () => {\n          products.classList.remove('pq-products-pending');\n          products.classList.add('pq-products-complete');\n        };\n        const animatedCards = qsa('.product-card', products);\n        const lastAnimatedCard = animatedCards[animatedCards.length - 1];\n        if (root.classList.contains('pq-home-section-entry') || prefersReducedMotion() || !lastAnimatedCard) {\n          finish();\n          return;\n        }\n        lastAnimatedCard.addEventListener('animationend', finish, { once: true });\n        window.setTimeout(finish, 1100);\n      });\n      productsObserver?.unobserve(products);\n    };\n    if (pendingHomeSectionHash() || !('IntersectionObserver' in window)) {\n      reveal();\n      return;\n    }\n    if (!productsObserver) {\n      productsObserver = new IntersectionObserver(entries => {\n        entries.forEach(entry => {\n          if (entry.isIntersecting) reveal();\n        });\n      }, { threshold: 0.04, rootMargin: '0px 0px 10% 0px' });\n    }\n    productsObserver.observe(products);\n  }\n\n  function observeReveals() {\n    const reveals = qsa('[data-reveal]').filter(el => !el.dataset.revInit && el.id !== 'products' && !el.closest('#products'));\n    if (!reveals.length) return;\n    reveals.forEach(el => {\n      el.dataset.revInit = '1';\n      el.classList.add('pq-reveal-pending');\n    });\n    const reveal = el => {\n      if (!el || el.dataset.revQueued) return;\n      el.dataset.revQueued = '1';\n      requestAnimationFrame(() => {\n        el.classList.add('pq-reveal-visible');\n      });\n    };\n    if (!('IntersectionObserver' in window)) {\n      reveals.forEach(reveal);\n      return;\n    }\n    if (!revealObserver) {\n      revealObserver = new IntersectionObserver(entries => {\n        entries.forEach(entry => {\n          if (!entry.isIntersecting) return;\n          reveal(entry.target);\n          revealObserver.unobserve(entry.target);\n        });\n      }, { threshold: 0.04, rootMargin: '0px 0px -2% 0px' });\n    }\n    reveals.forEach(el => revealObserver.observe(el));\n  }\n\n  function initHeroScrollCue() {\n    const hero = qs('.hero-pods');\n    if (!hero || hero.dataset.scrollCueReady === 'true') return;\n    hero.dataset.scrollCueReady = 'true';\n    const completeEditorial = () => {\n      hero.classList.add('is-editorial-complete');\n    };\n    const finalProof = qs('.proof-item:last-child .proof-item__proof', hero);\n    const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n    if (reducedMotion || root.classList.contains('pq-resume-restored') || root.classList.contains('pq-home-section-entry') || !finalProof) {\n      completeEditorial();\n    } else {\n      finalProof.addEventListener('animationend', completeEditorial, { once: true });\n      window.setTimeout(completeEditorial, 3000);\n    }\n    let frame = 0;\n    const update = () => {\n      hero.classList.toggle('is-scrolled', window.scrollY > 28);\n      frame = 0;\n    };\n    window.addEventListener('scroll', () => {\n      if (!frame) frame = requestAnimationFrame(update);\n    }, { passive: true });\n    update();\n  }\n\n  function initHeroResumeState() {\n    if (!qs('.hero-pods')) return;\n    const rememberSuspendedState = () => {\n      try { sessionStorage.setItem('pq_tab_suspended_at', String(Date.now())); } catch (_) {}\n    };\n    document.addEventListener('visibilitychange', () => {\n      if (document.hidden) {\n        rememberSuspendedState();\n        return;\n      }\n      root.classList.add('pq-resume-restored');\n      qs('.hero-pods')?.classList.add('is-editorial-complete');\n    });\n    window.addEventListener('pagehide', rememberSuspendedState);\n    window.addEventListener('pageshow', event => {\n      if (event.persisted) {\n        root.classList.add('pq-resume-restored');\n        qs('.hero-pods')?.classList.add('is-editorial-complete');\n      }\n    });\n  }\n\n  function syncThemeChrome() {\n    const meta = qs('[data-theme-color]');\n    if (meta) meta.setAttribute('content', root.dataset.theme === 'dark' ? '#111110' : '#EDE9E6');\n  }\n\n  const themeImageWarmups = new Map();\n\n  function warmThemeImage(source, sourceSet = '', sizes = '') {\n    if (!source) return Promise.resolve();\n    if (themeImageWarmups.has(source)) return themeImageWarmups.get(source);\n    const warmup = new Promise(resolve => {\n      const image = new Image();\n      let settled = false;\n      const finish = (loaded = false) => {\n        if (settled) return;\n        settled = true;\n        window.clearTimeout(timeout);\n        image.onload = image.onerror = null;\n        if (!loaded) themeImageWarmups.delete(source);\n        resolve();\n      };\n      const timeout = window.setTimeout(() => finish(), 800);\n      image.decoding = 'async';\n      image.fetchPriority = 'low';\n      // Warm the same responsive candidate the visible image will select.\n      if (sourceSet) {\n        image.sizes = sizes;\n        image.srcset = sourceSet;\n      }\n      image.onload = () => {\n        try {\n          const decoded = image.decode?.();\n          if (decoded?.then) decoded.then(() => finish(true), () => finish(true));\n          else finish(true);\n        } catch (_) { finish(true); }\n      };\n      image.onerror = () => finish();\n      image.src = source;\n    });\n    themeImageWarmups.set(source, warmup);\n    return warmup;\n  }\n\n  function scheduleThemeImageWarmup() {\n    const connection = navigator.connection;\n    if (connection?.saveData || /(^|-)2g$/.test(connection?.effectiveType || '')) return;\n    const warm = () => {\n      // Dark visitors already display the dark images; only light visitors need them warmed.\n      if (document.visibilityState === 'hidden' || document.documentElement?.dataset.theme === 'dark') return;\n      preloadThemeProductImages(document, true);\n    };\n    // Idle CPU does not mean the network is idle. Keep speculative images\n    // outside the initial page load; explicit theme changes still preload on demand.\n    const afterLoad = () => window.setTimeout(() => {\n      if (window.requestIdleCallback) window.requestIdleCallback(warm, { timeout: 2500 });\n      else warm();\n    }, 5000);\n    if (document.readyState === 'complete') afterLoad();\n    else window.addEventListener('load', afterLoad, { once: true });\n  }\n\n  function preloadThemeProductImages(scope = document, includeVariants = false) {\n    const sources = new Map();\n    qsa('[data-theme-product-image]', scope).forEach(image => {\n      const source = image.dataset.darkSrc;\n      if (source && !sources.has(source)) sources.set(source, [image.dataset.darkSrcset || '', image.getAttribute('sizes') || '']);\n    });\n    if (includeVariants) {\n      qsa('[data-variant-dark-image-url],[data-dark-image-url]', scope).forEach(control => {\n        const source = control.dataset.variantDarkImageUrl || control.dataset.darkImageUrl;\n        if (source && !sources.has(source)) sources.set(source, ['', '']);\n      });\n    }\n    return Promise.all([...sources].map(([source, [sourceSet, sizes]]) => warmThemeImage(source, sourceSet, sizes)));\n  }\n\n  function initPatternField() {\n    const canvas = qs('canvas[data-pattern-field]');\n    if (!canvas || canvas.dataset.pointerReady === 'true') return;\n    const context = canvas.getContext('2d', { alpha: true, desynchronized: true });\n    if (!context) return;\n    canvas.dataset.pointerReady = 'true';\n    const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');\n    const constrainedMotion = window.matchMedia('(pointer: coarse), (max-width: 900px)');\n    const patternImage = new Image();\n    patternImage.decoding = 'async';\n    let width = 0;\n    let height = 0;\n    let pixelRatio = 1;\n    let sweepTimer = 0;\n    let sweepFrame = 0;\n    let resizeFrame = 0;\n    let activeSweep = null;\n    let layerWorldTop = 0;\n    let layoutViewportWidth = window.innerWidth;\n    let previousPathIndex = -1;\n    let previousDirection = null;\n    let repeatedDirectionCount = 0;\n\n    const patternPaths = [\n      { from: .24, to: .58 },\n      { from: .64, to: .32 },\n      { from: .34, to: .66 },\n      { from: .70, to: .44 },\n      { from: .46, to: .27 },\n      { from: .39, to: .61 }\n    ];\n    const patternRandom = (() => {\n      const randomSeed = new Uint32Array(1);\n      if (window.crypto?.getRandomValues) window.crypto.getRandomValues(randomSeed);\n      else randomSeed[0] = (Date.now() ^ Math.floor(performance.now() * 1000)) >>> 0;\n      let seed = randomSeed[0] || 0x6D2B79F5;\n      return () => {\n        seed += 0x6D2B79F5;\n        let value = seed;\n        value = Math.imul(value ^ value >>> 15, value | 1);\n        value ^= value + Math.imul(value ^ value >>> 7, value | 61);\n        return ((value ^ value >>> 14) >>> 0) / 4294967296;\n      };\n    })();\n\n    const timing = () => constrainedMotion.matches\n      ? { initialDelay: 650, duration: 7200, rest: 3200, fade: 900 }\n      : { initialDelay: 650, duration: 7800, rest: 2600, fade: 900 };\n    const clamp = (value, minimum, maximum) => Math.min(maximum, Math.max(minimum, value));\n    const smoothstep = value => value * value * (3 - 2 * value);\n    const clearCanvas = () => {\n      context.setTransform(1, 0, 0, 1, 0, 0);\n      context.clearRect(0, 0, canvas.width, canvas.height);\n    };\n    const resizeCanvas = () => {\n      const bounds = canvas.getBoundingClientRect();\n      width = Math.max(1, Math.ceil(bounds.width || window.innerWidth));\n      height = Math.max(1, Math.ceil(bounds.height || window.innerHeight));\n      pixelRatio = Math.min(window.devicePixelRatio || 1, constrainedMotion.matches ? 1.5 : 2);\n      const nextWidth = Math.max(1, Math.round(width * pixelRatio));\n      const nextHeight = Math.max(1, Math.round(height * pixelRatio));\n      if (canvas.width !== nextWidth || canvas.height !== nextHeight) {\n        canvas.width = nextWidth;\n        canvas.height = nextHeight;\n      }\n      clearCanvas();\n      resizeFrame = 0;\n    };\n    const scheduleResize = () => {\n      if (!resizeFrame) resizeFrame = requestAnimationFrame(resizeCanvas);\n    };\n    const placePatternLayer = () => {\n      layerWorldTop = window.scrollY;\n      const viewportHeight = Math.max(1, Math.round(window.visualViewport?.height || window.innerHeight));\n      canvas.style.top = `${layerWorldTop}px`;\n      canvas.style.height = `${viewportHeight}px`;\n    };\n    const revealGeometry = () => {\n      const tileWidth = constrainedMotion.matches ? 345 : clamp(width * .41, 525, 625);\n      return {\n        tileWidth,\n        tileHeight: tileWidth * .5524691358,\n        radius: constrainedMotion.matches ? clamp(width * .34, 110, 165) : clamp(width * .18, 175, 235)\n      };\n    };\n    const drawPattern = (x, y, opacity) => {\n      clearCanvas();\n      if (!patternImage.complete || !patternImage.naturalWidth || opacity <= .001) return;\n      context.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n      const { tileWidth, tileHeight, radius } = revealGeometry();\n      const outerRadius = radius * 1.5;\n      const left = Math.max(0, x - outerRadius);\n      const right = Math.min(width, x + outerRadius);\n      const top = Math.max(0, y - outerRadius);\n      const bottom = Math.min(height, y + outerRadius);\n      if (right <= left || bottom <= top) return;\n\n      const horizontalOrigin = (width - tileWidth) / 2;\n      // This viewport-sized canvas is physically placed in document space once\n      // per pass. The browser compositor then scrolls it natively, while the\n      // repeated artwork remains aligned with one continuous document field.\n      const verticalOrigin = -(layerWorldTop % tileHeight);\n      const firstColumn = horizontalOrigin + Math.floor((left - horizontalOrigin) / tileWidth) * tileWidth;\n      const firstRow = verticalOrigin + Math.floor((top - verticalOrigin) / tileHeight) * tileHeight;\n      context.save();\n      context.beginPath();\n      context.rect(left, top, right - left, bottom - top);\n      context.clip();\n      for (let drawY = firstRow; drawY < bottom; drawY += tileHeight) {\n        for (let drawX = firstColumn; drawX < right; drawX += tileWidth) {\n          context.drawImage(patternImage, drawX, drawY, tileWidth, tileHeight);\n        }\n      }\n      context.globalCompositeOperation = 'destination-in';\n      const reveal = context.createRadialGradient(x, y, 0, x, y, outerRadius);\n      reveal.addColorStop(0, `rgba(255,255,255,${.047 * opacity})`);\n      reveal.addColorStop(.227, `rgba(255,255,255,${.047 * opacity})`);\n      reveal.addColorStop(.387, `rgba(255,255,255,${.034 * opacity})`);\n      reveal.addColorStop(.42, `rgba(255,255,255,${.03 * opacity})`);\n      reveal.addColorStop(.58, `rgba(255,255,255,${.022 * opacity})`);\n      reveal.addColorStop(.667, `rgba(255,255,255,${.008 * opacity})`);\n      reveal.addColorStop(.72, `rgba(255,255,255,${.0043 * opacity})`);\n      reveal.addColorStop(1, 'rgba(255,255,255,0)');\n      context.fillStyle = reveal;\n      context.fillRect(left, top, right - left, bottom - top);\n      context.restore();\n    };\n    const stopSweep = () => {\n      window.clearTimeout(sweepTimer);\n      if (sweepFrame) cancelAnimationFrame(sweepFrame);\n      sweepTimer = 0;\n      sweepFrame = 0;\n      activeSweep = null;\n      clearCanvas();\n    };\n    const scheduleSweep = delay => {\n      window.clearTimeout(sweepTimer);\n      if (reducedMotion.matches || document.hidden || !patternImage.complete) return;\n      sweepTimer = window.setTimeout(startSweep, delay);\n    };\n    const nextPatternPath = () => {\n      let nextIndex = Math.floor(patternRandom() * patternPaths.length);\n      if (nextIndex === previousPathIndex) nextIndex = (nextIndex + 1 + Math.floor(patternRandom() * (patternPaths.length - 1))) % patternPaths.length;\n      previousPathIndex = nextIndex;\n      return patternPaths[nextIndex];\n    };\n    const nextPatternDirection = () => {\n      if (previousDirection === null) {\n        previousDirection = root.lang === 'ar';\n        return previousDirection;\n      }\n      const shouldAlternate = repeatedDirectionCount >= 1 || patternRandom() < .72;\n      const nextDirection = shouldAlternate ? !previousDirection : previousDirection;\n      repeatedDirectionCount = nextDirection === previousDirection ? repeatedDirectionCount + 1 : 0;\n      previousDirection = nextDirection;\n      return nextDirection;\n    };\n    const startSweep = () => {\n      if (reducedMotion.matches || document.hidden) {\n        stopSweep();\n        return;\n      }\n      placePatternLayer();\n      resizeCanvas();\n      const baseTiming = timing();\n      const duration = Math.round(baseTiming.duration * (.94 + patternRandom() * .12));\n      const rest = Math.round(baseTiming.rest + (patternRandom() - .5) * 1000);\n      const fade = Math.round(baseTiming.fade * (.94 + patternRandom() * .12));\n      const intensity = .94 + patternRandom() * .12;\n      const { radius } = revealGeometry();\n      const outerRadius = radius * 1.5;\n      const reverse = nextPatternDirection();\n      const path = nextPatternPath();\n      const edge = outerRadius + 18;\n      const startX = reverse ? width + edge : -edge;\n      const endX = reverse ? -edge : width + edge;\n      activeSweep = {\n        duration,\n        rest,\n        fade,\n        intensity,\n        path,\n        startX,\n        endX,\n        startedAt: performance.now()\n      };\n      const renderSweep = now => {\n        if (!activeSweep) return;\n        const elapsed = now - activeSweep.startedAt;\n        const progress = Math.min(1, elapsed / activeSweep.duration);\n        const eased = .5 - Math.cos(Math.PI * progress) / 2;\n        const x = activeSweep.startX + (activeSweep.endX - activeSweep.startX) * eased;\n        // The layer itself is document-anchored, so scrolling is handled by the\n        // browser compositor and never enters this animation loop.\n        const y = height * (activeSweep.path.from + (activeSweep.path.to - activeSweep.path.from) * eased);\n        const fadeIn = smoothstep(clamp(elapsed / activeSweep.fade, 0, 1));\n        const fadeOut = smoothstep(clamp((activeSweep.duration - elapsed) / activeSweep.fade, 0, 1));\n        drawPattern(x, y, Math.min(fadeIn, fadeOut) * activeSweep.intensity);\n        if (progress < 1) {\n          sweepFrame = requestAnimationFrame(renderSweep);\n        } else {\n          sweepFrame = 0;\n          const nextDelay = activeSweep.rest;\n          activeSweep = null;\n          clearCanvas();\n          scheduleSweep(nextDelay);\n        }\n      };\n      sweepFrame = requestAnimationFrame(renderSweep);\n    };\n    document.addEventListener('visibilitychange', () => {\n      stopSweep();\n      if (!document.hidden) scheduleSweep(600);\n    });\n    reducedMotion.addEventListener?.('change', () => {\n      stopSweep();\n      if (!reducedMotion.matches) scheduleSweep(600);\n    });\n    constrainedMotion.addEventListener?.('change', scheduleResize);\n    window.addEventListener('resize', () => {\n      // Mobile browser chrome changes viewport height while scrolling. Do not\n      // reallocate the active canvas for those height-only changes; a genuine\n      // layout/orientation change also changes the viewport width.\n      if (Math.abs(window.innerWidth - layoutViewportWidth) < 1) return;\n      layoutViewportWidth = window.innerWidth;\n      stopSweep();\n      scheduleResize();\n      scheduleSweep(200);\n    }, { passive: true });\n    let scrollStateTimer = 0;\n    window.addEventListener('scroll', () => {\n      root.classList.add('is-scrolling');\n      window.clearTimeout(scrollStateTimer);\n      scrollStateTimer = window.setTimeout(() => root.classList.remove('is-scrolling'), 140);\n    }, { passive: true });\n    patternImage.onload = () => {\n      resizeCanvas();\n      scheduleSweep(timing().initialDelay);\n    };\n    patternImage.src = canvas.dataset.patternSource || '';\n  }\n\n  // Dark images come from Shopify Files at width=1600; derive smaller CDN widths for srcset.\n  function darkSrcsetFor(source, widths) {\n    if (!source || !/[?&]width=1600\\b/.test(source)) return '';\n    return [...widths.map(width => `${source.replace(/([?&]width=)1600\\b/, `$1${width}`)} ${width}w`), `${source} 1600w`].join(', ');\n  }\n\n  function syncThemeProductImages(scope = document) {\n    const dark = root.dataset.theme === 'dark';\n    qsa('[data-theme-product-image]', scope).forEach(image => {\n      const source = (dark ? image.dataset.darkSrc : image.dataset.lightSrc) || image.dataset.lightSrc;\n      const sourceSet = (dark ? image.dataset.darkSrcset : image.dataset.lightSrcset) || '';\n      if (sourceSet) image.setAttribute('srcset', sourceSet);\n      else image.removeAttribute('srcset');\n      if (source && image.getAttribute('src') !== source) image.setAttribute('src', source);\n    });\n  }\n\n  function syncThemeIcons() {\n    const copy = instantCopy;\n    qsa('[data-theme-toggle]').forEach(el => {\n      el.setAttribute('aria-pressed', String(root.dataset.theme === 'dark'));\n      const label = root.dataset.theme === 'dark' ? copy.ariaThemeDark : copy.ariaTheme;\n      el.setAttribute('aria-label', label);\n      el.setAttribute('title', label);\n    });\n  }\n  function formatMoney(cents) {\n    const amount = (Number(cents || 0) / 100).toLocaleString(document.documentElement.lang === 'ar' ? 'ar-AE' : 'en-AE', {maximumFractionDigits: 0});\n    return `AED ${amount}`;\n  }\n\n  function announce(message) {\n    if (!liveRegion) return;\n    liveRegion.textContent = '';\n    requestAnimationFrame(() => { liveRegion.textContent = message; });\n  }\n\n  function message(key) {\n    return runtimeCopy.messages[key];\n  }\n\n  function arabicUnitLabel(value) {\n    const number = Number(value);\n    if (number === 1) return runtimeCopy.calculator.unit_one;\n    if (number === 2) return runtimeCopy.calculator.unit_two;\n    if (Number.isInteger(number) && number >= 3 && number <= 10) return runtimeCopy.calculator.unit_many;\n    return runtimeCopy.calculator.unit_one;\n  }\n\n  function setVariantInventoryLimit(variantId, limit) {\n    const id = String(variantId || '');\n    if (!id) return;\n    const parsed = numberOrNull(limit);\n    if (parsed === null) return;\n    variantInventoryLimits.set(id, Math.max(0, Math.floor(parsed)));\n  }\n\n  function collectVariantInventoryLimits(scope = document) {\n    qsa('[data-variant-id][data-inventory-limit]', scope).forEach(el => setVariantInventoryLimit(el.dataset.variantId, el.dataset.inventoryLimit));\n    qsa('option[value][data-inventory-limit]', scope).forEach(option => setVariantInventoryLimit(option.value, option.dataset.inventoryLimit));\n  }\n\n  function getVariantInventoryLimit(variantId) {\n    const id = String(variantId || '');\n    if (!id) return null;\n    if (variantInventoryLimits.has(id)) return variantInventoryLimits.get(id);\n    const escaped = CSS.escape(id);\n    const source = qs(`[data-variant-id=\"${escaped}\"][data-inventory-limit]`) || qs(`option[value=\"${escaped}\"][data-inventory-limit]`);\n    if (source) {\n      setVariantInventoryLimit(id, source.dataset.inventoryLimit);\n      return variantInventoryLimits.has(id) ? variantInventoryLimits.get(id) : null;\n    }\n    return null;\n  }\n\n  function clampVariantQuantity(variantId, quantity) {\n    const next = Math.max(0, Number(quantity || 0));\n    const limit = getVariantInventoryLimit(variantId);\n    return limit === null ? next : Math.min(next, limit);\n  }\n\n  function syncStepperLimitState(stepper, quantity) {\n    if (!stepper) return;\n    const limit = getVariantInventoryLimit(stepper.dataset.variantId);\n    qsa('[data-card-qty-change], [data-product-qty-change], [data-cart-delta]', stepper).forEach(button => {\n      const delta = Number(button.dataset.cardQtyChange || button.dataset.productQtyChange || button.dataset.cartDelta || 0);\n      if (delta > 0) button.disabled = limit !== null && Number(quantity || 0) >= limit;\n    });\n  }\n\n  function persistDesiredQuantitiesForNavigation() {\n    if (!desiredVariantQuantities.size) return;\n    const entries = {};\n    desiredVariantQuantities.forEach((quantity, variantId) => { entries[variantId] = quantity; });\n    try {\n      sessionStorage.setItem(pendingCartStorageKey, JSON.stringify({ ts: Date.now(), entries }));\n    } catch (_) {}\n  }\n\n  function loadPendingCartQuantities() {\n    let payload = null;\n    try {\n      payload = JSON.parse(sessionStorage.getItem(pendingCartStorageKey) || 'null');\n      sessionStorage.removeItem(pendingCartStorageKey);\n    } catch (_) {}\n    if (!payload || !payload.entries || Date.now() - Number(payload.ts || 0) > 60000) return false;\n    Object.entries(payload.entries).forEach(([variantId, quantity]) => {\n      desiredVariantQuantities.set(String(variantId), clampVariantQuantity(variantId, quantity));\n    });\n    return desiredVariantQuantities.size > 0;\n  }\n\n  function scheduleDesiredQuantitySyncs() {\n    [...desiredVariantQuantities.entries()].forEach(([variantId, quantity]) => scheduleVariantSync(variantId, quantity));\n  }\n  function createNavigationController({ document, window, URL, history, sessionStorage, navigator, fetch, DOMParser, root, qs, qsa, closeCart, scrollTargetForHash, clearHashScroll, scrollToHashTarget, cleanHomeSectionUrl, isHomePath, homePathKey, animateScrollTo, prefersReducedMotion, stripLocalePrefix, bindCalculatorInputs, applyReconstitutionPresetFromUrl, applyInstantLocale, syncLocalizedLinks, updateCalculators }) {\n\n    function navigateWithMotion(url) {\n      closeCart();\n      document.body?.classList.remove('is-page-exiting');\n      const next = new URL(url, window.location.href);\n      if (next.origin !== window.location.origin) {\n        startPageExit();\n        window.location.href = next.href;\n        return;\n      }\n      if (next.hash) {\n        const currentTarget = scrollTargetForHash(next.hash);\n        if (currentTarget) {\n          clearHashScroll();\n          scrollToHashTarget(next.hash, 'smooth');\n          cleanHomeSectionUrl(next);\n          return;\n        }\n      }\n      const currentIsHome = isHomePath(window.location.pathname);\n      const nextIsHome = isHomePath(next.pathname);\n      const sameHome = currentIsHome && nextIsHome && homePathKey(window.location.pathname) === homePathKey(next.pathname);\n      const samePath = next.pathname === window.location.pathname && next.search === window.location.search;\n      if (sameHome && !next.hash) {\n        clearHashScroll();\n        animateScrollTo(0, true);\n        history.pushState(history.state, '', `${next.pathname}${next.search}`);\n        return;\n      }\n      if (samePath && next.hash) {\n        const target = scrollTargetForHash(next.hash);\n        if (target) {\n          scrollToHashTarget(next.hash, 'smooth');\n          cleanHomeSectionUrl(next);\n          return;\n        }\n      }\n      if (samePath && !next.hash) {\n        clearHashScroll();\n        animateScrollTo(0, true);\n        history.pushState(history.state, '', next.href);\n        return;\n      }\n      if (isHomePath(next.pathname) && (next.hash === '#products' || next.hash === '#faq')) {\n        next.searchParams.set('pqnav', next.hash.slice(1));\n      }\n      if (next.hash) {\n        try { sessionStorage.setItem('pq_scroll_hash', next.hash); } catch (_) {}\n      }\n      startPageExit();\n      window.location.href = next.href;\n    }\n  \n    function isNavigationUrl(href) {\n      let url;\n      try { url = new URL(href, window.location.href); } catch (_) { return null; }\n      if (url.origin !== window.location.origin) return null;\n      if (!/^https?:$/.test(url.protocol)) return null;\n      if (/^\\/(?:cart|checkout|checkouts|account)(?:\\/|$)/.test(stripLocalePrefix(url.pathname))) return null;\n      if (url.pathname === window.location.pathname && url.search === window.location.search && url.hash) return null;\n      return url;\n    }\n  \n    function startPageExit() {\n      if (prefersReducedMotion()) return;\n      document.body?.classList.add('is-page-exiting');\n    }\n  \n    const prefetchedPages = new Set();\n    const calculatorPageCache = new Map();\n    let calculatorSwapIntent = 0;\n    function prefetchPage(href) {\n      if (navigator.connection?.saveData) return;\n      const url = isNavigationUrl(href);\n      if (!url) return;\n      url.hash = '';\n      const key = url.href;\n      if (prefetchedPages.has(key)) return;\n      prefetchedPages.add(key);\n      const link = document.createElement('link');\n      link.rel = 'prefetch';\n      link.href = key;\n      link.as = 'document';\n      document.head.appendChild(link);\n    }\n  \n    function isCalculatorPageUrl(url) {\n      return Boolean(url && /\\/pages\\/(?:dosage-calculator|reconstitution-calculator)\\/?$/.test(stripLocalePrefix(url.pathname)));\n    }\n  \n    async function fetchCalculatorPage(href) {\n      const url = isNavigationUrl(href);\n      if (!url || !isCalculatorPageUrl(url)) return null;\n      url.hash = '';\n      const key = url.href;\n      if (!calculatorPageCache.has(key)) {\n        calculatorPageCache.set(key, fetch(key, { credentials: 'same-origin' })\n          .then(response => {\n            if (!response.ok) throw new Error('Unable to load calculator');\n            return response.text();\n          })\n          .then(html => {\n            const doc = new DOMParser().parseFromString(html, 'text/html');\n            const calculator = doc.querySelector('[data-calculator]');\n            if (!calculator) throw new Error('Calculator section missing');\n            return { html: calculator.outerHTML, title: doc.title };\n          })\n          .catch(error => {\n            calculatorPageCache.delete(key);\n            throw error;\n          }));\n      }\n      return calculatorPageCache.get(key);\n    }\n  \n    function prefetchCalculatorTabs(scope = document) {\n      if (navigator.connection?.saveData) return;\n      qsa('.calculator-tabs a[href]', scope).forEach(link => {\n        fetchCalculatorPage(link.href).catch(() => {});\n      });\n    }\n  \n    async function swapCalculatorPage(href, { replace = false } = {}) {\n      const current = qs('[data-calculator]');\n      if (!current) return false;\n      const url = isNavigationUrl(href);\n      if (!url || !isCalculatorPageUrl(url)) return false;\n      const intent = ++calculatorSwapIntent;\n      const previousUrl = window.location.href;\n      let page;\n      try {\n        page = await fetchCalculatorPage(url.href);\n      } catch (error) {\n        if (intent !== calculatorSwapIntent || window.location.href !== previousUrl) return false;\n        throw error;\n      }\n      if (intent !== calculatorSwapIntent || window.location.href !== previousUrl || !current.isConnected) return false;\n      if (!page?.html) return false;\n      const container = document.createElement('div');\n      container.innerHTML = page.html.trim();\n      const nextCalculator = qs('[data-calculator]', container);\n      if (!nextCalculator) return false;\n      nextCalculator.classList.add('calculator--ready');\n      current.replaceWith(nextCalculator);\n      if (page.title) document.title = page.title;\n      if (replace) history.replaceState(history.state, '', `${url.pathname}${url.search}`);\n      else history.pushState(history.state, '', `${url.pathname}${url.search}`);\n      bindCalculatorInputs(nextCalculator);\n      applyReconstitutionPresetFromUrl();\n      applyInstantLocale(root.lang);\n      syncLocalizedLinks(root.lang);\n      prefetchCalculatorTabs(nextCalculator);\n      updateCalculators();\n      return true;\n    }\n    return { navigateWithMotion, isNavigationUrl, startPageExit, prefetchPage, isCalculatorPageUrl, fetchCalculatorPage, prefetchCalculatorTabs, swapCalculatorPage };\n  }\n  const { navigateWithMotion, isNavigationUrl, startPageExit, prefetchPage, isCalculatorPageUrl, fetchCalculatorPage, prefetchCalculatorTabs, swapCalculatorPage } = createNavigationController({ document, window, URL, history, sessionStorage, navigator, fetch, DOMParser, root, qs, qsa, closeCart: (...args) => closeCart(...args), scrollTargetForHash, clearHashScroll, scrollToHashTarget, cleanHomeSectionUrl, isHomePath, homePathKey, animateScrollTo, prefersReducedMotion, stripLocalePrefix, bindCalculatorInputs, applyReconstitutionPresetFromUrl, applyInstantLocale, syncLocalizedLinks, updateCalculators });\n  function createModalController({ window, document, HTMLElement, root, qs, qsa, scrim, cartDrawer, mobileDock, mobileDockMenu, mobileDockMenuButton, mobileDockMedia, closeCart, requestAnimationFrame }) {\n    let mobileDockReturnFocus = null;\n    let scrimHideTimer = 0;\n    let modalScrollY = 0;\n    let modalScrollLocked = false;\n    const pageRegionState = new WeakMap();\n    function lockModalScroll() {\n      if (modalScrollLocked) return;\n      modalScrollLocked = true;\n      modalScrollY = Math.max(0, window.scrollY || root.scrollTop || 0);\n      root.style.setProperty('--pq-modal-scroll-top', `${-modalScrollY}px`);\n      root.classList.add('pq-modal-open');\n    }\n  \n    function unlockModalScroll() {\n      if (!modalScrollLocked) return;\n      const restoreY = modalScrollY;\n      modalScrollLocked = false;\n      modalScrollY = 0;\n      root.classList.remove('pq-modal-open');\n      root.style.removeProperty('--pq-modal-scroll-top');\n      window.scrollTo(0, restoreY);\n    }\n  \n    function setPageRegionsInert(inert) {\n      qsa('.site-main, .site-footer').forEach(region => {\n        if (inert) {\n          if (!pageRegionState.has(region)) pageRegionState.set(region, { ariaHidden: region.getAttribute('aria-hidden'), inert: region.inert });\n          region.inert = true;\n          region.setAttribute('aria-hidden', 'true');\n          return;\n        }\n        if (!pageRegionState.has(region)) return;\n        const previous = pageRegionState.get(region);\n        region.inert = previous.inert;\n        if (previous.ariaHidden === null) region.removeAttribute('aria-hidden');\n        else region.setAttribute('aria-hidden', previous.ariaHidden);\n        pageRegionState.delete(region);\n      });\n      if (inert) lockModalScroll();\n      else unlockModalScroll();\n    }\n  \n    function showModalScrim() {\n      if (!scrim) return;\n      window.clearTimeout(scrimHideTimer);\n      scrim.hidden = false;\n      void scrim.offsetWidth;\n      scrim.classList.add('is-visible');\n    }\n  \n    function hideModalScrim() {\n      if (!scrim) return;\n      scrim.classList.remove('is-visible');\n      window.clearTimeout(scrimHideTimer);\n      scrimHideTimer = window.setTimeout(() => {\n        if (!cartDrawer?.classList.contains('is-open') && !mobileDock?.classList.contains('is-menu-open')) scrim.hidden = true;\n      }, 240);\n    }\n  \n    function closeMobileDockMenu({ restoreFocus = true, preserveScrim = false, preserveIsolation = false } = {}) {\n      if (!mobileDock || !mobileDockMenu || !mobileDockMenuButton) return;\n      const wasOpen = mobileDock.classList.contains('is-menu-open');\n      mobileDock.classList.remove('is-menu-open');\n      mobileDockMenu.setAttribute('aria-hidden', 'true');\n      mobileDockMenuButton.setAttribute('aria-expanded', 'false');\n      const label = mobileDockMenuButton.dataset.menuOpenLabel;\n      if (label) { mobileDockMenuButton.setAttribute('aria-label', label); mobileDockMenuButton.setAttribute('title', label); }\n      root.classList.remove('pq-mobile-menu-open');\n      if (!preserveScrim && !cartDrawer?.classList.contains('is-open')) hideModalScrim();\n      if (!preserveIsolation && !cartDrawer?.classList.contains('is-open')) setPageRegionsInert(false);\n      if (wasOpen && restoreFocus && mobileDockReturnFocus?.isConnected) mobileDockReturnFocus.focus({ preventScroll: true });\n      mobileDockReturnFocus = null;\n    }\n  \n    function openMobileDockMenu() {\n      if (!mobileDockMedia.matches || !mobileDock || !mobileDockMenu || !mobileDockMenuButton) return;\n      if (!mobileDock.classList.contains('is-menu-open') && document.activeElement instanceof HTMLElement) mobileDockReturnFocus = document.activeElement;\n      closeCart({ restoreFocus: false, preserveScrim: true, preserveIsolation: true });\n      mobileDock.classList.add('is-menu-open');\n      mobileDockMenu.setAttribute('aria-hidden', 'false');\n      mobileDockMenuButton.setAttribute('aria-expanded', 'true');\n      const label = mobileDockMenuButton.dataset.menuCloseLabel;\n      if (label) { mobileDockMenuButton.setAttribute('aria-label', label); mobileDockMenuButton.setAttribute('title', label); }\n      root.classList.add('pq-mobile-menu-open');\n      showModalScrim();\n      setPageRegionsInert(true);\n      requestAnimationFrame(() => {\n        if (mobileDock.classList.contains('is-menu-open')) mobileDockMenu.focus({ preventScroll: true });\n      });\n    }\n  \n    function toggleMobileDockMenu() {\n      if (mobileDock?.classList.contains('is-menu-open')) closeMobileDockMenu();\n      else openMobileDockMenu();\n    }\n    return { setPageRegionsInert, showModalScrim, hideModalScrim, closeMobileDockMenu, openMobileDockMenu, toggleMobileDockMenu };\n  }\n  function scrollTargetForHash(hash) {\n    const target = qs(hash);\n    if (!target) return null;\n    if (hash === '#products') return qs('h2', target) || target;\n    if (hash === '#faq') return qs('h2', target) || target;\n    return target;\n  }\n\n  function scrollToHashTarget(hash, behavior = 'smooth', focusDestination = false) {\n    const target = scrollTargetForHash(hash);\n    if (!target) return false;\n    animateScrollToTarget(target, behavior !== 'auto', focusDestination);\n    return true;\n  }\n\n  function elementLayoutTop(target) {\n    let top = 0;\n    let node = target;\n    while (node) {\n      top += node.offsetTop || 0;\n      node = node.offsetParent;\n    }\n    return top;\n  }\n\n  function viewportMetrics() {\n    const viewport = window.visualViewport;\n    const height = Number(viewport?.height) || window.innerHeight || root.clientHeight || 0;\n    const width = Number(viewport?.width) || window.innerWidth || root.clientWidth || 0;\n    return {\n      height,\n      width,\n      offsetTop: Number(viewport?.offsetTop) || 0\n    };\n  }\n\n  function stickyHeaderHeight() {\n    const cssHeight = Number.parseFloat(getComputedStyle(root).getPropertyValue('--pq-header-h')) || 68;\n    const headerHeight = qs('.site-header')?.getBoundingClientRect().height || 0;\n    // The delivery bar sticks directly under the header, so anchored sections clear both.\n    const deliveryBarHeight = qs('.delivery-bar')?.getBoundingClientRect().height || 0;\n    return Math.max(cssHeight, headerHeight) + deliveryBarHeight;\n  }\n\n  function targetScrollTop(target) {\n    const currentViewport = viewportMetrics();\n    const headerOffset = stickyHeaderHeight();\n    const anchorGap = Number.parseFloat(getComputedStyle(root).getPropertyValue('--pq-anchor-gap')) || 4;\n    const productsSection = target.closest?.('#products');\n    if (productsSection && window.matchMedia('(min-width: 901px)').matches) {\n      const viewport = currentViewport;\n      const heading = qs('.products-heading, .section-heading', productsSection) || target;\n      const cards = qsa('.products-grid > .product-card', productsSection);\n      if (cards.length) {\n        const productsGrid = qs('.products-grid', productsSection);\n        const groupTop = elementLayoutTop(heading);\n        productsGrid?.style.removeProperty('--pq-products-row-gap');\n        // Keep only the heading anchor fixed. The product grid retains its\n        // natural row spacing, so taller/tucked viewports may reveal row two.\n        return Math.max(0, groupTop - viewport.offsetTop - headerOffset - 24);\n      }\n    }\n    if (target.matches('.products-grid')) {\n      const documentTop = target.getBoundingClientRect().top + currentScrollTop();\n      return Math.max(0, documentTop - currentViewport.offsetTop - headerOffset - anchorGap);\n    }\n    return Math.max(0, elementLayoutTop(target) - currentViewport.offsetTop - headerOffset - anchorGap);\n  }\n\n  function productsFrameIsWrong(target, expectedTop, viewportChanged = false) {\n    const productsSection = target.closest?.('#products');\n    if (!productsSection || !window.matchMedia('(min-width: 901px)').matches) return false;\n    const heading = qs('.products-heading, .section-heading', productsSection) || target;\n    const cards = qsa('.products-grid > .product-card', productsSection);\n    if (!cards.length) return Math.abs(expectedTop - currentScrollTop()) > 2;\n    const firstRowTop = cards[0].offsetTop;\n    const firstRow = cards.filter(card => Math.abs(card.offsetTop - firstRowTop) < 2);\n    const viewport = viewportMetrics();\n    const visibleTop = viewport.offsetTop;\n    const visibleBottom = visibleTop + viewport.height;\n    const headerBottom = visibleTop + stickyHeaderHeight();\n    const headingRect = heading.getBoundingClientRect();\n    const firstRowBottom = Math.max(...firstRow.map(card => card.getBoundingClientRect().bottom));\n    const frameFits = headingRect.top >= headerBottom - 1 &&\n      firstRowBottom <= visibleBottom + 1;\n    const delta = Math.abs(expectedTop - currentScrollTop());\n    return delta > 2 && (!frameFits || (viewportChanged && delta > 4));\n  }\n\n  function prefersReducedMotion() {\n    return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n  }\n\n  function scrollElement() {\n    return document.scrollingElement || document.documentElement || document.body;\n  }\n\n  function currentScrollTop() {\n    return scrollElement().scrollTop || window.pageYOffset || 0;\n  }\n\n  function setScrollTop(top) {\n    scrollElement().scrollTop = Math.max(0, top);\n  }\n\n  function runNativeSectionScroll(destination, token, onSettled) {\n    const targetTop = Math.max(0, destination);\n    const startTop = currentScrollTop();\n    if (Math.abs(targetTop - startTop) < 1) {\n      onSettled();\n      return;\n    }\n    let lastTop = startTop;\n    let stableFrames = 0;\n    const startedAt = performance.now();\n    try {\n      window.scrollTo({ top: targetTop, left: 0, behavior: 'smooth' });\n    } catch (_) {\n      setScrollTop(targetTop);\n      onSettled();\n      return;\n    }\n    const observeSettlement = now => {\n      if (token !== scrollAnimationToken) return;\n      const currentTop = currentScrollTop();\n      const moved = Math.abs(currentTop - lastTop) > .25;\n      const arrived = Math.abs(currentTop - targetTop) < 1.5;\n      stableFrames = arrived && !moved ? stableFrames + 1 : 0;\n      lastTop = currentTop;\n      if (stableFrames >= 3 || now - startedAt > 2200) {\n        onSettled();\n        return;\n      }\n      requestAnimationFrame(observeSettlement);\n    };\n    requestAnimationFrame(observeSettlement);\n  }\n\n  function animateScrollToTarget(target, smooth = true, focusDestination = false) {\n    const token = ++scrollAnimationToken;\n    root.classList.add('is-programmatic-scrolling');\n    const begin = () => requestAnimationFrame(() => requestAnimationFrame(() => {\n      if (token !== scrollAnimationToken) return;\n      const destination = targetScrollTop(target);\n      const finish = () => {\n        requestAnimationFrame(() => requestAnimationFrame(() => {\n          if (token !== scrollAnimationToken) return;\n          const correctedTarget = targetScrollTop(target);\n          if (productsFrameIsWrong(target, correctedTarget, true) || Math.abs(correctedTarget - currentScrollTop()) > 2) {\n            setScrollTop(correctedTarget);\n          }\n          root.classList.remove('is-programmatic-scrolling');\n          if (focusDestination && target.isConnected) {\n            const hadTabindex = target.hasAttribute('tabindex');\n            if (!hadTabindex) {\n              target.setAttribute('tabindex', '-1');\n              target.addEventListener('blur', () => target.removeAttribute('tabindex'), { once: true });\n            }\n            target.focus({ preventScroll: true });\n          }\n        }));\n      };\n      if (!smooth || prefersReducedMotion()) {\n        setScrollTop(destination);\n        finish();\n        return;\n      }\n      runNativeSectionScroll(destination, token, finish);\n    }));\n    if (document.fonts?.status === 'loading') {\n      let started = false;\n      const startWhenReady = () => {\n        if (started) return;\n        started = true;\n        begin();\n      };\n      document.fonts.ready.then(startWhenReady);\n      window.setTimeout(startWhenReady, 160);\n    } else {\n      begin();\n    }\n  }\n\n  function animateScrollTo(top, smooth = true) {\n    const token = ++scrollAnimationToken;\n    const y = Math.max(0, top);\n    if (!smooth || prefersReducedMotion()) {\n      root.classList.remove('is-programmatic-scrolling');\n      setScrollTop(y);\n      return;\n    }\n    if (Math.abs(y - currentScrollTop()) < 1) return;\n    root.classList.add('is-programmatic-scrolling');\n    runNativeSectionScroll(y, token, () => {\n      if (token !== scrollAnimationToken) return;\n      if (Math.abs(y - currentScrollTop()) > 2) setScrollTop(y);\n      root.classList.remove('is-programmatic-scrolling');\n    });\n  }\n\n  function cancelProgrammaticScroll() {\n    if (!root.classList.contains('is-programmatic-scrolling')) return;\n    scrollAnimationToken += 1;\n    root.classList.remove('is-programmatic-scrolling');\n  }\n\n  ['wheel', 'touchstart', 'pointerdown', 'keydown'].forEach(type => {\n    window.addEventListener(type, cancelProgrammaticScroll, { passive: true });\n  });\n\n  function cleanHomeSectionUrl(url = new URL(window.location.href)) {\n    const isHome = isHomePath(url.pathname);\n    const section = url.hash === '#products' || url.hash === '#faq' || url.searchParams.has('pqnav');\n    if (!isHome || !section) return;\n    const params = new URLSearchParams(url.search);\n    params.delete('pqnav');\n    const clean = `${url.pathname}${params.toString() ? `?${params.toString()}` : ''}`;\n    window.setTimeout(() => {\n      if (window.location.pathname === url.pathname) history.replaceState(history.state, '', clean);\n    }, 520);\n  }\n\n  function cleanCurrentHomeSectionUrl(delay = 620) {\n    window.setTimeout(() => cleanHomeSectionUrl(new URL(window.location.href)), delay);\n  }\n\n  function isReloadNavigation() {\n    const nav = performance.getEntriesByType?.('navigation')?.[0];\n    if (nav?.type === 'reload') return true;\n    return performance.navigation?.type === 1;\n  }\n\n  function resetHomeReloadScroll() {\n    if (!isReloadNavigation()) return;\n    if (!isHomePath(window.location.pathname)) return;\n    const isSectionHash = window.location.hash === '#products' || window.location.hash === '#faq';\n    const hasLegacySectionParam = new URLSearchParams(window.location.search).has('pqnav');\n    if (window.location.hash && !isSectionHash) return;\n    if (isSectionHash || hasLegacySectionParam) cleanHomeSectionUrl(new URL(window.location.href));\n    setScrollTop(0);\n    requestAnimationFrame(() => setScrollTop(0));\n  }\n\n  function shouldHandleSmoothNav(link, event) {\n    if (!link || event.defaultPrevented) return false;\n    if (event.button && event.button !== 0) return false;\n    if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return false;\n    if (link.target && link.target !== '_self') return false;\n    return true;\n  }\n\n  function closeMobileNav() {\n    const nav = qs('[data-mobile-nav]');\n    if (nav) nav.classList.remove('is-open');\n    qsa('[data-menu-toggle]').forEach(menu => {\n      menu.setAttribute('aria-expanded', 'false');\n      if (menu.dataset.menuOpenLabel) { menu.setAttribute('aria-label', menu.dataset.menuOpenLabel); menu.setAttribute('title', menu.dataset.menuOpenLabel); }\n    });\n    closeMobileDockMenu();\n  }\n\n  const { setPageRegionsInert, showModalScrim, hideModalScrim, closeMobileDockMenu, openMobileDockMenu, toggleMobileDockMenu } = createModalController({\n    window, document, HTMLElement, root, qs, qsa, scrim, cartDrawer, mobileDock, mobileDockMenu, mobileDockMenuButton, mobileDockMedia, closeCart: (...args) => closeCart(...args), requestAnimationFrame: callback => requestAnimationFrame(callback)\n  });\n\n  mobileDockMedia.addEventListener?.('change', event => {\n    if (!event.matches) closeMobileDockMenu({ restoreFocus: false });\n  });\n\n  function isHomePath(pathname) {\n    return pathname === '/' || pathname === '/ar' || pathname === '/ar/';\n  }\n\n  function homePathKey(pathname) {\n    return pathname === '/ar' ? '/ar/' : pathname;\n  }\n\n  function handleHomeLogo(link, event) {\n    if (!shouldHandleSmoothNav(link, event)) return false;\n    let url;\n    try { url = new URL(link.href, window.location.href); } catch (_) { return false; }\n    if (url.origin !== window.location.origin) return false;\n    if (!isHomePath(url.pathname) || !isHomePath(window.location.pathname)) return false;\n    if (homePathKey(url.pathname) !== homePathKey(window.location.pathname)) return false;\n    event.preventDefault();\n    event.stopImmediatePropagation();\n    clearHashScroll();\n    closeCart();\n    closeMobileNav();\n    animateScrollTo(0, true);\n    return true;\n  }\n\n  function handleHomeSectionLink(link, event) {\n    if (!shouldHandleSmoothNav(link, event)) return false;\n    let url;\n    try { url = new URL(link.href, window.location.href); } catch (_) { return false; }\n    if (url.origin !== window.location.origin || !isHomePath(url.pathname)) return false;\n    if (url.hash !== '#products' && url.hash !== '#faq') return false;\n    event.preventDefault();\n    clearHashScroll();\n    closeCart();\n    closeMobileNav();\n    if (isHomePath(window.location.pathname) && homePathKey(window.location.pathname) === homePathKey(url.pathname)) {\n      history.replaceState(history.state, '', `${homePathKey(url.pathname)}${url.search}`);\n      scrollToHashTarget(url.hash, 'smooth', event.detail === 0);\n      return true;\n    }\n    try {\n      sessionStorage.setItem('pq_scroll_hash', url.hash);\n      sessionStorage.setItem('pq_scroll_focus', event.detail === 0 ? '1' : '0');\n    } catch (_) {}\n    startPageExit();\n    window.location.href = `${homePathKey(url.pathname)}${url.search}`;\n    return true;\n  }\n\n  function scrollToCurrentHash() {\n    let hash = '';\n    let focusDestination = false;\n    try {\n      hash = sessionStorage.getItem('pq_scroll_hash') || '';\n      focusDestination = sessionStorage.getItem('pq_scroll_focus') === '1';\n      sessionStorage.removeItem('pq_scroll_hash');\n      sessionStorage.removeItem('pq_scroll_focus');\n    } catch (_) {}\n    if (!hash) return;\n    let attempts = 0;\n    const token = ++hashScrollToken;\n    const scroll = () => {\n      if (token !== hashScrollToken) return;\n      const target = scrollTargetForHash(hash);\n      if (target) {\n        scrollToHashTarget(hash, 'smooth', focusDestination);\n        cleanHomeSectionUrl();\n        return;\n      }\n      attempts += 1;\n      if (attempts < 4) window.setTimeout(scroll, 80);\n    };\n    window.setTimeout(scroll, 20);\n  }\n  // Keep only strings required by interactive controls in the main bundle.\n  // Page copy is already server-rendered from Shopify locales, so the large\n  // FAQ, delivery, about, and legal dictionaries do not need to be parsed on\n  // every page (especially on mobile).\n  const instantCopy = runtimeCopy.instant;\n\n  function applyInstantLocale(locale, { updateUrl = false } = {}) {\n    const copy = instantCopy;\n    root.lang = locale;\n    root.dir = locale === 'ar' ? 'rtl' : 'ltr';\n    config.root = locale === 'ar' ? '/ar/' : '/';\n    qsa('[data-hero-heading], [data-hero-eyebrow]').forEach(el => el.setAttribute('dir', locale === 'ar' ? 'rtl' : 'ltr'));\n    qsa('[data-language-toggle]').forEach(el => {\n      el.dataset.targetLocale = locale === 'ar' ? 'en' : 'ar';\n      el.setAttribute('aria-label', copy.ariaLanguage);\n      el.setAttribute('title', copy.ariaLanguage);\n    });\n    qsa('[data-theme-toggle]').forEach(el => {\n      const label = root.dataset.theme === 'dark' ? copy.ariaThemeDark : copy.ariaTheme;\n      el.setAttribute('aria-label', label);\n      el.setAttribute('title', label);\n    });\n    qsa('[data-cart-open]').forEach(el => {\n      el.setAttribute('aria-label', copy.ariaCart);\n      el.setAttribute('title', copy.ariaCart);\n    });\n    qsa('[data-i18n-aria]').forEach(el => {\n      const value = copy[el.dataset.i18nAria];\n      if (value) el.setAttribute('aria-label', value);\n    });\n    qsa('[data-cart-checkout-form]').forEach(form => {\n      form.setAttribute('action', locale === 'ar' ? '/ar/cart' : '/cart');\n    });\n    qsa('[data-add-to-cart]').forEach(button => {\n      button.dataset.defaultLabel = copy.addToCart;\n      if (!button._peptiqueAddedTimer && !button.hidden && !button.disabled) button.textContent = copy.addToCart;\n    });\n    qsa('[data-product-submit]').forEach(button => {\n      const textNode = qs('[data-product-submit-text]', button);\n      if (!textNode || button.disabled || button.hidden || button._peptiqueAddedTimer) return;\n      button.dataset.defaultLabel = copy.addToCart;\n      textNode.textContent = copy.addToCart;\n    });\n    qsa('[data-menu-toggle],[data-mobile-dock-menu-toggle]').forEach(el => {\n      const label = el.getAttribute('aria-expanded') === 'true' && el.dataset.menuCloseLabel ? el.dataset.menuCloseLabel : copy.ariaMenu;\n      el.setAttribute('aria-label', label);\n      el.setAttribute('title', label);\n    });\n    qsa('[data-i18n]').forEach(el => {\n      const value = getCopyValue(copy, el.dataset.i18n);\n      if (value) el.textContent = value;\n    });\n    qsa('[data-i18n-html]').forEach(el => {\n      const value = getCopyValue(copy, el.dataset.i18nHtml);\n      if (value) el.innerHTML = value;\n    });\n    qsa('[data-i18n-placeholder]').forEach(el => {\n      const value = getCopyValue(copy, el.dataset.i18nPlaceholder);\n      if (value) el.setAttribute('placeholder', value);\n    });\n    const legalPage = qs('[data-legal-page]');\n    if (legalPage) {\n      const policy = legalPage.dataset.legalPage;\n      const legal = copy.legal?.[policy];\n      if (legal) {\n        qsa('[data-legal-title]').forEach(el => { el.textContent = legal.title; });\n        qsa('[data-legal-section]').forEach(section => {\n          const pair = legal.sections[Number(section.dataset.legalSection) - 1];\n          if (!pair) return;\n          const heading = qs('h2', section);\n          const body = qs('p', section);\n          if (heading) heading.textContent = pair[0];\n          if (body) body.textContent = pair[1];\n        });\n      }\n    }\n    if (legalPage && locale === 'ar') {\n      qsa('[data-legal-section] h2').forEach(sectionHeading => {\n        const section = sectionHeading.closest('[data-legal-section]');\n        const index = section?.dataset.legalSection;\n        if (!index) return;\n        sectionHeading.textContent = `${index}. ${sectionHeading.textContent.replace(/^[\\u0660-\\u0669]+[.\uFF0E]\\s*/, '')}`;\n      });\n    }\n    try { localStorage.removeItem('pq_lang'); } catch (_) {}\n    if (updateUrl) history.replaceState(history.state, '', localeUrl(locale));\n    syncLocalizedLinks(locale);\n    updateCalculators();\n  }\n\n  function resetCheckoutButtons() {\n    const copy = instantCopy;\n    qsa('input[type=\"hidden\"][name=\"checkout\"]').forEach(input => input.remove());\n    qsa('.cart-checkout').forEach(button => {\n      button.disabled = false;\n      button.removeAttribute('aria-busy');\n      button.classList.remove('is-loading');\n      const text = qs('[data-i18n=\"checkout\"]', button);\n      if (text) text.textContent = copy.checkout;\n    });\n  }\n\n  function setCheckoutLoading(button) {\n    if (!button) return;\n    const checkoutText = qs('[data-i18n=\"checkout\"]', button);\n    const checkoutCopy = instantCopy;\n    button.setAttribute('aria-busy', 'true');\n    button.classList.add('is-loading');\n    if (checkoutText) checkoutText.textContent = checkoutCopy.checkoutLoading;\n  }\n\n  function stripLocalePrefix(path) {\n    return (path || '/').replace(/^(?:\\/ar)+(?:\\/|$)/, '/') || '/';\n  }\n\n  function normalizeCurrentLocalePath() {\n    if (!/^\\/ar\\/ar(?=\\/|$)/.test(window.location.pathname)) return;\n    const cleanBasePath = stripLocalePrefix(window.location.pathname);\n    const cleanPath = cleanBasePath === '/' ? '/ar' : `/ar${cleanBasePath}`;\n    window.location.replace(`${cleanPath}${window.location.search}${window.location.hash}`);\n  }\n\n  function localeUrl(targetLocale) {\n    const path = stripLocalePrefix(window.location.pathname);\n    const search = window.location.search;\n    const hash = window.location.hash;\n    if (targetLocale === 'ar') return `${path === '/' ? '/ar' : `/ar${path}`}${search}${hash}`;\n    return `${path}${search}${hash}`;\n  }\n\n  function localizeInternalHref(href, locale) {\n    const url = new URL(href, window.location.href);\n    if (url.origin !== window.location.origin) return href;\n    if (url.pathname === '/checkout' || url.pathname.startsWith('/checkouts/')) return href;\n    let path = stripLocalePrefix(url.pathname);\n    if (locale === 'ar') path = path === '/' ? '/ar' : `/ar${path}`;\n    return `${path}${url.search}${url.hash}`;\n  }\n\n  function syncLocalizedLinks(locale = root.lang) {\n    qsa('a[href^=\"/\"]').forEach(link => {\n      if (link.hasAttribute('download')) return;\n      link.setAttribute('href', localizeInternalHref(link.getAttribute('href'), locale));\n    });\n  }\n\n  function prefetchOppositeLocale() {\n    prefetchPage(localeUrl(root.lang === 'ar' ? 'en' : 'ar'));\n  }\n\n  normalizeCurrentLocalePath();\n  syncLocalizedLinks(root.lang);\n\n  function createOfferHandoffController({ window, history, fetch, URL, Date, storage, config }) {\n    const storageKey = 'pq_offer_context';\n    const endpoint = `${String(config.offerApi || 'https://offer.peptique.ae/api').replace(/\\/$/, '')}/offer-context`;\n    const emailPattern = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\n    function validContext(value) {\n      return value && emailPattern.test(value.email || '') && /^[A-Z0-9-]+$/.test(value.code || '') && Number(value.expiresAt) * 1000 > Date.now();\n    }\n\n    function read() {\n      try {\n        const value = JSON.parse(storage.getItem(storageKey));\n        if (validContext(value)) return value;\n        storage.removeItem(storageKey);\n      } catch (_) {}\n      return null;\n    }\n\n    function write(value) {\n      try { storage.setItem(storageKey, JSON.stringify(value)); } catch (_) {}\n    }\n\n    function clearTokenFromUrl(url) {\n      url.searchParams.delete('pq_offer');\n      history.replaceState(history.state, '', `${url.pathname}${url.search}${url.hash}`);\n    }\n\n    async function init() {\n      const current = new URL(window.location.href);\n      const token = current.searchParams.get('pq_offer');\n      if (!token) return read();\n      const requestUrl = new URL(endpoint);\n      requestUrl.searchParams.set('token', token);\n      const response = await fetch(requestUrl, { headers: { Accept: 'application/json' }, credentials: 'omit' });\n      const payload = await response.json().catch(() => ({}));\n      if (!response.ok || !validContext(payload)) throw new Error('Offer handoff failed');\n      write(payload);\n      clearTokenFromUrl(current);\n      return payload;\n    }\n\n    function checkoutUrl(cart) {\n      const offer = read();\n      if (!offer || !Array.isArray(cart?.items) || !cart.items.length) return null;\n      const lines = cart.items.map(item => {\n        const id = Number(item.variant_id || item.id);\n        const quantity = Number(item.quantity);\n        return Number.isInteger(id) && id > 0 && Number.isInteger(quantity) && quantity > 0 ? `${id}:${quantity}` : null;\n      }).filter(Boolean);\n      if (!lines.length || lines.length !== cart.items.length) return null;\n      const localeRoot = config.root === '/ar/' ? '/ar/' : '/';\n      const destination = new URL(`${localeRoot}cart/${lines.join(',')}`, window.location.origin);\n      destination.searchParams.set('checkout[email]', offer.email);\n      destination.searchParams.set('discount', offer.code);\n      destination.searchParams.set('ref', 'offer_landing_10');\n      return destination.toString();\n    }\n\n    // Saves a first-order context created on the storefront itself (popup signup).\n    function save(value) {\n      if (!validContext(value)) return false;\n      write(value);\n      return true;\n    }\n\n    return { init, read, save, checkoutUrl };\n  }\n  const offerHandoff = createOfferHandoffController({\n    window,\n    history,\n    fetch: window.fetch.bind(window),\n    URL,\n    Date,\n    storage: window.sessionStorage,\n    config,\n  });\n  offerHandoff.init().catch(() => {});\n\n  function offerCheckoutUrl(cart) {\n    return offerHandoff.checkoutUrl(cart);\n  }\n  function createCartDrawerController({\n    cartDrawer, mobileDock, root, qsa, document, HTMLElement,\n    requestAnimationFrame, closeMobileDockMenu, showModalScrim,\n    hideModalScrim, setPageRegionsInert, isCartRendered,\n    ensureCartRendered, announce, message\n  }) {\n    let cartReturnFocus = null;\n    let cartOpenIntent = 0;\n    let cartOpenPending = false;\n\n    function setCartTriggersBusy(busy) {\n      qsa('[data-cart-open]').forEach(button => {\n        if (busy) button.setAttribute('aria-busy', 'true');\n        else button.removeAttribute('aria-busy');\n      });\n    }\n\n    function openCart() {\n      if (!cartDrawer) return;\n      cartOpenIntent += 1;\n      cartOpenPending = false;\n      setCartTriggersBusy(false);\n      closeMobileDockMenu({ restoreFocus: false, preserveScrim: true, preserveIsolation: true });\n      const wasOpen = cartDrawer.classList.contains('is-open');\n      if (!wasOpen && document.activeElement instanceof HTMLElement) cartReturnFocus = document.activeElement;\n      cartDrawer.classList.add('is-open');\n      mobileDock?.classList.add('is-cart-open');\n      cartDrawer.setAttribute('aria-hidden', 'false');\n      qsa('.mobile-dock__item--cart').forEach(button => button.setAttribute('aria-expanded', 'true'));\n      root.classList.add('pq-mobile-cart-open');\n      showModalScrim();\n      setPageRegionsInert(true);\n      if (!wasOpen) {\n        requestAnimationFrame(() => {\n          if (cartDrawer.classList.contains('is-open')) {\n            cartDrawer.focus({ preventScroll: true });\n          }\n        });\n      }\n    }\n\n    function closeCart({ restoreFocus = true, preserveScrim = false, preserveIsolation = false } = {}) {\n      if (!cartDrawer) return;\n      cartOpenIntent += 1;\n      cartOpenPending = false;\n      setCartTriggersBusy(false);\n      const wasOpen = cartDrawer.classList.contains('is-open');\n      cartDrawer.classList.remove('is-open');\n      mobileDock?.classList.remove('is-cart-open');\n      cartDrawer.setAttribute('aria-hidden', 'true');\n      qsa('.mobile-dock__item--cart').forEach(button => button.setAttribute('aria-expanded', 'false'));\n      root.classList.remove('pq-mobile-cart-open');\n      if (!preserveScrim && !mobileDock?.classList.contains('is-menu-open')) hideModalScrim();\n      if (!preserveIsolation && !mobileDock?.classList.contains('is-menu-open')) setPageRegionsInert(false);\n      if (wasOpen && restoreFocus && cartReturnFocus?.isConnected) cartReturnFocus.focus({ preventScroll: true });\n      cartReturnFocus = null;\n    }\n\n    async function toggleCart() {\n      if (!cartDrawer) return;\n      if (cartDrawer.classList.contains('is-open')) {\n        closeCart();\n        return;\n      }\n      if (cartOpenPending) {\n        cartOpenIntent += 1;\n        cartOpenPending = false;\n        setCartTriggersBusy(false);\n        return;\n      }\n\n      const intent = ++cartOpenIntent;\n      cartOpenPending = true;\n      setCartTriggersBusy(true);\n      let ready = isCartRendered();\n      try {\n        if (!ready) {\n          await ensureCartRendered();\n          ready = isCartRendered();\n        }\n      } catch (error) {\n        if (intent === cartOpenIntent) announce(error.message || message('cart_load_failed'));\n      }\n\n      if (intent !== cartOpenIntent) return;\n      cartOpenPending = false;\n      setCartTriggersBusy(false);\n      if (ready) openCart();\n    }\n\n    return { openCart, closeCart, toggleCart };\n  }\n  const { openCart, closeCart, toggleCart } = createCartDrawerController({\n    cartDrawer, mobileDock, root, qsa, document, HTMLElement,\n    requestAnimationFrame: callback => requestAnimationFrame(callback),\n    closeMobileDockMenu, showModalScrim, hideModalScrim, setPageRegionsInert,\n    isCartRendered: () => isCartRendered(),\n    ensureCartRendered: () => ensureCartRendered(), announce, message\n  });\n  function createAvailabilityController({ window, history, URLSearchParams, Event, root, runtimeCopy, qs, qsa, announce, message, persistDesiredQuantitiesForNavigation, navigateWithMotion }) {\n    let pendingStoqVariant = null;\n    function selectedProductVariantForStoq(trigger = null) {\n      const section = trigger?.closest('[data-product-section]') || qs('[data-product-section]');\n      if (!section) return null;\n      const select = qs('[data-variant-select]', section);\n      const selectedOption = select?.selectedOptions?.[0];\n      if (!selectedOption) return null;\n      const visibleOptionTitle = qsa('.variant-field', section)\n        .map(group => qs('input:checked', group)?.closest('.variant-pill')?.querySelector('span')?.textContent?.trim())\n        .filter(Boolean)\n        .join(' / ');\n      return {\n        id: String(selectedOption.value),\n        title: visibleOptionTitle || selectedOption.textContent?.trim() || '',\n        productTitle: trigger?.dataset.productTitle || qs('.product-info h1', section)?.textContent?.trim() || ''\n      };\n    }\n  \n    let stoqOpenTimer = 0;\n    let stoqOpenToken = 0;\n  \n    function cancelStoqOpenIntent() {\n      stoqOpenToken += 1;\n      window.clearTimeout(stoqOpenTimer);\n      stoqOpenTimer = 0;\n    }\n  \n    function openStoqWaitlist(trigger = null, { silent = false } = {}) {\n      cancelStoqOpenIntent();\n      if (tryOpenStoqWaitlist(trigger)) return true;\n      if (!silent) announce(message('availability_loading'));\n      const token = stoqOpenToken;\n      const page = window.location.pathname;\n      let attempts = 0;\n      const retry = () => {\n        if (token !== stoqOpenToken || window.location.pathname !== page) return;\n        attempts += 1;\n        if (tryOpenStoqWaitlist(trigger) || attempts >= 20) {\n          stoqOpenTimer = 0;\n          return;\n        }\n        stoqOpenTimer = window.setTimeout(retry, 250);\n      };\n      stoqOpenTimer = window.setTimeout(retry, 250);\n      return false;\n    }\n  \n    function tryOpenStoqWaitlist(trigger = null) {\n      const productUrl = trigger?.dataset?.productUrl;\n      if (productUrl && !trigger.closest('[data-product-section]')) {\n        persistDesiredQuantitiesForNavigation();\n        navigateWithMotion(productUrl);\n        return true;\n      }\n      pendingStoqVariant = selectedProductVariantForStoq(trigger) || pendingStoqVariant;\n      const selectors = [\n        '.restock-rocket-button-product',\n        '.restock-rocket-button-float',\n        '.restock-rocket-button',\n        '[class*=\"restock-rocket-button\"]',\n        '[class*=\"stoq\"][role=\"button\"]',\n        'button[class*=\"stoq\"]'\n      ];\n      const button = selectors.map(selector => qs(selector)).find(Boolean);\n      if (button) {\n        button.click();\n        const params = new URLSearchParams(window.location.search);\n        if (params.get('notify') === '1') {\n          params.delete('notify');\n          const search = params.toString();\n          history.replaceState(history.state, '', `${window.location.pathname}${search ? `?${search}` : ''}${window.location.hash}`);\n        }\n        window.setTimeout(localizeStoqWaitlist, 80);\n        window.setTimeout(localizeStoqWaitlist, 400);\n        return true;\n      }\n      return false;\n    }\n  \n    function synchronizeStoqVariant(select) {\n      if (!select) return null;\n      const requestedOption = pendingStoqVariant\n        ? [...select.options].find(option => String(option.value) === pendingStoqVariant.id)\n        : null;\n      if (requestedOption && select.value !== requestedOption.value) {\n        select.value = requestedOption.value;\n        select.dispatchEvent(new Event('input', { bubbles: true }));\n        select.dispatchEvent(new Event('change', { bubbles: true }));\n      }\n      select.hidden = true;\n      select.tabIndex = -1;\n      select.setAttribute('aria-hidden', 'true');\n      return requestedOption || select.selectedOptions?.[0] || null;\n    }\n  \n    function localizeStoqWaitlist() {\n      const isAr = root.lang === 'ar';\n      const copy = runtimeCopy.notification;\n      const successMessage = copy.providerSuccess;\n      const successMessages = new Set([\n        'Thank you! We will notify you when the product is available.',\n        'Thank you! We will notify you when the product is available',\n        copy.success,\n        successMessage\n      ]);\n      const replacements = new Map([\n        ['Availability alert', copy.eyebrow],\n        ['Back in stock alert', copy.eyebrow],\n        ['Notify me when available', copy.title],\n        ['Notify Me When Available', copy.title],\n        ['Get notified by email', copy.title],\n        ['Email address', copy.email],\n        ['Email Address', copy.email],\n        ['Email', copy.email],\n        ['Submit', copy.submit],\n        ['Notify me', copy.submit],\n        ['Subscribe', copy.submit],\n        ['When this product is back in stock, we will send you an email.', copy.consent],\n        ['Get a notification as soon as this product is back in stock by signing up below!', copy.consent],\n        [\"Promise we won't spam. You'll only receive notifications for this product.\", copy.consent],\n        ['You\u2019re on the list. We\u2019ll email you when it becomes available.', copy.success],\n        [\"You're on the list. We'll email you when it becomes available.\", copy.success],\n        ['You are registered. We will email you when it becomes available.', copy.success],\n        ['You\u2019re already registered for this alert.', copy.already],\n        [\"You're already registered for this alert.\", copy.already],\n        ['Enter a valid email address.', copy.emailError],\n        ['Unable to subscribe. Please try again.', copy.error]\n      ]);\n      const stoqNodes = qsa('[class*=\"restock-rocket\"], [class*=\"stoq\"]');\n      const stoqTextNodes = [...new Set(stoqNodes.flatMap(element => [element, ...qsa('*', element)]))];\n      stoqTextNodes.forEach(element => {\n        if (element.children.length) return;\n        const text = element.textContent?.trim();\n        if (replacements.has(text)) element.textContent = replacements.get(text);\n        if (element.getAttribute('aria-label') === 'Close modal') element.setAttribute('aria-label', copy.close);\n      });\n      qsa('[class*=\"restock-rocket\"] input, [class*=\"stoq\"] input, .restock-rocket-wrapper input').forEach(input => {\n        if (input.type === 'email') {\n          input.placeholder = copy.email;\n          input.setAttribute('aria-label', copy.email);\n          const alignArabicEmailInput = () => {\n            const hasValue = Boolean(input.value);\n            input.dir = isAr && !hasValue ? 'rtl' : 'ltr';\n            input.style.setProperty('direction', isAr && !hasValue ? 'rtl' : 'ltr', 'important');\n            input.style.setProperty('text-align', isAr && !hasValue ? 'right' : 'left', 'important');\n          };\n          alignArabicEmailInput();\n          if (!input._peptiqueStoqAlignBound) {\n            input._peptiqueStoqAlignBound = true;\n            input.addEventListener('input', alignArabicEmailInput);\n            input.addEventListener('focus', alignArabicEmailInput);\n            input.addEventListener('blur', alignArabicEmailInput);\n          }\n        }\n      });\n      let selectedStoqOption = null;\n      qsa('.restock-rocket-wrapper select, [class*=\"restock-rocket\"] select, [class*=\"stoq\"] select').forEach(select => {\n        selectedStoqOption = synchronizeStoqVariant(select) || selectedStoqOption;\n      });\n      qsa('[class*=\"restock-rocket\"], [class*=\"stoq\"], .restock-rocket-wrapper, .restock-rocket-wrapper [id=formContainer]').forEach(element => {\n        const dir = isAr ? 'rtl' : 'ltr';\n        const align = isAr ? 'right' : 'left';\n        if (element.dir !== dir) element.dir = dir;\n        if (element.style.textAlign !== align) element.style.textAlign = align;\n      });\n      qsa('[class*=\"restock-rocket\"] button, [class*=\"stoq\"] button, .restock-rocket-wrapper input[type=\"submit\"]').forEach(button => {\n        const text = button.textContent?.trim();\n        if (text && replacements.has(text)) button.textContent = replacements.get(text);\n        if (button.getAttribute('aria-label') === 'Close' || button.getAttribute('aria-label') === 'Close modal' || button.getAttribute('aria-label') === copy.close) button.setAttribute('aria-label', copy.close);\n      });\n      const header = qs('#form-Header-Text, [id=\"form-Header-Text\"]');\n      if (header) header.textContent = copy.title;\n      const productName = qs('#form-Product-Name, [id=\"form-Product-Name\"]');\n      if (productName) {\n        const productTitle = pendingStoqVariant?.productTitle || productName.dataset.peptiqueProductTitle || productName.textContent?.trim() || '';\n        const variantTitle = pendingStoqVariant?.title || selectedStoqOption?.textContent?.trim() || '';\n        productName.dataset.peptiqueProductTitle = productTitle;\n        productName.textContent = variantTitle && variantTitle !== 'Default Title' ? `${productTitle} ${variantTitle}` : productTitle;\n      }\n      const description = qs('#form-Description, [id=\"form-Description\"]');\n      if (description) {\n        description.textContent = '';\n        description.hidden = true;\n        description.style.display = 'none';\n      }\n      const terms = qs('#form-Terms, [id=\"form-Terms\"]');\n      if (terms) terms.textContent = copy.consent;\n      const submit = qs('#form-Button, [id=\"form-Button\"]');\n      if (submit) submit.textContent = copy.submit;\n      stoqTextNodes.forEach(element => {\n        if (element.children.length || !successMessages.has(element.textContent?.trim())) return;\n        if (element.textContent !== successMessage) element.textContent = successMessage;\n        const dir = isAr ? 'rtl' : 'ltr';\n        if (element.dir !== dir) element.dir = dir;\n        if (element.lang !== root.lang) element.lang = root.lang;\n        if (element.style.getPropertyValue('text-align') !== 'center') element.style.setProperty('text-align', 'center', 'important');\n        if (element.style.getPropertyValue('direction') !== dir) element.style.setProperty('direction', dir, 'important');\n      });\n    }\n  \n    function scheduleStoqLocalization(delay = 80) {\n      window.clearTimeout(scheduleStoqLocalization.timer);\n      scheduleStoqLocalization.timer = window.setTimeout(localizeStoqWaitlist, delay);\n    }\n  \n    function openStoqFromNotifyParam() {\n      const params = new URLSearchParams(window.location.search);\n      if (params.get('notify') !== '1') return;\n      openStoqWaitlist(null, { silent: true });\n    }\n    return { selectedProductVariantForStoq, cancelStoqOpenIntent, openStoqWaitlist, tryOpenStoqWaitlist, synchronizeStoqVariant, localizeStoqWaitlist, scheduleStoqLocalization, openStoqFromNotifyParam };\n  }\n  const { selectedProductVariantForStoq, cancelStoqOpenIntent, openStoqWaitlist, tryOpenStoqWaitlist, synchronizeStoqVariant, localizeStoqWaitlist, scheduleStoqLocalization, openStoqFromNotifyParam } = createAvailabilityController({ window, history, URLSearchParams, Event, root, runtimeCopy, qs, qsa, announce, message, persistDesiredQuantitiesForNavigation, navigateWithMotion });\n  function createCartController({ config, fetch, message, root, qs, qsa, desiredVariantQuantities, clampVariantQuantity, syncStepperLimitState, getVariantInventoryLimit, document, instantCopy, cartDrawer, escapeHtml, formatMoney, setVariantInventoryLimit, window, CSS, announce, openCart }) {\n    let lastVisibleCartItems = [];\n    let complimentaryBacStatus = 'none';\n    let cartQueue = Promise.resolve();\n    let cartPendingOps = 0;\n    let cartSnapshot = null;\n    let cartReadPromise = null;\n    let cartHydrationPromise = null;\n    let cartRenderReady = false;\n    const variantSyncTimers = new Map();\n    const failedVariantQuantities = new Map();\n    const qtyFeedbackTimers = new Map();\n    async function getCart() {\n      if (cartReadPromise) return cartReadPromise;\n      cartReadPromise = fetch(`${config.root}cart.js`, { headers: { Accept: 'application/json' } })\n        .then(async response => {\n          if (!response.ok) throw new Error(message('cart_load_error'));\n          cartSnapshot = await response.json();\n          return cartSnapshot;\n        })\n        .finally(() => { cartReadPromise = null; });\n      return cartReadPromise;\n    }\n  \n    async function changeComplimentaryBacQuantity(item, quantity) {\n      const response = await fetch(`${config.root}cart/change.js`, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n        body: JSON.stringify({ id: item.key || String(item.variant_id), quantity: Number(quantity) })\n      });\n      if (!response.ok) throw new Error(message('complimentary_update_error'));\n      cartSnapshot = await response.json();\n      return cartSnapshot;\n    }\n  \n    function isComplimentaryBac(item) {\n      const properties = item.properties || {};\n      return properties._peptique_complimentary === 'true' || (\n        Number(config.bacVariant) === Number(item.variant_id) &&\n        Number(item.original_price ?? item.price ?? item.final_price ?? 0) === 0\n      );\n    }\n  \n    function visibleItemsFromCart(cart) {\n      return (cart?.items || [])\n        .map((item, index) => ({ item, index }))\n        .filter(({ item }) => !isComplimentaryBac(item));\n    }\n  \n    function cartQualifiesForComplimentaryBac(cart) {\n      const excludedHandle = String(config.bacProductHandle || 'bacteriostatic-water');\n      return visibleItemsFromCart(cart).some(({ item }) => {\n        const handle = String(item.handle || item.product_handle || '');\n        const listedUnitPrice = Number(item.original_price ?? item.price ?? 0);\n        return handle !== excludedHandle && listedUnitPrice > 0 && Number(item.quantity || 0) > 0;\n      });\n    }\n  \n    async function syncComplimentaryBac(cart, { validateExisting = false } = {}) {\n      const qualifies = cartQualifiesForComplimentaryBac(cart);\n      const giftEntries = (cart?.items || []).filter(isComplimentaryBac);\n      const giftIsAvailable = Boolean(config.bacVariant && config.bacAvailable);\n  \n      if (!qualifies || !giftIsAvailable) {\n        let nextCart = cart;\n        for (const gift of giftEntries) nextCart = await changeComplimentaryBacQuantity(gift, 0);\n        const unavailable = qualifies && Boolean(config.bacVariant) && !config.bacAvailable;\n        return { cart: nextCart, status: unavailable ? 'unavailable' : 'none' };\n      }\n  \n      if (!giftEntries.length) {\n        const response = await fetch(`${config.root}cart/add.js`, {\n          method: 'POST',\n          headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n          body: JSON.stringify({ items: [{\n            id: Number(config.bacVariant),\n            quantity: 1,\n            properties: { _peptique_complimentary: 'true' }\n          }] })\n        });\n        if (!response.ok) {\n          config.bacAvailable = false;\n          return { cart: await getCart().catch(() => cart), status: 'unavailable' };\n        }\n        return { cart: await getCart(), status: 'present' };\n      }\n  \n      let nextCart = cart;\n      if (validateExisting || Number(giftEntries[0].quantity || 0) !== 1) {\n        try {\n          nextCart = await changeComplimentaryBacQuantity(giftEntries[0], 1);\n        } catch (error) {\n          if (!validateExisting) throw error;\n          config.bacAvailable = false;\n          nextCart = await changeComplimentaryBacQuantity(giftEntries[0], 0);\n          return { cart: nextCart, status: 'unavailable' };\n        }\n      }\n      for (const duplicate of giftEntries.slice(1)) {\n        nextCart = await changeComplimentaryBacQuantity(duplicate, 0);\n      }\n      return { cart: nextCart, status: 'present' };\n    }\n  \n    function normalizeCartProductTitle(item) {\n      const title = String(item?.product_title || item?.title || '');\n      const handle = String(item?.handle || item?.product_handle || '');\n      if (handle === 'bpc-157-tb500' || /bpc[-\\s]*157/i.test(title) && /tb[-\\s]*500/i.test(title)) {\n        return 'BPC-157 + TB-500';\n      }\n      return title;\n    }\n  \n    function syncProductControlsFromVisibleItems(visibleItems) {\n      const quantities = new Map();\n      visibleItems.forEach(({ item }) => quantities.set(String(item.variant_id), Number(item.quantity || 0)));\n      qsa('[data-card-qty]').forEach(stepper => {\n        const variantId = String(stepper.dataset.variantId);\n        const purchasable = stepper.dataset.variantPurchasable === 'true';\n        const rawQuantity = desiredVariantQuantities.has(variantId)\n          ? desiredVariantQuantities.get(variantId)\n          : (quantities.get(variantId) || 0);\n        const quantity = purchasable ? clampVariantQuantity(variantId, rawQuantity) : Math.max(0, Number(rawQuantity || 0));\n        stepper.hidden = quantity <= 0;\n        const value = qs('[data-card-qty-value]', stepper);\n        if (value) value.textContent = quantity;\n        syncStepperLimitState(stepper, quantity);\n        const card = stepper.closest('.product-card');\n        const add = qs('[data-add-to-cart]', card);\n        const notify = qs('[data-card-notify]', card);\n        if (add) {\n          if (quantity <= 0) resetAddButton(add);\n          add.hidden = quantity > 0 || !purchasable;\n          const limit = getVariantInventoryLimit(variantId);\n          add.disabled = !purchasable || (limit !== null && limit <= 0);\n        }\n        if (notify) notify.hidden = quantity > 0 || purchasable;\n      });\n      qsa('[data-product-qty]').forEach(stepper => {\n        const variantId = String(stepper.dataset.variantId || '');\n        const purchasable = stepper.dataset.variantPurchasable === 'true';\n        const rawQuantity = desiredVariantQuantities.has(variantId)\n          ? desiredVariantQuantities.get(variantId)\n          : (quantities.get(variantId) || 0);\n        const quantity = purchasable ? clampVariantQuantity(variantId, rawQuantity) : Math.max(0, Number(rawQuantity || 0));\n        stepper.hidden = quantity <= 0;\n        const value = qs('[data-product-qty-value]', stepper);\n        if (value) value.textContent = quantity;\n        syncStepperLimitState(stepper, quantity);\n        const form = stepper.closest('.product-form') || document;\n        const add = qs('[data-product-submit]', form);\n        const notify = qs('[data-product-notify]', form);\n        if (add) {\n          if (quantity <= 0) resetAddButton(add);\n          add.hidden = quantity > 0 || !purchasable;\n          const limit = getVariantInventoryLimit(variantId);\n          add.disabled = !purchasable || (limit !== null && limit <= 0);\n        }\n        if (notify) notify.hidden = quantity > 0 || purchasable;\n      });\n    }\n  \n    function applyDesiredQuantities(visibleItems) {\n      let nextItems = visibleItems.map(entry => ({ index: entry.index, item: { ...entry.item } }));\n      desiredVariantQuantities.forEach((desired, variantId) => {\n        const id = Number(variantId);\n        desired = clampVariantQuantity(id, desired);\n        const index = nextItems.findIndex(({ item }) => Number(item.variant_id) === id);\n        if (index >= 0) {\n          if (desired <= 0) {\n            nextItems.splice(index, 1);\n            return;\n          }\n          const entry = nextItems[index];\n          const currentQty = Math.max(1, Number(entry.item.quantity || 1));\n          const unitPrice = Math.round(Number(entry.item.final_line_price || 0) / currentQty);\n          entry.item.quantity = desired;\n          entry.item.final_line_price = unitPrice * desired;\n          return;\n        }\n        if (desired <= 0) return;\n        const sourceButton = qsa('[data-add-to-cart],[data-product-submit]').find(button => Number(button.dataset.variantId) === id);\n        if (!sourceButton) return;\n        nextItems.push({ index: -1, item: {\n          key: `optimistic-${id}`,\n          variant_id: id,\n          product_title: sourceButton.dataset.productTitle || '',\n          variant_title: sourceButton.dataset.variantTitle || '',\n          quantity: desired,\n          final_line_price: Number(sourceButton.dataset.linePrice || 0) * desired,\n          image: ''\n        }});\n      });\n      return nextItems;\n    }\n  \n    function renderVisibleItems(visibleItems, totalPrice = null, bacStatus = complimentaryBacStatus) {\n      visibleItems = applyDesiredQuantities(visibleItems);\n      if (desiredVariantQuantities.size) totalPrice = visibleItems.reduce((sum, { item }) => sum + Number(item.final_line_price || 0), 0);\n      lastVisibleCartItems = visibleItems;\n      const visibleCount = visibleItems.reduce((sum, { item }) => sum + Number(item.quantity || 0), 0);\n      qsa('[data-cart-count]').forEach(el => {\n        const previousCount = Number(el.textContent || 0);\n        el.textContent = visibleCount;\n        el.classList.toggle('is-empty', visibleCount === 0);\n        el.closest('.cart-trigger')?.classList.toggle('has-items', visibleCount > 0);\n        el.closest('.mobile-dock__item--cart')?.classList.toggle('has-items', visibleCount > 0);\n        if (previousCount !== visibleCount && !window.matchMedia('(prefers-reduced-motion: reduce)').matches) {\n          el.classList.remove('is-updating');\n          void el.offsetWidth;\n          el.classList.add('is-updating');\n          el.addEventListener('animationend', () => el.classList.remove('is-updating'), { once: true });\n        }\n      });\n      syncProductControlsFromVisibleItems(visibleItems);\n      const lines = qs('[data-cart-lines]');\n      const notes = qsa('[data-cart-note],[data-cart-page-note]');\n      const notePresent = qsa('[data-cart-note-present]');\n      const noteUnavailable = qsa('[data-cart-note-unavailable]');\n      const footer = qs('[data-cart-footer]');\n      if (!lines) return;\n      if (!visibleItems.length) {\n        const copy = instantCopy;\n        cartDrawer?.classList.remove('is-filled');\n        lines.innerHTML = `<div class=\"cart-empty\"><div data-i18n=\"cartEmpty\">${copy.cartEmpty}</div><a class=\"cart-empty__browse\" href=\"${config.root}#products\" data-cart-close data-i18n=\"cartBrowse\">${copy.cartBrowse}</a></div>`;\n        notes.forEach(note => { note.hidden = true; });\n        notePresent.forEach(note => { note.hidden = true; });\n        noteUnavailable.forEach(note => { note.hidden = true; });\n        if (footer) footer.hidden = true;\n        cartRenderReady = true;\n        return;\n      }\n      cartDrawer?.classList.add('is-filled');\n      lines.innerHTML = visibleItems.map(({ item, index }) => {\n        const productTitle = normalizeCartProductTitle(item);\n        const variant = item.variant_title && item.variant_title !== 'Default Title' ? ` \u00B7 ${escapeHtml(item.variant_title)}` : '';\n        const lineIndex = Number.isFinite(index) && index >= 0 ? index + 1 : '';\n        const limit = getVariantInventoryLimit(item.variant_id);\n        const plusDisabled = limit !== null && Number(item.quantity || 0) >= limit ? ' disabled' : '';\n        return `<article class=\"cart-line\" data-line-key=\"${escapeHtml(item.key || item.variant_id || '')}\" data-variant-id=\"${escapeHtml(item.variant_id || '')}\">\n          <div class=\"cart-line__main\"><h3>${escapeHtml(productTitle)}${variant}</h3><div class=\"cart-line__price\">${formatMoney(item.final_line_price)}</div></div><div class=\"cart-line__qty\"><button type=\"button\" data-cart-change=\"${lineIndex}\" data-cart-delta=\"-1\" aria-label=\"${message('decrease_quantity')}\">\u2212</button><span>${item.quantity}</span><button type=\"button\" data-cart-change=\"${lineIndex}\" data-cart-delta=\"1\" aria-label=\"${message('increase_quantity')}\"${plusDisabled}>+</button></div>\n        </article>`;\n      }).join('');\n      const showPresentNote = bacStatus === 'present';\n      const showUnavailableNote = bacStatus === 'unavailable';\n      notes.forEach(note => { note.hidden = !showPresentNote && !showUnavailableNote; });\n      notePresent.forEach(note => { note.hidden = !showPresentNote; });\n      noteUnavailable.forEach(note => { note.hidden = !showUnavailableNote; });\n      if (footer) footer.hidden = false;\n      const total = qs('[data-cart-total]');\n      if (total && totalPrice !== null) total.textContent = formatMoney(totalPrice);\n      cartRenderReady = true;\n    }\n  \n    function optimisticAddFromButton(button, quantity = 1) {\n      const variantId = Number(button.dataset.variantId);\n      if (!variantId) return;\n      const productHandle = String(button.dataset.productHandle || '');\n      const excludedHandle = String(config.bacProductHandle || 'bacteriostatic-water');\n      if (productHandle && productHandle !== excludedHandle && config.bacVariant) {\n        complimentaryBacStatus = config.bacAvailable ? 'present' : 'unavailable';\n      }\n      setVariantInventoryLimit(variantId, button.dataset.inventoryLimit);\n      const current = desiredVariantQuantities.has(String(variantId))\n        ? desiredVariantQuantities.get(String(variantId))\n        : Number(lastVisibleCartItems.find(({ item }) => Number(item.variant_id) === variantId)?.item.quantity || 0);\n      optimisticSetVariantQuantity(variantId, current + Number(quantity || 1));\n    }\n  \n    function optimisticSetVariantQuantity(variantId, quantity) {\n      const id = Number(variantId);\n      const next = clampVariantQuantity(id, quantity);\n      desiredVariantQuantities.set(String(id), next);\n      const visibleItems = lastVisibleCartItems.map(entry => ({ index: entry.index, item: { ...entry.item } }));\n      const existingIndex = visibleItems.findIndex(({ item }) => Number(item.variant_id) === id);\n      if (existingIndex < 0) {\n        if (next <= 0) return;\n        const sourceButton = qsa('[data-add-to-cart],[data-product-submit]').find(button => Number(button.dataset.variantId) === id);\n        const price = Number(sourceButton?.dataset.linePrice || 0);\n        visibleItems.push({ index: -1, item: {\n          key: `optimistic-${id}`,\n          variant_id: id,\n          product_title: sourceButton?.dataset.productTitle || '',\n          variant_title: sourceButton?.dataset.variantTitle || '',\n          quantity: next,\n          final_line_price: price * next,\n          image: ''\n        }});\n        const total = visibleItems.reduce((sum, { item }) => sum + Number(item.final_line_price || 0), 0);\n        renderVisibleItems(visibleItems, total);\n        return;\n      }\n      if (next <= 0) {\n        visibleItems.splice(existingIndex, 1);\n      } else {\n        const existing = visibleItems[existingIndex];\n        const currentQty = Math.max(1, Number(existing.item.quantity || 1));\n        const unitPrice = Math.round(Number(existing.item.final_line_price || 0) / currentQty);\n        existing.item.quantity = next;\n        existing.item.final_line_price = unitPrice * next;\n      }\n      const total = visibleItems.reduce((sum, { item }) => sum + Number(item.final_line_price || 0), 0);\n      renderVisibleItems(visibleItems, total);\n      pulseQuantity(id);\n    }\n  \n    function scheduleVariantSync(variantId, quantity) {\n      const id = String(variantId);\n      failedVariantQuantities.delete(id);\n      desiredVariantQuantities.set(id, clampVariantQuantity(id, quantity));\n      window.clearTimeout(variantSyncTimers.get(id));\n      variantSyncTimers.set(id, window.setTimeout(() => {\n        const desired = desiredVariantQuantities.get(id) || 0;\n        enqueueCartOperation(async () => {\n          try {\n            const result = await setVariantQuantity(id, desired);\n            if ((desiredVariantQuantities.get(id) || 0) === desired) desiredVariantQuantities.delete(id);\n            return result;\n          } catch (error) {\n            if ((desiredVariantQuantities.get(id) || 0) === desired) {\n              failedVariantQuantities.set(id, desired);\n              desiredVariantQuantities.delete(id);\n            }\n            throw error;\n          }\n        });\n      }, 70));\n    }\n  \n    function syncVariantNow(variantId) {\n      const id = String(variantId);\n      window.clearTimeout(variantSyncTimers.get(id));\n      variantSyncTimers.delete(id);\n      const desired = desiredVariantQuantities.get(id);\n      if (desired === undefined) return Promise.resolve();\n      return enqueueCartOperation(async () => {\n        try {\n          const result = await setVariantQuantity(id, desired);\n          if ((desiredVariantQuantities.get(id) || 0) === desired) desiredVariantQuantities.delete(id);\n          failedVariantQuantities.delete(id);\n          return result;\n        } catch (error) {\n          if ((desiredVariantQuantities.get(id) || 0) === desired) {\n            failedVariantQuantities.set(id, desired);\n            desiredVariantQuantities.delete(id);\n          }\n          throw error;\n        }\n      }, { rejectOnError: true });\n    }\n  \n    async function flushCartSyncs() {\n      // Finish an already-running update before collecting retry intent.\n      await cartQueue;\n      failedVariantQuantities.forEach((quantity, id) => {\n        if (!desiredVariantQuantities.has(id)) desiredVariantQuantities.set(id, quantity);\n      });\n      const ids = [...desiredVariantQuantities.keys()];\n      if (!ids.length) return Promise.resolve();\n      ids.forEach(id => {\n        window.clearTimeout(variantSyncTimers.get(id));\n        variantSyncTimers.delete(id);\n      });\n      return ids.reduce((promise, id) => promise.then(() => syncVariantNow(id)), Promise.resolve());\n    }\n  \n    function setCardQuantity(stepper, quantity) {\n      const next = clampVariantQuantity(stepper.dataset.variantId, quantity);\n      stepper.hidden = next <= 0;\n      const value = qs('[data-card-qty-value]', stepper);\n      if (value) value.textContent = next;\n      syncStepperLimitState(stepper, next);\n      const add = stepper.previousElementSibling?.matches('[data-add-to-cart]') ? stepper.previousElementSibling : null;\n      if (add) {\n        if (next <= 0) resetAddButton(add);\n        add.hidden = next > 0;\n      }\n    }\n  \n    function pulseQuantity(variantId) {\n      const selector = `[data-variant-id=\"${CSS.escape(String(variantId))}\"]`;\n      qsa(`${selector} [data-card-qty-value], ${selector} [data-product-qty-value], .cart-line${selector} .cart-line__qty span`).forEach(value => {\n        value.classList.remove('pq-qty-pulse');\n        void value.offsetWidth;\n        value.classList.add('pq-qty-pulse');\n      });\n      window.clearTimeout(qtyFeedbackTimers.get(String(variantId)));\n      qtyFeedbackTimers.set(String(variantId), window.setTimeout(() => {\n        qsa(`${selector} [data-card-qty-value], ${selector} [data-product-qty-value], .cart-line${selector} .cart-line__qty span`).forEach(value => value.classList.remove('pq-qty-pulse'));\n      }, 280));\n    }\n  \n    function pendingComplimentaryBacStatus() {\n      const excludedHandle = String(config.bacProductHandle || 'bacteriostatic-water');\n      const hasPendingPeptide = [...desiredVariantQuantities.entries()].some(([variantId, quantity]) => {\n        if (Number(quantity || 0) <= 0 || Number(variantId) === Number(config.bacVariant)) return false;\n        const sourceButton = qsa('[data-add-to-cart],[data-product-submit]')\n          .find(button => Number(button.dataset.variantId) === Number(variantId));\n        const productHandle = String(sourceButton?.dataset.productHandle || '');\n        return productHandle && productHandle !== excludedHandle;\n      });\n      if (!hasPendingPeptide || !config.bacVariant) return null;\n      return config.bacAvailable ? 'present' : 'unavailable';\n    }\n  \n    function renderCart(cart, bacStatus = null) {\n      const confirmedStatus = bacStatus || ((cart?.items || []).some(isComplimentaryBac) ? 'present' : 'none');\n      complimentaryBacStatus = pendingComplimentaryBacStatus() || confirmedStatus;\n      renderVisibleItems(visibleItemsFromCart(cart), cart.total_price, complimentaryBacStatus);\n    }\n  \n    function flashAdded(button) {\n      if (!button) return;\n      const copy = instantCopy;\n      const textNode = qs('[data-product-submit-text]', button);\n      const target = textNode || button;\n      const original = target.textContent;\n      target.textContent = copy.addedConfirm;\n      window.clearTimeout(button._peptiqueAddedTimer);\n      button._peptiqueAddedTimer = window.setTimeout(() => {\n        target.textContent = button.dataset.defaultLabel || original || copy.addToCart;\n      }, 1200);\n    }\n  \n    function resetAddButton(button) {\n      if (!button) return;\n      window.clearTimeout(button._peptiqueAddedTimer);\n      button._peptiqueAddedTimer = null;\n      const copy = instantCopy;\n      const textNode = qs('[data-product-submit-text]', button);\n      const target = textNode || button;\n      target.textContent = button.dataset.defaultLabel || copy.addToCart;\n    }\n  \n    async function refreshCart({ open = false } = {}) {\n      const result = await syncComplimentaryBac(await getCart());\n      const cart = result.cart;\n      renderCart(cart, result.status);\n      if (open) openCart();\n      return cart;\n    }\n  \n    function ensureCartRendered() {\n      if (cartRenderReady) return Promise.resolve(cartSnapshot);\n      if (!cartHydrationPromise) {\n        cartHydrationPromise = refreshCart().finally(() => {\n          cartHydrationPromise = null;\n        });\n      }\n      return cartHydrationPromise;\n    }\n  \n    function enqueueCartOperation(operation, { rejectOnError = false } = {}) {\n      let operationError = null;\n      cartPendingOps += 1;\n      cartQueue = cartQueue\n        .then(operation)\n        .catch(error => {\n          operationError = error;\n          announce(root.lang === 'ar' && !/[\\u0600-\\u06ff]/.test(error.message || '')\n            ? message('cart_update_retry')\n            : error.message || message('cart_update_failed'));\n        })\n        .finally(async () => {\n          cartPendingOps -= 1;\n          if (cartPendingOps === 0) {\n            try {\n              await refreshCart();\n            } catch (error) { announce(root.lang === 'ar' ? message('cart_load_retry') : error.message || message('cart_load_error')); }\n          }\n        });\n      // Keep the shared queue fulfilled so subsequent mutations can recover,\n      // while checkout receives the failure of the operation it awaited.\n      return rejectOnError ? cartQueue.then(result => {\n        if (operationError) throw operationError;\n        return result;\n      }) : cartQueue;\n    }\n  \n    async function addItems(variantId, quantity = 1, { cart = null, productHandle = '' } = {}) {\n      const items = [{ id: Number(variantId), quantity: Number(quantity) || 1 }];\n      const excludedHandle = String(config.bacProductHandle || 'bacteriostatic-water');\n      const canBatchComplimentaryBac = Boolean(\n        config.bacVariant &&\n        config.bacAvailable &&\n        productHandle &&\n        productHandle !== excludedHandle &&\n        !(cart?.items || []).some(isComplimentaryBac)\n      );\n      if (canBatchComplimentaryBac) {\n        items.push({\n          id: Number(config.bacVariant),\n          quantity: 1,\n          properties: { _peptique_complimentary: 'true' }\n        });\n      }\n  \n      let response = await fetch(`${config.root}cart/add.js`, { method: 'POST', headers: { 'Content-Type': 'application/json', Accept: 'application/json' }, body: JSON.stringify({ items }) });\n      if (!response.ok && items.length > 1) {\n        response = await fetch(`${config.root}cart/add.js`, { method: 'POST', headers: { 'Content-Type': 'application/json', Accept: 'application/json' }, body: JSON.stringify({ items: [items[0]] }) });\n        if (response.ok) config.bacAvailable = false;\n      }\n      if (!response.ok) {\n        const error = await response.json().catch(() => ({}));\n        throw new Error(root.lang === 'ar' && !/[\\u0600-\\u06ff]/.test(error.description || '')\n          ? message('cart_add_retry')\n          : error.description || message('cart_add_retry'));\n      }\n      // The add endpoint returns only added lines, so invalidate the snapshot.\n      // A later queued mutation will read the confirmed cart instead of applying\n      // a quantity against stale state.\n      cartSnapshot = null;\n      return response.json().catch(() => ({}));\n    }\n  \n    async function changeLine(line, quantity) {\n      const response = await fetch(`${config.root}cart/change.js`, { method: 'POST', headers: { 'Content-Type': 'application/json', Accept: 'application/json' }, body: JSON.stringify({ line: Number(line), quantity: Number(quantity) }) });\n      if (!response.ok) throw new Error(message('cart_update_error'));\n      cartSnapshot = await response.json();\n      return cartSnapshot;\n    }\n  \n    async function setVariantQuantity(variantId, quantity) {\n      // The idle refresh normally primes this. If the first tap wins the race,\n      // fall back to one read; later mutations reuse the confirmed snapshot.\n      const cart = cartSnapshot || await getCart();\n      const visible = visibleItemsFromCart(cart);\n      const found = visible.find(({ item }) => Number(item.variant_id) === Number(variantId));\n      if (!found && Number(quantity) <= 0) return {};\n      if (!found) {\n        const sourceButton = qsa('[data-add-to-cart],[data-product-submit]')\n          .find(button => Number(button.dataset.variantId) === Number(variantId));\n        return addItems(variantId, quantity, {\n          cart,\n          productHandle: String(sourceButton?.dataset.productHandle || '')\n        });\n      }\n      return changeLine(found.index + 1, quantity);\n    }\n  \n    function getVisibleCartItems() { return lastVisibleCartItems; }\n    function isCartRendered() { return cartRenderReady; }\n    return { getCart, changeComplimentaryBacQuantity, isComplimentaryBac, visibleItemsFromCart, cartQualifiesForComplimentaryBac, syncComplimentaryBac, normalizeCartProductTitle, syncProductControlsFromVisibleItems, applyDesiredQuantities, renderVisibleItems, optimisticAddFromButton, optimisticSetVariantQuantity, scheduleVariantSync, syncVariantNow, flushCartSyncs, setCardQuantity, pulseQuantity, pendingComplimentaryBacStatus, renderCart, flashAdded, resetAddButton, refreshCart, ensureCartRendered, enqueueCartOperation, addItems, changeLine, setVariantQuantity, getVisibleCartItems, isCartRendered };\n  }\n  const { getCart, changeComplimentaryBacQuantity, isComplimentaryBac, visibleItemsFromCart, cartQualifiesForComplimentaryBac, syncComplimentaryBac, normalizeCartProductTitle, syncProductControlsFromVisibleItems, applyDesiredQuantities, renderVisibleItems, optimisticAddFromButton, optimisticSetVariantQuantity, scheduleVariantSync, syncVariantNow, flushCartSyncs, setCardQuantity, pulseQuantity, pendingComplimentaryBacStatus, renderCart, flashAdded, resetAddButton, refreshCart, ensureCartRendered, enqueueCartOperation, addItems, changeLine, setVariantQuantity, getVisibleCartItems, isCartRendered } = createCartController({ config, fetch, message, root, qs, qsa, desiredVariantQuantities, clampVariantQuantity, syncStepperLimitState, getVariantInventoryLimit, document, instantCopy, cartDrawer, escapeHtml, formatMoney, setVariantInventoryLimit, window, CSS, announce, openCart });\n  function applyCardVariant(cardVariant) {\n    const card = cardVariant?.closest('.product-card');\n    if (!card) return;\n    const variantUrl = new URL(cardVariant.dataset.cardVariantUrl || card.dataset.cardUrl || location.href, location.origin);\n    const nextCardUrl = `${variantUrl.pathname}${variantUrl.search}${variantUrl.hash}`;\n    card.dataset.cardUrl = nextCardUrl;\n    qsa('.product-card__media, .product-card__content h3 a', card).forEach(link => { link.href = nextCardUrl; });\n    qsa('[data-card-variant]', card).forEach(button => {\n      const selected = button === cardVariant;\n      button.classList.toggle('is-selected', selected);\n      button.setAttribute('aria-pressed', String(selected));\n    });\n    const cardImage = qs('.product-card__media [data-theme-product-image]', card);\n    if (cardImage && cardVariant.dataset.variantImageUrl) {\n      cardImage.dataset.lightSrc = cardVariant.dataset.variantImageUrl;\n      cardImage.dataset.lightSrcset = '';\n      if (cardVariant.dataset.variantImageAlt) cardImage.alt = cardVariant.dataset.variantImageAlt;\n    }\n    if (cardImage && cardVariant.dataset.variantDarkImageUrl) {\n      cardImage.dataset.darkSrc = cardVariant.dataset.variantDarkImageUrl;\n      cardImage.dataset.darkSrcset = darkSrcsetFor(cardVariant.dataset.variantDarkImageUrl, [420, 600, 800, 1200]);\n    }\n    syncThemeProductImages(card);\n    const add = qs('[data-add-to-cart]', card);\n    const purchasable = cardVariant.dataset.variantPurchasable === 'true';\n    if (add) {\n      add.dataset.variantId = cardVariant.dataset.variantId;\n      add.dataset.variantTitle = cardVariant.dataset.variantTitle || '';\n      add.dataset.linePrice = cardVariant.dataset.linePrice || '0';\n      add.dataset.variantPurchasable = String(purchasable);\n      if (cardVariant.dataset.inventoryLimit !== undefined) add.dataset.inventoryLimit = cardVariant.dataset.inventoryLimit;\n      else delete add.dataset.inventoryLimit;\n    }\n    syncLowStock(card, purchasable ? cardVariant.dataset.inventoryLimit : null);\n    const stepper = qs('[data-card-qty]', card);\n    if (stepper) {\n      stepper.dataset.variantId = cardVariant.dataset.variantId;\n      stepper.dataset.variantPurchasable = String(purchasable);\n      if (cardVariant.dataset.inventoryLimit !== undefined) stepper.dataset.inventoryLimit = cardVariant.dataset.inventoryLimit;\n      else delete stepper.dataset.inventoryLimit;\n    }\n    const notify = qs('[data-card-notify]', card);\n    if (notify) {\n      const notifyUrl = new URL(nextCardUrl, location.origin);\n      notifyUrl.searchParams.set('notify', '1');\n      notify.dataset.productUrl = `${notifyUrl.pathname}${notifyUrl.search}${notifyUrl.hash}`;\n      notify.dataset.variantId = cardVariant.dataset.variantId;\n      notify.dataset.variantTitle = cardVariant.dataset.variantTitle || '';\n    }\n    const soldOutBadge = qs('[data-card-sold-out-badge]', card);\n    if (soldOutBadge) soldOutBadge.hidden = card.dataset.cardUpcoming === 'true' || purchasable;\n    const price = qs('.product-card__price', card);\n    if (price) price.textContent = cardVariant.dataset.variantPrice;\n    syncProductControlsFromVisibleItems(getVisibleCartItems());\n  }\n\n  function shouldKeepCartOpenForClick(target) {\n    return !!target.closest('[data-cart-drawer],[data-cart-open],[data-theme-toggle]');\n  }\n\n  let cartPointerStart = null;\n\n  function animateDisclosure(panel, open) {\n    if (!panel) return;\n    const startHeight = panel.getBoundingClientRect().height;\n    const startOpacity = Number(getComputedStyle(panel).opacity);\n    panel.getAnimations().forEach(animation => animation.cancel());\n    panel.inert = !open;\n    panel.setAttribute('aria-hidden', String(!open));\n    const endHeight = open ? panel.scrollHeight : 0;\n    panel.style.height = `${startHeight}px`;\n    panel.style.opacity = String(startOpacity);\n    if (prefersReducedMotion()) {\n      panel.style.height = open ? 'auto' : '0px';\n      panel.style.opacity = open ? '1' : '0';\n      return;\n    }\n    const animation = panel.animate([\n      { height: `${startHeight}px`, opacity: startOpacity },\n      { height: `${endHeight}px`, opacity: open ? 1 : 0 }\n    ], {\n      duration: 240,\n      easing: 'cubic-bezier(.2,.8,.2,1)'\n    });\n    animation.onfinish = () => {\n      panel.style.height = open ? 'auto' : '0px';\n      panel.style.opacity = open ? '1' : '0';\n    };\n  }\n  document.addEventListener('pointerdown', event => {\n    cartPointerStart = null;\n    if (!cartDrawer?.classList.contains('is-open')) return;\n    if (shouldKeepCartOpenForClick(event.target)) return;\n    cartPointerStart = { x: event.clientX, y: event.clientY, target: event.target };\n  }, true);\n\n  document.addEventListener('click', async event => {\n    const headerSheetAction = event.target.closest('[data-header-sheet-action]');\n    if (headerSheetAction && !headerSheetAction.matches('[data-theme-toggle]') && mobileDock?.classList.contains('is-menu-open')) {\n      closeMobileDockMenu({ restoreFocus: false });\n    }\n    if (cartDrawer?.classList.contains('is-open') && !shouldKeepCartOpenForClick(event.target)) {\n      const dx = cartPointerStart ? Math.abs(event.clientX - cartPointerStart.x) : 0;\n      const dy = cartPointerStart ? Math.abs(event.clientY - cartPointerStart.y) : 0;\n      if (dx > 8 || dy > 8) {\n        cartPointerStart = null;\n        return;\n      }\n      closeCart();\n    }\n    cartPointerStart = null;\n    const logoLink = event.target.closest('.site-logo, .footer-logo');\n    if (handleHomeLogo(logoLink, event)) return;\n    const sectionLink = event.target.closest('a[href]');\n    if (handleHomeSectionLink(sectionLink, event)) return;\n    if (event.target.closest('.site-nav a, [data-mobile-nav] a, .site-logo')) {\n      closeCart();\n    }\n    const themeButton = event.target.closest('[data-theme-toggle]');\n    if (themeButton) {\n      const dark = root.dataset.theme !== 'dark';\n      if (dark) {\n        if (themeButton.dataset.themePending === 'true') return;\n        themeButton.dataset.themePending = 'true';\n        themeButton.setAttribute('aria-busy', 'true');\n        await preloadThemeProductImages();\n        delete themeButton.dataset.themePending;\n        themeButton.removeAttribute('aria-busy');\n      }\n      root.dataset.theme = dark ? 'dark' : 'light';\n      try { localStorage.setItem('pq_dark', dark ? '1' : '0'); } catch (_) {}\n      syncThemeProductImages();\n      syncThemeIcons();\n      syncThemeChrome();\n      return;\n    }\n    const menuButton = event.target.closest('[data-menu-toggle]');\n    if (menuButton) {\n      const nav = qs('[data-mobile-nav]');\n      const open = !nav.classList.contains('is-open');\n      nav.classList.toggle('is-open', open);\n      menuButton.setAttribute('aria-expanded', String(open));\n      const label = open ? menuButton.dataset.menuCloseLabel : menuButton.dataset.menuOpenLabel;\n      if (label) { menuButton.setAttribute('aria-label', label); menuButton.setAttribute('title', label); }\n      return;\n    }\n    const dockMenuButton = event.target.closest('[data-mobile-dock-menu-toggle]');\n    if (dockMenuButton) {\n      toggleMobileDockMenu();\n      return;\n    }\n    if (event.target.closest('[data-mobile-dock-menu] a')) {\n      closeMobileDockMenu({ restoreFocus: false });\n    }\n    if (event.target.closest('[data-mobile-nav] a')) {\n      const nav = qs('[data-mobile-nav]');\n      const menu = qs('[data-menu-toggle]');\n      if (nav) nav.classList.remove('is-open');\n      if (menu) {\n        menu.setAttribute('aria-expanded', 'false');\n        if (menu.dataset.menuOpenLabel) { menu.setAttribute('aria-label', menu.dataset.menuOpenLabel); menu.setAttribute('title', menu.dataset.menuOpenLabel); }\n      }\n    }\n    const checkoutLink = event.target.closest('a[href$=\"/checkout\"], a.cart-checkout');\n    if (checkoutLink && shouldHandleSmoothNav(checkoutLink, event)) {\n      event.preventDefault();\n      event.stopPropagation();\n      checkoutLink.setAttribute('aria-busy', 'true');\n      checkoutLink.classList.add('is-loading');\n      const checkoutText = qs('[data-i18n=\"checkout\"]', checkoutLink);\n      const checkoutCopy = instantCopy;\n      if (checkoutText) checkoutText.textContent = checkoutCopy.checkoutLoading;\n      try {\n        await flushCartSyncs();\n        const destination = offerCheckoutUrl(await getCart());\n        window.location.href = destination || checkoutLink.href;\n      } catch (error) {\n        checkoutLink.removeAttribute('aria-busy');\n        checkoutLink.classList.remove('is-loading');\n        if (checkoutText) checkoutText.textContent = checkoutCopy.checkout;\n        announce(error.message || message('cart_update_failed'));\n      }\n      return;\n    }\n    if (event.target.closest('[data-cart-open]')) { toggleCart(); return; }\n    if (event.target.closest('[data-cart-close]')) { closeCart(); return; }\n    if (event.target.matches('[data-cart-scrim]')) {\n      closeCart();\n      closeMobileDockMenu();\n      return;\n    }\n    const stoqOpen = event.target.closest('[data-stoq-open]');\n    if (stoqOpen) { event.preventDefault(); openStoqWaitlist(stoqOpen); return; }\n    const cardQtyButton = event.target.closest('[data-card-qty-change]');\n    if (cardQtyButton) {\n      event.preventDefault();\n      event.stopPropagation();\n      if (cardQtyButton.disabled) return;\n      const stepper = cardQtyButton.closest('[data-card-qty]');\n      const current = Number(qs('[data-card-qty-value]', stepper)?.textContent || 0);\n      const delta = Number(cardQtyButton.dataset.cardQtyChange || 0);\n      const next = clampVariantQuantity(stepper.dataset.variantId, current + delta);\n      setCardQuantity(stepper, next);\n      optimisticSetVariantQuantity(stepper.dataset.variantId, next);\n      scheduleVariantSync(stepper.dataset.variantId, next);\n      return;\n    }\n    const productQtyButton = event.target.closest('[data-product-qty-change]');\n    if (productQtyButton) {\n      event.preventDefault();\n      event.stopPropagation();\n      if (productQtyButton.disabled) return;\n      const stepper = productQtyButton.closest('[data-product-qty]');\n      const current = Number(qs('[data-product-qty-value]', stepper)?.textContent || 0);\n      const delta = Number(productQtyButton.dataset.productQtyChange || 0);\n      const next = clampVariantQuantity(stepper.dataset.variantId, current + delta);\n      optimisticSetVariantQuantity(stepper.dataset.variantId, next);\n      scheduleVariantSync(stepper.dataset.variantId, next);\n      return;\n    }\n    const addButton = event.target.closest('[data-add-to-cart]');\n    if (addButton) {\n      event.preventDefault();\n      event.stopPropagation();\n      if (addButton.disabled || addButton.hidden) return;\n      addButton.dataset.defaultLabel = addButton.dataset.defaultLabel || addButton.textContent;\n      const current = desiredVariantQuantities.has(String(addButton.dataset.variantId))\n        ? desiredVariantQuantities.get(String(addButton.dataset.variantId))\n        : Number(getVisibleCartItems().find(({ item }) => Number(item.variant_id) === Number(addButton.dataset.variantId))?.item.quantity || 0);\n      if (clampVariantQuantity(addButton.dataset.variantId, current + 1) <= current) return;\n      flashAdded(addButton);\n      optimisticAddFromButton(addButton, 1);\n      scheduleVariantSync(addButton.dataset.variantId, desiredVariantQuantities.get(String(addButton.dataset.variantId)) || 1);\n      announce(message('added'));\n      return;\n    }\n    const cardVariant = event.target.closest('[data-card-variant]');\n    if (cardVariant) {\n      applyCardVariant(cardVariant);\n      return;\n    }\n    const calcPreset = event.target.closest('[data-calc-preset]');\n    if (calcPreset) {\n      const calc = calcPreset.closest('[data-calculator]');\n      const select = qs('[data-calc-compound]', calc);\n      if (select) {\n        select.value = calcPreset.dataset.calcPreset;\n        const dose = qs('[data-calc-dose]', calc);\n        if (dose) {\n          dose.min = calcPreset.dataset.calcMin || dose.min;\n          dose.max = calcPreset.dataset.calcMax || dose.max;\n          dose.step = calcPreset.dataset.calcStep || dose.step;\n          dose.value = calcPreset.dataset.calcDefault || dose.value;\n        }\n        const minLabel = qs('[data-calc-min-label]', calc);\n        const maxLabel = qs('[data-calc-max-label]', calc);\n        if (minLabel && calcPreset.dataset.calcMin) minLabel.textContent = `${calcPreset.dataset.calcMin} mg`;\n        if (maxLabel && calcPreset.dataset.calcMax) maxLabel.textContent = `${calcPreset.dataset.calcMax} mg`;\n        qsa('[data-calc-preset]', calc).forEach(button => button.classList.toggle('is-selected', button === calcPreset));\n        updateCalculators();\n      }\n      return;\n    }\n    const reconVial = event.target.closest('[data-recon-vial-button]');\n    if (reconVial) {\n      const calc = reconVial.closest('[data-calculator]');\n      const select = qs('[data-recon-vial]', calc);\n      if (select) {\n        select.value = reconVial.dataset.reconVialButton;\n        const water = qs('[data-recon-water]', calc);\n        const defaultWater = ({ '10': '1', '40': '2', '80': '3' })[reconVial.dataset.reconVialButton];\n        if (water && defaultWater) {\n          water.value = defaultWater;\n          qsa('[data-recon-water-button]', calc).forEach(button => button.classList.toggle('is-selected', button.dataset.reconWaterButton === defaultWater));\n        }\n        qsa('[data-recon-vial-button]', calc).forEach(button => button.classList.toggle('is-selected', button === reconVial));\n        updateCalculators();\n      }\n      return;\n    }\n    const reconWater = event.target.closest('[data-recon-water-button]');\n    if (reconWater) {\n      const calc = reconWater.closest('[data-calculator]');\n      const select = qs('[data-recon-water]', calc);\n      if (select) {\n        select.value = reconWater.dataset.reconWaterButton;\n        qsa('[data-recon-water-button]', calc).forEach(button => button.classList.toggle('is-selected', button === reconWater));\n        updateCalculators();\n      }\n      return;\n    }\n    const reconMode = event.target.closest('[data-recon-mode-button]');\n    if (reconMode) {\n      const calc = reconMode.closest('[data-calculator]');\n      const select = qs('[data-recon-mode]', calc);\n      if (select) {\n        select.value = reconMode.dataset.reconModeButton;\n        qsa('[data-recon-mode-button]', calc).forEach(button => button.classList.toggle('is-selected', button === reconMode));\n        updateCalculators();\n      }\n      return;\n    }\n    const reconStep = event.target.closest('[data-recon-step]');\n    if (reconStep) {\n      const calc = reconStep.closest('[data-calculator]');\n      const input = qs('[data-recon-dose]', calc);\n      if (input) {\n        const min = Number(input.getAttribute('min') || input.min || 0.1);\n        const step = Number(reconStep.dataset.reconStep);\n        const parsed = calculatorNumber(input.value);\n        const current = Number.isFinite(parsed) ? parsed : 0;\n        let next = min;\n        if (step > 0) {\n          next = current < 0.5 ? 0.5 : Math.ceil((current + 0.0001) / 0.5) * 0.5;\n        } else {\n          next = current <= 0.5 ? min : Math.floor((current - 0.0001) / 0.5) * 0.5;\n        }\n        next = Math.max(min, next);\n        input.value = next.toLocaleString('en-US', {maximumFractionDigits: 2, useGrouping: false});\n        input.blur();\n        updateCalculators();\n      }\n      return;\n    }\n    const technicalToggle = event.target.closest('[data-technical-toggle]');\n    if (technicalToggle) {\n      const accordion = technicalToggle.closest('[data-technical-accordion]');\n      if (!accordion) return;\n      const willOpen = !accordion.classList.contains('is-open');\n      animateDisclosure(qs('.product-pdp-technical__answer', accordion), willOpen);\n      accordion.classList.toggle('is-open', willOpen);\n      technicalToggle.setAttribute('aria-expanded', String(willOpen));\n      return;\n    }\n    const faqToggle = event.target.closest('[data-faq-toggle]');\n    if (faqToggle) {\n      const item = faqToggle.closest('[data-faq-item]');\n      const list = faqToggle.closest('[data-faq-list]');\n      if (!item || !list) return;\n      const willOpen = !item.classList.contains('is-open');\n      qsa('[data-faq-item]', list).forEach(other => {\n        const isActive = other === item && willOpen;\n        const wasActive = other.classList.contains('is-open');\n        if (wasActive !== isActive) animateDisclosure(qs('[data-faq-answer]', other), isActive);\n        other.classList.toggle('is-open', isActive);\n        qs('[data-faq-toggle]', other)?.setAttribute('aria-expanded', String(isActive));\n      });\n      return;\n    }\n    const productCard = event.target.closest('.product-card[data-card-url]');\n    if (productCard && event.target.closest('.product-card__action,.product-card__qty,.variant-options,.pq-qty-stepper')) return;\n    const productCardLink = event.target.closest('.product-card a[href]');\n    if (productCardLink && shouldHandleSmoothNav(productCardLink, event)) {\n      event.preventDefault();\n      persistDesiredQuantitiesForNavigation();\n      navigateWithMotion(productCardLink.href);\n      return;\n    }\n    if (productCard && !event.target.closest('a,button,input,select,textarea')) {\n      persistDesiredQuantitiesForNavigation();\n      navigateWithMotion(productCard.dataset.cardUrl);\n      return;\n    }\n    const cartPageButton = event.target.closest('[data-cart-page-change]');\n    if (cartPageButton) {\n      const stepper = cartPageButton.closest('.cart-page__stepper');\n      const input = qs('input[name^=\"updates[\"]', stepper);\n      if (!input) return;\n      const current = Math.max(0, Number(input.value || 0));\n      const delta = Number(cartPageButton.dataset.cartPageChange || 0);\n      input.value = String(Math.max(0, current + delta));\n      input.dispatchEvent(new Event('change', { bubbles: true }));\n      return;\n    }\n    const changeButton = event.target.closest('[data-cart-change]');\n    if (changeButton) {\n      if (changeButton.disabled) return;\n      const line = changeButton.closest('.cart-line');\n      const variantId = line?.dataset.variantId;\n      if (!variantId) return;\n      const visibleQuantity = Number(qs('.cart-line__qty span', line)?.textContent || 0);\n      const current = desiredVariantQuantities.has(String(variantId))\n        ? desiredVariantQuantities.get(String(variantId))\n        : visibleQuantity;\n      const next = clampVariantQuantity(variantId, Number(current || 0) + Number(changeButton.dataset.cartDelta || 0));\n      optimisticSetVariantQuantity(variantId, next);\n      scheduleVariantSync(variantId, next);\n    }\n  });\n\n  document.addEventListener('click', event => {\n    const headerLink = event.target.closest('[data-header-cart-close]');\n    if (!headerLink) return;\n    closeCart();\n    const nav = qs('[data-mobile-nav]');\n    const menu = qs('[data-menu-toggle]');\n    if (nav) nav.classList.remove('is-open');\n    if (menu) {\n        menu.setAttribute('aria-expanded', 'false');\n        if (menu.dataset.menuOpenLabel) { menu.setAttribute('aria-label', menu.dataset.menuOpenLabel); menu.setAttribute('title', menu.dataset.menuOpenLabel); }\n      }\n  }, true);\n\n  document.addEventListener('pointerover', event => {\n    const link = event.target.closest?.('a[href]');\n    if (link) prefetchPage(link.href);\n  }, { passive: true });\n\n  document.addEventListener('touchstart', event => {\n    const link = event.target.closest?.('a[href]');\n    if (link) prefetchPage(link.href);\n  }, { passive: true });\n\n  document.addEventListener('focusin', event => {\n    const link = event.target.closest?.('a[href]');\n    if (link) prefetchPage(link.href);\n  });\n\n  document.addEventListener('click', event => {\n    const calculatorTab = event.target.closest?.('.calculator-tabs a[href]');\n    if (!calculatorTab || !shouldHandleSmoothNav(calculatorTab, event)) return;\n    let tabUrl = null;\n    try { tabUrl = new URL(calculatorTab.href, window.location.href); } catch (_) {}\n    if (!tabUrl || !isCalculatorPageUrl(tabUrl)) return;\n    event.preventDefault();\n    event.stopImmediatePropagation();\n    closeCart();\n    swapCalculatorPage(calculatorTab.href).catch(() => navigateWithMotion(calculatorTab.href));\n  }, true);\n\n  window.addEventListener('popstate', () => {\n    const url = new URL(window.location.href);\n    if (!qs('[data-calculator]') || !isCalculatorPageUrl(url)) return;\n    swapCalculatorPage(url.href, { replace: true }).catch(() => window.location.reload());\n  });\n\n  document.addEventListener('click', event => {\n    const link = event.target.closest?.('a[href]');\n    if (!link || link.hasAttribute('download') || !shouldHandleSmoothNav(link, event)) return;\n    if (link.matches('[data-smooth-nav]')) return;\n    let sectionUrl = null;\n    try { sectionUrl = new URL(link.href, window.location.href); } catch (_) {}\n    if (\n      sectionUrl &&\n      sectionUrl.origin === window.location.origin &&\n      isHomePath(sectionUrl.pathname) &&\n      (sectionUrl.hash === '#products' || sectionUrl.hash === '#faq')\n    ) return;\n    if (\n      link.matches('.site-logo, .footer-logo') &&\n      sectionUrl &&\n      sectionUrl.origin === window.location.origin &&\n      isHomePath(sectionUrl.pathname) &&\n      isHomePath(window.location.pathname) &&\n      homePathKey(sectionUrl.pathname) === homePathKey(window.location.pathname)\n    ) return;\n    if (!isNavigationUrl(link.href)) return;\n    startPageExit();\n  }, true);\n\n  document.addEventListener('keydown', event => {\n    if (event.key === 'Escape') {\n      closeCart();\n      closeMobileNav();\n      cancelStoqOpenIntent();\n      return;\n    }\n    const activeDialog = cartDrawer?.classList.contains('is-open')\n      ? cartDrawer\n      : mobileDock?.classList.contains('is-menu-open')\n        ? mobileDockMenu\n        : null;\n    if (event.key !== 'Tab' || !activeDialog) return;\n\n    const focusable = qsa(\n      'a[href],button:not([disabled]),input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex=\"-1\"])',\n      activeDialog\n    ).filter(element => !element.hidden && element.getClientRects().length);\n\n    if (!focusable.length) {\n      event.preventDefault();\n      activeDialog.focus({ preventScroll: true });\n      return;\n    }\n\n    const first = focusable[0];\n    const last = focusable[focusable.length - 1];\n    if (document.activeElement === activeDialog) {\n      event.preventDefault();\n      (event.shiftKey ? last : first).focus({ preventScroll: true });\n    } else if (event.shiftKey && document.activeElement === first) {\n      event.preventDefault();\n      last.focus({ preventScroll: true });\n    } else if (!event.shiftKey && document.activeElement === last) {\n      event.preventDefault();\n      first.focus({ preventScroll: true });\n    }\n  });\n  document.addEventListener('submit', event => {\n    const form = event.target.closest?.('.language-form');\n    if (!form) return;\n    const selectedLocale = event.submitter?.value || qs('[name=\"locale_code\"]', form)?.value;\n    if (selectedLocale === 'en' || selectedLocale === 'ar') {\n      try { localStorage.setItem('pq_locale', selectedLocale); } catch (_) {}\n    }\n    // Shopify's generated return_to can be stale after cached navigation.\n    // Read the current controls at submit time, including unreflected URL edits.\n    const destination = new URL(window.location.href);\n    const calculator = qs('[data-calculator][data-mode=\"reconstitution\"]');\n    if (calculator) {\n      destination.searchParams.set('vial', qs('[data-recon-vial]', calculator).value);\n      destination.searchParams.set('water', qs('[data-recon-water]', calculator).value);\n    }\n    let returnTo = qs('input[name=\"return_to\"]', form);\n    if (!returnTo) {\n      returnTo = document.createElement('input');\n      returnTo.type = 'hidden';\n      returnTo.name = 'return_to';\n      form.appendChild(returnTo);\n    }\n    returnTo.value = `${destination.pathname}${destination.search}${destination.hash}`;\n    closeCart();\n    persistDesiredQuantitiesForNavigation();\n    form.classList.add('is-submitting');\n    startPageExit();\n  }, true);\n  document.addEventListener('submit', async event => {\n    const form = event.target.closest('form[action$=\"/cart\"], form[action=\"/cart\"]');\n    if (!form || !event.submitter?.matches('[name=\"checkout\"]')) return;\n    event.preventDefault();\n    const submitter = event.submitter;\n    const checkoutCopy = instantCopy;\n    setCheckoutLoading(submitter);\n    submitter.disabled = true;\n    try {\n      await flushCartSyncs();\n      const result = await syncComplimentaryBac(await getCart(), { validateExisting: true });\n      renderCart(result.cart, result.status);\n      const offerDestination = offerCheckoutUrl(result.cart);\n      if (offerDestination) {\n        startPageExit();\n        window.location.href = offerDestination;\n        return;\n      }\n      let checkoutIntent = qs('input[type=\"hidden\"][name=\"checkout\"]', form);\n      if (!checkoutIntent) {\n        checkoutIntent = document.createElement('input');\n        checkoutIntent.type = 'hidden';\n        checkoutIntent.name = 'checkout';\n        form.appendChild(checkoutIntent);\n      }\n      checkoutIntent.value = submitter.value || '';\n      startPageExit();\n      form.submit();\n    } catch (error) {\n      submitter.disabled = false;\n      submitter.removeAttribute('aria-busy');\n      submitter.classList.remove('is-loading');\n      const checkoutText = qs('[data-i18n=\"checkout\"]', submitter);\n      if (checkoutText) checkoutText.textContent = checkoutCopy.checkout;\n      announce(error.message || message('cart_update_failed'));\n    }\n  });\n  const nativeCardHover = window.matchMedia('(any-hover: hover) and (any-pointer: fine)');\n  const fallbackHoverTargets = '.product-card.is-hovered,.site-nav a.is-hovered,.site-header .language-form .icon-button.is-hovered,.site-header .theme-toggle.is-hovered';\n  const fallbackHoverTrigger = '.product-card,.site-nav a,.site-header .language-form .icon-button,.site-header .theme-toggle';\n  const clearFallbackCardHover = () => qsa(fallbackHoverTargets).forEach(target => target.classList.remove('is-hovered'));\n  nativeCardHover.addEventListener?.('change', event => { if (event.matches) clearFallbackCardHover(); });\n  document.addEventListener('pointerover', event => {\n    if (nativeCardHover.matches || event.pointerType !== 'mouse') return;\n    event.target.closest(fallbackHoverTrigger)?.classList.add('is-hovered');\n  });\n  document.addEventListener('pointerout', event => {\n    if (nativeCardHover.matches || event.pointerType !== 'mouse') return;\n    const target = event.target.closest(fallbackHoverTrigger);\n    if (!target) return;\n    const next = event.relatedTarget;\n    if (!next || !target.contains(next)) target.classList.remove('is-hovered');\n  });\n  collectVariantInventoryLimits();\n  const hasPendingCartQuantities = loadPendingCartQuantities();\n\n  const boundProductForms = new WeakSet();\n  function bindProductForms(scope = document) {\n    qsa('.product-form', scope).forEach(form => {\n      if (boundProductForms.has(form)) return;\n      boundProductForms.add(form);\n      const section = form.closest('[data-product-section]');\n      const variants = JSON.parse(qs('[data-product-json]', section)?.textContent || '[]')\n        .filter(variant => !String(variant.title || '').includes('Included') && Number(variant.price || 0) > 0);\n      const select = qs('[data-variant-select]', form);\n      const optionGroups = qsa('.variant-field', form);\n      const submit = qs('[data-product-submit]', form);\n      const submitText = qs('[data-product-submit-text]', form);\n      const submitPlus = qs('.product-submit-button__plus', form);\n      const notify = qs('[data-product-notify]', form);\n      const soldOutBadge = qs('[data-product-sold-out-badge]', section);\n      const price = qs('[data-product-price]', section);\n      const isUpcoming = section?.dataset.productUpcoming === 'true';\n      function updateVariant() {\n        const options = optionGroups.map(group => qs('input:checked', group)?.value);\n        const variant = variants.find(item => item.options.every((value, index) => value === options[index])) || variants[0];\n        if (!variant) return;\n        select.value = variant.id;\n        const selectedOption = qs(`option[value=\"${CSS.escape(String(variant.id))}\"]`, select);\n        if (selectedOption?.dataset.inventoryLimit !== undefined) setVariantInventoryLimit(variant.id, selectedOption.dataset.inventoryLimit);\n        const inventoryLimit = getVariantInventoryLimit(variant.id);\n        const purchasable = !isUpcoming && Boolean(variant.available) && !(inventoryLimit !== null && inventoryLimit <= 0);\n        price.textContent = formatMoney(variant.price);\n        qsa('[data-product-testing][data-report-variant-id]', section).forEach(testingPanel => {\n          testingPanel.hidden = testingPanel.dataset.reportVariantId !== String(variant.id);\n        });\n        const mainImage = qs('[data-product-main-media] [data-theme-product-image]', section);\n        const variantImage = variant.featured_media?.preview_image || variant.featured_image;\n        if (mainImage && variantImage?.src) {\n          mainImage.dataset.lightSrc = variantImage.src;\n          mainImage.dataset.lightSrcset = '';\n          mainImage.alt = selectedOption?.dataset.imageAlt || variant.featured_media?.alt || variant.featured_image?.alt || variantImage.alt || mainImage.alt;\n        }\n        if (mainImage && selectedOption?.dataset.darkImageUrl) {\n          mainImage.dataset.darkSrc = selectedOption.dataset.darkImageUrl;\n          mainImage.dataset.darkSrcset = darkSrcsetFor(selectedOption.dataset.darkImageUrl, [600, 900, 1200]);\n        }\n        syncThemeProductImages(section);\n        if (!submit) return;\n        submit.disabled = !purchasable;\n        submit.dataset.variantPurchasable = String(purchasable);\n        submitText.textContent = message('add_to_cart');\n        if (submitPlus) submitPlus.hidden = false;\n        if (purchasable) submit.dataset.defaultLabel = submitText.textContent;\n        submit.dataset.variantId = variant.id;\n        submit.dataset.variantTitle = variant.title || '';\n        submit.dataset.linePrice = variant.price || 0;\n        if (selectedOption?.dataset.inventoryLimit !== undefined) submit.dataset.inventoryLimit = selectedOption.dataset.inventoryLimit;\n        else delete submit.dataset.inventoryLimit;\n        if (notify) {\n          notify.dataset.variantId = variant.id;\n          notify.dataset.variantTitle = variant.title || '';\n        }\n        if (soldOutBadge) soldOutBadge.hidden = isUpcoming || purchasable;\n        syncLowStock(section, purchasable ? inventoryLimit : null);\n        const quantityInput = qs('[name=\"quantity\"]', form);\n        if (quantityInput) {\n          if (inventoryLimit !== null) {\n            quantityInput.max = String(inventoryLimit);\n            quantityInput.dataset.inventoryLimit = String(inventoryLimit);\n            quantityInput.value = Math.max(1, Math.min(Number(quantityInput.value || 1), Math.max(1, inventoryLimit)));\n          } else {\n            quantityInput.max = '99';\n            delete quantityInput.dataset.inventoryLimit;\n          }\n        }\n        const stepper = qs('[data-product-qty]', form);\n        if (stepper) {\n          stepper.dataset.variantId = variant.id;\n          stepper.dataset.variantPurchasable = String(purchasable);\n          if (selectedOption?.dataset.inventoryLimit !== undefined) stepper.dataset.inventoryLimit = selectedOption.dataset.inventoryLimit;\n          else delete stepper.dataset.inventoryLimit;\n        }\n        syncProductControlsFromVisibleItems(getVisibleCartItems());\n        const url = new URL(location.href); url.searchParams.set('variant', variant.id); history.replaceState({}, '', url);\n      }\n      const initialVariantId = new URL(location.href).searchParams.get('variant');\n      const initialVariant = initialVariantId ? variants.find(variant => String(variant.id) === String(initialVariantId)) : null;\n      if (initialVariant) {\n        optionGroups.forEach((group, index) => {\n          const selectedValue = initialVariant.options[index];\n          qsa('input', group).forEach(input => { input.checked = input.value === selectedValue; });\n        });\n      }\n      updateVariant();\n      form.addEventListener('change', updateVariant);\n      form.addEventListener('submit', async event => {\n        event.preventDefault();\n        if (isUpcoming || submit?.dataset.variantPurchasable !== 'true') return;\n        const quantityInput = qs('[name=\"quantity\"]', form);\n        const current = desiredVariantQuantities.has(String(select.value))\n          ? desiredVariantQuantities.get(String(select.value))\n          : Number(getVisibleCartItems().find(({ item }) => Number(item.variant_id) === Number(select.value))?.item.quantity || 0);\n        const requested = Number(quantityInput?.value || 1);\n        const next = clampVariantQuantity(select.value, current + requested);\n        if (next <= current) return;\n        flashAdded(submit);\n        optimisticAddFromButton(submit, requested);\n        scheduleVariantSync(select.value, desiredVariantQuantities.get(String(select.value)) || Number(qs('[name=\"quantity\"]', form)?.value || 1));\n        announce(message('added'));\n      });\n    });\n  }\n  bindProductForms();\n  function updateSyringe(calc, rawUnits) {\n    const units = Math.max(0, Math.min(100, Number(rawUnits) || 0));\n    const liquidWidth = units * 3.7;\n    const bungCenter = 50 + liquidWidth;\n    const bungX = Math.max(45, Math.min(416, bungCenter - 5));\n    const rodX = bungX + 10;\n    const labelX = Math.max(30, Math.min(400, bungCenter));\n    const displayedUnits = Math.round(units * 10) / 10;\n    const label = `${displayedUnits} U`;\n    const fill = qs('[data-syringe-fill]', calc);\n    const fillShine = qs('[data-syringe-fill-shine]', calc);\n    const bung = qs('[data-syringe-bung]', calc);\n    const bungShine = qs('[data-syringe-bung-shine]', calc);\n    const rod = qs('[data-syringe-rod]', calc);\n    const labelGroup = qs('[data-syringe-label]', calc);\n    const labelBackground = qs('[data-syringe-label-bg]', calc);\n    const labelText = qs('[data-syringe-label-text]', calc);\n    if (fill) fill.setAttribute('width', String(Math.max(0, liquidWidth)));\n    if (fillShine) fillShine.setAttribute('width', String(Math.max(0, liquidWidth)));\n    if (bung) bung.setAttribute('x', String(bungX));\n    if (bungShine) {\n      const shineX = bungX + 4.25;\n      if (bungShine.tagName.toLowerCase() === 'line') {\n        bungShine.setAttribute('x1', String(bungX + 5));\n        bungShine.setAttribute('x2', String(bungX + 5));\n      } else {\n        bungShine.setAttribute('x', String(shineX));\n      }\n    }\n    if (rod) {\n      rod.setAttribute('x', String(rodX));\n      rod.setAttribute('width', String(Math.max(1, 448 - rodX)));\n    }\n    if (labelGroup) labelGroup.setAttribute('transform', `translate(${labelX} 0)`);\n    if (labelBackground) {\n      labelBackground.setAttribute('x', '-26');\n      labelBackground.setAttribute('width', '52');\n    }\n    if (labelText) labelText.textContent = label;\n  }\n\n  function calculatorNumber(value) {\n    const normalized = String(value).trim()\n      .replace(/[\\u0660-\\u0669]/g, digit => String(digit.charCodeAt(0) - 1632))\n      .replace(/[\\u06f0-\\u06f9]/g, digit => String(digit.charCodeAt(0) - 1776))\n      .replace(/\\u066b/g, '.');\n    return /^(?:\\d+(?:\\.\\d*)?|\\.\\d+)$/.test(normalized) ? Number(normalized) : NaN;\n  }\n  function formatCalculatorResult(value, mode) {\n    const precision = mode === 'mg' ? 3 : 1;\n    // Keep a positive result visible even below the normal display precision.\n    return value.toLocaleString(undefined, value > 0 && value < 0.5 * 10 ** -precision\n      ? {maximumSignificantDigits: 3} : {maximumFractionDigits: precision});\n  }\n  function updateCalculators() {\n    qsa('[data-calculator]').forEach(calc => {\n      calc.classList.add('calculator--ready');\n      if (calc.dataset.mode === 'dosage') {\n        const compound = qs('[data-calc-compound]', calc); const dose = qs('[data-calc-dose]', calc);\n        const [vialMg, water, price, frequency] = compound.value.split('|').map((value,index) => index === 3 ? value : Number(value));\n        const target = Number(dose.value); const concentration = vialMg / water; const units = Math.round((target / concentration) * 1000) / 10; const doses = vialMg / target; const weeklyDose = frequency === 'weekly' ? target : target * 7; const duration = vialMg / weeklyDose; const cost = frequency === 'weekly' ? Number(price) / duration : (Number(price) / duration) / 7;\n        const doseLabel = qs('[data-calc-dose-label]', calc);\n        if (doseLabel) {\n          doseLabel.textContent = root.lang === 'ar'\n            ? instantCopy.calculator.step_2_dose\n            : (frequency === 'daily' ? instantCopy.calculator.step_2_daily : instantCopy.calculator.step_2_weekly);\n        }\n        const minLabel = qs('[data-calc-min-label]', calc);\n        const maxLabel = qs('[data-calc-max-label]', calc);\n        if (minLabel) minLabel.textContent = `${dose.min} mg`;\n        if (maxLabel) maxLabel.textContent = `${dose.max} mg`;\n        qs('[data-dose-output]', calc).textContent = `${target} mg`; qs('[data-units]', calc).textContent = units.toLocaleString(undefined,{maximumFractionDigits:1}); qs('.calc-result__unit', calc).textContent = root.lang === 'ar' ? arabicUnitLabel(units) : 'units'; qs('[data-doses]', calc).textContent = Math.floor(doses).toLocaleString(undefined,{maximumFractionDigits:0}); qs('[data-duration]', calc).textContent = duration.toLocaleString(undefined,{maximumFractionDigits:1}); qs('[data-duration-label]', calc).textContent = runtimeCopy.calculator.weeks_per_vial; qs('[data-cost]', calc).textContent = `AED ${cost.toLocaleString(undefined,{maximumFractionDigits:0})}`; qs('[data-cost-label]', calc).textContent = frequency === 'daily' ? (runtimeCopy.calculator.cost_per_day) : (runtimeCopy.calculator.cost_per_week); qs('[data-calc-concentration]', calc).textContent = `${vialMg} mg vial \u00B7 ${water} mL water \u00B7 ${concentration.toLocaleString(undefined,{maximumFractionDigits:2})} mg/mL`;\n      } else {\n        const vial = Number(qs('[data-recon-vial]', calc).value);\n        const water = Number(qs('[data-recon-water]', calc).value);\n        const mode = qs('[data-recon-mode]', calc).value;\n        const doseControl = qs('[data-recon-dose]', calc);\n        const unitsControl = qs('[data-recon-input-units]', calc);\n        const dose = calculatorNumber(doseControl.value);\n        const inputUnits = calculatorNumber(unitsControl.value);\n        const concentration = vial / water;\n        const mgPerUnit = concentration / 100;\n        const result = mode === 'mg' ? inputUnits * mgPerUnit : (dose / concentration) * 100;\n        const doseField = qs('[data-recon-dose-field]', calc);\n        const unitsField = qs('[data-recon-units-field]', calc);\n        doseField.hidden = mode === 'mg';\n        unitsField.hidden = mode !== 'mg';\n        const activeValue = mode === 'mg' ? inputUnits : dose;\n        const valid = Number.isFinite(activeValue) && activeValue > 0 && Number.isFinite(result) && result > 0 && concentration > 0;\n        doseControl.setAttribute('aria-invalid', String(mode !== 'mg' && !valid));\n        unitsControl.setAttribute('aria-invalid', String(mode === 'mg' && !valid));\n        const inputError = qs('[data-recon-input-error]', calc);\n        if (inputError) inputError.hidden = valid;\n        qs('[data-recon-result]', calc).textContent = valid ? formatCalculatorResult(result, mode) : '\u2014';\n        qs('[data-recon-result-unit]', calc).textContent = mode === 'mg' ? 'mg' : (root.lang === 'ar' ? arabicUnitLabel(result) : 'units');\n        qs('[data-recon-result-label]', calc).textContent = mode === 'mg' ? (runtimeCopy.calculator.dose_delivered) : (runtimeCopy.calculator.units_to_draw);\n        qs('[data-recon-concentration]', calc).textContent = (Math.round(concentration * 10) / 10).toLocaleString(undefined,{maximumFractionDigits:1});\n        qs('[data-recon-mg-unit]', calc).textContent = mgPerUnit.toLocaleString(undefined,{maximumFractionDigits:3});\n        const reconUnitLabel = qs('[data-recon-unit-label]', calc);\n        if (reconUnitLabel) {\n          reconUnitLabel.textContent = 'unit';\n          reconUnitLabel.setAttribute('dir', 'ltr');\n        }\n        const syringe = qs('.syringe-visual', calc);\n        if (syringe) syringe.hidden = !valid;\n        updateSyringe(calc, valid ? (mode === 'mg' ? inputUnits : result) : 0);\n        const warning = qs('[data-recon-warning]', calc);\n        if (warning) warning.hidden = !valid || (mode === 'mg' ? inputUnits : result) <= 100;\n      }\n    });\n  }\n  function bindCalculatorInputs(scope = document) {\n    qsa('[data-calculator] input,[data-calculator] select', scope).forEach(control => {\n      if (control.dataset.calculatorBound === 'true') return;\n      control.dataset.calculatorBound = 'true';\n      control.addEventListener('input', updateCalculators);\n    });\n  }\n  function applyReconstitutionPresetFromUrl() {\n    const params = new URLSearchParams(window.location.search);\n    const vialValue = params.get('vial');\n    const waterValue = params.get('water');\n    if (!vialValue && !waterValue) return;\n    const matchingOptionValue = (select, rawValue) => {\n      if (!select || rawValue === null) return null;\n      const rawNumber = Number(rawValue);\n      const match = qsa('option', select).find(option => (\n        option.value === rawValue ||\n        (Number.isFinite(rawNumber) && Number(option.value) === rawNumber)\n      ));\n      return match?.value || null;\n    };\n    qsa('[data-calculator][data-mode=\"reconstitution\"]').forEach(calc => {\n      const vial = qs('[data-recon-vial]', calc);\n      const water = qs('[data-recon-water]', calc);\n      const normalizedVialValue = matchingOptionValue(vial, vialValue);\n      const normalizedWaterValue = matchingOptionValue(water, waterValue);\n      if (normalizedVialValue) {\n        vial.value = normalizedVialValue;\n        qsa('[data-recon-vial-button]', calc).forEach(button => button.classList.toggle('is-selected', button.dataset.reconVialButton === normalizedVialValue));\n      }\n      if (normalizedWaterValue) {\n        water.value = normalizedWaterValue;\n        qsa('[data-recon-water-button]', calc).forEach(button => button.classList.toggle('is-selected', button.dataset.reconWaterButton === normalizedWaterValue));\n      }\n    });\n  }\n  bindCalculatorInputs();\n  applyReconstitutionPresetFromUrl();\n  updateCalculators();\n  prefetchCalculatorTabs();\n  document.addEventListener('shopify:section:load', event => {\n    collectVariantInventoryLimits(event.target);\n    bindProductForms(event.target);\n    bindCalculatorInputs(event.target);\n    applyReconstitutionPresetFromUrl();\n    updateCalculators();\n    applyInstantLocale(root.lang);\n    syncThemeProductImages(event.target);\n    syncProductControlsFromVisibleItems(getVisibleCartItems());\n    observeReveals();\n    scheduleStoqLocalization();\n  });\n  const stoqSelector = '.restock-rocket-wrapper,[class*=\"stoq\"],[class*=\"restock-rocket\"]';\n  const stoqObserver = new MutationObserver(mutations => {\n    const hasStoqChange = mutations.some(mutation => [...mutation.addedNodes].some(node => {\n      if (mutation.target.closest?.(stoqSelector) && node.textContent?.includes('Thank you! We will notify you when the product is available')) return true;\n      if (node.nodeType !== Node.ELEMENT_NODE) return false;\n      return node.matches?.(stoqSelector) || Boolean(node.querySelector?.(stoqSelector));\n    }));\n    if (hasStoqChange) scheduleStoqLocalization(80);\n  });\n  stoqObserver.observe(document.body, { childList: true, subtree: true });\n  scheduleStoqLocalization(400);\n  window.setTimeout(localizeStoqWaitlist, 1400);\n  openStoqFromNotifyParam();\n  armHomeProductSequence();\n  observeReveals();\n  initHeroScrollCue();\n  initHeroResumeState();\n  initPatternField();\n  resetHomeReloadScroll();\n  window.addEventListener('load', () => {\n    observeReveals();\n  });\n  window.addEventListener('pageshow', event => {\n    document.body?.classList.remove('is-page-exiting');\n    resetCheckoutButtons();\n    observeReveals();\n    cleanCurrentHomeSectionUrl();\n    if (event.persisted) refreshCart().catch(() => {});\n  });\n  scrollToCurrentHash();\n  cleanCurrentHomeSectionUrl();\n  const pathLocale = /^\\/ar(?=\\/|$)/.test(window.location.pathname) ? 'ar' : '';\n  try { localStorage.removeItem('pq_lang'); } catch (_) {}\n  applyInstantLocale((pathLocale || root.lang) === 'ar' ? 'ar' : 'en', { updateUrl: false });\n  syncThemeProductImages();\n  scheduleThemeImageWarmup();\n  syncThemeIcons();\n  syncThemeChrome();\n  const systemAppearance = window.matchMedia?.('(prefers-color-scheme: dark)');\n  const syncSystemAppearance = () => {\n    let saved;\n    try { saved = localStorage.getItem('pq_dark'); } catch (_) {}\n    if (saved === '1' || saved === '0') return;\n    root.dataset.theme = systemAppearance?.matches ? 'dark' : 'light';\n    syncThemeProductImages();\n    syncThemeIcons();\n    syncThemeChrome();\n  };\n  systemAppearance?.addEventListener('change', syncSystemAppearance);\n  window.addEventListener('pageshow', syncSystemAppearance);\n  const runInitialCartRefresh = () => ensureCartRendered()\n    .then(() => { if (hasPendingCartQuantities) scheduleDesiredQuantitySyncs(); })\n    .catch(() => { if (hasPendingCartQuantities) scheduleDesiredQuantitySyncs(); });\n  if (hasPendingCartQuantities) runInitialCartRefresh();\n  else {\n    const onIdle = window.requestIdleCallback || (callback => window.setTimeout(callback, 450));\n    onIdle(runInitialCartRefresh, { timeout: 1600 });\n  }\n  // Conversion cues (competitor deep dive, 16 October 2026): real low-stock\n  // counts and the live Dubai same-day cutoff. Both read true store data.\n  function syncLowStock(scope, inventoryLimit) {\n    qsa('[data-low-stock]', scope).forEach(notice => {\n      const threshold = Number(notice.dataset.lowStockThreshold || 0);\n      const quantity = inventoryLimit === null || inventoryLimit === undefined || inventoryLimit === '' ? NaN : Number(inventoryLimit);\n      const show = Number.isFinite(quantity) && quantity > 0 && quantity <= threshold;\n      notice.hidden = !show;\n      if (show) qsa('[data-low-stock-count]', notice).forEach(count => { count.textContent = String(quantity); });\n    });\n  }\n\n  const DUBAI_CUTOFF_HOUR = 18;\n  // Minutes left before the Dubai same-day cutoff (Dubai is UTC+4, no DST).\n  function minutesBeforeDubaiCutoff(now = new Date()) {\n    const dubai = new Date(now.getTime() + 4 * 3600000);\n    return DUBAI_CUTOFF_HOUR * 60 - (dubai.getUTCHours() * 60 + dubai.getUTCMinutes());\n  }\n\n  // Dubai calendar date (YYYY-MM-DD) offset by whole days from now.\n  function dubaiDate(dayOffset = 0, now = new Date()) {\n    return new Date(now.getTime() + 4 * 3600000 + dayOffset * 86400000).toISOString().slice(0, 10);\n  }\n\n  function countdownText(line, lang, left) {\n    const data = line.dataset;\n    const suffix = lang === 'ar' ? 'Ar' : 'En';\n    const holidays = (data.holidays || '').split(',').filter(Boolean);\n    // No timing promise on a public holiday, or after the cutoff when tomorrow is one.\n    if (holidays.includes(dubaiDate(0))) return data[`holiday${suffix}`] || data[`after${suffix}`] || '';\n    if (left <= 0 && holidays.includes(dubaiDate(1))) return data[`holidayEve${suffix}`] || data[`holiday${suffix}`] || '';\n    if (left <= 0) return data[`after${suffix}`] || '';\n    // Count down only in the last six hours; earlier, state the cutoff plainly.\n    if (left > 360 && data[`early${suffix}`]) return data[`early${suffix}`];\n    const hours = Math.floor(left / 60);\n    const minutes = left % 60;\n    const hourPart = hours ? `${hours} ${data[`hours${suffix}`]}` : '';\n    const minutePart = minutes || !hours ? `${minutes} ${data[`minutes${suffix}`]}` : '';\n    const time = [hourPart, minutePart].filter(Boolean).join(' ');\n    return (data[`before${suffix}`] || '').replace('{time}', time);\n  }\n\n  function updateDeliveryCountdowns() {\n    const left = minutesBeforeDubaiCutoff();\n    qsa('[data-delivery-countdown]').forEach(line => {\n      const en = qs('[data-delivery-countdown-en]', line);\n      const ar = qs('[data-delivery-countdown-ar]', line);\n      if (en) en.textContent = countdownText(line, 'en', left);\n      if (ar) ar.textContent = countdownText(line, 'ar', left);\n    });\n  }\n\n  updateDeliveryCountdowns();\n  window.setInterval(() => { if (document.visibilityState !== 'hidden') updateDeliveryCountdowns(); }, 30000);\n  document.addEventListener('visibilitychange', () => { if (document.visibilityState === 'visible') updateDeliveryCountdowns(); });\n  // First-order popup (17 October 2026). Signs up through the offer backend,\n  // saves the personal code for this visit so checkout opens with the email\n  // prefilled and the discount applied, then never shows again.\n  const firstOrderPopup = qs('[data-first-order-popup]');\n  const FIRST_ORDER_HIDE_KEY = 'pq_fo_hide_until';\n  const FIRST_ORDER_DONE_KEY = 'pq_fo_done';\n  const FIRST_ORDER_HIDE_DAYS = 14;\n  const FIRST_ORDER_CONTEXT_SECONDS = 7 * 24 * 60 * 60;\n\n  function syncFirstOrderNotes() {\n    const saved = Boolean(offerHandoff.read());\n    qsa('[data-first-order-note]').forEach(note => { note.hidden = !saved; });\n  }\n\n  function firstOrderStorage(key, value) {\n    try {\n      if (value === undefined) return window.localStorage.getItem(key);\n      window.localStorage.setItem(key, value);\n    } catch (_) {}\n    return null;\n  }\n\n  function firstOrderCopy(name) {\n    const lang = root.lang === 'ar' ? 'Ar' : 'En';\n    return firstOrderPopup?.dataset[`${name}${lang}`] || firstOrderPopup?.dataset[`${name}En`] || '';\n  }\n\n  function firstOrderAllowed() {\n    if (!firstOrderPopup || typeof firstOrderPopup.showModal !== 'function') return false;\n    if (firstOrderStorage(FIRST_ORDER_DONE_KEY) === '1') return false;\n    if (Number(firstOrderStorage(FIRST_ORDER_HIDE_KEY) || 0) > Date.now()) return false;\n    return !offerHandoff.read();\n  }\n\n  function pageIsBusy() {\n    return root.classList.contains('pq-modal-open')\n      || root.classList.contains('pq-mobile-menu-open')\n      || root.classList.contains('pq-mobile-cart-open')\n      || Boolean(qs('.cart-drawer.is-open'));\n  }\n\n  let firstOrderShown = false;\n  function openFirstOrderPopup() {\n    if (firstOrderShown || !firstOrderAllowed()) return;\n    if (pageIsBusy() || document.visibilityState === 'hidden') {\n      window.setTimeout(openFirstOrderPopup, 10000);\n      return;\n    }\n    firstOrderShown = true;\n    firstOrderPopup.showModal();\n  }\n\n  function closeFirstOrderPopup() {\n    if (!firstOrderPopup?.open) return;\n    const succeeded = !qs('[data-first-order-result]', firstOrderPopup).hidden;\n    if (!succeeded) firstOrderStorage(FIRST_ORDER_HIDE_KEY, String(Date.now() + FIRST_ORDER_HIDE_DAYS * 86400000));\n    firstOrderPopup.close();\n  }\n\n  async function submitFirstOrder(event) {\n    event.preventDefault();\n    const form = event.currentTarget;\n    const status = qs('[data-first-order-status]', firstOrderPopup);\n    const submit = qs('[data-first-order-submit]', form);\n    const email = String(form.elements.email.value || '').trim().toLowerCase();\n    status.textContent = '';\n    if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)) {\n      status.textContent = firstOrderCopy('errorInvalid');\n      form.elements.email.focus();\n      return;\n    }\n    submit.disabled = true;\n    try {\n      const endpoint = `${String(config.offerApi || 'https://offer.peptique.ae/api').replace(/\\/$/, '')}/subscribe`;\n      const response = await fetch(endpoint, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        credentials: 'omit',\n        body: JSON.stringify({\n          email,\n          company: form.elements.company?.value || '',\n          source: 'store_popup',\n          campaign: { utm_source: 'store-popup', utm_medium: 'popup' },\n        }),\n      });\n      const payload = await response.json().catch(() => ({}));\n      if (!response.ok || !payload.code) {\n        const key = response.status === 400 ? 'errorInvalid' : response.status === 409 ? 'errorRepeat' : response.status === 429 ? 'errorBusy' : 'errorGeneric';\n        throw new Error(firstOrderCopy(key));\n      }\n      offerHandoff.save({ email, code: payload.code, expiresAt: Math.floor(Date.now() / 1000) + FIRST_ORDER_CONTEXT_SECONDS });\n      firstOrderStorage(FIRST_ORDER_DONE_KEY, '1');\n      // Also attach the code to this browser's cart session; checkout links carry it too.\n      fetch(`/discount/${encodeURIComponent(payload.code)}?redirect=%2Fcart.js`, { credentials: 'same-origin' }).catch(() => {});\n      qs('[data-first-order-code]', firstOrderPopup).textContent = payload.code;\n      qs('[data-first-order-form-state]', firstOrderPopup).hidden = true;\n      qs('[data-first-order-result]', firstOrderPopup).hidden = false;\n      qs('[data-first-order-result] .fo-popup__continue', firstOrderPopup)?.focus();\n      syncFirstOrderNotes();\n    } catch (error) {\n      status.textContent = error.message || firstOrderCopy('errorGeneric');\n      submit.disabled = false;\n    }\n  }\n\n  function initFirstOrderPopup() {\n    syncFirstOrderNotes();\n    if (!firstOrderPopup) return;\n    qs('[data-first-order-form]', firstOrderPopup)?.addEventListener('submit', submitFirstOrder);\n    qsa('[data-first-order-close]', firstOrderPopup).forEach(button => button.addEventListener('click', closeFirstOrderPopup));\n    firstOrderPopup.addEventListener('cancel', event => { event.preventDefault(); closeFirstOrderPopup(); });\n    firstOrderPopup.addEventListener('click', event => { if (event.target === firstOrderPopup) closeFirstOrderPopup(); });\n    qs('[data-first-order-copy]', firstOrderPopup)?.addEventListener('click', async () => {\n      const code = qs('[data-first-order-code]', firstOrderPopup).textContent;\n      try { await navigator.clipboard.writeText(code); } catch (_) { return; }\n      qsa('[data-copy-label-en],[data-copy-label-ar]', firstOrderPopup).forEach(label => {\n        label.textContent = label.hasAttribute('data-copy-label-ar') ? firstOrderPopup.dataset.copiedAr : firstOrderPopup.dataset.copiedEn;\n      });\n    });\n    if (!firstOrderAllowed()) return;\n    const finePointer = window.matchMedia?.('(any-hover: hover) and (any-pointer: fine)').matches;\n    const startedAt = Date.now();\n    if (finePointer) {\n      document.addEventListener('mouseout', event => {\n        if (!event.relatedTarget && event.clientY <= 0 && Date.now() - startedAt > 5000) openFirstOrderPopup();\n      });\n      window.setTimeout(openFirstOrderPopup, 20000);\n    } else {\n      window.setTimeout(openFirstOrderPopup, 30000);\n      const onScroll = () => {\n        const scrollable = document.documentElement.scrollHeight - window.innerHeight;\n        if (scrollable > 0 && window.scrollY / scrollable >= 0.5) {\n          window.removeEventListener('scroll', onScroll);\n          openFirstOrderPopup();\n        }\n      };\n      window.addEventListener('scroll', onScroll, { passive: true });\n    }\n  }\n\n  initFirstOrderPopup();\n})();\n"],
  "mappings": "CAAC,IAAM,CACL,SAAS,WAAW,MAAQ,GAAI,CAC9B,OAAO,OAAO,KAAK,EAAE,QAAQ,WAAY,OAAS,CAAC,IAAI,QAAQ,IAAI,OAAO,IAAI,OAAO,IAAI,SAAS,IAAI,QAAQ,GAAE,IAAI,CAAE,CACxH,CAEA,SAAS,aAAa,MAAO,CAC3B,GAA2B,OAAU,MAAQ,QAAU,GAAI,OAAO,KAClE,MAAM,OAAS,OAAO,KAAK,EAC3B,OAAO,OAAO,SAAS,MAAM,EAAI,OAAS,IAC5C,CAEA,SAAS,aAAa,KAAM,IAAK,CAC/B,OAAK,IACD,OAAO,UAAU,eAAe,KAAK,KAAM,GAAG,EAAU,KAAK,GAAG,EAC7D,IAAI,MAAM,GAAG,EAAE,OAAO,CAAC,MAAO,OAAS,OAAS,MAAM,IAAI,EAAG,IAAI,EAFvD,EAGnB,CAEA,MAAM,KAAO,SAAS,gBAChB,GAAK,CAAC,SAAU,MAAQ,WAAa,MAAM,cAAc,QAAQ,EACjE,IAAM,CAAC,SAAU,MAAQ,WAAa,CAAC,GAAG,MAAM,iBAAiB,QAAQ,CAAC,EAC1E,YAAc,KAAK,MAAM,GAAG,6BAA6B,EAAE,WAAW,EACtE,WAAa,GAAG,oBAAoB,EACpC,OAAS,WAAa,KAAK,MAAM,WAAW,WAAW,EAAI,CAAE,KAAM,IAAK,YAAa,iBAAkB,WAAY,KAAM,aAAc,GAAO,iBAAkB,uBAAwB,SAAU,+BAAgC,EAClO,WAAa,GAAG,oBAAoB,EACpC,MAAQ,GAAG,mBAAmB,EAC9B,WAAa,GAAG,oBAAoB,EACpC,eAAiB,GAAG,yBAAyB,EAC7C,qBAAuB,GAAG,gCAAgC,EAC1D,gBAAkB,OAAO,WAAW,oBAAoB,EACxD,WAAa,GAAG,oBAAoB,EAC1C,IAAI,gBAAkB,EAClB,qBAAuB,EACvB,eAAiB,KACjB,iBAAmB,KACvB,MAAM,uBAAyB,IAAI,IAC7B,yBAA2B,IAAI,IAC/B,sBAAwB,6BAE1B,sBAAuB,UACzB,QAAQ,kBAAoB,YAAY,iBAAiB,YAAY,EAAE,CAAC,GAAG,OAAS,SAAW,SAAW,OAC1G,OAAO,iBAAiB,WAAY,IAAM,CACxC,MAAM,OAAS,KAAK,UAAU,SAAS,eAAe,EAClD,CAAC,WAAW,KAAK,MAAM,iBAAiB,uBAAuB,GAAK,GAAG,EACvE,OAAO,QACX,QAAQ,aAAa,CAAE,GAAG,QAAQ,MAAO,UAAW,KAAK,IAAI,EAAG,MAAM,CAAE,EAAG,EAAE,EAC7E,QAAQ,kBAAoB,MAC9B,CAAC,EACD,OAAO,iBAAiB,WAAY,OAAS,CAE3C,GAAI,EADoB,MAAM,WAAa,YAAY,iBAAiB,YAAY,EAAE,CAAC,GAAG,OAAS,iBAC3E,CAAC,OAAO,SAAS,QAAQ,OAAO,SAAS,EAAG,OACpE,MAAM,EAAI,QAAQ,MAAM,UACxB,sBAAsB,IAAM,OAAO,SAAS,EAAG,CAAC,CAAC,CACnD,CAAC,GAEH,SAAS,iBAAkB,CACzB,iBAAmB,EACnB,GAAI,CAAE,eAAe,WAAW,gBAAgB,CAAG,MAAY,CAAC,CAClE,CAEA,SAAS,wBAAyB,CAChC,IAAI,KAAO,GACX,GAAI,CAAE,KAAO,eAAe,QAAQ,gBAAgB,GAAK,EAAI,MAAY,CAAC,CAE1E,GADK,OAAM,KAAO,OAAO,SAAS,MAAQ,IACtC,OAAS,aAAe,OAAS,OAAQ,OAAO,KACpD,GAAI,CACF,MAAM,MAAQ,IAAI,IAAI,OAAO,SAAS,IAAI,EAAE,aAAa,IAAI,OAAO,EACpE,GAAI,QAAU,YAAc,QAAU,MAAO,MAAO,IAAI,KAAK,EAC/D,MAAY,CAAC,CACb,MAAO,EACT,CAEI,uBAAuB,GAAG,KAAK,UAAU,IAAI,uBAAuB,EAExE,SAAS,wBAAyB,CAChC,MAAM,SAAW,GAAG,WAAW,EAC/B,GAAI,CAAC,UAAY,SAAS,QAAQ,gBAAkB,OAAQ,OAC5D,SAAS,QAAQ,cAAgB,OACjC,SAAS,UAAU,IAAI,qBAAqB,EAC5C,MAAM,OAAS,IAAM,CACf,SAAS,UAAU,SAAS,qBAAqB,IACrD,sBAAsB,IAAM,CAC1B,SAAS,UAAU,IAAI,qBAAqB,EAC5C,MAAM,OAAS,IAAM,CACnB,SAAS,UAAU,OAAO,qBAAqB,EAC/C,SAAS,UAAU,IAAI,sBAAsB,CAC/C,EACM,cAAgB,IAAI,gBAAiB,QAAQ,EAC7C,iBAAmB,cAAc,cAAc,OAAS,CAAC,EAC/D,GAAI,KAAK,UAAU,SAAS,uBAAuB,GAAK,qBAAqB,GAAK,CAAC,iBAAkB,CACnG,OAAO,EACP,MACF,CACA,iBAAiB,iBAAiB,eAAgB,OAAQ,CAAE,KAAM,EAAK,CAAC,EACxE,OAAO,WAAW,OAAQ,IAAI,CAChC,CAAC,EACD,kBAAkB,UAAU,QAAQ,EACtC,EACA,GAAI,uBAAuB,GAAK,EAAE,yBAA0B,QAAS,CACnE,OAAO,EACP,MACF,CACK,mBACH,iBAAmB,IAAI,qBAAqB,SAAW,CACrD,QAAQ,QAAQ,OAAS,CACnB,MAAM,gBAAgB,OAAO,CACnC,CAAC,CACH,EAAG,CAAE,UAAW,IAAM,WAAY,iBAAkB,CAAC,GAEvD,iBAAiB,QAAQ,QAAQ,CACnC,CAEA,SAAS,gBAAiB,CACxB,MAAM,QAAU,IAAI,eAAe,EAAE,OAAO,IAAM,CAAC,GAAG,QAAQ,SAAW,GAAG,KAAO,YAAc,CAAC,GAAG,QAAQ,WAAW,CAAC,EACzH,GAAI,CAAC,QAAQ,OAAQ,OACrB,QAAQ,QAAQ,IAAM,CACpB,GAAG,QAAQ,QAAU,IACrB,GAAG,UAAU,IAAI,mBAAmB,CACtC,CAAC,EACD,MAAM,OAAS,IAAM,CACf,CAAC,IAAM,GAAG,QAAQ,YACtB,GAAG,QAAQ,UAAY,IACvB,sBAAsB,IAAM,CAC1B,GAAG,UAAU,IAAI,mBAAmB,CACtC,CAAC,EACH,EACA,GAAI,EAAE,yBAA0B,QAAS,CACvC,QAAQ,QAAQ,MAAM,EACtB,MACF,CACK,iBACH,eAAiB,IAAI,qBAAqB,SAAW,CACnD,QAAQ,QAAQ,OAAS,CAClB,MAAM,iBACX,OAAO,MAAM,MAAM,EACnB,eAAe,UAAU,MAAM,MAAM,EACvC,CAAC,CACH,EAAG,CAAE,UAAW,IAAM,WAAY,iBAAkB,CAAC,GAEvD,QAAQ,QAAQ,IAAM,eAAe,QAAQ,EAAE,CAAC,CAClD,CAEA,SAAS,mBAAoB,CAC3B,MAAM,KAAO,GAAG,YAAY,EAC5B,GAAI,CAAC,MAAQ,KAAK,QAAQ,iBAAmB,OAAQ,OACrD,KAAK,QAAQ,eAAiB,OAC9B,MAAM,kBAAoB,IAAM,CAC9B,KAAK,UAAU,IAAI,uBAAuB,CAC5C,EACM,WAAa,GAAG,4CAA6C,IAAI,EACjD,OAAO,WAAW,kCAAkC,EAAE,SACvD,KAAK,UAAU,SAAS,oBAAoB,GAAK,KAAK,UAAU,SAAS,uBAAuB,GAAK,CAAC,WACzH,kBAAkB,GAElB,WAAW,iBAAiB,eAAgB,kBAAmB,CAAE,KAAM,EAAK,CAAC,EAC7E,OAAO,WAAW,kBAAmB,GAAI,GAE3C,IAAI,MAAQ,EACZ,MAAM,OAAS,IAAM,CACnB,KAAK,UAAU,OAAO,cAAe,OAAO,QAAU,EAAE,EACxD,MAAQ,CACV,EACA,OAAO,iBAAiB,SAAU,IAAM,CACjC,QAAO,MAAQ,sBAAsB,MAAM,EAClD,EAAG,CAAE,QAAS,EAAK,CAAC,EACpB,OAAO,CACT,CAEA,SAAS,qBAAsB,CAC7B,GAAI,CAAC,GAAG,YAAY,EAAG,OACvB,MAAM,uBAAyB,IAAM,CACnC,GAAI,CAAE,eAAe,QAAQ,sBAAuB,OAAO,KAAK,IAAI,CAAC,CAAC,CAAG,MAAY,CAAC,CACxF,EACA,SAAS,iBAAiB,mBAAoB,IAAM,CAClD,GAAI,SAAS,OAAQ,CACnB,uBAAuB,EACvB,MACF,CACA,KAAK,UAAU,IAAI,oBAAoB,EACvC,GAAG,YAAY,GAAG,UAAU,IAAI,uBAAuB,CACzD,CAAC,EACD,OAAO,iBAAiB,WAAY,sBAAsB,EAC1D,OAAO,iBAAiB,WAAY,OAAS,CACvC,MAAM,YACR,KAAK,UAAU,IAAI,oBAAoB,EACvC,GAAG,YAAY,GAAG,UAAU,IAAI,uBAAuB,EAE3D,CAAC,CACH,CAEA,SAAS,iBAAkB,CACzB,MAAM,KAAO,GAAG,oBAAoB,EAChC,MAAM,KAAK,aAAa,UAAW,KAAK,QAAQ,QAAU,OAAS,UAAY,SAAS,CAC9F,CAEA,MAAM,kBAAoB,IAAI,IAE9B,SAAS,eAAe,OAAQ,UAAY,GAAI,MAAQ,GAAI,CAC1D,GAAI,CAAC,OAAQ,OAAO,QAAQ,QAAQ,EACpC,GAAI,kBAAkB,IAAI,MAAM,EAAG,OAAO,kBAAkB,IAAI,MAAM,EACtE,MAAM,OAAS,IAAI,QAAQ,SAAW,CACpC,MAAM,MAAQ,IAAI,MAClB,IAAI,QAAU,GACd,MAAM,OAAS,CAAC,OAAS,KAAU,CAC7B,UACJ,QAAU,GACV,OAAO,aAAa,OAAO,EAC3B,MAAM,OAAS,MAAM,QAAU,KAC1B,QAAQ,kBAAkB,OAAO,MAAM,EAC5C,QAAQ,EACV,EACM,QAAU,OAAO,WAAW,IAAM,OAAO,EAAG,GAAG,EACrD,MAAM,SAAW,QACjB,MAAM,cAAgB,MAElB,YACF,MAAM,MAAQ,MACd,MAAM,OAAS,WAEjB,MAAM,OAAS,IAAM,CACnB,GAAI,CACF,MAAM,QAAU,MAAM,SAAS,EAC3B,SAAS,KAAM,QAAQ,KAAK,IAAM,OAAO,EAAI,EAAG,IAAM,OAAO,EAAI,CAAC,EACjE,OAAO,EAAI,CAClB,MAAY,CAAE,OAAO,EAAI,CAAG,CAC9B,EACA,MAAM,QAAU,IAAM,OAAO,EAC7B,MAAM,IAAM,MACd,CAAC,EACD,yBAAkB,IAAI,OAAQ,MAAM,EAC7B,MACT,CAEA,SAAS,0BAA2B,CAClC,MAAM,WAAa,UAAU,WAC7B,GAAI,YAAY,UAAY,WAAW,KAAK,YAAY,eAAiB,EAAE,EAAG,OAC9E,MAAM,KAAO,IAAM,CAEb,SAAS,kBAAoB,UAAY,SAAS,iBAAiB,QAAQ,QAAU,QACzF,0BAA0B,SAAU,EAAI,CAC1C,EAGM,UAAY,IAAM,OAAO,WAAW,IAAM,CAC1C,OAAO,oBAAqB,OAAO,oBAAoB,KAAM,CAAE,QAAS,IAAK,CAAC,EAC7E,KAAK,CACZ,EAAG,GAAI,EACH,SAAS,aAAe,WAAY,UAAU,EAC7C,OAAO,iBAAiB,OAAQ,UAAW,CAAE,KAAM,EAAK,CAAC,CAChE,CAEA,SAAS,0BAA0B,MAAQ,SAAU,gBAAkB,GAAO,CAC5E,MAAM,QAAU,IAAI,IACpB,WAAI,6BAA8B,KAAK,EAAE,QAAQ,OAAS,CACxD,MAAM,OAAS,MAAM,QAAQ,QACzB,QAAU,CAAC,QAAQ,IAAI,MAAM,GAAG,QAAQ,IAAI,OAAQ,CAAC,MAAM,QAAQ,YAAc,GAAI,MAAM,aAAa,OAAO,GAAK,EAAE,CAAC,CAC7H,CAAC,EACG,iBACF,IAAI,sDAAuD,KAAK,EAAE,QAAQ,SAAW,CACnF,MAAM,OAAS,QAAQ,QAAQ,qBAAuB,QAAQ,QAAQ,aAClE,QAAU,CAAC,QAAQ,IAAI,MAAM,GAAG,QAAQ,IAAI,OAAQ,CAAC,GAAI,EAAE,CAAC,CAClE,CAAC,EAEI,QAAQ,IAAI,CAAC,GAAG,OAAO,EAAE,IAAI,CAAC,CAAC,OAAQ,CAAC,UAAW,KAAK,CAAC,IAAM,eAAe,OAAQ,UAAW,KAAK,CAAC,CAAC,CACjH,CAEA,SAAS,kBAAmB,CAC1B,MAAM,OAAS,GAAG,4BAA4B,EAC9C,GAAI,CAAC,QAAU,OAAO,QAAQ,eAAiB,OAAQ,OACvD,MAAM,QAAU,OAAO,WAAW,KAAM,CAAE,MAAO,GAAM,eAAgB,EAAK,CAAC,EAC7E,GAAI,CAAC,QAAS,OACd,OAAO,QAAQ,aAAe,OAC9B,MAAM,cAAgB,OAAO,WAAW,kCAAkC,EACpE,kBAAoB,OAAO,WAAW,uCAAuC,EAC7E,aAAe,IAAI,MACzB,aAAa,SAAW,QACxB,IAAI,MAAQ,EACR,OAAS,EACT,WAAa,EACb,WAAa,EACb,WAAa,EACb,YAAc,EACd,YAAc,KACd,cAAgB,EAChB,oBAAsB,OAAO,WAC7B,kBAAoB,GACpB,kBAAoB,KACpB,uBAAyB,EAE7B,MAAM,aAAe,CACnB,CAAE,KAAM,IAAK,GAAI,GAAI,EACrB,CAAE,KAAM,IAAK,GAAI,GAAI,EACrB,CAAE,KAAM,IAAK,GAAI,GAAI,EACrB,CAAE,KAAM,GAAK,GAAI,GAAI,EACrB,CAAE,KAAM,IAAK,GAAI,GAAI,EACrB,CAAE,KAAM,IAAK,GAAI,GAAI,CACvB,EACM,eAAiB,IAAM,CAC3B,MAAM,WAAa,IAAI,YAAY,CAAC,EAChC,OAAO,QAAQ,gBAAiB,OAAO,OAAO,gBAAgB,UAAU,EACvE,WAAW,CAAC,GAAK,KAAK,IAAI,EAAI,KAAK,MAAM,YAAY,IAAI,EAAI,GAAI,KAAO,EAC7E,IAAI,KAAO,WAAW,CAAC,GAAK,WAC5B,MAAO,IAAM,CACX,MAAQ,WACR,IAAI,MAAQ,KACZ,aAAQ,KAAK,KAAK,MAAQ,QAAU,GAAI,MAAQ,CAAC,EACjD,OAAS,MAAQ,KAAK,KAAK,MAAQ,QAAU,EAAG,MAAQ,EAAE,IACjD,MAAQ,QAAU,MAAQ,GAAK,UAC1C,CACF,GAAG,EAEG,OAAS,IAAM,kBAAkB,QACnC,CAAE,aAAc,IAAK,SAAU,KAAM,KAAM,KAAM,KAAM,GAAI,EAC3D,CAAE,aAAc,IAAK,SAAU,KAAM,KAAM,KAAM,KAAM,GAAI,EACzD,MAAQ,CAAC,MAAO,QAAS,UAAY,KAAK,IAAI,QAAS,KAAK,IAAI,QAAS,KAAK,CAAC,EAC/E,WAAa,OAAS,MAAQ,OAAS,EAAI,EAAI,OAC/C,YAAc,IAAM,CACxB,QAAQ,aAAa,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EACrC,QAAQ,UAAU,EAAG,EAAG,OAAO,MAAO,OAAO,MAAM,CACrD,EACM,aAAe,IAAM,CACzB,MAAM,OAAS,OAAO,sBAAsB,EAC5C,MAAQ,KAAK,IAAI,EAAG,KAAK,KAAK,OAAO,OAAS,OAAO,UAAU,CAAC,EAChE,OAAS,KAAK,IAAI,EAAG,KAAK,KAAK,OAAO,QAAU,OAAO,WAAW,CAAC,EACnE,WAAa,KAAK,IAAI,OAAO,kBAAoB,EAAG,kBAAkB,QAAU,IAAM,CAAC,EACvF,MAAM,UAAY,KAAK,IAAI,EAAG,KAAK,MAAM,MAAQ,UAAU,CAAC,EACtD,WAAa,KAAK,IAAI,EAAG,KAAK,MAAM,OAAS,UAAU,CAAC,GAC1D,OAAO,QAAU,WAAa,OAAO,SAAW,cAClD,OAAO,MAAQ,UACf,OAAO,OAAS,YAElB,YAAY,EACZ,YAAc,CAChB,EACM,eAAiB,IAAM,CACtB,cAAa,YAAc,sBAAsB,YAAY,EACpE,EACM,kBAAoB,IAAM,CAC9B,cAAgB,OAAO,QACvB,MAAM,eAAiB,KAAK,IAAI,EAAG,KAAK,MAAM,OAAO,gBAAgB,QAAU,OAAO,WAAW,CAAC,EAClG,OAAO,MAAM,IAAM,GAAG,aAAa,KACnC,OAAO,MAAM,OAAS,GAAG,cAAc,IACzC,EACM,eAAiB,IAAM,CAC3B,MAAM,UAAY,kBAAkB,QAAU,IAAM,MAAM,MAAQ,IAAK,IAAK,GAAG,EAC/E,MAAO,CACL,UACA,WAAY,UAAY,YACxB,OAAQ,kBAAkB,QAAU,MAAM,MAAQ,IAAK,IAAK,GAAG,EAAI,MAAM,MAAQ,IAAK,IAAK,GAAG,CAChG,CACF,EACM,YAAc,CAAC,EAAG,EAAG,UAAY,CAErC,GADA,YAAY,EACR,CAAC,aAAa,UAAY,CAAC,aAAa,cAAgB,SAAW,KAAM,OAC7E,QAAQ,aAAa,WAAY,EAAG,EAAG,WAAY,EAAG,CAAC,EACvD,KAAM,CAAE,UAAW,WAAY,MAAO,EAAI,eAAe,EACnD,YAAc,OAAS,IACvB,KAAO,KAAK,IAAI,EAAG,EAAI,WAAW,EAClC,MAAQ,KAAK,IAAI,MAAO,EAAI,WAAW,EACvC,IAAM,KAAK,IAAI,EAAG,EAAI,WAAW,EACjC,OAAS,KAAK,IAAI,OAAQ,EAAI,WAAW,EAC/C,GAAI,OAAS,MAAQ,QAAU,IAAK,OAEpC,MAAM,kBAAoB,MAAQ,WAAa,EAIzC,eAAiB,EAAE,cAAgB,YACnC,YAAc,iBAAmB,KAAK,OAAO,KAAO,kBAAoB,SAAS,EAAI,UACrF,SAAW,eAAiB,KAAK,OAAO,IAAM,gBAAkB,UAAU,EAAI,WACpF,QAAQ,KAAK,EACb,QAAQ,UAAU,EAClB,QAAQ,KAAK,KAAM,IAAK,MAAQ,KAAM,OAAS,GAAG,EAClD,QAAQ,KAAK,EACb,QAAS,MAAQ,SAAU,MAAQ,OAAQ,OAAS,WAClD,QAAS,MAAQ,YAAa,MAAQ,MAAO,OAAS,UACpD,QAAQ,UAAU,aAAc,MAAO,MAAO,UAAW,UAAU,EAGvE,QAAQ,yBAA2B,iBACnC,MAAM,OAAS,QAAQ,qBAAqB,EAAG,EAAG,EAAG,EAAG,EAAG,WAAW,EACtE,OAAO,aAAa,EAAG,oBAAoB,KAAO,OAAO,GAAG,EAC5D,OAAO,aAAa,KAAM,oBAAoB,KAAO,OAAO,GAAG,EAC/D,OAAO,aAAa,KAAM,oBAAoB,KAAO,OAAO,GAAG,EAC/D,OAAO,aAAa,IAAK,oBAAoB,IAAM,OAAO,GAAG,EAC7D,OAAO,aAAa,IAAK,oBAAoB,KAAO,OAAO,GAAG,EAC9D,OAAO,aAAa,KAAM,oBAAoB,KAAO,OAAO,GAAG,EAC/D,OAAO,aAAa,IAAK,oBAAoB,MAAQ,OAAO,GAAG,EAC/D,OAAO,aAAa,EAAG,qBAAqB,EAC5C,QAAQ,UAAY,OACpB,QAAQ,SAAS,KAAM,IAAK,MAAQ,KAAM,OAAS,GAAG,EACtD,QAAQ,QAAQ,CAClB,EACM,UAAY,IAAM,CACtB,OAAO,aAAa,UAAU,EAC1B,YAAY,qBAAqB,UAAU,EAC/C,WAAa,EACb,WAAa,EACb,YAAc,KACd,YAAY,CACd,EACM,cAAgB,OAAS,CAC7B,OAAO,aAAa,UAAU,EAC1B,gBAAc,SAAW,SAAS,QAAU,CAAC,aAAa,YAC9D,WAAa,OAAO,WAAW,WAAY,KAAK,EAClD,EACM,gBAAkB,IAAM,CAC5B,IAAI,UAAY,KAAK,MAAM,cAAc,EAAI,aAAa,MAAM,EAChE,OAAI,YAAc,oBAAmB,WAAa,UAAY,EAAI,KAAK,MAAM,cAAc,GAAK,aAAa,OAAS,EAAE,GAAK,aAAa,QAC1I,kBAAoB,UACb,aAAa,SAAS,CAC/B,EACM,qBAAuB,IAAM,CACjC,GAAI,oBAAsB,KACxB,yBAAoB,KAAK,OAAS,KAC3B,kBAGT,MAAM,cADkB,wBAA0B,GAAK,cAAc,EAAI,IACjC,CAAC,kBAAoB,kBAC7D,8BAAyB,gBAAkB,kBAAoB,uBAAyB,EAAI,EAC5F,kBAAoB,cACb,aACT,EACM,WAAa,IAAM,CACvB,GAAI,cAAc,SAAW,SAAS,OAAQ,CAC5C,UAAU,EACV,MACF,CACA,kBAAkB,EAClB,aAAa,EACb,MAAM,WAAa,OAAO,EACpB,SAAW,KAAK,MAAM,WAAW,UAAY,IAAM,cAAc,EAAI,IAAI,EACzE,KAAO,KAAK,MAAM,WAAW,MAAQ,cAAc,EAAI,IAAM,GAAI,EACjE,KAAO,KAAK,MAAM,WAAW,MAAQ,IAAM,cAAc,EAAI,IAAI,EACjE,UAAY,IAAM,cAAc,EAAI,IACpC,CAAE,MAAO,EAAI,eAAe,EAC5B,YAAc,OAAS,IACvB,QAAU,qBAAqB,EAC/B,KAAO,gBAAgB,EACvB,KAAO,YAAc,GACrB,OAAS,QAAU,MAAQ,KAAO,CAAC,KACnC,KAAO,QAAU,CAAC,KAAO,MAAQ,KACvC,YAAc,CACZ,SACA,KACA,KACA,UACA,KACA,OACA,KACA,UAAW,YAAY,IAAI,CAC7B,EACA,MAAM,YAAc,KAAO,CACzB,GAAI,CAAC,YAAa,OAClB,MAAM,QAAU,IAAM,YAAY,UAC5B,SAAW,KAAK,IAAI,EAAG,QAAU,YAAY,QAAQ,EACrD,MAAQ,GAAK,KAAK,IAAI,KAAK,GAAK,QAAQ,EAAI,EAC5C,EAAI,YAAY,QAAU,YAAY,KAAO,YAAY,QAAU,MAGnE,EAAI,QAAU,YAAY,KAAK,MAAQ,YAAY,KAAK,GAAK,YAAY,KAAK,MAAQ,OACtF,OAAS,WAAW,MAAM,QAAU,YAAY,KAAM,EAAG,CAAC,CAAC,EAC3D,QAAU,WAAW,OAAO,YAAY,SAAW,SAAW,YAAY,KAAM,EAAG,CAAC,CAAC,EAE3F,GADA,YAAY,EAAG,EAAG,KAAK,IAAI,OAAQ,OAAO,EAAI,YAAY,SAAS,EAC/D,SAAW,EACb,WAAa,sBAAsB,WAAW,MACzC,CACL,WAAa,EACb,MAAM,UAAY,YAAY,KAC9B,YAAc,KACd,YAAY,EACZ,cAAc,SAAS,CACzB,CACF,EACA,WAAa,sBAAsB,WAAW,CAChD,EACA,SAAS,iBAAiB,mBAAoB,IAAM,CAClD,UAAU,EACL,SAAS,QAAQ,cAAc,GAAG,CACzC,CAAC,EACD,cAAc,mBAAmB,SAAU,IAAM,CAC/C,UAAU,EACL,cAAc,SAAS,cAAc,GAAG,CAC/C,CAAC,EACD,kBAAkB,mBAAmB,SAAU,cAAc,EAC7D,OAAO,iBAAiB,SAAU,IAAM,CAIlC,KAAK,IAAI,OAAO,WAAa,mBAAmB,EAAI,IACxD,oBAAsB,OAAO,WAC7B,UAAU,EACV,eAAe,EACf,cAAc,GAAG,EACnB,EAAG,CAAE,QAAS,EAAK,CAAC,EACpB,IAAI,iBAAmB,EACvB,OAAO,iBAAiB,SAAU,IAAM,CACtC,KAAK,UAAU,IAAI,cAAc,EACjC,OAAO,aAAa,gBAAgB,EACpC,iBAAmB,OAAO,WAAW,IAAM,KAAK,UAAU,OAAO,cAAc,EAAG,GAAG,CACvF,EAAG,CAAE,QAAS,EAAK,CAAC,EACpB,aAAa,OAAS,IAAM,CAC1B,aAAa,EACb,cAAc,OAAO,EAAE,YAAY,CACrC,EACA,aAAa,IAAM,OAAO,QAAQ,eAAiB,EACrD,CAGA,SAAS,cAAc,OAAQ,OAAQ,CACrC,MAAI,CAAC,QAAU,CAAC,mBAAmB,KAAK,MAAM,EAAU,GACjD,CAAC,GAAG,OAAO,IAAI,OAAS,GAAG,OAAO,QAAQ,qBAAsB,KAAK,KAAK,EAAE,CAAC,IAAI,KAAK,GAAG,EAAG,GAAG,MAAM,QAAQ,EAAE,KAAK,IAAI,CACjI,CAEA,SAAS,uBAAuB,MAAQ,SAAU,CAChD,MAAM,KAAO,KAAK,QAAQ,QAAU,OACpC,IAAI,6BAA8B,KAAK,EAAE,QAAQ,OAAS,CACxD,MAAM,QAAU,KAAO,MAAM,QAAQ,QAAU,MAAM,QAAQ,WAAa,MAAM,QAAQ,SAClF,WAAa,KAAO,MAAM,QAAQ,WAAa,MAAM,QAAQ,cAAgB,GAC/E,UAAW,MAAM,aAAa,SAAU,SAAS,EAChD,MAAM,gBAAgB,QAAQ,EAC/B,QAAU,MAAM,aAAa,KAAK,IAAM,QAAQ,MAAM,aAAa,MAAO,MAAM,CACtF,CAAC,CACH,CAEA,SAAS,gBAAiB,CACxB,MAAM,KAAO,YACb,IAAI,qBAAqB,EAAE,QAAQ,IAAM,CACvC,GAAG,aAAa,eAAgB,OAAO,KAAK,QAAQ,QAAU,MAAM,CAAC,EACrE,MAAM,MAAQ,KAAK,QAAQ,QAAU,OAAS,KAAK,cAAgB,KAAK,UACxE,GAAG,aAAa,aAAc,KAAK,EACnC,GAAG,aAAa,QAAS,KAAK,CAChC,CAAC,CACH,CACA,SAAS,YAAY,MAAO,CAE1B,MAAO,QADS,OAAO,OAAS,CAAC,EAAI,KAAK,eAAe,SAAS,gBAAgB,OAAS,KAAO,QAAU,QAAS,CAAC,sBAAuB,CAAC,CAAC,CAC3H,EACtB,CAEA,SAAS,SAASA,SAAS,CACpB,aACL,WAAW,YAAc,GACzB,sBAAsB,IAAM,CAAE,WAAW,YAAcA,QAAS,CAAC,EACnE,CAEA,SAAS,QAAQ,IAAK,CACpB,OAAO,YAAY,SAAS,GAAG,CACjC,CAEA,SAAS,gBAAgB,MAAO,CAC9B,MAAM,OAAS,OAAO,KAAK,EAC3B,OAAI,SAAW,EAAU,YAAY,WAAW,SAC5C,SAAW,EAAU,YAAY,WAAW,SAC5C,OAAO,UAAU,MAAM,GAAK,QAAU,GAAK,QAAU,GAAW,YAAY,WAAW,UACpF,YAAY,WAAW,QAChC,CAEA,SAAS,yBAAyB,UAAW,MAAO,CAClD,MAAM,GAAK,OAAO,WAAa,EAAE,EACjC,GAAI,CAAC,GAAI,OACT,MAAM,OAAS,aAAa,KAAK,EAC7B,SAAW,MACf,uBAAuB,IAAI,GAAI,KAAK,IAAI,EAAG,KAAK,MAAM,MAAM,CAAC,CAAC,CAChE,CAEA,SAAS,8BAA8B,MAAQ,SAAU,CACvD,IAAI,0CAA2C,KAAK,EAAE,QAAQ,IAAM,yBAAyB,GAAG,QAAQ,UAAW,GAAG,QAAQ,cAAc,CAAC,EAC7I,IAAI,sCAAuC,KAAK,EAAE,QAAQ,QAAU,yBAAyB,OAAO,MAAO,OAAO,QAAQ,cAAc,CAAC,CAC3I,CAEA,SAAS,yBAAyB,UAAW,CAC3C,MAAM,GAAK,OAAO,WAAa,EAAE,EACjC,GAAI,CAAC,GAAI,OAAO,KAChB,GAAI,uBAAuB,IAAI,EAAE,EAAG,OAAO,uBAAuB,IAAI,EAAE,EACxE,MAAM,QAAU,IAAI,OAAO,EAAE,EACvB,OAAS,GAAG,qBAAqB,OAAO,0BAA0B,GAAK,GAAG,iBAAiB,OAAO,0BAA0B,EAClI,OAAI,QACF,yBAAyB,GAAI,OAAO,QAAQ,cAAc,EACnD,uBAAuB,IAAI,EAAE,EAAI,uBAAuB,IAAI,EAAE,EAAI,MAEpE,IACT,CAEA,SAAS,qBAAqB,UAAW,SAAU,CACjD,MAAM,KAAO,KAAK,IAAI,EAAG,OAAO,UAAY,CAAC,CAAC,EACxC,MAAQ,yBAAyB,SAAS,EAChD,OAAO,QAAU,KAAO,KAAO,KAAK,IAAI,KAAM,KAAK,CACrD,CAEA,SAAS,sBAAsB,QAAS,SAAU,CAChD,GAAI,CAAC,QAAS,OACd,MAAM,MAAQ,yBAAyB,QAAQ,QAAQ,SAAS,EAChE,IAAI,uEAAwE,OAAO,EAAE,QAAQ,QAAU,CACvF,OAAO,OAAO,QAAQ,eAAiB,OAAO,QAAQ,kBAAoB,OAAO,QAAQ,WAAa,CAAC,EACzG,IAAG,OAAO,SAAW,QAAU,MAAQ,OAAO,UAAY,CAAC,GAAK,MAC9E,CAAC,CACH,CAEA,SAAS,uCAAwC,CAC/C,GAAI,CAAC,yBAAyB,KAAM,OACpC,MAAM,QAAU,CAAC,EACjB,yBAAyB,QAAQ,CAAC,SAAU,YAAc,CAAE,QAAQ,SAAS,EAAI,QAAU,CAAC,EAC5F,GAAI,CACF,eAAe,QAAQ,sBAAuB,KAAK,UAAU,CAAE,GAAI,KAAK,IAAI,EAAG,OAAQ,CAAC,CAAC,CAC3F,MAAY,CAAC,CACf,CAEA,SAAS,2BAA4B,CACnC,IAAI,QAAU,KACd,GAAI,CACF,QAAU,KAAK,MAAM,eAAe,QAAQ,qBAAqB,GAAK,MAAM,EAC5E,eAAe,WAAW,qBAAqB,CACjD,MAAY,CAAC,CACb,MAAI,CAAC,SAAW,CAAC,QAAQ,SAAW,KAAK,IAAI,EAAI,OAAO,QAAQ,IAAM,CAAC,EAAI,IAAc,IACzF,OAAO,QAAQ,QAAQ,OAAO,EAAE,QAAQ,CAAC,CAAC,UAAW,QAAQ,IAAM,CACjE,yBAAyB,IAAI,OAAO,SAAS,EAAG,qBAAqB,UAAW,QAAQ,CAAC,CAC3F,CAAC,EACM,yBAAyB,KAAO,EACzC,CAEA,SAAS,8BAA+B,CACtC,CAAC,GAAG,yBAAyB,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC,UAAW,QAAQ,IAAM,oBAAoB,UAAW,QAAQ,CAAC,CACrH,CACA,SAAS,2BAA2B,CAAE,SAAAC,UAAU,OAAAC,QAAQ,IAAAC,KAAK,QAAAC,SAAS,eAAAC,gBAAgB,UAAAC,WAAW,MAAAC,OAAO,UAAAC,WAAW,KAAAC,MAAM,GAAAC,IAAI,IAAAC,KAAK,UAAAC,WAAW,oBAAAC,qBAAqB,gBAAAC,iBAAiB,mBAAAC,oBAAoB,oBAAAC,qBAAqB,WAAAC,YAAY,YAAAC,aAAa,gBAAAC,iBAAiB,qBAAAC,sBAAsB,kBAAAC,mBAAmB,qBAAAC,sBAAsB,iCAAAC,kCAAkC,mBAAAC,oBAAoB,mBAAAC,oBAAoB,kBAAAC,kBAAkB,EAAG,CAEla,SAASC,oBAAmB,IAAK,CAC/Bf,WAAU,EACVX,UAAS,MAAM,UAAU,OAAO,iBAAiB,EACjD,MAAM,KAAO,IAAIE,KAAI,IAAKD,QAAO,SAAS,IAAI,EAC9C,GAAI,KAAK,SAAWA,QAAO,SAAS,OAAQ,CAC1C0B,eAAc,EACd1B,QAAO,SAAS,KAAO,KAAK,KAC5B,MACF,CACA,GAAI,KAAK,MACeW,qBAAoB,KAAK,IAAI,EAChC,CACjBC,iBAAgB,EAChBC,oBAAmB,KAAK,KAAM,QAAQ,EACtCC,qBAAoB,IAAI,EACxB,MACF,CAEF,MAAM,cAAgBC,YAAWf,QAAO,SAAS,QAAQ,EACnD,WAAae,YAAW,KAAK,QAAQ,EACrC,SAAW,eAAiB,YAAcC,aAAYhB,QAAO,SAAS,QAAQ,IAAMgB,aAAY,KAAK,QAAQ,EAC7G,SAAW,KAAK,WAAahB,QAAO,SAAS,UAAY,KAAK,SAAWA,QAAO,SAAS,OAC/F,GAAI,UAAY,CAAC,KAAK,KAAM,CAC1BY,iBAAgB,EAChBK,iBAAgB,EAAG,EAAI,EACvBf,SAAQ,UAAUA,SAAQ,MAAO,GAAI,GAAG,KAAK,QAAQ,GAAG,KAAK,MAAM,EAAE,EACrE,MACF,CACA,GAAI,UAAY,KAAK,MACJS,qBAAoB,KAAK,IAAI,EAChC,CACVE,oBAAmB,KAAK,KAAM,QAAQ,EACtCC,qBAAoB,IAAI,EACxB,MACF,CAEF,GAAI,UAAY,CAAC,KAAK,KAAM,CAC1BF,iBAAgB,EAChBK,iBAAgB,EAAG,EAAI,EACvBf,SAAQ,UAAUA,SAAQ,MAAO,GAAI,KAAK,IAAI,EAC9C,MACF,CAIA,GAHIa,YAAW,KAAK,QAAQ,IAAM,KAAK,OAAS,aAAe,KAAK,OAAS,SAC3E,KAAK,aAAa,IAAI,QAAS,KAAK,KAAK,MAAM,CAAC,CAAC,EAE/C,KAAK,KACP,GAAI,CAAEZ,gBAAe,QAAQ,iBAAkB,KAAK,IAAI,CAAG,MAAY,CAAC,CAE1EuB,eAAc,EACd1B,QAAO,SAAS,KAAO,KAAK,IAC9B,CAEA,SAAS2B,iBAAgB,KAAM,CAC7B,IAAI,IACJ,GAAI,CAAE,IAAM,IAAI1B,KAAI,KAAMD,QAAO,SAAS,IAAI,CAAG,MAAY,CAAE,OAAO,IAAM,CAI5E,OAHI,IAAI,SAAWA,QAAO,SAAS,QAC/B,CAAC,YAAY,KAAK,IAAI,QAAQ,GAC9B,iDAAiD,KAAKmB,mBAAkB,IAAI,QAAQ,CAAC,GACrF,IAAI,WAAanB,QAAO,SAAS,UAAY,IAAI,SAAWA,QAAO,SAAS,QAAU,IAAI,KAAa,KACpG,GACT,CAEA,SAAS0B,gBAAgB,CACnBR,sBAAqB,GACzBnB,UAAS,MAAM,UAAU,IAAI,iBAAiB,CAChD,CAEA,MAAM,gBAAkB,IAAI,IACtB,oBAAsB,IAAI,IAChC,IAAI,qBAAuB,EAC3B,SAAS6B,cAAa,KAAM,CAC1B,GAAIxB,WAAU,YAAY,SAAU,OACpC,MAAM,IAAMuB,iBAAgB,IAAI,EAChC,GAAI,CAAC,IAAK,OACV,IAAI,KAAO,GACX,MAAM,IAAM,IAAI,KAChB,GAAI,gBAAgB,IAAI,GAAG,EAAG,OAC9B,gBAAgB,IAAI,GAAG,EACvB,MAAM,KAAO5B,UAAS,cAAc,MAAM,EAC1C,KAAK,IAAM,WACX,KAAK,KAAO,IACZ,KAAK,GAAK,WACVA,UAAS,KAAK,YAAY,IAAI,CAChC,CAEA,SAAS8B,qBAAoB,IAAK,CAChC,MAAO,GAAQ,KAAO,+DAA+D,KAAKV,mBAAkB,IAAI,QAAQ,CAAC,EAC3H,CAEA,eAAeW,qBAAoB,KAAM,CACvC,MAAM,IAAMH,iBAAgB,IAAI,EAChC,GAAI,CAAC,KAAO,CAACE,qBAAoB,GAAG,EAAG,OAAO,KAC9C,IAAI,KAAO,GACX,MAAM,IAAM,IAAI,KAChB,OAAK,oBAAoB,IAAI,GAAG,GAC9B,oBAAoB,IAAI,IAAKxB,OAAM,IAAK,CAAE,YAAa,aAAc,CAAC,EACnE,KAAK,UAAY,CAChB,GAAI,CAAC,SAAS,GAAI,MAAM,IAAI,MAAM,2BAA2B,EAC7D,OAAO,SAAS,KAAK,CACvB,CAAC,EACA,KAAK,MAAQ,CACZ,MAAM,IAAM,IAAIC,WAAU,EAAE,gBAAgB,KAAM,WAAW,EACvD,WAAa,IAAI,cAAc,mBAAmB,EACxD,GAAI,CAAC,WAAY,MAAM,IAAI,MAAM,4BAA4B,EAC7D,MAAO,CAAE,KAAM,WAAW,UAAW,MAAO,IAAI,KAAM,CACxD,CAAC,EACA,MAAM,OAAS,CACd,0BAAoB,OAAO,GAAG,EACxB,KACR,CAAC,CAAC,EAEC,oBAAoB,IAAI,GAAG,CACpC,CAEA,SAASyB,wBAAuB,MAAQhC,UAAU,CAC5CK,WAAU,YAAY,UAC1BK,KAAI,2BAA4B,KAAK,EAAE,QAAQ,MAAQ,CACrDqB,qBAAoB,KAAK,IAAI,EAAE,MAAM,IAAM,CAAC,CAAC,CAC/C,CAAC,CACH,CAEA,eAAeE,oBAAmB,KAAM,CAAE,QAAU,EAAM,EAAI,CAAC,EAAG,CAChE,MAAM,QAAUxB,IAAG,mBAAmB,EACtC,GAAI,CAAC,QAAS,MAAO,GACrB,MAAM,IAAMmB,iBAAgB,IAAI,EAChC,GAAI,CAAC,KAAO,CAACE,qBAAoB,GAAG,EAAG,MAAO,GAC9C,MAAM,OAAS,EAAE,qBACX,YAAc7B,QAAO,SAAS,KACpC,IAAI,KACJ,GAAI,CACF,KAAO,MAAM8B,qBAAoB,IAAI,IAAI,CAC3C,OAAS,MAAO,CACd,GAAI,SAAW,sBAAwB9B,QAAO,SAAS,OAAS,YAAa,MAAO,GACpF,MAAM,KACR,CAEA,GADI,SAAW,sBAAwBA,QAAO,SAAS,OAAS,aAAe,CAAC,QAAQ,aACpF,CAAC,MAAM,KAAM,MAAO,GACxB,MAAM,UAAYD,UAAS,cAAc,KAAK,EAC9C,UAAU,UAAY,KAAK,KAAK,KAAK,EACrC,MAAM,eAAiBS,IAAG,oBAAqB,SAAS,EACxD,OAAK,gBACL,eAAe,UAAU,IAAI,mBAAmB,EAChD,QAAQ,YAAY,cAAc,EAC9B,KAAK,QAAOT,UAAS,MAAQ,KAAK,OAClC,QAASG,SAAQ,aAAaA,SAAQ,MAAO,GAAI,GAAG,IAAI,QAAQ,GAAG,IAAI,MAAM,EAAE,EAC9EA,SAAQ,UAAUA,SAAQ,MAAO,GAAI,GAAG,IAAI,QAAQ,GAAG,IAAI,MAAM,EAAE,EACxEkB,sBAAqB,cAAc,EACnCC,kCAAiC,EACjCC,oBAAmBf,MAAK,IAAI,EAC5BgB,oBAAmBhB,MAAK,IAAI,EAC5BwB,wBAAuB,cAAc,EACrCP,mBAAkB,EACX,IAZqB,EAa9B,CACA,MAAO,CAAE,mBAAAC,oBAAoB,gBAAAE,iBAAiB,cAAAD,eAAe,aAAAE,cAAc,oBAAAC,qBAAqB,oBAAAC,qBAAqB,uBAAAC,wBAAwB,mBAAAC,mBAAmB,CAClK,CACA,KAAM,CAAE,mBAAoB,gBAAiB,cAAe,aAAc,oBAAqB,oBAAqB,uBAAwB,kBAAmB,EAAI,2BAA2B,CAAE,SAAU,OAAQ,IAAK,QAAS,eAAgB,UAAW,MAAO,UAAW,KAAM,GAAI,IAAK,UAAW,IAAI,OAAS,UAAU,GAAG,IAAI,EAAG,oBAAqB,gBAAiB,mBAAoB,oBAAqB,WAAY,YAAa,gBAAiB,qBAAsB,kBAAmB,qBAAsB,iCAAkC,mBAAoB,mBAAoB,iBAAkB,CAAC,EAC7lB,SAAS,sBAAsB,CAAE,OAAAhC,QAAQ,SAAAD,UAAU,YAAAkC,aAAa,KAAA1B,MAAM,GAAAC,IAAI,IAAAC,KAAK,MAAAyB,OAAO,WAAAC,YAAY,WAAAC,YAAY,eAAAC,gBAAgB,qBAAAC,sBAAsB,gBAAAC,iBAAiB,UAAA7B,WAAW,sBAAA8B,sBAAsB,EAAG,CACvM,IAAI,sBAAwB,KACxB,eAAiB,EACjB,aAAe,EACf,kBAAoB,GACxB,MAAM,gBAAkB,IAAI,QAC5B,SAAS,iBAAkB,CACrB,oBACJ,kBAAoB,GACpB,aAAe,KAAK,IAAI,EAAGxC,QAAO,SAAWO,MAAK,WAAa,CAAC,EAChEA,MAAK,MAAM,YAAY,wBAAyB,GAAG,CAAC,YAAY,IAAI,EACpEA,MAAK,UAAU,IAAI,eAAe,EACpC,CAEA,SAAS,mBAAoB,CAC3B,GAAI,CAAC,kBAAmB,OACxB,MAAM,SAAW,aACjB,kBAAoB,GACpB,aAAe,EACfA,MAAK,UAAU,OAAO,eAAe,EACrCA,MAAK,MAAM,eAAe,uBAAuB,EACjDP,QAAO,SAAS,EAAG,QAAQ,CAC7B,CAEA,SAASyC,qBAAoB,MAAO,CAClChC,KAAI,0BAA0B,EAAE,QAAQ,QAAU,CAChD,GAAI,MAAO,CACJ,gBAAgB,IAAI,MAAM,GAAG,gBAAgB,IAAI,OAAQ,CAAE,WAAY,OAAO,aAAa,aAAa,EAAG,MAAO,OAAO,KAAM,CAAC,EACrI,OAAO,MAAQ,GACf,OAAO,aAAa,cAAe,MAAM,EACzC,MACF,CACA,GAAI,CAAC,gBAAgB,IAAI,MAAM,EAAG,OAClC,MAAM,SAAW,gBAAgB,IAAI,MAAM,EAC3C,OAAO,MAAQ,SAAS,MACpB,SAAS,aAAe,KAAM,OAAO,gBAAgB,aAAa,EACjE,OAAO,aAAa,cAAe,SAAS,UAAU,EAC3D,gBAAgB,OAAO,MAAM,CAC/B,CAAC,EACG,MAAO,gBAAgB,EACtB,kBAAkB,CACzB,CAEA,SAASiC,iBAAiB,CACnBR,SACLlC,QAAO,aAAa,cAAc,EAClCkC,OAAM,OAAS,GACVA,OAAM,YACXA,OAAM,UAAU,IAAI,YAAY,EAClC,CAEA,SAASS,iBAAiB,CACnBT,SACLA,OAAM,UAAU,OAAO,YAAY,EACnClC,QAAO,aAAa,cAAc,EAClC,eAAiBA,QAAO,WAAW,IAAM,CACnC,CAACmC,aAAY,UAAU,SAAS,SAAS,GAAK,CAACC,aAAY,UAAU,SAAS,cAAc,IAAGF,OAAM,OAAS,GACpH,EAAG,GAAG,EACR,CAEA,SAASU,qBAAoB,CAAE,aAAe,GAAM,cAAgB,GAAO,kBAAoB,EAAM,EAAI,CAAC,EAAG,CAC3G,GAAI,CAACR,aAAc,CAACC,iBAAkB,CAACC,sBAAsB,OAC7D,MAAM,QAAUF,YAAW,UAAU,SAAS,cAAc,EAC5DA,YAAW,UAAU,OAAO,cAAc,EAC1CC,gBAAe,aAAa,cAAe,MAAM,EACjDC,sBAAqB,aAAa,gBAAiB,OAAO,EAC1D,MAAM,MAAQA,sBAAqB,QAAQ,cACvC,QAASA,sBAAqB,aAAa,aAAc,KAAK,EAAGA,sBAAqB,aAAa,QAAS,KAAK,GACrH/B,MAAK,UAAU,OAAO,qBAAqB,EACvC,CAAC,eAAiB,CAAC4B,aAAY,UAAU,SAAS,SAAS,GAAGQ,gBAAe,EAC7E,CAAC,mBAAqB,CAACR,aAAY,UAAU,SAAS,SAAS,GAAGM,qBAAoB,EAAK,EAC3F,SAAW,cAAgB,uBAAuB,aAAa,sBAAsB,MAAM,CAAE,cAAe,EAAK,CAAC,EACtH,sBAAwB,IAC1B,CAEA,SAASI,qBAAqB,CAC5B,GAAI,CAACN,iBAAgB,SAAW,CAACH,aAAc,CAACC,iBAAkB,CAACC,sBAAsB,OACrF,CAACF,YAAW,UAAU,SAAS,cAAc,GAAKrC,UAAS,yBAAyBkC,eAAa,sBAAwBlC,UAAS,eACtIW,WAAU,CAAE,aAAc,GAAO,cAAe,GAAM,kBAAmB,EAAK,CAAC,EAC/E0B,YAAW,UAAU,IAAI,cAAc,EACvCC,gBAAe,aAAa,cAAe,OAAO,EAClDC,sBAAqB,aAAa,gBAAiB,MAAM,EACzD,MAAM,MAAQA,sBAAqB,QAAQ,eACvC,QAASA,sBAAqB,aAAa,aAAc,KAAK,EAAGA,sBAAqB,aAAa,QAAS,KAAK,GACrH/B,MAAK,UAAU,IAAI,qBAAqB,EACxCmC,gBAAe,EACfD,qBAAoB,EAAI,EACxBD,uBAAsB,IAAM,CACtBJ,YAAW,UAAU,SAAS,cAAc,GAAGC,gBAAe,MAAM,CAAE,cAAe,EAAK,CAAC,CACjG,CAAC,CACH,CAEA,SAASS,uBAAuB,CAC1BV,aAAY,UAAU,SAAS,cAAc,EAAGQ,qBAAoB,EACnEC,oBAAmB,CAC1B,CACA,MAAO,CAAE,oBAAAJ,qBAAqB,eAAAC,gBAAgB,eAAAC,gBAAgB,oBAAAC,qBAAqB,mBAAAC,oBAAoB,qBAAAC,qBAAqB,CAC9H,CACA,SAAS,oBAAoB,KAAM,CACjC,MAAM,OAAS,GAAG,IAAI,EACtB,OAAK,QACD,OAAS,aACT,OAAS,SAAe,GAAG,KAAM,MAAM,GAAK,OAF5B,IAItB,CAEA,SAAS,mBAAmB,KAAM,SAAW,SAAU,iBAAmB,GAAO,CAC/E,MAAM,OAAS,oBAAoB,IAAI,EACvC,OAAK,QACL,sBAAsB,OAAQ,WAAa,OAAQ,gBAAgB,EAC5D,IAFa,EAGtB,CAEA,SAAS,iBAAiB,OAAQ,CAChC,IAAI,IAAM,EACN,KAAO,OACX,KAAO,MACL,KAAO,KAAK,WAAa,EACzB,KAAO,KAAK,aAEd,OAAO,GACT,CAEA,SAAS,iBAAkB,CACzB,MAAM,SAAW,OAAO,eAClB,OAAS,OAAO,UAAU,MAAM,GAAK,OAAO,aAAe,KAAK,cAAgB,EAChF,MAAQ,OAAO,UAAU,KAAK,GAAK,OAAO,YAAc,KAAK,aAAe,EAClF,MAAO,CACL,OACA,MACA,UAAW,OAAO,UAAU,SAAS,GAAK,CAC5C,CACF,CAEA,SAAS,oBAAqB,CAC5B,MAAM,UAAY,OAAO,WAAW,iBAAiB,IAAI,EAAE,iBAAiB,eAAe,CAAC,GAAK,GAC3F,aAAe,GAAG,cAAc,GAAG,sBAAsB,EAAE,QAAU,EAErE,kBAAoB,GAAG,eAAe,GAAG,sBAAsB,EAAE,QAAU,EACjF,OAAO,KAAK,IAAI,UAAW,YAAY,EAAI,iBAC7C,CAEA,SAAS,gBAAgB,OAAQ,CAC/B,MAAM,gBAAkB,gBAAgB,EAClC,aAAe,mBAAmB,EAClC,UAAY,OAAO,WAAW,iBAAiB,IAAI,EAAE,iBAAiB,iBAAiB,CAAC,GAAK,EAC7F,gBAAkB,OAAO,UAAU,WAAW,EACpD,GAAI,iBAAmB,OAAO,WAAW,oBAAoB,EAAE,QAAS,CACtE,MAAM,SAAW,gBACX,QAAU,GAAG,sCAAuC,eAAe,GAAK,OAE9E,GADc,IAAI,iCAAkC,eAAe,EACzD,OAAQ,CAChB,MAAM,aAAe,GAAG,iBAAkB,eAAe,EACnD,SAAW,iBAAiB,OAAO,EACzC,qBAAc,MAAM,eAAe,uBAAuB,EAGnD,KAAK,IAAI,EAAG,SAAW,SAAS,UAAY,aAAe,EAAE,CACtE,CACF,CACA,GAAI,OAAO,QAAQ,gBAAgB,EAAG,CACpC,MAAM,YAAc,OAAO,sBAAsB,EAAE,IAAM,iBAAiB,EAC1E,OAAO,KAAK,IAAI,EAAG,YAAc,gBAAgB,UAAY,aAAe,SAAS,CACvF,CACA,OAAO,KAAK,IAAI,EAAG,iBAAiB,MAAM,EAAI,gBAAgB,UAAY,aAAe,SAAS,CACpG,CAEA,SAAS,qBAAqB,OAAQ,YAAa,gBAAkB,GAAO,CAC1E,MAAM,gBAAkB,OAAO,UAAU,WAAW,EACpD,GAAI,CAAC,iBAAmB,CAAC,OAAO,WAAW,oBAAoB,EAAE,QAAS,MAAO,GACjF,MAAM,QAAU,GAAG,sCAAuC,eAAe,GAAK,OACxE,MAAQ,IAAI,iCAAkC,eAAe,EACnE,GAAI,CAAC,MAAM,OAAQ,OAAO,KAAK,IAAI,YAAc,iBAAiB,CAAC,EAAI,EACvE,MAAM,YAAc,MAAM,CAAC,EAAE,UACvB,SAAW,MAAM,OAAO,MAAQ,KAAK,IAAI,KAAK,UAAY,WAAW,EAAI,CAAC,EAC1E,SAAW,gBAAgB,EAC3B,WAAa,SAAS,UACtB,cAAgB,WAAa,SAAS,OACtC,aAAe,WAAa,mBAAmB,EAC/C,YAAc,QAAQ,sBAAsB,EAC5C,eAAiB,KAAK,IAAI,GAAG,SAAS,IAAI,MAAQ,KAAK,sBAAsB,EAAE,MAAM,CAAC,EACtF,UAAY,YAAY,KAAO,aAAe,GAClD,gBAAkB,cAAgB,EAC9B,MAAQ,KAAK,IAAI,YAAc,iBAAiB,CAAC,EACvD,OAAO,MAAQ,IAAM,CAAC,WAAc,iBAAmB,MAAQ,EACjE,CAEA,SAAS,sBAAuB,CAC9B,OAAO,OAAO,WAAW,kCAAkC,EAAE,OAC/D,CAEA,SAAS,eAAgB,CACvB,OAAO,SAAS,kBAAoB,SAAS,iBAAmB,SAAS,IAC3E,CAEA,SAAS,kBAAmB,CAC1B,OAAO,cAAc,EAAE,WAAa,OAAO,aAAe,CAC5D,CAEA,SAAS,aAAa,IAAK,CACzB,cAAc,EAAE,UAAY,KAAK,IAAI,EAAG,GAAG,CAC7C,CAEA,SAAS,uBAAuB,YAAa,MAAO,UAAW,CAC7D,MAAM,UAAY,KAAK,IAAI,EAAG,WAAW,EACnC,SAAW,iBAAiB,EAClC,GAAI,KAAK,IAAI,UAAY,QAAQ,EAAI,EAAG,CACtC,UAAU,EACV,MACF,CACA,IAAI,QAAU,SACV,aAAe,EACnB,MAAM,UAAY,YAAY,IAAI,EAClC,GAAI,CACF,OAAO,SAAS,CAAE,IAAK,UAAW,KAAM,EAAG,SAAU,QAAS,CAAC,CACjE,MAAY,CACV,aAAa,SAAS,EACtB,UAAU,EACV,MACF,CACA,MAAM,kBAAoB,KAAO,CAC/B,GAAI,QAAU,qBAAsB,OACpC,MAAM,WAAa,iBAAiB,EAC9B,MAAQ,KAAK,IAAI,WAAa,OAAO,EAAI,IAI/C,GAFA,aADgB,KAAK,IAAI,WAAa,SAAS,EAAI,KACzB,CAAC,MAAQ,aAAe,EAAI,EACtD,QAAU,WACN,cAAgB,GAAK,IAAM,UAAY,KAAM,CAC/C,UAAU,EACV,MACF,CACA,sBAAsB,iBAAiB,CACzC,EACA,sBAAsB,iBAAiB,CACzC,CAEA,SAAS,sBAAsB,OAAQ,OAAS,GAAM,iBAAmB,GAAO,CAC9E,MAAM,MAAQ,EAAE,qBAChB,KAAK,UAAU,IAAI,2BAA2B,EAC9C,MAAM,MAAQ,IAAM,sBAAsB,IAAM,sBAAsB,IAAM,CAC1E,GAAI,QAAU,qBAAsB,OACpC,MAAM,YAAc,gBAAgB,MAAM,EACpC,OAAS,IAAM,CACnB,sBAAsB,IAAM,sBAAsB,IAAM,CACtD,GAAI,QAAU,qBAAsB,OACpC,MAAM,gBAAkB,gBAAgB,MAAM,GAC1C,qBAAqB,OAAQ,gBAAiB,EAAI,GAAK,KAAK,IAAI,gBAAkB,iBAAiB,CAAC,EAAI,IAC1G,aAAa,eAAe,EAE9B,KAAK,UAAU,OAAO,2BAA2B,EAC7C,kBAAoB,OAAO,cACT,OAAO,aAAa,UAAU,IAEhD,OAAO,aAAa,WAAY,IAAI,EACpC,OAAO,iBAAiB,OAAQ,IAAM,OAAO,gBAAgB,UAAU,EAAG,CAAE,KAAM,EAAK,CAAC,GAE1F,OAAO,MAAM,CAAE,cAAe,EAAK,CAAC,EAExC,CAAC,CAAC,CACJ,EACA,GAAI,CAAC,QAAU,qBAAqB,EAAG,CACrC,aAAa,WAAW,EACxB,OAAO,EACP,MACF,CACA,uBAAuB,YAAa,MAAO,MAAM,CACnD,CAAC,CAAC,EACF,GAAI,SAAS,OAAO,SAAW,UAAW,CACxC,IAAI,QAAU,GACd,MAAM,eAAiB,IAAM,CACvB,UACJ,QAAU,GACV,MAAM,EACR,EACA,SAAS,MAAM,MAAM,KAAK,cAAc,EACxC,OAAO,WAAW,eAAgB,GAAG,CACvC,MACE,MAAM,CAEV,CAEA,SAAS,gBAAgB,IAAK,OAAS,GAAM,CAC3C,MAAM,MAAQ,EAAE,qBACV,EAAI,KAAK,IAAI,EAAG,GAAG,EACzB,GAAI,CAAC,QAAU,qBAAqB,EAAG,CACrC,KAAK,UAAU,OAAO,2BAA2B,EACjD,aAAa,CAAC,EACd,MACF,CACI,KAAK,IAAI,EAAI,iBAAiB,CAAC,EAAI,IACvC,KAAK,UAAU,IAAI,2BAA2B,EAC9C,uBAAuB,EAAG,MAAO,IAAM,CACjC,QAAU,uBACV,KAAK,IAAI,EAAI,iBAAiB,CAAC,EAAI,GAAG,aAAa,CAAC,EACxD,KAAK,UAAU,OAAO,2BAA2B,EACnD,CAAC,EACH,CAEA,SAAS,0BAA2B,CAC7B,KAAK,UAAU,SAAS,2BAA2B,IACxD,sBAAwB,EACxB,KAAK,UAAU,OAAO,2BAA2B,EACnD,CAEA,CAAC,QAAS,aAAc,cAAe,SAAS,EAAE,QAAQ,MAAQ,CAChE,OAAO,iBAAiB,KAAM,yBAA0B,CAAE,QAAS,EAAK,CAAC,CAC3E,CAAC,EAED,SAAS,oBAAoB,IAAM,IAAI,IAAI,OAAO,SAAS,IAAI,EAAG,CAChE,MAAM,OAAS,WAAW,IAAI,QAAQ,EAChC,QAAU,IAAI,OAAS,aAAe,IAAI,OAAS,QAAU,IAAI,aAAa,IAAI,OAAO,EAC/F,GAAI,CAAC,QAAU,CAAC,QAAS,OACzB,MAAM,OAAS,IAAI,gBAAgB,IAAI,MAAM,EAC7C,OAAO,OAAO,OAAO,EACrB,MAAM,MAAQ,GAAG,IAAI,QAAQ,GAAG,OAAO,SAAS,EAAI,IAAI,OAAO,SAAS,CAAC,GAAK,EAAE,GAChF,OAAO,WAAW,IAAM,CAClB,OAAO,SAAS,WAAa,IAAI,UAAU,QAAQ,aAAa,QAAQ,MAAO,GAAI,KAAK,CAC9F,EAAG,GAAG,CACR,CAEA,SAAS,2BAA2B,MAAQ,IAAK,CAC/C,OAAO,WAAW,IAAM,oBAAoB,IAAI,IAAI,OAAO,SAAS,IAAI,CAAC,EAAG,KAAK,CACnF,CAEA,SAAS,oBAAqB,CAE5B,OADY,YAAY,mBAAmB,YAAY,IAAI,CAAC,GACnD,OAAS,SAAiB,GAC5B,YAAY,YAAY,OAAS,CAC1C,CAEA,SAAS,uBAAwB,CAE/B,GADI,CAAC,mBAAmB,GACpB,CAAC,WAAW,OAAO,SAAS,QAAQ,EAAG,OAC3C,MAAM,cAAgB,OAAO,SAAS,OAAS,aAAe,OAAO,SAAS,OAAS,OACjF,sBAAwB,IAAI,gBAAgB,OAAO,SAAS,MAAM,EAAE,IAAI,OAAO,EACjF,OAAO,SAAS,MAAQ,CAAC,iBACzB,eAAiB,wBAAuB,oBAAoB,IAAI,IAAI,OAAO,SAAS,IAAI,CAAC,EAC7F,aAAa,CAAC,EACd,sBAAsB,IAAM,aAAa,CAAC,CAAC,EAC7C,CAEA,SAAS,sBAAsB,KAAM,MAAO,CAI1C,MAHI,GAAC,MAAQ,MAAM,kBACf,MAAM,QAAU,MAAM,SAAW,GACjC,MAAM,SAAW,MAAM,SAAW,MAAM,UAAY,MAAM,QAC1D,KAAK,QAAU,KAAK,SAAW,QAErC,CAEA,SAAS,gBAAiB,CACxB,MAAM,IAAM,GAAG,mBAAmB,EAC9B,KAAK,IAAI,UAAU,OAAO,SAAS,EACvC,IAAI,oBAAoB,EAAE,QAAQ,MAAQ,CACxC,KAAK,aAAa,gBAAiB,OAAO,EACtC,KAAK,QAAQ,gBAAiB,KAAK,aAAa,aAAc,KAAK,QAAQ,aAAa,EAAG,KAAK,aAAa,QAAS,KAAK,QAAQ,aAAa,EACtJ,CAAC,EACD,oBAAoB,CACtB,CAEA,KAAM,CAAE,oBAAqB,eAAgB,eAAgB,oBAAqB,mBAAoB,oBAAqB,EAAI,sBAAsB,CACnJ,OAAQ,SAAU,YAAa,KAAM,GAAI,IAAK,MAAO,WAAY,WAAY,eAAgB,qBAAsB,gBAAiB,UAAW,IAAI,OAAS,UAAU,GAAG,IAAI,EAAG,sBAAuB,UAAY,sBAAsB,QAAQ,CACnP,CAAC,EAED,gBAAgB,mBAAmB,SAAU,OAAS,CAC/C,MAAM,SAAS,oBAAoB,CAAE,aAAc,EAAM,CAAC,CACjE,CAAC,EAED,SAAS,WAAW,SAAU,CAC5B,OAAO,WAAa,KAAO,WAAa,OAAS,WAAa,MAChE,CAEA,SAAS,YAAY,SAAU,CAC7B,OAAO,WAAa,MAAQ,OAAS,QACvC,CAEA,SAAS,eAAe,KAAM,MAAO,CACnC,GAAI,CAAC,sBAAsB,KAAM,KAAK,EAAG,MAAO,GAChD,IAAI,IACJ,GAAI,CAAE,IAAM,IAAI,IAAI,KAAK,KAAM,OAAO,SAAS,IAAI,CAAG,MAAY,CAAE,MAAO,EAAO,CAGlF,OAFI,IAAI,SAAW,OAAO,SAAS,QAC/B,CAAC,WAAW,IAAI,QAAQ,GAAK,CAAC,WAAW,OAAO,SAAS,QAAQ,GACjE,YAAY,IAAI,QAAQ,IAAM,YAAY,OAAO,SAAS,QAAQ,EAAU,IAChF,MAAM,eAAe,EACrB,MAAM,yBAAyB,EAC/B,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,gBAAgB,EAAG,EAAI,EAChB,GACT,CAEA,SAAS,sBAAsB,KAAM,MAAO,CAC1C,GAAI,CAAC,sBAAsB,KAAM,KAAK,EAAG,MAAO,GAChD,IAAI,IACJ,GAAI,CAAE,IAAM,IAAI,IAAI,KAAK,KAAM,OAAO,SAAS,IAAI,CAAG,MAAY,CAAE,MAAO,EAAO,CAElF,GADI,IAAI,SAAW,OAAO,SAAS,QAAU,CAAC,WAAW,IAAI,QAAQ,GACjE,IAAI,OAAS,aAAe,IAAI,OAAS,OAAQ,MAAO,GAK5D,GAJA,MAAM,eAAe,EACrB,gBAAgB,EAChB,UAAU,EACV,eAAe,EACX,WAAW,OAAO,SAAS,QAAQ,GAAK,YAAY,OAAO,SAAS,QAAQ,IAAM,YAAY,IAAI,QAAQ,EAC5G,eAAQ,aAAa,QAAQ,MAAO,GAAI,GAAG,YAAY,IAAI,QAAQ,CAAC,GAAG,IAAI,MAAM,EAAE,EACnF,mBAAmB,IAAI,KAAM,SAAU,MAAM,SAAW,CAAC,EAClD,GAET,GAAI,CACF,eAAe,QAAQ,iBAAkB,IAAI,IAAI,EACjD,eAAe,QAAQ,kBAAmB,MAAM,SAAW,EAAI,IAAM,GAAG,CAC1E,MAAY,CAAC,CACb,qBAAc,EACd,OAAO,SAAS,KAAO,GAAG,YAAY,IAAI,QAAQ,CAAC,GAAG,IAAI,MAAM,GACzD,EACT,CAEA,SAAS,qBAAsB,CAC7B,IAAI,KAAO,GACP,iBAAmB,GACvB,GAAI,CACF,KAAO,eAAe,QAAQ,gBAAgB,GAAK,GACnD,iBAAmB,eAAe,QAAQ,iBAAiB,IAAM,IACjE,eAAe,WAAW,gBAAgB,EAC1C,eAAe,WAAW,iBAAiB,CAC7C,MAAY,CAAC,CACb,GAAI,CAAC,KAAM,OACX,IAAI,SAAW,EACf,MAAM,MAAQ,EAAE,gBACV,OAAS,IAAM,CACnB,GAAI,QAAU,gBAAiB,OAE/B,GADe,oBAAoB,IAAI,EAC3B,CACV,mBAAmB,KAAM,SAAU,gBAAgB,EACnD,oBAAoB,EACpB,MACF,CACA,UAAY,EACR,SAAW,GAAG,OAAO,WAAW,OAAQ,EAAE,CAChD,EACA,OAAO,WAAW,OAAQ,EAAE,CAC9B,CAKA,MAAM,YAAc,YAAY,QAEhC,SAAS,mBAAmB,OAAQ,CAAE,UAAY,EAAM,EAAI,CAAC,EAAG,CAC9D,MAAM,KAAO,YACb,KAAK,KAAO,OACZ,KAAK,IAAM,SAAW,KAAO,MAAQ,MACrC,OAAO,KAAO,SAAW,KAAO,OAAS,IACzC,IAAI,0CAA0C,EAAE,QAAQ,IAAM,GAAG,aAAa,MAAO,SAAW,KAAO,MAAQ,KAAK,CAAC,EACrH,IAAI,wBAAwB,EAAE,QAAQ,IAAM,CAC1C,GAAG,QAAQ,aAAe,SAAW,KAAO,KAAO,KACnD,GAAG,aAAa,aAAc,KAAK,YAAY,EAC/C,GAAG,aAAa,QAAS,KAAK,YAAY,CAC5C,CAAC,EACD,IAAI,qBAAqB,EAAE,QAAQ,IAAM,CACvC,MAAM,MAAQ,KAAK,QAAQ,QAAU,OAAS,KAAK,cAAgB,KAAK,UACxE,GAAG,aAAa,aAAc,KAAK,EACnC,GAAG,aAAa,QAAS,KAAK,CAChC,CAAC,EACD,IAAI,kBAAkB,EAAE,QAAQ,IAAM,CACpC,GAAG,aAAa,aAAc,KAAK,QAAQ,EAC3C,GAAG,aAAa,QAAS,KAAK,QAAQ,CACxC,CAAC,EACD,IAAI,kBAAkB,EAAE,QAAQ,IAAM,CACpC,MAAM,MAAQ,KAAK,GAAG,QAAQ,QAAQ,EAClC,OAAO,GAAG,aAAa,aAAc,KAAK,CAChD,CAAC,EACD,IAAI,2BAA2B,EAAE,QAAQ,MAAQ,CAC/C,KAAK,aAAa,SAAU,SAAW,KAAO,WAAa,OAAO,CACpE,CAAC,EACD,IAAI,oBAAoB,EAAE,QAAQ,QAAU,CAC1C,OAAO,QAAQ,aAAe,KAAK,UAC/B,CAAC,OAAO,qBAAuB,CAAC,OAAO,QAAU,CAAC,OAAO,WAAU,OAAO,YAAc,KAAK,UACnG,CAAC,EACD,IAAI,uBAAuB,EAAE,QAAQ,QAAU,CAC7C,MAAM,SAAW,GAAG,6BAA8B,MAAM,EACpD,CAAC,UAAY,OAAO,UAAY,OAAO,QAAU,OAAO,sBAC5D,OAAO,QAAQ,aAAe,KAAK,UACnC,SAAS,YAAc,KAAK,UAC9B,CAAC,EACD,IAAI,mDAAmD,EAAE,QAAQ,IAAM,CACrE,MAAM,MAAQ,GAAG,aAAa,eAAe,IAAM,QAAU,GAAG,QAAQ,eAAiB,GAAG,QAAQ,eAAiB,KAAK,SAC1H,GAAG,aAAa,aAAc,KAAK,EACnC,GAAG,aAAa,QAAS,KAAK,CAChC,CAAC,EACD,IAAI,aAAa,EAAE,QAAQ,IAAM,CAC/B,MAAM,MAAQ,aAAa,KAAM,GAAG,QAAQ,IAAI,EAC5C,QAAO,GAAG,YAAc,MAC9B,CAAC,EACD,IAAI,kBAAkB,EAAE,QAAQ,IAAM,CACpC,MAAM,MAAQ,aAAa,KAAM,GAAG,QAAQ,QAAQ,EAChD,QAAO,GAAG,UAAY,MAC5B,CAAC,EACD,IAAI,yBAAyB,EAAE,QAAQ,IAAM,CAC3C,MAAM,MAAQ,aAAa,KAAM,GAAG,QAAQ,eAAe,EACvD,OAAO,GAAG,aAAa,cAAe,KAAK,CACjD,CAAC,EACD,MAAM,UAAY,GAAG,mBAAmB,EACxC,GAAI,UAAW,CACb,MAAM,OAAS,UAAU,QAAQ,UAC3B,MAAQ,KAAK,QAAQ,MAAM,EAC7B,QACF,IAAI,oBAAoB,EAAE,QAAQ,IAAM,CAAE,GAAG,YAAc,MAAM,KAAO,CAAC,EACzE,IAAI,sBAAsB,EAAE,QAAQ,SAAW,CAC7C,MAAM,KAAO,MAAM,SAAS,OAAO,QAAQ,QAAQ,YAAY,EAAI,CAAC,EACpE,GAAI,CAAC,KAAM,OACX,MAAM,QAAU,GAAG,KAAM,OAAO,EAC1B,KAAO,GAAG,IAAK,OAAO,EACxB,UAAS,QAAQ,YAAc,KAAK,CAAC,GACrC,OAAM,KAAK,YAAc,KAAK,CAAC,EACrC,CAAC,EAEL,CACI,WAAa,SAAW,MAC1B,IAAI,yBAAyB,EAAE,QAAQ,gBAAkB,CAEvD,MAAM,MADU,eAAe,QAAQ,sBAAsB,GACtC,QAAQ,aAC1B,QACL,eAAe,YAAc,GAAG,KAAK,KAAK,eAAe,YAAY,QAAQ,2BAA4B,EAAE,CAAC,GAC9G,CAAC,EAEH,GAAI,CAAE,aAAa,WAAW,SAAS,CAAG,MAAY,CAAC,CACnD,WAAW,QAAQ,aAAa,QAAQ,MAAO,GAAI,UAAU,MAAM,CAAC,EACxE,mBAAmB,MAAM,EACzB,kBAAkB,CACpB,CAEA,SAAS,sBAAuB,CAC9B,MAAM,KAAO,YACb,IAAI,uCAAuC,EAAE,QAAQ,OAAS,MAAM,OAAO,CAAC,EAC5E,IAAI,gBAAgB,EAAE,QAAQ,QAAU,CACtC,OAAO,SAAW,GAClB,OAAO,gBAAgB,WAAW,EAClC,OAAO,UAAU,OAAO,YAAY,EACpC,MAAM,KAAO,GAAG,yBAA0B,MAAM,EAC5C,OAAM,KAAK,YAAc,KAAK,SACpC,CAAC,CACH,CAEA,SAAS,mBAAmB,OAAQ,CAClC,GAAI,CAAC,OAAQ,OACb,MAAM,aAAe,GAAG,yBAA0B,MAAM,EAClD,aAAe,YACrB,OAAO,aAAa,YAAa,MAAM,EACvC,OAAO,UAAU,IAAI,YAAY,EAC7B,eAAc,aAAa,YAAc,aAAa,gBAC5D,CAEA,SAAS,kBAAkB,KAAM,CAC/B,OAAQ,MAAQ,KAAK,QAAQ,qBAAsB,GAAG,GAAK,GAC7D,CAEA,SAAS,4BAA6B,CACpC,GAAI,CAAC,oBAAoB,KAAK,OAAO,SAAS,QAAQ,EAAG,OACzD,MAAM,cAAgB,kBAAkB,OAAO,SAAS,QAAQ,EAC1D,UAAY,gBAAkB,IAAM,MAAQ,MAAM,aAAa,GACrE,OAAO,SAAS,QAAQ,GAAG,SAAS,GAAG,OAAO,SAAS,MAAM,GAAG,OAAO,SAAS,IAAI,EAAE,CACxF,CAEA,SAAS,UAAU,aAAc,CAC/B,MAAM,KAAO,kBAAkB,OAAO,SAAS,QAAQ,EACjD,OAAS,OAAO,SAAS,OACzB,KAAO,OAAO,SAAS,KAC7B,OAAI,eAAiB,KAAa,GAAG,OAAS,IAAM,MAAQ,MAAM,IAAI,EAAE,GAAG,MAAM,GAAG,IAAI,GACjF,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,EAChC,CAEA,SAAS,qBAAqB,KAAM,OAAQ,CAC1C,MAAM,IAAM,IAAI,IAAI,KAAM,OAAO,SAAS,IAAI,EAE9C,GADI,IAAI,SAAW,OAAO,SAAS,QAC/B,IAAI,WAAa,aAAe,IAAI,SAAS,WAAW,aAAa,EAAG,OAAO,KACnF,IAAI,KAAO,kBAAkB,IAAI,QAAQ,EACzC,OAAI,SAAW,OAAM,KAAO,OAAS,IAAM,MAAQ,MAAM,IAAI,IACtD,GAAG,IAAI,GAAG,IAAI,MAAM,GAAG,IAAI,IAAI,EACxC,CAEA,SAAS,mBAAmB,OAAS,KAAK,KAAM,CAC9C,IAAI,cAAc,EAAE,QAAQ,MAAQ,CAC9B,KAAK,aAAa,UAAU,GAChC,KAAK,aAAa,OAAQ,qBAAqB,KAAK,aAAa,MAAM,EAAG,MAAM,CAAC,CACnF,CAAC,CACH,CAEA,SAAS,wBAAyB,CAChC,aAAa,UAAU,KAAK,OAAS,KAAO,KAAO,IAAI,CAAC,CAC1D,CAEA,2BAA2B,EAC3B,mBAAmB,KAAK,IAAI,EAE5B,SAAS,6BAA6B,CAAE,OAAA9C,QAAQ,QAAAE,SAAS,MAAAG,OAAO,IAAAJ,KAAK,KAAA8C,MAAM,QAAS,OAAAC,OAAO,EAAG,CAC5F,MAAM,WAAa,mBACb,SAAW,GAAG,OAAOA,QAAO,UAAY,+BAA+B,EAAE,QAAQ,MAAO,EAAE,CAAC,iBAC3F,aAAe,6BAErB,SAAS,aAAa,MAAO,CAC3B,OAAO,OAAS,aAAa,KAAK,MAAM,OAAS,EAAE,GAAK,eAAe,KAAK,MAAM,MAAQ,EAAE,GAAK,OAAO,MAAM,SAAS,EAAI,IAAOD,MAAK,IAAI,CAC7I,CAEA,SAAS,MAAO,CACd,GAAI,CACF,MAAM,MAAQ,KAAK,MAAM,QAAQ,QAAQ,UAAU,CAAC,EACpD,GAAI,aAAa,KAAK,EAAG,OAAO,MAChC,QAAQ,WAAW,UAAU,CAC/B,MAAY,CAAC,CACb,OAAO,IACT,CAEA,SAAS,MAAM,MAAO,CACpB,GAAI,CAAE,QAAQ,QAAQ,WAAY,KAAK,UAAU,KAAK,CAAC,CAAG,MAAY,CAAC,CACzE,CAEA,SAAS,kBAAkB,IAAK,CAC9B,IAAI,aAAa,OAAO,UAAU,EAClC7C,SAAQ,aAAaA,SAAQ,MAAO,GAAI,GAAG,IAAI,QAAQ,GAAG,IAAI,MAAM,GAAG,IAAI,IAAI,EAAE,CACnF,CAEA,eAAe,MAAO,CACpB,MAAM,QAAU,IAAID,KAAID,QAAO,SAAS,IAAI,EACtC,MAAQ,QAAQ,aAAa,IAAI,UAAU,EACjD,GAAI,CAAC,MAAO,OAAO,KAAK,EACxB,MAAM,WAAa,IAAIC,KAAI,QAAQ,EACnC,WAAW,aAAa,IAAI,QAAS,KAAK,EAC1C,MAAM,SAAW,MAAMI,OAAM,WAAY,CAAE,QAAS,CAAE,OAAQ,kBAAmB,EAAG,YAAa,MAAO,CAAC,EACnG,QAAU,MAAM,SAAS,KAAK,EAAE,MAAM,KAAO,CAAC,EAAE,EACtD,GAAI,CAAC,SAAS,IAAM,CAAC,aAAa,OAAO,EAAG,MAAM,IAAI,MAAM,sBAAsB,EAClF,aAAM,OAAO,EACb,kBAAkB,OAAO,EAClB,OACT,CAEA,SAAS,YAAY,KAAM,CACzB,MAAM,MAAQ,KAAK,EACnB,GAAI,CAAC,OAAS,CAAC,MAAM,QAAQ,MAAM,KAAK,GAAK,CAAC,KAAK,MAAM,OAAQ,OAAO,KACxE,MAAM,MAAQ,KAAK,MAAM,IAAI,MAAQ,CACnC,MAAM,GAAK,OAAO,KAAK,YAAc,KAAK,EAAE,EACtC,SAAW,OAAO,KAAK,QAAQ,EACrC,OAAO,OAAO,UAAU,EAAE,GAAK,GAAK,GAAK,OAAO,UAAU,QAAQ,GAAK,SAAW,EAAI,GAAG,EAAE,IAAI,QAAQ,GAAK,IAC9G,CAAC,EAAE,OAAO,OAAO,EACjB,GAAI,CAAC,MAAM,QAAU,MAAM,SAAW,KAAK,MAAM,OAAQ,OAAO,KAChE,MAAM,WAAa2C,QAAO,OAAS,OAAS,OAAS,IAC/C,YAAc,IAAI/C,KAAI,GAAG,UAAU,QAAQ,MAAM,KAAK,GAAG,CAAC,GAAID,QAAO,SAAS,MAAM,EAC1F,mBAAY,aAAa,IAAI,kBAAmB,MAAM,KAAK,EAC3D,YAAY,aAAa,IAAI,WAAY,MAAM,IAAI,EACnD,YAAY,aAAa,IAAI,MAAO,kBAAkB,EAC/C,YAAY,SAAS,CAC9B,CAGA,SAAS,KAAK,MAAO,CACnB,OAAK,aAAa,KAAK,GACvB,MAAM,KAAK,EACJ,IAF0B,EAGnC,CAEA,MAAO,CAAE,KAAM,KAAM,KAAM,WAAY,CACzC,CACA,MAAM,aAAe,6BAA6B,CAChD,OACA,QACA,MAAO,OAAO,MAAM,KAAK,MAAM,EAC/B,IACA,KACA,QAAS,OAAO,eAChB,MACF,CAAC,EACD,aAAa,KAAK,EAAE,MAAM,IAAM,CAAC,CAAC,EAElC,SAAS,iBAAiB,KAAM,CAC9B,OAAO,aAAa,YAAY,IAAI,CACtC,CACA,SAAS,2BAA2B,CAClC,WAAAmC,YAAY,WAAAC,YAAY,KAAA7B,MAAM,IAAAE,KAAK,SAAAV,UAAU,YAAAkC,aAC7C,sBAAAO,uBAAuB,oBAAAI,qBAAqB,eAAAF,gBAC5C,eAAAC,gBAAgB,oBAAAF,qBAAqB,eAAAQ,gBACrC,mBAAAC,oBAAoB,SAAAC,UAAU,QAAArD,QAChC,EAAG,CACD,IAAI,gBAAkB,KAClB,eAAiB,EACjB,gBAAkB,GAEtB,SAAS,oBAAoB,KAAM,CACjCW,KAAI,kBAAkB,EAAE,QAAQ,QAAU,CACpC,KAAM,OAAO,aAAa,YAAa,MAAM,EAC5C,OAAO,gBAAgB,WAAW,CACzC,CAAC,CACH,CAEA,SAAS2C,WAAW,CAClB,GAAI,CAACjB,YAAY,OACjB,gBAAkB,EAClB,gBAAkB,GAClB,oBAAoB,EAAK,EACzBS,qBAAoB,CAAE,aAAc,GAAO,cAAe,GAAM,kBAAmB,EAAK,CAAC,EACzF,MAAM,QAAUT,YAAW,UAAU,SAAS,SAAS,EACnD,CAAC,SAAWpC,UAAS,yBAAyBkC,eAAa,gBAAkBlC,UAAS,eAC1FoC,YAAW,UAAU,IAAI,SAAS,EAClCC,aAAY,UAAU,IAAI,cAAc,EACxCD,YAAW,aAAa,cAAe,OAAO,EAC9C1B,KAAI,0BAA0B,EAAE,QAAQ,QAAU,OAAO,aAAa,gBAAiB,MAAM,CAAC,EAC9FF,MAAK,UAAU,IAAI,qBAAqB,EACxCmC,gBAAe,EACfD,qBAAoB,EAAI,EACnB,SACHD,uBAAsB,IAAM,CACtBL,YAAW,UAAU,SAAS,SAAS,GACzCA,YAAW,MAAM,CAAE,cAAe,EAAK,CAAC,CAE5C,CAAC,CAEL,CAEA,SAASzB,WAAU,CAAE,aAAe,GAAM,cAAgB,GAAO,kBAAoB,EAAM,EAAI,CAAC,EAAG,CACjG,GAAI,CAACyB,YAAY,OACjB,gBAAkB,EAClB,gBAAkB,GAClB,oBAAoB,EAAK,EACzB,MAAM,QAAUA,YAAW,UAAU,SAAS,SAAS,EACvDA,YAAW,UAAU,OAAO,SAAS,EACrCC,aAAY,UAAU,OAAO,cAAc,EAC3CD,YAAW,aAAa,cAAe,MAAM,EAC7C1B,KAAI,0BAA0B,EAAE,QAAQ,QAAU,OAAO,aAAa,gBAAiB,OAAO,CAAC,EAC/FF,MAAK,UAAU,OAAO,qBAAqB,EACvC,CAAC,eAAiB,CAAC6B,aAAY,UAAU,SAAS,cAAc,GAAGO,gBAAe,EAClF,CAAC,mBAAqB,CAACP,aAAY,UAAU,SAAS,cAAc,GAAGK,qBAAoB,EAAK,EAChG,SAAW,cAAgB,iBAAiB,aAAa,gBAAgB,MAAM,CAAE,cAAe,EAAK,CAAC,EAC1G,gBAAkB,IACpB,CAEA,eAAeY,aAAa,CAC1B,GAAI,CAAClB,YAAY,OACjB,GAAIA,YAAW,UAAU,SAAS,SAAS,EAAG,CAC5CzB,WAAU,EACV,MACF,CACA,GAAI,gBAAiB,CACnB,gBAAkB,EAClB,gBAAkB,GAClB,oBAAoB,EAAK,EACzB,MACF,CAEA,MAAM,OAAS,EAAE,eACjB,gBAAkB,GAClB,oBAAoB,EAAI,EACxB,IAAI,MAAQuC,gBAAe,EAC3B,GAAI,CACG,QACH,MAAMC,oBAAmB,EACzB,MAAQD,gBAAe,EAE3B,OAAS,MAAO,CACV,SAAW,gBAAgBE,UAAS,MAAM,SAAWrD,SAAQ,kBAAkB,CAAC,CACtF,CAEI,SAAW,iBACf,gBAAkB,GAClB,oBAAoB,EAAK,EACrB,OAAOsD,UAAS,EACtB,CAEA,MAAO,CAAE,SAAAA,UAAU,UAAA1C,WAAW,WAAA2C,WAAW,CAC3C,CACA,KAAM,CAAE,SAAU,UAAW,UAAW,EAAI,2BAA2B,CACrE,WAAY,WAAY,KAAM,IAAK,SAAU,YAC7C,sBAAuB,UAAY,sBAAsB,QAAQ,EACjE,oBAAqB,eAAgB,eAAgB,oBACrD,eAAgB,IAAM,eAAe,EACrC,mBAAoB,IAAM,mBAAmB,EAAG,SAAU,OAC5D,CAAC,EACD,SAAS,6BAA6B,CAAE,OAAArD,QAAQ,QAAAE,SAAS,gBAAAoD,iBAAiB,MAAAC,OAAO,KAAAhD,MAAM,YAAAiD,aAAa,GAAAhD,IAAI,IAAAC,KAAK,SAAA0C,UAAU,QAAArD,SAAS,sCAAA2D,uCAAuC,mBAAAhC,mBAAmB,EAAG,CAC3L,IAAI,mBAAqB,KACzB,SAASiC,+BAA8B,QAAU,KAAM,CACrD,MAAM,QAAU,SAAS,QAAQ,wBAAwB,GAAKlD,IAAG,wBAAwB,EACzF,GAAI,CAAC,QAAS,OAAO,KAErB,MAAM,eADSA,IAAG,wBAAyB,OAAO,GACnB,kBAAkB,CAAC,EAClD,GAAI,CAAC,eAAgB,OAAO,KAC5B,MAAM,mBAAqBC,KAAI,iBAAkB,OAAO,EACrD,IAAI,OAASD,IAAG,gBAAiB,KAAK,GAAG,QAAQ,eAAe,GAAG,cAAc,MAAM,GAAG,aAAa,KAAK,CAAC,EAC7G,OAAO,OAAO,EACd,KAAK,KAAK,EACb,MAAO,CACL,GAAI,OAAO,eAAe,KAAK,EAC/B,MAAO,oBAAsB,eAAe,aAAa,KAAK,GAAK,GACnE,aAAc,SAAS,QAAQ,cAAgBA,IAAG,mBAAoB,OAAO,GAAG,aAAa,KAAK,GAAK,EACzG,CACF,CAEA,IAAI,cAAgB,EAChB,cAAgB,EAEpB,SAASmD,uBAAuB,CAC9B,eAAiB,EACjB3D,QAAO,aAAa,aAAa,EACjC,cAAgB,CAClB,CAEA,SAAS4D,kBAAiB,QAAU,KAAM,CAAE,OAAS,EAAM,EAAI,CAAC,EAAG,CAEjE,GADAD,sBAAqB,EACjBE,qBAAoB,OAAO,EAAG,MAAO,GACpC,QAAQV,UAASrD,SAAQ,sBAAsB,CAAC,EACrD,MAAM,MAAQ,cACR,KAAOE,QAAO,SAAS,SAC7B,IAAI,SAAW,EACf,MAAM,MAAQ,IAAM,CAClB,GAAI,UAAU,eAAiBA,QAAO,SAAS,WAAa,MAE5D,IADA,UAAY,EACR6D,qBAAoB,OAAO,GAAK,UAAY,GAAI,CAClD,cAAgB,EAChB,MACF,CACA,cAAgB7D,QAAO,WAAW,MAAO,GAAG,EAC9C,EACA,qBAAgBA,QAAO,WAAW,MAAO,GAAG,EACrC,EACT,CAEA,SAAS6D,qBAAoB,QAAU,KAAM,CAC3C,MAAM,WAAa,SAAS,SAAS,WACrC,GAAI,YAAc,CAAC,QAAQ,QAAQ,wBAAwB,EACzD,OAAAJ,uCAAsC,EACtChC,oBAAmB,UAAU,EACtB,GAET,mBAAqBiC,+BAA8B,OAAO,GAAK,mBAS/D,MAAM,OARY,CAChB,iCACA,+BACA,yBACA,mCACA,iCACA,uBACF,EACyB,IAAI,UAAYlD,IAAG,QAAQ,CAAC,EAAE,KAAK,OAAO,EACnE,GAAI,OAAQ,CACV,OAAO,MAAM,EACb,MAAM,OAAS,IAAI8C,iBAAgBtD,QAAO,SAAS,MAAM,EACzD,GAAI,OAAO,IAAI,QAAQ,IAAM,IAAK,CAChC,OAAO,OAAO,QAAQ,EACtB,MAAM,OAAS,OAAO,SAAS,EAC/BE,SAAQ,aAAaA,SAAQ,MAAO,GAAI,GAAGF,QAAO,SAAS,QAAQ,GAAG,OAAS,IAAI,MAAM,GAAK,EAAE,GAAGA,QAAO,SAAS,IAAI,EAAE,CAC3H,CACA,OAAAA,QAAO,WAAW8D,sBAAsB,EAAE,EAC1C9D,QAAO,WAAW8D,sBAAsB,GAAG,EACpC,EACT,CACA,MAAO,EACT,CAEA,SAASC,wBAAuB,OAAQ,CACtC,GAAI,CAAC,OAAQ,OAAO,KACpB,MAAM,gBAAkB,mBACpB,CAAC,GAAG,OAAO,OAAO,EAAE,KAAK,QAAU,OAAO,OAAO,KAAK,IAAM,mBAAmB,EAAE,EACjF,KACJ,OAAI,iBAAmB,OAAO,QAAU,gBAAgB,QACtD,OAAO,MAAQ,gBAAgB,MAC/B,OAAO,cAAc,IAAIR,OAAM,QAAS,CAAE,QAAS,EAAK,CAAC,CAAC,EAC1D,OAAO,cAAc,IAAIA,OAAM,SAAU,CAAE,QAAS,EAAK,CAAC,CAAC,GAE7D,OAAO,OAAS,GAChB,OAAO,SAAW,GAClB,OAAO,aAAa,cAAe,MAAM,EAClC,iBAAmB,OAAO,kBAAkB,CAAC,GAAK,IAC3D,CAEA,SAASO,uBAAuB,CAC9B,MAAM,KAAOvD,MAAK,OAAS,KACrB,KAAOiD,aAAY,aACnB,eAAiB,KAAK,gBACtB,gBAAkB,IAAI,IAAI,CAC9B,+DACA,8DACA,KAAK,QACL,cACF,CAAC,EACK,aAAe,IAAI,IAAI,CAC3B,CAAC,qBAAsB,KAAK,OAAO,EACnC,CAAC,sBAAuB,KAAK,OAAO,EACpC,CAAC,2BAA4B,KAAK,KAAK,EACvC,CAAC,2BAA4B,KAAK,KAAK,EACvC,CAAC,wBAAyB,KAAK,KAAK,EACpC,CAAC,gBAAiB,KAAK,KAAK,EAC5B,CAAC,gBAAiB,KAAK,KAAK,EAC5B,CAAC,QAAS,KAAK,KAAK,EACpB,CAAC,SAAU,KAAK,MAAM,EACtB,CAAC,YAAa,KAAK,MAAM,EACzB,CAAC,YAAa,KAAK,MAAM,EACzB,CAAC,iEAAkE,KAAK,OAAO,EAC/E,CAAC,mFAAoF,KAAK,OAAO,EACjG,CAAC,6EAA8E,KAAK,OAAO,EAC3F,CAAC,2EAAkE,KAAK,OAAO,EAC/E,CAAC,iEAAkE,KAAK,OAAO,EAC/E,CAAC,mEAAoE,KAAK,OAAO,EACjF,CAAC,iDAA6C,KAAK,OAAO,EAC1D,CAAC,4CAA6C,KAAK,OAAO,EAC1D,CAAC,+BAAgC,KAAK,UAAU,EAChD,CAAC,yCAA0C,KAAK,KAAK,CACvD,CAAC,EACK,UAAY/C,KAAI,4CAA4C,EAC5D,cAAgB,CAAC,GAAG,IAAI,IAAI,UAAU,QAAQ,SAAW,CAAC,QAAS,GAAGA,KAAI,IAAK,OAAO,CAAC,CAAC,CAAC,CAAC,EAChG,cAAc,QAAQ,SAAW,CAC/B,GAAI,QAAQ,SAAS,OAAQ,OAC7B,MAAM,KAAO,QAAQ,aAAa,KAAK,EACnC,aAAa,IAAI,IAAI,IAAG,QAAQ,YAAc,aAAa,IAAI,IAAI,GACnE,QAAQ,aAAa,YAAY,IAAM,eAAe,QAAQ,aAAa,aAAc,KAAK,KAAK,CACzG,CAAC,EACDA,KAAI,uFAAuF,EAAE,QAAQ,OAAS,CAC5G,GAAI,MAAM,OAAS,QAAS,CAC1B,MAAM,YAAc,KAAK,MACzB,MAAM,aAAa,aAAc,KAAK,KAAK,EAC3C,MAAM,sBAAwB,IAAM,CAClC,MAAM,SAAW,EAAQ,MAAM,MAC/B,MAAM,IAAM,MAAQ,CAAC,SAAW,MAAQ,MACxC,MAAM,MAAM,YAAY,YAAa,MAAQ,CAAC,SAAW,MAAQ,MAAO,WAAW,EACnF,MAAM,MAAM,YAAY,aAAc,MAAQ,CAAC,SAAW,QAAU,OAAQ,WAAW,CACzF,EACA,sBAAsB,EACjB,MAAM,0BACT,MAAM,wBAA0B,GAChC,MAAM,iBAAiB,QAAS,qBAAqB,EACrD,MAAM,iBAAiB,QAAS,qBAAqB,EACrD,MAAM,iBAAiB,OAAQ,qBAAqB,EAExD,CACF,CAAC,EACD,IAAI,mBAAqB,KACzBA,KAAI,0FAA0F,EAAE,QAAQ,QAAU,CAChH,mBAAqBsD,wBAAuB,MAAM,GAAK,kBACzD,CAAC,EACDtD,KAAI,iHAAiH,EAAE,QAAQ,SAAW,CACxI,MAAM,IAAM,KAAO,MAAQ,MACrB,MAAQ,KAAO,QAAU,OAC3B,QAAQ,MAAQ,MAAK,QAAQ,IAAM,KACnC,QAAQ,MAAM,YAAc,QAAO,QAAQ,MAAM,UAAY,MACnE,CAAC,EACDA,KAAI,wGAAwG,EAAE,QAAQ,QAAU,CAC9H,MAAM,KAAO,OAAO,aAAa,KAAK,EAClC,MAAQ,aAAa,IAAI,IAAI,IAAG,OAAO,YAAc,aAAa,IAAI,IAAI,IAC1E,OAAO,aAAa,YAAY,IAAM,SAAW,OAAO,aAAa,YAAY,IAAM,eAAiB,OAAO,aAAa,YAAY,IAAM,KAAK,QAAO,OAAO,aAAa,aAAc,KAAK,KAAK,CAC5M,CAAC,EACD,MAAM,OAASD,IAAG,4CAA4C,EAC1D,SAAQ,OAAO,YAAc,KAAK,OACtC,MAAM,YAAcA,IAAG,8CAA8C,EACrE,GAAI,YAAa,CACf,MAAM,aAAe,oBAAoB,cAAgB,YAAY,QAAQ,sBAAwB,YAAY,aAAa,KAAK,GAAK,GAClI,aAAe,oBAAoB,OAAS,oBAAoB,aAAa,KAAK,GAAK,GAC7F,YAAY,QAAQ,qBAAuB,aAC3C,YAAY,YAAc,cAAgB,eAAiB,gBAAkB,GAAG,YAAY,IAAI,YAAY,GAAK,YACnH,CACA,MAAM,YAAcA,IAAG,4CAA4C,EAC/D,cACF,YAAY,YAAc,GAC1B,YAAY,OAAS,GACrB,YAAY,MAAM,QAAU,QAE9B,MAAM,MAAQA,IAAG,gCAAgC,EAC7C,QAAO,MAAM,YAAc,KAAK,SACpC,MAAM,OAASA,IAAG,kCAAkC,EAChD,SAAQ,OAAO,YAAc,KAAK,QACtC,cAAc,QAAQ,SAAW,CAC/B,GAAI,QAAQ,SAAS,QAAU,CAAC,gBAAgB,IAAI,QAAQ,aAAa,KAAK,CAAC,EAAG,OAC9E,QAAQ,cAAgB,iBAAgB,QAAQ,YAAc,gBAClE,MAAM,IAAM,KAAO,MAAQ,MACvB,QAAQ,MAAQ,MAAK,QAAQ,IAAM,KACnC,QAAQ,OAASD,MAAK,OAAM,QAAQ,KAAOA,MAAK,MAChD,QAAQ,MAAM,iBAAiB,YAAY,IAAM,UAAU,QAAQ,MAAM,YAAY,aAAc,SAAU,WAAW,EACxH,QAAQ,MAAM,iBAAiB,WAAW,IAAM,KAAK,QAAQ,MAAM,YAAY,YAAa,IAAK,WAAW,CAClH,CAAC,CACH,CAEA,SAASyD,0BAAyB,MAAQ,GAAI,CAC5ChE,QAAO,aAAagE,0BAAyB,KAAK,EAClDA,0BAAyB,MAAQhE,QAAO,WAAW8D,sBAAsB,KAAK,CAChF,CAEA,SAASG,0BAA0B,CAClB,IAAIX,iBAAgBtD,QAAO,SAAS,MAAM,EAC9C,IAAI,QAAQ,IAAM,KAC7B4D,kBAAiB,KAAM,CAAE,OAAQ,EAAK,CAAC,CACzC,CACA,MAAO,CAAE,8BAAAF,+BAA+B,qBAAAC,sBAAsB,iBAAAC,kBAAkB,oBAAAC,qBAAqB,uBAAAE,wBAAwB,qBAAAD,sBAAsB,yBAAAE,0BAA0B,wBAAAC,wBAAwB,CACvM,CACA,KAAM,CAAE,8BAA+B,qBAAsB,iBAAkB,oBAAqB,uBAAwB,qBAAsB,yBAA0B,uBAAwB,EAAI,6BAA6B,CAAE,OAAQ,QAAS,gBAAiB,MAAO,KAAM,YAAa,GAAI,IAAK,SAAU,QAAS,sCAAuC,kBAAmB,CAAC,EAC1X,SAAS,qBAAqB,CAAE,OAAAjB,QAAQ,MAAA3C,OAAO,QAAAP,SAAS,KAAAS,MAAM,GAAAC,IAAI,IAAAC,KAAK,yBAAAyD,0BAA0B,qBAAAC,sBAAsB,sBAAAC,uBAAuB,yBAAAC,0BAA0B,SAAAtE,UAAU,YAAAuE,aAAa,WAAAnC,YAAY,WAAAoC,YAAY,YAAAC,aAAa,yBAAAC,0BAA0B,OAAAzE,QAAQ,IAAA0E,KAAK,SAAAvB,UAAU,SAAAC,SAAS,EAAG,CAC/R,IAAI,qBAAuB,CAAC,EACxB,uBAAyB,OACzB,UAAY,QAAQ,QAAQ,EAC5B,eAAiB,EACjB,aAAe,KACf,gBAAkB,KAClB,qBAAuB,KACvB,gBAAkB,GACtB,MAAM,kBAAoB,IAAI,IACxB,wBAA0B,IAAI,IAC9B,kBAAoB,IAAI,IAC9B,eAAeuB,UAAU,CACvB,OAAI,kBACJ,gBAAkBtE,OAAM,GAAG2C,QAAO,IAAI,UAAW,CAAE,QAAS,CAAE,OAAQ,kBAAmB,CAAE,CAAC,EACzF,KAAK,MAAM,UAAY,CACtB,GAAI,CAAC,SAAS,GAAI,MAAM,IAAI,MAAMlD,SAAQ,iBAAiB,CAAC,EAC5D,oBAAe,MAAM,SAAS,KAAK,EAC5B,YACT,CAAC,EACA,QAAQ,IAAM,CAAE,gBAAkB,IAAM,CAAC,EACrC,gBACT,CAEA,eAAe8E,gCAA+B,KAAM,SAAU,CAC5D,MAAM,SAAW,MAAMvE,OAAM,GAAG2C,QAAO,IAAI,iBAAkB,CAC3D,OAAQ,OACR,QAAS,CAAE,eAAgB,mBAAoB,OAAQ,kBAAmB,EAC1E,KAAM,KAAK,UAAU,CAAE,GAAI,KAAK,KAAO,OAAO,KAAK,UAAU,EAAG,SAAU,OAAO,QAAQ,CAAE,CAAC,CAC9F,CAAC,EACD,GAAI,CAAC,SAAS,GAAI,MAAM,IAAI,MAAMlD,SAAQ,4BAA4B,CAAC,EACvE,oBAAe,MAAM,SAAS,KAAK,EAC5B,YACT,CAEA,SAAS+E,oBAAmB,KAAM,CAEhC,OADmB,KAAK,YAAc,CAAC,GACrB,0BAA4B,QAC5C,OAAO7B,QAAO,UAAU,IAAM,OAAO,KAAK,UAAU,GACpD,OAAO,KAAK,gBAAkB,KAAK,OAAS,KAAK,aAAe,CAAC,IAAM,CAE3E,CAEA,SAAS8B,sBAAqB,KAAM,CAClC,OAAQ,MAAM,OAAS,CAAC,GACrB,IAAI,CAAC,KAAM,SAAW,CAAE,KAAM,KAAM,EAAE,EACtC,OAAO,CAAC,CAAE,IAAK,IAAM,CAACD,oBAAmB,IAAI,CAAC,CACnD,CAEA,SAASE,kCAAiC,KAAM,CAC9C,MAAM,eAAiB,OAAO/B,QAAO,kBAAoB,sBAAsB,EAC/E,OAAO8B,sBAAqB,IAAI,EAAE,KAAK,CAAC,CAAE,IAAK,IAAM,CACnD,MAAM,OAAS,OAAO,KAAK,QAAU,KAAK,gBAAkB,EAAE,EACxD,gBAAkB,OAAO,KAAK,gBAAkB,KAAK,OAAS,CAAC,EACrE,OAAO,SAAW,gBAAkB,gBAAkB,GAAK,OAAO,KAAK,UAAY,CAAC,EAAI,CAC1F,CAAC,CACH,CAEA,eAAeE,sBAAqB,KAAM,CAAE,iBAAmB,EAAM,EAAI,CAAC,EAAG,CAC3E,MAAM,UAAYD,kCAAiC,IAAI,EACjD,aAAe,MAAM,OAAS,CAAC,GAAG,OAAOF,mBAAkB,EAC3D,gBAAkB,GAAQ7B,QAAO,YAAcA,QAAO,cAE5D,GAAI,CAAC,WAAa,CAAC,gBAAiB,CAClC,IAAIiC,UAAW,KACf,UAAW,QAAQ,YAAaA,UAAW,MAAML,gCAA+B,KAAM,CAAC,EACvF,MAAM,YAAc,WAAa,EAAQ5B,QAAO,YAAe,CAACA,QAAO,aACvE,MAAO,CAAE,KAAMiC,UAAU,OAAQ,YAAc,cAAgB,MAAO,CACxE,CAEA,GAAI,CAAC,YAAY,OAUf,OATiB,MAAM5E,OAAM,GAAG2C,QAAO,IAAI,cAAe,CACxD,OAAQ,OACR,QAAS,CAAE,eAAgB,mBAAoB,OAAQ,kBAAmB,EAC1E,KAAM,KAAK,UAAU,CAAE,MAAO,CAAC,CAC7B,GAAI,OAAOA,QAAO,UAAU,EAC5B,SAAU,EACV,WAAY,CAAE,wBAAyB,MAAO,CAChD,CAAC,CAAE,CAAC,CACN,CAAC,GACa,GAIP,CAAE,KAAM,MAAM2B,SAAQ,EAAG,OAAQ,SAAU,GAHhD3B,QAAO,aAAe,GACf,CAAE,KAAM,MAAM2B,SAAQ,EAAE,MAAM,IAAM,IAAI,EAAG,OAAQ,aAAc,GAK5E,IAAI,SAAW,KACf,GAAI,kBAAoB,OAAO,YAAY,CAAC,EAAE,UAAY,CAAC,IAAM,EAC/D,GAAI,CACF,SAAW,MAAMC,gCAA+B,YAAY,CAAC,EAAG,CAAC,CACnE,OAAS,MAAO,CACd,GAAI,CAAC,iBAAkB,MAAM,MAC7B,OAAA5B,QAAO,aAAe,GACtB,SAAW,MAAM4B,gCAA+B,YAAY,CAAC,EAAG,CAAC,EAC1D,CAAE,KAAM,SAAU,OAAQ,aAAc,CACjD,CAEF,UAAW,aAAa,YAAY,MAAM,CAAC,EACzC,SAAW,MAAMA,gCAA+B,UAAW,CAAC,EAE9D,MAAO,CAAE,KAAM,SAAU,OAAQ,SAAU,CAC7C,CAEA,SAASM,2BAA0B,KAAM,CACvC,MAAM,MAAQ,OAAO,MAAM,eAAiB,MAAM,OAAS,EAAE,EAE7D,OADe,OAAO,MAAM,QAAU,MAAM,gBAAkB,EAAE,IACjD,iBAAmB,gBAAgB,KAAK,KAAK,GAAK,eAAe,KAAK,KAAK,EACjF,mBAEF,KACT,CAEA,SAASC,qCAAoC,aAAc,CACzD,MAAM,WAAa,IAAI,IACvB,aAAa,QAAQ,CAAC,CAAE,IAAK,IAAM,WAAW,IAAI,OAAO,KAAK,UAAU,EAAG,OAAO,KAAK,UAAY,CAAC,CAAC,CAAC,EACtG1E,KAAI,iBAAiB,EAAE,QAAQ,SAAW,CACxC,MAAM,UAAY,OAAO,QAAQ,QAAQ,SAAS,EAC5C,YAAc,QAAQ,QAAQ,qBAAuB,OACrD,YAAcyD,0BAAyB,IAAI,SAAS,EACtDA,0BAAyB,IAAI,SAAS,EACrC,WAAW,IAAI,SAAS,GAAK,EAC5B,SAAW,YAAcC,sBAAqB,UAAW,WAAW,EAAI,KAAK,IAAI,EAAG,OAAO,aAAe,CAAC,CAAC,EAClH,QAAQ,OAAS,UAAY,EAC7B,MAAM,MAAQ3D,IAAG,wBAAyB,OAAO,EAC7C,QAAO,MAAM,YAAc,UAC/B4D,uBAAsB,QAAS,QAAQ,EACvC,MAAM,KAAO,QAAQ,QAAQ,eAAe,EACtC,IAAM5D,IAAG,qBAAsB,IAAI,EACnC,OAASA,IAAG,qBAAsB,IAAI,EAC5C,GAAI,IAAK,CACH,UAAY,GAAG4E,gBAAe,GAAG,EACrC,IAAI,OAAS,SAAW,GAAK,CAAC,YAC9B,MAAM,MAAQf,0BAAyB,SAAS,EAChD,IAAI,SAAW,CAAC,aAAgB,QAAU,MAAQ,OAAS,CAC7D,CACI,SAAQ,OAAO,OAAS,SAAW,GAAK,YAC9C,CAAC,EACD5D,KAAI,oBAAoB,EAAE,QAAQ,SAAW,CAC3C,MAAM,UAAY,OAAO,QAAQ,QAAQ,WAAa,EAAE,EAClD,YAAc,QAAQ,QAAQ,qBAAuB,OACrD,YAAcyD,0BAAyB,IAAI,SAAS,EACtDA,0BAAyB,IAAI,SAAS,EACrC,WAAW,IAAI,SAAS,GAAK,EAC5B,SAAW,YAAcC,sBAAqB,UAAW,WAAW,EAAI,KAAK,IAAI,EAAG,OAAO,aAAe,CAAC,CAAC,EAClH,QAAQ,OAAS,UAAY,EAC7B,MAAM,MAAQ3D,IAAG,2BAA4B,OAAO,EAChD,QAAO,MAAM,YAAc,UAC/B4D,uBAAsB,QAAS,QAAQ,EACvC,MAAM,KAAO,QAAQ,QAAQ,eAAe,GAAKrE,UAC3C,IAAMS,IAAG,wBAAyB,IAAI,EACtC,OAASA,IAAG,wBAAyB,IAAI,EAC/C,GAAI,IAAK,CACH,UAAY,GAAG4E,gBAAe,GAAG,EACrC,IAAI,OAAS,SAAW,GAAK,CAAC,YAC9B,MAAM,MAAQf,0BAAyB,SAAS,EAChD,IAAI,SAAW,CAAC,aAAgB,QAAU,MAAQ,OAAS,CAC7D,CACI,SAAQ,OAAO,OAAS,SAAW,GAAK,YAC9C,CAAC,CACH,CAEA,SAASgB,wBAAuB,aAAc,CAC5C,IAAI,UAAY,aAAa,IAAI,QAAU,CAAE,MAAO,MAAM,MAAO,KAAM,CAAE,GAAG,MAAM,IAAK,CAAE,EAAE,EAC3F,OAAAnB,0BAAyB,QAAQ,CAAC,QAAS,YAAc,CACvD,MAAM,GAAK,OAAO,SAAS,EAC3B,QAAUC,sBAAqB,GAAI,OAAO,EAC1C,MAAM,MAAQ,UAAU,UAAU,CAAC,CAAE,IAAK,IAAM,OAAO,KAAK,UAAU,IAAM,EAAE,EAC9E,GAAI,OAAS,EAAG,CACd,GAAI,SAAW,EAAG,CAChB,UAAU,OAAO,MAAO,CAAC,EACzB,MACF,CACA,MAAM,MAAQ,UAAU,KAAK,EACvB,WAAa,KAAK,IAAI,EAAG,OAAO,MAAM,KAAK,UAAY,CAAC,CAAC,EACzD,UAAY,KAAK,MAAM,OAAO,MAAM,KAAK,kBAAoB,CAAC,EAAI,UAAU,EAClF,MAAM,KAAK,SAAW,QACtB,MAAM,KAAK,iBAAmB,UAAY,QAC1C,MACF,CACA,GAAI,SAAW,EAAG,OAClB,MAAM,aAAe1D,KAAI,0CAA0C,EAAE,KAAK,QAAU,OAAO,OAAO,QAAQ,SAAS,IAAM,EAAE,EACtH,cACL,UAAU,KAAK,CAAE,MAAO,GAAI,KAAM,CAChC,IAAK,cAAc,EAAE,GACrB,WAAY,GACZ,cAAe,aAAa,QAAQ,cAAgB,GACpD,cAAe,aAAa,QAAQ,cAAgB,GACpD,SAAU,QACV,iBAAkB,OAAO,aAAa,QAAQ,WAAa,CAAC,EAAI,QAChE,MAAO,EACT,CAAC,CAAC,CACJ,CAAC,EACM,SACT,CAEA,SAAS6E,oBAAmB,aAAc,WAAa,KAAM,UAAY,uBAAwB,CAC/F,aAAeD,wBAAuB,YAAY,EAC9CnB,0BAAyB,OAAM,WAAa,aAAa,OAAO,CAAC,IAAK,CAAE,IAAK,IAAM,IAAM,OAAO,KAAK,kBAAoB,CAAC,EAAG,CAAC,GAClI,qBAAuB,aACvB,MAAM,aAAe,aAAa,OAAO,CAAC,IAAK,CAAE,IAAK,IAAM,IAAM,OAAO,KAAK,UAAY,CAAC,EAAG,CAAC,EAC/FzD,KAAI,mBAAmB,EAAE,QAAQ,IAAM,CACrC,MAAM,cAAgB,OAAO,GAAG,aAAe,CAAC,EAChD,GAAG,YAAc,aACjB,GAAG,UAAU,OAAO,WAAY,eAAiB,CAAC,EAClD,GAAG,QAAQ,eAAe,GAAG,UAAU,OAAO,YAAa,aAAe,CAAC,EAC3E,GAAG,QAAQ,0BAA0B,GAAG,UAAU,OAAO,YAAa,aAAe,CAAC,EAClF,gBAAkB,cAAgB,CAACT,QAAO,WAAW,kCAAkC,EAAE,UAC3F,GAAG,UAAU,OAAO,aAAa,EAC5B,GAAG,YACR,GAAG,UAAU,IAAI,aAAa,EAC9B,GAAG,iBAAiB,eAAgB,IAAM,GAAG,UAAU,OAAO,aAAa,EAAG,CAAE,KAAM,EAAK,CAAC,EAEhG,CAAC,EACDmF,qCAAoC,YAAY,EAChD,MAAM,MAAQ3E,IAAG,mBAAmB,EAC9B,MAAQC,KAAI,wCAAwC,EACpD,YAAcA,KAAI,0BAA0B,EAC5C,gBAAkBA,KAAI,8BAA8B,EACpD,OAASD,IAAG,oBAAoB,EACtC,GAAI,CAAC,MAAO,OACZ,GAAI,CAAC,aAAa,OAAQ,CACxB,MAAM,KAAO8D,aACbnC,aAAY,UAAU,OAAO,WAAW,EACxC,MAAM,UAAY,sDAAsD,KAAK,SAAS,6CAA6Ca,QAAO,IAAI,qDAAqD,KAAK,UAAU,aAClN,MAAM,QAAQ,MAAQ,CAAE,KAAK,OAAS,EAAM,CAAC,EAC7C,YAAY,QAAQ,MAAQ,CAAE,KAAK,OAAS,EAAM,CAAC,EACnD,gBAAgB,QAAQ,MAAQ,CAAE,KAAK,OAAS,EAAM,CAAC,EACnD,SAAQ,OAAO,OAAS,IAC5B,gBAAkB,GAClB,MACF,CACAb,aAAY,UAAU,IAAI,WAAW,EACrC,MAAM,UAAY,aAAa,IAAI,CAAC,CAAE,KAAM,KAAM,IAAM,CACtD,MAAM,aAAe+C,2BAA0B,IAAI,EAC7C,QAAU,KAAK,eAAiB,KAAK,gBAAkB,gBAAkB,SAAMX,YAAW,KAAK,aAAa,CAAC,GAAK,GAClH,UAAY,OAAO,SAAS,KAAK,GAAK,OAAS,EAAI,MAAQ,EAAI,GAC/D,MAAQF,0BAAyB,KAAK,UAAU,EAChD,aAAe,QAAU,MAAQ,OAAO,KAAK,UAAY,CAAC,GAAK,MAAQ,YAAc,GAC3F,MAAO,6CAA6CE,YAAW,KAAK,KAAO,KAAK,YAAc,EAAE,CAAC,sBAAsBA,YAAW,KAAK,YAAc,EAAE,CAAC;AAAA,6CACnHA,YAAW,YAAY,CAAC,GAAG,OAAO,sCAAsCC,aAAY,KAAK,gBAAgB,CAAC,mFAAmF,SAAS,sCAAsC1E,SAAQ,mBAAmB,CAAC,0BAAqB,KAAK,QAAQ,kDAAkD,SAAS,qCAAqCA,SAAQ,mBAAmB,CAAC,IAAI,YAAY;AAAA,mBAE7d,CAAC,EAAE,KAAK,EAAE,EACV,MAAM,gBAAkB,YAAc,UAChC,oBAAsB,YAAc,cAC1C,MAAM,QAAQ,MAAQ,CAAE,KAAK,OAAS,CAAC,iBAAmB,CAAC,mBAAqB,CAAC,EACjF,YAAY,QAAQ,MAAQ,CAAE,KAAK,OAAS,CAAC,eAAiB,CAAC,EAC/D,gBAAgB,QAAQ,MAAQ,CAAE,KAAK,OAAS,CAAC,mBAAqB,CAAC,EACnE,SAAQ,OAAO,OAAS,IAC5B,MAAM,MAAQU,IAAG,mBAAmB,EAChC,OAAS,aAAe,OAAM,MAAM,YAAcgE,aAAY,UAAU,GAC5E,gBAAkB,EACpB,CAEA,SAASe,yBAAwB,OAAQ,SAAW,EAAG,CACrD,MAAM,UAAY,OAAO,OAAO,QAAQ,SAAS,EACjD,GAAI,CAAC,UAAW,OAChB,MAAM,cAAgB,OAAO,OAAO,QAAQ,eAAiB,EAAE,EACzD,eAAiB,OAAOvC,QAAO,kBAAoB,sBAAsB,EAC3E,eAAiB,gBAAkB,gBAAkBA,QAAO,aAC9D,uBAAyBA,QAAO,aAAe,UAAY,eAE7DyB,0BAAyB,UAAW,OAAO,QAAQ,cAAc,EACjE,MAAM,QAAUP,0BAAyB,IAAI,OAAO,SAAS,CAAC,EAC1DA,0BAAyB,IAAI,OAAO,SAAS,CAAC,EAC9C,OAAO,qBAAqB,KAAK,CAAC,CAAE,IAAK,IAAM,OAAO,KAAK,UAAU,IAAM,SAAS,GAAG,KAAK,UAAY,CAAC,EAC7GsB,8BAA6B,UAAW,QAAU,OAAO,UAAY,CAAC,CAAC,CACzE,CAEA,SAASA,8BAA6B,UAAW,SAAU,CACzD,MAAM,GAAK,OAAO,SAAS,EACrB,KAAOrB,sBAAqB,GAAI,QAAQ,EAC9CD,0BAAyB,IAAI,OAAO,EAAE,EAAG,IAAI,EAC7C,MAAM,aAAe,qBAAqB,IAAI,QAAU,CAAE,MAAO,MAAM,MAAO,KAAM,CAAE,GAAG,MAAM,IAAK,CAAE,EAAE,EAClG,cAAgB,aAAa,UAAU,CAAC,CAAE,IAAK,IAAM,OAAO,KAAK,UAAU,IAAM,EAAE,EACzF,GAAI,cAAgB,EAAG,CACrB,GAAI,MAAQ,EAAG,OACf,MAAM,aAAezD,KAAI,0CAA0C,EAAE,KAAK,QAAU,OAAO,OAAO,QAAQ,SAAS,IAAM,EAAE,EACrH,MAAQ,OAAO,cAAc,QAAQ,WAAa,CAAC,EACzD,aAAa,KAAK,CAAE,MAAO,GAAI,KAAM,CACnC,IAAK,cAAc,EAAE,GACrB,WAAY,GACZ,cAAe,cAAc,QAAQ,cAAgB,GACrD,cAAe,cAAc,QAAQ,cAAgB,GACrD,SAAU,KACV,iBAAkB,MAAQ,KAC1B,MAAO,EACT,CAAC,CAAC,EACF,MAAMgF,OAAQ,aAAa,OAAO,CAAC,IAAK,CAAE,IAAK,IAAM,IAAM,OAAO,KAAK,kBAAoB,CAAC,EAAG,CAAC,EAChGH,oBAAmB,aAAcG,MAAK,EACtC,MACF,CACA,GAAI,MAAQ,EACV,aAAa,OAAO,cAAe,CAAC,MAC/B,CACL,MAAM,SAAW,aAAa,aAAa,EACrC,WAAa,KAAK,IAAI,EAAG,OAAO,SAAS,KAAK,UAAY,CAAC,CAAC,EAC5D,UAAY,KAAK,MAAM,OAAO,SAAS,KAAK,kBAAoB,CAAC,EAAI,UAAU,EACrF,SAAS,KAAK,SAAW,KACzB,SAAS,KAAK,iBAAmB,UAAY,IAC/C,CACA,MAAM,MAAQ,aAAa,OAAO,CAAC,IAAK,CAAE,IAAK,IAAM,IAAM,OAAO,KAAK,kBAAoB,CAAC,EAAG,CAAC,EAChGH,oBAAmB,aAAc,KAAK,EACtCI,eAAc,EAAE,CAClB,CAEA,SAASC,qBAAoB,UAAW,SAAU,CAChD,MAAM,GAAK,OAAO,SAAS,EAC3B,wBAAwB,OAAO,EAAE,EACjCzB,0BAAyB,IAAI,GAAIC,sBAAqB,GAAI,QAAQ,CAAC,EACnEnE,QAAO,aAAa,kBAAkB,IAAI,EAAE,CAAC,EAC7C,kBAAkB,IAAI,GAAIA,QAAO,WAAW,IAAM,CAChD,MAAM,QAAUkE,0BAAyB,IAAI,EAAE,GAAK,EACpD0B,sBAAqB,SAAY,CAC/B,GAAI,CACF,MAAM,OAAS,MAAMC,oBAAmB,GAAI,OAAO,EACnD,OAAK3B,0BAAyB,IAAI,EAAE,GAAK,KAAO,SAASA,0BAAyB,OAAO,EAAE,EACpF,MACT,OAAS,MAAO,CACd,MAAKA,0BAAyB,IAAI,EAAE,GAAK,KAAO,UAC9C,wBAAwB,IAAI,GAAI,OAAO,EACvCA,0BAAyB,OAAO,EAAE,GAE9B,KACR,CACF,CAAC,CACH,EAAG,EAAE,CAAC,CACR,CAEA,SAAS4B,gBAAe,UAAW,CACjC,MAAM,GAAK,OAAO,SAAS,EAC3B9F,QAAO,aAAa,kBAAkB,IAAI,EAAE,CAAC,EAC7C,kBAAkB,OAAO,EAAE,EAC3B,MAAM,QAAUkE,0BAAyB,IAAI,EAAE,EAC/C,OAAI,UAAY,OAAkB,QAAQ,QAAQ,EAC3C0B,sBAAqB,SAAY,CACtC,GAAI,CACF,MAAM,OAAS,MAAMC,oBAAmB,GAAI,OAAO,EACnD,OAAK3B,0BAAyB,IAAI,EAAE,GAAK,KAAO,SAASA,0BAAyB,OAAO,EAAE,EAC3F,wBAAwB,OAAO,EAAE,EAC1B,MACT,OAAS,MAAO,CACd,MAAKA,0BAAyB,IAAI,EAAE,GAAK,KAAO,UAC9C,wBAAwB,IAAI,GAAI,OAAO,EACvCA,0BAAyB,OAAO,EAAE,GAE9B,KACR,CACF,EAAG,CAAE,cAAe,EAAK,CAAC,CAC5B,CAEA,eAAe6B,iBAAiB,CAE9B,MAAM,UACN,wBAAwB,QAAQ,CAAC,SAAU,KAAO,CAC3C7B,0BAAyB,IAAI,EAAE,GAAGA,0BAAyB,IAAI,GAAI,QAAQ,CAClF,CAAC,EACD,MAAM,IAAM,CAAC,GAAGA,0BAAyB,KAAK,CAAC,EAC/C,OAAK,IAAI,QACT,IAAI,QAAQ,IAAM,CAChBlE,QAAO,aAAa,kBAAkB,IAAI,EAAE,CAAC,EAC7C,kBAAkB,OAAO,EAAE,CAC7B,CAAC,EACM,IAAI,OAAO,CAAC,QAAS,KAAO,QAAQ,KAAK,IAAM8F,gBAAe,EAAE,CAAC,EAAG,QAAQ,QAAQ,CAAC,GALpE,QAAQ,QAAQ,CAM1C,CAEA,SAASE,iBAAgB,QAAS,SAAU,CAC1C,MAAM,KAAO7B,sBAAqB,QAAQ,QAAQ,UAAW,QAAQ,EACrE,QAAQ,OAAS,MAAQ,EACzB,MAAM,MAAQ3D,IAAG,wBAAyB,OAAO,EAC7C,QAAO,MAAM,YAAc,MAC/B4D,uBAAsB,QAAS,IAAI,EACnC,MAAM,IAAM,QAAQ,wBAAwB,QAAQ,oBAAoB,EAAI,QAAQ,uBAAyB,KACzG,MACE,MAAQ,GAAGgB,gBAAe,GAAG,EACjC,IAAI,OAAS,KAAO,EAExB,CAEA,SAASM,eAAc,UAAW,CAChC,MAAM,SAAW,qBAAqBhB,KAAI,OAAO,OAAO,SAAS,CAAC,CAAC,KACnEjE,KAAI,GAAG,QAAQ,2BAA2B,QAAQ,wCAAwC,QAAQ,uBAAuB,EAAE,QAAQ,OAAS,CAC1I,MAAM,UAAU,OAAO,cAAc,EAChC,MAAM,YACX,MAAM,UAAU,IAAI,cAAc,CACpC,CAAC,EACDT,QAAO,aAAa,kBAAkB,IAAI,OAAO,SAAS,CAAC,CAAC,EAC5D,kBAAkB,IAAI,OAAO,SAAS,EAAGA,QAAO,WAAW,IAAM,CAC/DS,KAAI,GAAG,QAAQ,2BAA2B,QAAQ,wCAAwC,QAAQ,uBAAuB,EAAE,QAAQ,OAAS,MAAM,UAAU,OAAO,cAAc,CAAC,CACpL,EAAG,GAAG,CAAC,CACT,CAEA,SAASwF,gCAAgC,CACvC,MAAM,eAAiB,OAAOjD,QAAO,kBAAoB,sBAAsB,EAQ/E,MAAI,CAPsB,CAAC,GAAGkB,0BAAyB,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,UAAW,QAAQ,IAAM,CAChG,GAAI,OAAO,UAAY,CAAC,GAAK,GAAK,OAAO,SAAS,IAAM,OAAOlB,QAAO,UAAU,EAAG,MAAO,GAC1F,MAAM,aAAevC,KAAI,0CAA0C,EAChE,KAAK,QAAU,OAAO,OAAO,QAAQ,SAAS,IAAM,OAAO,SAAS,CAAC,EAClE,cAAgB,OAAO,cAAc,QAAQ,eAAiB,EAAE,EACtE,OAAO,eAAiB,gBAAkB,cAC5C,CAAC,GACyB,CAACuC,QAAO,WAAmB,KAC9CA,QAAO,aAAe,UAAY,aAC3C,CAEA,SAASkD,YAAW,KAAM,UAAY,KAAM,CAC1C,MAAM,gBAAkB,aAAe,MAAM,OAAS,CAAC,GAAG,KAAKrB,mBAAkB,EAAI,UAAY,QACjG,uBAAyBoB,+BAA8B,GAAK,gBAC5DX,oBAAmBR,sBAAqB,IAAI,EAAG,KAAK,YAAa,sBAAsB,CACzF,CAEA,SAASqB,YAAW,OAAQ,CAC1B,GAAI,CAAC,OAAQ,OACb,MAAM,KAAO7B,aAEP,OADW9D,IAAG,6BAA8B,MAAM,GAC7B,OACrB,SAAW,OAAO,YACxB,OAAO,YAAc,KAAK,aAC1BR,QAAO,aAAa,OAAO,mBAAmB,EAC9C,OAAO,oBAAsBA,QAAO,WAAW,IAAM,CACnD,OAAO,YAAc,OAAO,QAAQ,cAAgB,UAAY,KAAK,SACvE,EAAG,IAAI,CACT,CAEA,SAASoF,gBAAe,OAAQ,CAC9B,GAAI,CAAC,OAAQ,OACbpF,QAAO,aAAa,OAAO,mBAAmB,EAC9C,OAAO,oBAAsB,KAC7B,MAAM,KAAOsE,aAEP,OADW9D,IAAG,6BAA8B,MAAM,GAC7B,OAC3B,OAAO,YAAc,OAAO,QAAQ,cAAgB,KAAK,SAC3D,CAEA,eAAe4F,aAAY,CAAE,KAAO,EAAM,EAAI,CAAC,EAAG,CAChD,MAAM,OAAS,MAAMpB,sBAAqB,MAAML,SAAQ,CAAC,EACnD,KAAO,OAAO,KACpB,OAAAuB,YAAW,KAAM,OAAO,MAAM,EAC1B,MAAM9C,UAAS,EACZ,IACT,CAEA,SAASF,qBAAqB,CAC5B,OAAI,gBAAwB,QAAQ,QAAQ,YAAY,GACnD,uBACH,qBAAuBkD,aAAY,EAAE,QAAQ,IAAM,CACjD,qBAAuB,IACzB,CAAC,GAEI,qBACT,CAEA,SAASR,sBAAqB,UAAW,CAAE,cAAgB,EAAM,EAAI,CAAC,EAAG,CACvE,IAAI,eAAiB,KACrB,uBAAkB,EAClB,UAAY,UACT,KAAK,SAAS,EACd,MAAM,OAAS,CACd,eAAiB,MACjBzC,UAAS5C,MAAK,OAAS,MAAQ,CAAC,kBAAkB,KAAK,MAAM,SAAW,EAAE,EACtET,SAAQ,mBAAmB,EAC3B,MAAM,SAAWA,SAAQ,oBAAoB,CAAC,CACpD,CAAC,EACA,QAAQ,SAAY,CAEnB,GADA,gBAAkB,EACd,iBAAmB,EACrB,GAAI,CACF,MAAMsG,aAAY,CACpB,OAAS,MAAO,CAAEjD,UAAS5C,MAAK,OAAS,KAAOT,SAAQ,iBAAiB,EAAI,MAAM,SAAWA,SAAQ,iBAAiB,CAAC,CAAG,CAE/H,CAAC,EAGI,cAAgB,UAAU,KAAK,QAAU,CAC9C,GAAI,eAAgB,MAAM,eAC1B,OAAO,MACT,CAAC,EAAI,SACP,CAEA,eAAeuG,UAAS,UAAW,SAAW,EAAG,CAAE,KAAO,KAAM,cAAgB,EAAG,EAAI,CAAC,EAAG,CACzF,MAAM,MAAQ,CAAC,CAAE,GAAI,OAAO,SAAS,EAAG,SAAU,OAAO,QAAQ,GAAK,CAAE,CAAC,EACnE,eAAiB,OAAOrD,QAAO,kBAAoB,sBAAsB,EAE7EA,QAAO,YACPA,QAAO,cACP,eACA,gBAAkB,gBAClB,EAAE,MAAM,OAAS,CAAC,GAAG,KAAK6B,mBAAkB,GAG5C,MAAM,KAAK,CACT,GAAI,OAAO7B,QAAO,UAAU,EAC5B,SAAU,EACV,WAAY,CAAE,wBAAyB,MAAO,CAChD,CAAC,EAGH,IAAI,SAAW,MAAM3C,OAAM,GAAG2C,QAAO,IAAI,cAAe,CAAE,OAAQ,OAAQ,QAAS,CAAE,eAAgB,mBAAoB,OAAQ,kBAAmB,EAAG,KAAM,KAAK,UAAU,CAAE,KAAM,CAAC,CAAE,CAAC,EAKxL,GAJI,CAAC,SAAS,IAAM,MAAM,OAAS,IACjC,SAAW,MAAM3C,OAAM,GAAG2C,QAAO,IAAI,cAAe,CAAE,OAAQ,OAAQ,QAAS,CAAE,eAAgB,mBAAoB,OAAQ,kBAAmB,EAAG,KAAM,KAAK,UAAU,CAAE,MAAO,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,EAC5L,SAAS,KAAIA,QAAO,aAAe,KAErC,CAAC,SAAS,GAAI,CAChB,MAAM,MAAQ,MAAM,SAAS,KAAK,EAAE,MAAM,KAAO,CAAC,EAAE,EACpD,MAAM,IAAI,MAAMzC,MAAK,OAAS,MAAQ,CAAC,kBAAkB,KAAK,MAAM,aAAe,EAAE,EACjFT,SAAQ,gBAAgB,EACxB,MAAM,aAAeA,SAAQ,gBAAgB,CAAC,CACpD,CAIA,oBAAe,KACR,SAAS,KAAK,EAAE,MAAM,KAAO,CAAC,EAAE,CACzC,CAEA,eAAewG,YAAW,KAAM,SAAU,CACxC,MAAM,SAAW,MAAMjG,OAAM,GAAG2C,QAAO,IAAI,iBAAkB,CAAE,OAAQ,OAAQ,QAAS,CAAE,eAAgB,mBAAoB,OAAQ,kBAAmB,EAAG,KAAM,KAAK,UAAU,CAAE,KAAM,OAAO,IAAI,EAAG,SAAU,OAAO,QAAQ,CAAE,CAAC,CAAE,CAAC,EACtO,GAAI,CAAC,SAAS,GAAI,MAAM,IAAI,MAAMlD,SAAQ,mBAAmB,CAAC,EAC9D,oBAAe,MAAM,SAAS,KAAK,EAC5B,YACT,CAEA,eAAe+F,oBAAmB,UAAW,SAAU,CAGrD,MAAM,KAAO,cAAgB,MAAMlB,SAAQ,EAErC,MADUG,sBAAqB,IAAI,EACnB,KAAK,CAAC,CAAE,IAAK,IAAM,OAAO,KAAK,UAAU,IAAM,OAAO,SAAS,CAAC,EACtF,GAAI,CAAC,OAAS,OAAO,QAAQ,GAAK,EAAG,MAAO,CAAC,EAC7C,GAAI,CAAC,MAAO,CACV,MAAM,aAAerE,KAAI,0CAA0C,EAChE,KAAK,QAAU,OAAO,OAAO,QAAQ,SAAS,IAAM,OAAO,SAAS,CAAC,EACxE,OAAO4F,UAAS,UAAW,SAAU,CACnC,KACA,cAAe,OAAO,cAAc,QAAQ,eAAiB,EAAE,CACjE,CAAC,CACH,CACA,OAAOC,YAAW,MAAM,MAAQ,EAAG,QAAQ,CAC7C,CAEA,SAASC,sBAAsB,CAAE,OAAO,oBAAsB,CAC9D,SAAStD,iBAAiB,CAAE,OAAO,eAAiB,CACpD,MAAO,CAAE,QAAA0B,SAAS,+BAAAC,gCAAgC,mBAAAC,oBAAoB,qBAAAC,sBAAsB,iCAAAC,kCAAkC,qBAAAC,sBAAsB,0BAAAE,2BAA2B,oCAAAC,qCAAqC,uBAAAE,wBAAwB,mBAAAC,oBAAoB,wBAAAC,yBAAyB,6BAAAC,8BAA8B,oBAAAG,qBAAqB,eAAAG,gBAAgB,eAAAC,gBAAgB,gBAAAC,iBAAiB,cAAAN,eAAe,8BAAAO,+BAA+B,WAAAC,YAAY,WAAAC,YAAY,eAAAf,gBAAgB,YAAAgB,aAAa,mBAAAlD,oBAAoB,qBAAA0C,sBAAsB,SAAAS,UAAU,WAAAC,YAAY,mBAAAT,oBAAoB,oBAAAU,qBAAqB,eAAAtD,eAAe,CAC1lB,CACA,KAAM,CAAE,QAAS,+BAAgC,mBAAoB,qBAAsB,iCAAkC,qBAAsB,0BAA2B,oCAAqC,uBAAwB,mBAAoB,wBAAyB,6BAA8B,oBAAqB,eAAgB,eAAgB,gBAAiB,cAAe,8BAA+B,WAAY,WAAY,eAAgB,YAAa,mBAAoB,qBAAsB,SAAU,WAAY,mBAAoB,oBAAqB,cAAe,EAAI,qBAAqB,CAAE,OAAQ,MAAO,QAAS,KAAM,GAAI,IAAK,yBAA0B,qBAAsB,sBAAuB,yBAA0B,SAAU,YAAa,WAAY,WAAY,YAAa,yBAA0B,OAAQ,IAAK,SAAU,QAAS,CAAC,EACj3B,SAAS,iBAAiB,YAAa,CACrC,MAAM,KAAO,aAAa,QAAQ,eAAe,EACjD,GAAI,CAAC,KAAM,OACX,MAAM,WAAa,IAAI,IAAI,YAAY,QAAQ,gBAAkB,KAAK,QAAQ,SAAW,SAAS,KAAM,SAAS,MAAM,EACjH,YAAc,GAAG,WAAW,QAAQ,GAAG,WAAW,MAAM,GAAG,WAAW,IAAI,GAChF,KAAK,QAAQ,QAAU,YACvB,IAAI,oDAAqD,IAAI,EAAE,QAAQ,MAAQ,CAAE,KAAK,KAAO,WAAa,CAAC,EAC3G,IAAI,sBAAuB,IAAI,EAAE,QAAQ,QAAU,CACjD,MAAM,SAAW,SAAW,YAC5B,OAAO,UAAU,OAAO,cAAe,QAAQ,EAC/C,OAAO,aAAa,eAAgB,OAAO,QAAQ,CAAC,CACtD,CAAC,EACD,MAAM,UAAY,GAAG,kDAAmD,IAAI,EACxE,WAAa,YAAY,QAAQ,kBACnC,UAAU,QAAQ,SAAW,YAAY,QAAQ,gBACjD,UAAU,QAAQ,YAAc,GAC5B,YAAY,QAAQ,kBAAiB,UAAU,IAAM,YAAY,QAAQ,kBAE3E,WAAa,YAAY,QAAQ,sBACnC,UAAU,QAAQ,QAAU,YAAY,QAAQ,oBAChD,UAAU,QAAQ,WAAa,cAAc,YAAY,QAAQ,oBAAqB,CAAC,IAAK,IAAK,IAAK,IAAI,CAAC,GAE7G,uBAAuB,IAAI,EAC3B,MAAM,IAAM,GAAG,qBAAsB,IAAI,EACnC,YAAc,YAAY,QAAQ,qBAAuB,OAC3D,MACF,IAAI,QAAQ,UAAY,YAAY,QAAQ,UAC5C,IAAI,QAAQ,aAAe,YAAY,QAAQ,cAAgB,GAC/D,IAAI,QAAQ,UAAY,YAAY,QAAQ,WAAa,IACzD,IAAI,QAAQ,mBAAqB,OAAO,WAAW,EAC/C,YAAY,QAAQ,iBAAmB,OAAW,IAAI,QAAQ,eAAiB,YAAY,QAAQ,eAClG,OAAO,IAAI,QAAQ,gBAE1B,aAAa,KAAM,YAAc,YAAY,QAAQ,eAAiB,IAAI,EAC1E,MAAM,QAAU,GAAG,kBAAmB,IAAI,EACtC,UACF,QAAQ,QAAQ,UAAY,YAAY,QAAQ,UAChD,QAAQ,QAAQ,mBAAqB,OAAO,WAAW,EACnD,YAAY,QAAQ,iBAAmB,OAAW,QAAQ,QAAQ,eAAiB,YAAY,QAAQ,eACtG,OAAO,QAAQ,QAAQ,gBAE9B,MAAM,OAAS,GAAG,qBAAsB,IAAI,EAC5C,GAAI,OAAQ,CACV,MAAM,UAAY,IAAI,IAAI,YAAa,SAAS,MAAM,EACtD,UAAU,aAAa,IAAI,SAAU,GAAG,EACxC,OAAO,QAAQ,WAAa,GAAG,UAAU,QAAQ,GAAG,UAAU,MAAM,GAAG,UAAU,IAAI,GACrF,OAAO,QAAQ,UAAY,YAAY,QAAQ,UAC/C,OAAO,QAAQ,aAAe,YAAY,QAAQ,cAAgB,EACpE,CACA,MAAM,aAAe,GAAG,6BAA8B,IAAI,EACtD,eAAc,aAAa,OAAS,KAAK,QAAQ,eAAiB,QAAU,aAChF,MAAM,MAAQ,GAAG,uBAAwB,IAAI,EACzC,QAAO,MAAM,YAAc,YAAY,QAAQ,cACnD,oCAAoC,oBAAoB,CAAC,CAC3D,CAEA,SAAS,2BAA2B,OAAQ,CAC1C,MAAO,CAAC,CAAC,OAAO,QAAQ,yDAAyD,CACnF,CAEA,IAAI,iBAAmB,KAEvB,SAAS,kBAAkB,MAAO,KAAM,CACtC,GAAI,CAAC,MAAO,OACZ,MAAM,YAAc,MAAM,sBAAsB,EAAE,OAC5C,aAAe,OAAO,iBAAiB,KAAK,EAAE,OAAO,EAC3D,MAAM,cAAc,EAAE,QAAQuD,YAAaA,WAAU,OAAO,CAAC,EAC7D,MAAM,MAAQ,CAAC,KACf,MAAM,aAAa,cAAe,OAAO,CAAC,IAAI,CAAC,EAC/C,MAAM,UAAY,KAAO,MAAM,aAAe,EAG9C,GAFA,MAAM,MAAM,OAAS,GAAG,WAAW,KACnC,MAAM,MAAM,QAAU,OAAO,YAAY,EACrC,qBAAqB,EAAG,CAC1B,MAAM,MAAM,OAAS,KAAO,OAAS,MACrC,MAAM,MAAM,QAAU,KAAO,IAAM,IACnC,MACF,CACA,MAAM,UAAY,MAAM,QAAQ,CAC9B,CAAE,OAAQ,GAAG,WAAW,KAAM,QAAS,YAAa,EACpD,CAAE,OAAQ,GAAG,SAAS,KAAM,QAAS,KAAO,EAAI,CAAE,CACpD,EAAG,CACD,SAAU,IACV,OAAQ,0BACV,CAAC,EACD,UAAU,SAAW,IAAM,CACzB,MAAM,MAAM,OAAS,KAAO,OAAS,MACrC,MAAM,MAAM,QAAU,KAAO,IAAM,GACrC,CACF,CACA,SAAS,iBAAiB,cAAe,OAAS,CAChD,iBAAmB,KACd,YAAY,UAAU,SAAS,SAAS,IACzC,2BAA2B,MAAM,MAAM,IAC3C,iBAAmB,CAAE,EAAG,MAAM,QAAS,EAAG,MAAM,QAAS,OAAQ,MAAM,MAAO,GAChF,EAAG,EAAI,EAEP,SAAS,iBAAiB,QAAS,MAAM,OAAS,CAChD,MAAM,kBAAoB,MAAM,OAAO,QAAQ,4BAA4B,EAI3E,GAHI,mBAAqB,CAAC,kBAAkB,QAAQ,qBAAqB,GAAK,YAAY,UAAU,SAAS,cAAc,GACzH,oBAAoB,CAAE,aAAc,EAAM,CAAC,EAEzC,YAAY,UAAU,SAAS,SAAS,GAAK,CAAC,2BAA2B,MAAM,MAAM,EAAG,CAC1F,MAAM,GAAK,iBAAmB,KAAK,IAAI,MAAM,QAAU,iBAAiB,CAAC,EAAI,EACvE,GAAK,iBAAmB,KAAK,IAAI,MAAM,QAAU,iBAAiB,CAAC,EAAI,EAC7E,GAAI,GAAK,GAAK,GAAK,EAAG,CACpB,iBAAmB,KACnB,MACF,CACA,UAAU,CACZ,CACA,iBAAmB,KACnB,MAAM,SAAW,MAAM,OAAO,QAAQ,0BAA0B,EAChE,GAAI,eAAe,SAAU,KAAK,EAAG,OACrC,MAAM,YAAc,MAAM,OAAO,QAAQ,SAAS,EAClD,GAAI,sBAAsB,YAAa,KAAK,EAAG,OAC3C,MAAM,OAAO,QAAQ,8CAA8C,GACrE,UAAU,EAEZ,MAAM,YAAc,MAAM,OAAO,QAAQ,qBAAqB,EAC9D,GAAI,YAAa,CACf,MAAM,KAAO,KAAK,QAAQ,QAAU,OACpC,GAAI,KAAM,CACR,GAAI,YAAY,QAAQ,eAAiB,OAAQ,OACjD,YAAY,QAAQ,aAAe,OACnC,YAAY,aAAa,YAAa,MAAM,EAC5C,MAAM,0BAA0B,EAChC,OAAO,YAAY,QAAQ,aAC3B,YAAY,gBAAgB,WAAW,CACzC,CACA,KAAK,QAAQ,MAAQ,KAAO,OAAS,QACrC,GAAI,CAAE,aAAa,QAAQ,UAAW,KAAO,IAAM,GAAG,CAAG,MAAY,CAAC,CACtE,uBAAuB,EACvB,eAAe,EACf,gBAAgB,EAChB,MACF,CACA,MAAM,WAAa,MAAM,OAAO,QAAQ,oBAAoB,EAC5D,GAAI,WAAY,CACd,MAAM,IAAM,GAAG,mBAAmB,EAC5B,KAAO,CAAC,IAAI,UAAU,SAAS,SAAS,EAC9C,IAAI,UAAU,OAAO,UAAW,IAAI,EACpC,WAAW,aAAa,gBAAiB,OAAO,IAAI,CAAC,EACrD,MAAM,MAAQ,KAAO,WAAW,QAAQ,eAAiB,WAAW,QAAQ,cACxE,QAAS,WAAW,aAAa,aAAc,KAAK,EAAG,WAAW,aAAa,QAAS,KAAK,GACjG,MACF,CAEA,GADuB,MAAM,OAAO,QAAQ,gCAAgC,EACxD,CAClB,qBAAqB,EACrB,MACF,CAIA,GAHI,MAAM,OAAO,QAAQ,2BAA2B,GAClD,oBAAoB,CAAE,aAAc,EAAM,CAAC,EAEzC,MAAM,OAAO,QAAQ,qBAAqB,EAAG,CAC/C,MAAM,IAAM,GAAG,mBAAmB,EAC5B,KAAO,GAAG,oBAAoB,EAChC,KAAK,IAAI,UAAU,OAAO,SAAS,EACnC,OACF,KAAK,aAAa,gBAAiB,OAAO,EACtC,KAAK,QAAQ,gBAAiB,KAAK,aAAa,aAAc,KAAK,QAAQ,aAAa,EAAG,KAAK,aAAa,QAAS,KAAK,QAAQ,aAAa,GAExJ,CACA,MAAM,aAAe,MAAM,OAAO,QAAQ,uCAAuC,EACjF,GAAI,cAAgB,sBAAsB,aAAc,KAAK,EAAG,CAC9D,MAAM,eAAe,EACrB,MAAM,gBAAgB,EACtB,aAAa,aAAa,YAAa,MAAM,EAC7C,aAAa,UAAU,IAAI,YAAY,EACvC,MAAM,aAAe,GAAG,yBAA0B,YAAY,EACxD,aAAe,YACjB,eAAc,aAAa,YAAc,aAAa,iBAC1D,GAAI,CACF,MAAM,eAAe,EACrB,MAAM,YAAc,iBAAiB,MAAM,QAAQ,CAAC,EACpD,OAAO,SAAS,KAAO,aAAe,aAAa,IACrD,OAAS,MAAO,CACd,aAAa,gBAAgB,WAAW,EACxC,aAAa,UAAU,OAAO,YAAY,EACtC,eAAc,aAAa,YAAc,aAAa,UAC1D,SAAS,MAAM,SAAW,QAAQ,oBAAoB,CAAC,CACzD,CACA,MACF,CACA,GAAI,MAAM,OAAO,QAAQ,kBAAkB,EAAG,CAAE,WAAW,EAAG,MAAQ,CACtE,GAAI,MAAM,OAAO,QAAQ,mBAAmB,EAAG,CAAE,UAAU,EAAG,MAAQ,CACtE,GAAI,MAAM,OAAO,QAAQ,mBAAmB,EAAG,CAC7C,UAAU,EACV,oBAAoB,EACpB,MACF,CACA,MAAM,SAAW,MAAM,OAAO,QAAQ,kBAAkB,EACxD,GAAI,SAAU,CAAE,MAAM,eAAe,EAAG,iBAAiB,QAAQ,EAAG,MAAQ,CAC5E,MAAM,cAAgB,MAAM,OAAO,QAAQ,wBAAwB,EACnE,GAAI,cAAe,CAGjB,GAFA,MAAM,eAAe,EACrB,MAAM,gBAAgB,EAClB,cAAc,SAAU,OAC5B,MAAM,QAAU,cAAc,QAAQ,iBAAiB,EACjD,QAAU,OAAO,GAAG,wBAAyB,OAAO,GAAG,aAAe,CAAC,EACvE,MAAQ,OAAO,cAAc,QAAQ,eAAiB,CAAC,EACvD,KAAO,qBAAqB,QAAQ,QAAQ,UAAW,QAAU,KAAK,EAC5E,gBAAgB,QAAS,IAAI,EAC7B,6BAA6B,QAAQ,QAAQ,UAAW,IAAI,EAC5D,oBAAoB,QAAQ,QAAQ,UAAW,IAAI,EACnD,MACF,CACA,MAAM,iBAAmB,MAAM,OAAO,QAAQ,2BAA2B,EACzE,GAAI,iBAAkB,CAGpB,GAFA,MAAM,eAAe,EACrB,MAAM,gBAAgB,EAClB,iBAAiB,SAAU,OAC/B,MAAM,QAAU,iBAAiB,QAAQ,oBAAoB,EACvD,QAAU,OAAO,GAAG,2BAA4B,OAAO,GAAG,aAAe,CAAC,EAC1E,MAAQ,OAAO,iBAAiB,QAAQ,kBAAoB,CAAC,EAC7D,KAAO,qBAAqB,QAAQ,QAAQ,UAAW,QAAU,KAAK,EAC5E,6BAA6B,QAAQ,QAAQ,UAAW,IAAI,EAC5D,oBAAoB,QAAQ,QAAQ,UAAW,IAAI,EACnD,MACF,CACA,MAAM,UAAY,MAAM,OAAO,QAAQ,oBAAoB,EAC3D,GAAI,UAAW,CAGb,GAFA,MAAM,eAAe,EACrB,MAAM,gBAAgB,EAClB,UAAU,UAAY,UAAU,OAAQ,OAC5C,UAAU,QAAQ,aAAe,UAAU,QAAQ,cAAgB,UAAU,YAC7E,MAAM,QAAU,yBAAyB,IAAI,OAAO,UAAU,QAAQ,SAAS,CAAC,EAC5E,yBAAyB,IAAI,OAAO,UAAU,QAAQ,SAAS,CAAC,EAChE,OAAO,oBAAoB,EAAE,KAAK,CAAC,CAAE,IAAK,IAAM,OAAO,KAAK,UAAU,IAAM,OAAO,UAAU,QAAQ,SAAS,CAAC,GAAG,KAAK,UAAY,CAAC,EACxI,GAAI,qBAAqB,UAAU,QAAQ,UAAW,QAAU,CAAC,GAAK,QAAS,OAC/E,WAAW,SAAS,EACpB,wBAAwB,UAAW,CAAC,EACpC,oBAAoB,UAAU,QAAQ,UAAW,yBAAyB,IAAI,OAAO,UAAU,QAAQ,SAAS,CAAC,GAAK,CAAC,EACvH,SAAS,QAAQ,OAAO,CAAC,EACzB,MACF,CACA,MAAM,YAAc,MAAM,OAAO,QAAQ,qBAAqB,EAC9D,GAAI,YAAa,CACf,iBAAiB,WAAW,EAC5B,MACF,CACA,MAAM,WAAa,MAAM,OAAO,QAAQ,oBAAoB,EAC5D,GAAI,WAAY,CACd,MAAM,KAAO,WAAW,QAAQ,mBAAmB,EAC7C,OAAS,GAAG,uBAAwB,IAAI,EAC9C,GAAI,OAAQ,CACV,OAAO,MAAQ,WAAW,QAAQ,WAClC,MAAM,KAAO,GAAG,mBAAoB,IAAI,EACpC,OACF,KAAK,IAAM,WAAW,QAAQ,SAAW,KAAK,IAC9C,KAAK,IAAM,WAAW,QAAQ,SAAW,KAAK,IAC9C,KAAK,KAAO,WAAW,QAAQ,UAAY,KAAK,KAChD,KAAK,MAAQ,WAAW,QAAQ,aAAe,KAAK,OAEtD,MAAM,SAAW,GAAG,wBAAyB,IAAI,EAC3C,SAAW,GAAG,wBAAyB,IAAI,EAC7C,UAAY,WAAW,QAAQ,UAAS,SAAS,YAAc,GAAG,WAAW,QAAQ,OAAO,OAC5F,UAAY,WAAW,QAAQ,UAAS,SAAS,YAAc,GAAG,WAAW,QAAQ,OAAO,OAChG,IAAI,qBAAsB,IAAI,EAAE,QAAQ,QAAU,OAAO,UAAU,OAAO,cAAe,SAAW,UAAU,CAAC,EAC/G,kBAAkB,CACpB,CACA,MACF,CACA,MAAM,UAAY,MAAM,OAAO,QAAQ,0BAA0B,EACjE,GAAI,UAAW,CACb,MAAM,KAAO,UAAU,QAAQ,mBAAmB,EAC5C,OAAS,GAAG,oBAAqB,IAAI,EAC3C,GAAI,OAAQ,CACV,OAAO,MAAQ,UAAU,QAAQ,gBACjC,MAAM,MAAQ,GAAG,qBAAsB,IAAI,EACrC,aAAgB,CAAE,GAAM,IAAK,GAAM,IAAK,GAAM,GAAI,EAAG,UAAU,QAAQ,eAAe,EACxF,OAAS,eACX,MAAM,MAAQ,aACd,IAAI,4BAA6B,IAAI,EAAE,QAAQ,QAAU,OAAO,UAAU,OAAO,cAAe,OAAO,QAAQ,mBAAqB,YAAY,CAAC,GAEnJ,IAAI,2BAA4B,IAAI,EAAE,QAAQ,QAAU,OAAO,UAAU,OAAO,cAAe,SAAW,SAAS,CAAC,EACpH,kBAAkB,CACpB,CACA,MACF,CACA,MAAM,WAAa,MAAM,OAAO,QAAQ,2BAA2B,EACnE,GAAI,WAAY,CACd,MAAM,KAAO,WAAW,QAAQ,mBAAmB,EAC7C,OAAS,GAAG,qBAAsB,IAAI,EACxC,SACF,OAAO,MAAQ,WAAW,QAAQ,iBAClC,IAAI,4BAA6B,IAAI,EAAE,QAAQ,QAAU,OAAO,UAAU,OAAO,cAAe,SAAW,UAAU,CAAC,EACtH,kBAAkB,GAEpB,MACF,CACA,MAAM,UAAY,MAAM,OAAO,QAAQ,0BAA0B,EACjE,GAAI,UAAW,CACb,MAAM,KAAO,UAAU,QAAQ,mBAAmB,EAC5C,OAAS,GAAG,oBAAqB,IAAI,EACvC,SACF,OAAO,MAAQ,UAAU,QAAQ,gBACjC,IAAI,2BAA4B,IAAI,EAAE,QAAQ,QAAU,OAAO,UAAU,OAAO,cAAe,SAAW,SAAS,CAAC,EACpH,kBAAkB,GAEpB,MACF,CACA,MAAM,UAAY,MAAM,OAAO,QAAQ,mBAAmB,EAC1D,GAAI,UAAW,CACb,MAAM,KAAO,UAAU,QAAQ,mBAAmB,EAC5C,MAAQ,GAAG,oBAAqB,IAAI,EAC1C,GAAI,MAAO,CACT,MAAM,IAAM,OAAO,MAAM,aAAa,KAAK,GAAK,MAAM,KAAO,EAAG,EAC1D,KAAO,OAAO,UAAU,QAAQ,SAAS,EACzC,OAAS,iBAAiB,MAAM,KAAK,EACrC,QAAU,OAAO,SAAS,MAAM,EAAI,OAAS,EACnD,IAAI,KAAO,IACP,KAAO,EACT,KAAO,QAAU,GAAM,GAAM,KAAK,MAAM,QAAU,MAAU,EAAG,EAAI,GAEnE,KAAO,SAAW,GAAM,IAAM,KAAK,OAAO,QAAU,MAAU,EAAG,EAAI,GAEvE,KAAO,KAAK,IAAI,IAAK,IAAI,EACzB,MAAM,MAAQ,KAAK,eAAe,QAAS,CAAC,sBAAuB,EAAG,YAAa,EAAK,CAAC,EACzF,MAAM,KAAK,EACX,kBAAkB,CACpB,CACA,MACF,CACA,MAAM,gBAAkB,MAAM,OAAO,QAAQ,yBAAyB,EACtE,GAAI,gBAAiB,CACnB,MAAM,UAAY,gBAAgB,QAAQ,4BAA4B,EACtE,GAAI,CAAC,UAAW,OAChB,MAAM,SAAW,CAAC,UAAU,UAAU,SAAS,SAAS,EACxD,kBAAkB,GAAG,iCAAkC,SAAS,EAAG,QAAQ,EAC3E,UAAU,UAAU,OAAO,UAAW,QAAQ,EAC9C,gBAAgB,aAAa,gBAAiB,OAAO,QAAQ,CAAC,EAC9D,MACF,CACA,MAAM,UAAY,MAAM,OAAO,QAAQ,mBAAmB,EAC1D,GAAI,UAAW,CACb,MAAM,KAAO,UAAU,QAAQ,iBAAiB,EAC1C,KAAO,UAAU,QAAQ,iBAAiB,EAChD,GAAI,CAAC,MAAQ,CAAC,KAAM,OACpB,MAAM,SAAW,CAAC,KAAK,UAAU,SAAS,SAAS,EACnD,IAAI,kBAAmB,IAAI,EAAE,QAAQ,OAAS,CAC5C,MAAM,SAAW,QAAU,MAAQ,SACjB,MAAM,UAAU,SAAS,SAAS,IAClC,UAAU,kBAAkB,GAAG,oBAAqB,KAAK,EAAG,QAAQ,EACtF,MAAM,UAAU,OAAO,UAAW,QAAQ,EAC1C,GAAG,oBAAqB,KAAK,GAAG,aAAa,gBAAiB,OAAO,QAAQ,CAAC,CAChF,CAAC,EACD,MACF,CACA,MAAM,YAAc,MAAM,OAAO,QAAQ,8BAA8B,EACvE,GAAI,aAAe,MAAM,OAAO,QAAQ,2EAA2E,EAAG,OACtH,MAAM,gBAAkB,MAAM,OAAO,QAAQ,uBAAuB,EACpE,GAAI,iBAAmB,sBAAsB,gBAAiB,KAAK,EAAG,CACpE,MAAM,eAAe,EACrB,sCAAsC,EACtC,mBAAmB,gBAAgB,IAAI,EACvC,MACF,CACA,GAAI,aAAe,CAAC,MAAM,OAAO,QAAQ,gCAAgC,EAAG,CAC1E,sCAAsC,EACtC,mBAAmB,YAAY,QAAQ,OAAO,EAC9C,MACF,CACA,MAAM,eAAiB,MAAM,OAAO,QAAQ,yBAAyB,EACrE,GAAI,eAAgB,CAClB,MAAM,QAAU,eAAe,QAAQ,qBAAqB,EACtD,MAAQ,GAAG,0BAA2B,OAAO,EACnD,GAAI,CAAC,MAAO,OACZ,MAAM,QAAU,KAAK,IAAI,EAAG,OAAO,MAAM,OAAS,CAAC,CAAC,EAC9C,MAAQ,OAAO,eAAe,QAAQ,gBAAkB,CAAC,EAC/D,MAAM,MAAQ,OAAO,KAAK,IAAI,EAAG,QAAU,KAAK,CAAC,EACjD,MAAM,cAAc,IAAI,MAAM,SAAU,CAAE,QAAS,EAAK,CAAC,CAAC,EAC1D,MACF,CACA,MAAM,aAAe,MAAM,OAAO,QAAQ,oBAAoB,EAC9D,GAAI,aAAc,CAChB,GAAI,aAAa,SAAU,OAC3B,MAAM,KAAO,aAAa,QAAQ,YAAY,EACxC,UAAY,MAAM,QAAQ,UAChC,GAAI,CAAC,UAAW,OAChB,MAAM,gBAAkB,OAAO,GAAG,uBAAwB,IAAI,GAAG,aAAe,CAAC,EAC3E,QAAU,yBAAyB,IAAI,OAAO,SAAS,CAAC,EAC1D,yBAAyB,IAAI,OAAO,SAAS,CAAC,EAC9C,gBACE,KAAO,qBAAqB,UAAW,OAAO,SAAW,CAAC,EAAI,OAAO,aAAa,QAAQ,WAAa,CAAC,CAAC,EAC/G,6BAA6B,UAAW,IAAI,EAC5C,oBAAoB,UAAW,IAAI,CACrC,CACF,CAAC,EAED,SAAS,iBAAiB,QAAS,OAAS,CAE1C,GAAI,CADe,MAAM,OAAO,QAAQ,0BAA0B,EACjD,OACjB,UAAU,EACV,MAAM,IAAM,GAAG,mBAAmB,EAC5B,KAAO,GAAG,oBAAoB,EAChC,KAAK,IAAI,UAAU,OAAO,SAAS,EACnC,OACA,KAAK,aAAa,gBAAiB,OAAO,EACtC,KAAK,QAAQ,gBAAiB,KAAK,aAAa,aAAc,KAAK,QAAQ,aAAa,EAAG,KAAK,aAAa,QAAS,KAAK,QAAQ,aAAa,GAE1J,EAAG,EAAI,EAEP,SAAS,iBAAiB,cAAe,OAAS,CAChD,MAAM,KAAO,MAAM,OAAO,UAAU,SAAS,EACzC,MAAM,aAAa,KAAK,IAAI,CAClC,EAAG,CAAE,QAAS,EAAK,CAAC,EAEpB,SAAS,iBAAiB,aAAc,OAAS,CAC/C,MAAM,KAAO,MAAM,OAAO,UAAU,SAAS,EACzC,MAAM,aAAa,KAAK,IAAI,CAClC,EAAG,CAAE,QAAS,EAAK,CAAC,EAEpB,SAAS,iBAAiB,UAAW,OAAS,CAC5C,MAAM,KAAO,MAAM,OAAO,UAAU,SAAS,EACzC,MAAM,aAAa,KAAK,IAAI,CAClC,CAAC,EAED,SAAS,iBAAiB,QAAS,OAAS,CAC1C,MAAM,cAAgB,MAAM,OAAO,UAAU,0BAA0B,EACvE,GAAI,CAAC,eAAiB,CAAC,sBAAsB,cAAe,KAAK,EAAG,OACpE,IAAI,OAAS,KACb,GAAI,CAAE,OAAS,IAAI,IAAI,cAAc,KAAM,OAAO,SAAS,IAAI,CAAG,MAAY,CAAC,CAC3E,CAAC,QAAU,CAAC,oBAAoB,MAAM,IAC1C,MAAM,eAAe,EACrB,MAAM,yBAAyB,EAC/B,UAAU,EACV,mBAAmB,cAAc,IAAI,EAAE,MAAM,IAAM,mBAAmB,cAAc,IAAI,CAAC,EAC3F,EAAG,EAAI,EAEP,OAAO,iBAAiB,WAAY,IAAM,CACxC,MAAM,IAAM,IAAI,IAAI,OAAO,SAAS,IAAI,EACpC,CAAC,GAAG,mBAAmB,GAAK,CAAC,oBAAoB,GAAG,GACxD,mBAAmB,IAAI,KAAM,CAAE,QAAS,EAAK,CAAC,EAAE,MAAM,IAAM,OAAO,SAAS,OAAO,CAAC,CACtF,CAAC,EAED,SAAS,iBAAiB,QAAS,OAAS,CAC1C,MAAM,KAAO,MAAM,OAAO,UAAU,SAAS,EAE7C,GADI,CAAC,MAAQ,KAAK,aAAa,UAAU,GAAK,CAAC,sBAAsB,KAAM,KAAK,GAC5E,KAAK,QAAQ,mBAAmB,EAAG,OACvC,IAAI,WAAa,KACjB,GAAI,CAAE,WAAa,IAAI,IAAI,KAAK,KAAM,OAAO,SAAS,IAAI,CAAG,MAAY,CAAC,CAExE,YACA,WAAW,SAAW,OAAO,SAAS,QACtC,WAAW,WAAW,QAAQ,IAC7B,WAAW,OAAS,aAAe,WAAW,OAAS,SAGxD,KAAK,QAAQ,0BAA0B,GACvC,YACA,WAAW,SAAW,OAAO,SAAS,QACtC,WAAW,WAAW,QAAQ,GAC9B,WAAW,OAAO,SAAS,QAAQ,GACnC,YAAY,WAAW,QAAQ,IAAM,YAAY,OAAO,SAAS,QAAQ,GAEtE,gBAAgB,KAAK,IAAI,GAC9B,cAAc,CAChB,EAAG,EAAI,EAEP,SAAS,iBAAiB,UAAW,OAAS,CAC5C,GAAI,MAAM,MAAQ,SAAU,CAC1B,UAAU,EACV,eAAe,EACf,qBAAqB,EACrB,MACF,CACA,MAAM,aAAe,YAAY,UAAU,SAAS,SAAS,EACzD,WACA,YAAY,UAAU,SAAS,cAAc,EAC3C,eACA,KACN,GAAI,MAAM,MAAQ,OAAS,CAAC,aAAc,OAE1C,MAAM,UAAY,IAChB,uIACA,YACF,EAAE,OAAO,SAAW,CAAC,QAAQ,QAAU,QAAQ,eAAe,EAAE,MAAM,EAEtE,GAAI,CAAC,UAAU,OAAQ,CACrB,MAAM,eAAe,EACrB,aAAa,MAAM,CAAE,cAAe,EAAK,CAAC,EAC1C,MACF,CAEA,MAAM,MAAQ,UAAU,CAAC,EACnB,KAAO,UAAU,UAAU,OAAS,CAAC,EACvC,SAAS,gBAAkB,cAC7B,MAAM,eAAe,GACpB,MAAM,SAAW,KAAO,OAAO,MAAM,CAAE,cAAe,EAAK,CAAC,GACpD,MAAM,UAAY,SAAS,gBAAkB,OACtD,MAAM,eAAe,EACrB,KAAK,MAAM,CAAE,cAAe,EAAK,CAAC,GACzB,CAAC,MAAM,UAAY,SAAS,gBAAkB,OACvD,MAAM,eAAe,EACrB,MAAM,MAAM,CAAE,cAAe,EAAK,CAAC,EAEvC,CAAC,EACD,SAAS,iBAAiB,SAAU,OAAS,CAC3C,MAAM,KAAO,MAAM,OAAO,UAAU,gBAAgB,EACpD,GAAI,CAAC,KAAM,OACX,MAAM,eAAiB,MAAM,WAAW,OAAS,GAAG,uBAAwB,IAAI,GAAG,MACnF,GAAI,iBAAmB,MAAQ,iBAAmB,KAChD,GAAI,CAAE,aAAa,QAAQ,YAAa,cAAc,CAAG,MAAY,CAAC,CAIxE,MAAM,YAAc,IAAI,IAAI,OAAO,SAAS,IAAI,EAC1C,WAAa,GAAG,+CAA+C,EACjE,aACF,YAAY,aAAa,IAAI,OAAQ,GAAG,oBAAqB,UAAU,EAAE,KAAK,EAC9E,YAAY,aAAa,IAAI,QAAS,GAAG,qBAAsB,UAAU,EAAE,KAAK,GAElF,IAAI,SAAW,GAAG,0BAA2B,IAAI,EAC5C,WACH,SAAW,SAAS,cAAc,OAAO,EACzC,SAAS,KAAO,SAChB,SAAS,KAAO,YAChB,KAAK,YAAY,QAAQ,GAE3B,SAAS,MAAQ,GAAG,YAAY,QAAQ,GAAG,YAAY,MAAM,GAAG,YAAY,IAAI,GAChF,UAAU,EACV,sCAAsC,EACtC,KAAK,UAAU,IAAI,eAAe,EAClC,cAAc,CAChB,EAAG,EAAI,EACP,SAAS,iBAAiB,SAAU,MAAM,OAAS,CACjD,MAAM,KAAO,MAAM,OAAO,QAAQ,6CAA6C,EAC/E,GAAI,CAAC,MAAQ,CAAC,MAAM,WAAW,QAAQ,mBAAmB,EAAG,OAC7D,MAAM,eAAe,EACrB,MAAM,UAAY,MAAM,UAClB,aAAe,YACrB,mBAAmB,SAAS,EAC5B,UAAU,SAAW,GACrB,GAAI,CACF,MAAM,eAAe,EACrB,MAAM,OAAS,MAAM,qBAAqB,MAAM,QAAQ,EAAG,CAAE,iBAAkB,EAAK,CAAC,EACrF,WAAW,OAAO,KAAM,OAAO,MAAM,EACrC,MAAM,iBAAmB,iBAAiB,OAAO,IAAI,EACrD,GAAI,iBAAkB,CACpB,cAAc,EACd,OAAO,SAAS,KAAO,iBACvB,MACF,CACA,IAAI,eAAiB,GAAG,wCAAyC,IAAI,EAChE,iBACH,eAAiB,SAAS,cAAc,OAAO,EAC/C,eAAe,KAAO,SACtB,eAAe,KAAO,WACtB,KAAK,YAAY,cAAc,GAEjC,eAAe,MAAQ,UAAU,OAAS,GAC1C,cAAc,EACd,KAAK,OAAO,CACd,OAAS,MAAO,CACd,UAAU,SAAW,GACrB,UAAU,gBAAgB,WAAW,EACrC,UAAU,UAAU,OAAO,YAAY,EACvC,MAAM,aAAe,GAAG,yBAA0B,SAAS,EACvD,eAAc,aAAa,YAAc,aAAa,UAC1D,SAAS,MAAM,SAAW,QAAQ,oBAAoB,CAAC,CACzD,CACF,CAAC,EACD,MAAM,gBAAkB,OAAO,WAAW,4CAA4C,EAChF,qBAAuB,4IACvB,qBAAuB,gGACvB,uBAAyB,IAAM,IAAI,oBAAoB,EAAE,QAAQ,QAAU,OAAO,UAAU,OAAO,YAAY,CAAC,EACtH,gBAAgB,mBAAmB,SAAU,OAAS,CAAM,MAAM,SAAS,uBAAuB,CAAG,CAAC,EACtG,SAAS,iBAAiB,cAAe,OAAS,CAC5C,gBAAgB,SAAW,MAAM,cAAgB,SACrD,MAAM,OAAO,QAAQ,oBAAoB,GAAG,UAAU,IAAI,YAAY,CACxE,CAAC,EACD,SAAS,iBAAiB,aAAc,OAAS,CAC/C,GAAI,gBAAgB,SAAW,MAAM,cAAgB,QAAS,OAC9D,MAAM,OAAS,MAAM,OAAO,QAAQ,oBAAoB,EACxD,GAAI,CAAC,OAAQ,OACb,MAAM,KAAO,MAAM,eACf,CAAC,MAAQ,CAAC,OAAO,SAAS,IAAI,IAAG,OAAO,UAAU,OAAO,YAAY,CAC3E,CAAC,EACD,8BAA8B,EAC9B,MAAM,yBAA2B,0BAA0B,EAErD,kBAAoB,IAAI,QAC9B,SAAS,iBAAiB,MAAQ,SAAU,CAC1C,IAAI,gBAAiB,KAAK,EAAE,QAAQ,MAAQ,CAC1C,GAAI,kBAAkB,IAAI,IAAI,EAAG,OACjC,kBAAkB,IAAI,IAAI,EAC1B,MAAM,QAAU,KAAK,QAAQ,wBAAwB,EAC/C,SAAW,KAAK,MAAM,GAAG,sBAAuB,OAAO,GAAG,aAAe,IAAI,EAChF,OAAO,SAAW,CAAC,OAAO,QAAQ,OAAS,EAAE,EAAE,SAAS,UAAU,GAAK,OAAO,QAAQ,OAAS,CAAC,EAAI,CAAC,EAClG,OAAS,GAAG,wBAAyB,IAAI,EACzC,aAAe,IAAI,iBAAkB,IAAI,EACzC,OAAS,GAAG,wBAAyB,IAAI,EACzC,WAAa,GAAG,6BAA8B,IAAI,EAClD,WAAa,GAAG,+BAAgC,IAAI,EACpD,OAAS,GAAG,wBAAyB,IAAI,EACzC,aAAe,GAAG,gCAAiC,OAAO,EAC1D,MAAQ,GAAG,uBAAwB,OAAO,EAC1C,WAAa,SAAS,QAAQ,kBAAoB,OACxD,SAAS,eAAgB,CACvB,MAAM,QAAU,aAAa,IAAI,OAAS,GAAG,gBAAiB,KAAK,GAAG,KAAK,EACrE,QAAU,SAAS,KAAK,MAAQ,KAAK,QAAQ,MAAM,CAAC,MAAO,QAAU,QAAU,QAAQ,KAAK,CAAC,CAAC,GAAK,SAAS,CAAC,EACnH,GAAI,CAAC,QAAS,OACd,OAAO,MAAQ,QAAQ,GACvB,MAAM,eAAiB,GAAG,iBAAiB,IAAI,OAAO,OAAO,QAAQ,EAAE,CAAC,CAAC,KAAM,MAAM,EACjF,gBAAgB,QAAQ,iBAAmB,QAAW,yBAAyB,QAAQ,GAAI,eAAe,QAAQ,cAAc,EACpI,MAAM,eAAiB,yBAAyB,QAAQ,EAAE,EACpD,YAAc,CAAC,YAAc,EAAQ,QAAQ,WAAc,EAAE,iBAAmB,MAAQ,gBAAkB,GAChH,MAAM,YAAc,YAAY,QAAQ,KAAK,EAC7C,IAAI,iDAAkD,OAAO,EAAE,QAAQ,cAAgB,CACrF,aAAa,OAAS,aAAa,QAAQ,kBAAoB,OAAO,QAAQ,EAAE,CAClF,CAAC,EACD,MAAM,UAAY,GAAG,uDAAwD,OAAO,EAC9E,aAAe,QAAQ,gBAAgB,eAAiB,QAAQ,eAWtE,GAVI,WAAa,cAAc,MAC7B,UAAU,QAAQ,SAAW,aAAa,IAC1C,UAAU,QAAQ,YAAc,GAChC,UAAU,IAAM,gBAAgB,QAAQ,UAAY,QAAQ,gBAAgB,KAAO,QAAQ,gBAAgB,KAAO,aAAa,KAAO,UAAU,KAE9I,WAAa,gBAAgB,QAAQ,eACvC,UAAU,QAAQ,QAAU,eAAe,QAAQ,aACnD,UAAU,QAAQ,WAAa,cAAc,eAAe,QAAQ,aAAc,CAAC,IAAK,IAAK,IAAI,CAAC,GAEpG,uBAAuB,OAAO,EAC1B,CAAC,OAAQ,OACb,OAAO,SAAW,CAAC,YACnB,OAAO,QAAQ,mBAAqB,OAAO,WAAW,EACtD,WAAW,YAAc,QAAQ,aAAa,EAC1C,aAAY,WAAW,OAAS,IAChC,cAAa,OAAO,QAAQ,aAAe,WAAW,aAC1D,OAAO,QAAQ,UAAY,QAAQ,GACnC,OAAO,QAAQ,aAAe,QAAQ,OAAS,GAC/C,OAAO,QAAQ,UAAY,QAAQ,OAAS,EACxC,gBAAgB,QAAQ,iBAAmB,OAAW,OAAO,QAAQ,eAAiB,eAAe,QAAQ,eAC5G,OAAO,OAAO,QAAQ,eACvB,SACF,OAAO,QAAQ,UAAY,QAAQ,GACnC,OAAO,QAAQ,aAAe,QAAQ,OAAS,IAE7C,eAAc,aAAa,OAAS,YAAc,aACtD,aAAa,QAAS,YAAc,eAAiB,IAAI,EACzD,MAAM,cAAgB,GAAG,oBAAqB,IAAI,EAC9C,gBACE,iBAAmB,MACrB,cAAc,IAAM,OAAO,cAAc,EACzC,cAAc,QAAQ,eAAiB,OAAO,cAAc,EAC5D,cAAc,MAAQ,KAAK,IAAI,EAAG,KAAK,IAAI,OAAO,cAAc,OAAS,CAAC,EAAG,KAAK,IAAI,EAAG,cAAc,CAAC,CAAC,IAEzG,cAAc,IAAM,KACpB,OAAO,cAAc,QAAQ,iBAGjC,MAAM,QAAU,GAAG,qBAAsB,IAAI,EACzC,UACF,QAAQ,QAAQ,UAAY,QAAQ,GACpC,QAAQ,QAAQ,mBAAqB,OAAO,WAAW,EACnD,gBAAgB,QAAQ,iBAAmB,OAAW,QAAQ,QAAQ,eAAiB,eAAe,QAAQ,eAC7G,OAAO,QAAQ,QAAQ,gBAE9B,oCAAoC,oBAAoB,CAAC,EACzD,MAAM,IAAM,IAAI,IAAI,SAAS,IAAI,EAAG,IAAI,aAAa,IAAI,UAAW,QAAQ,EAAE,EAAG,QAAQ,aAAa,CAAC,EAAG,GAAI,GAAG,CACnH,CACA,MAAM,iBAAmB,IAAI,IAAI,SAAS,IAAI,EAAE,aAAa,IAAI,SAAS,EACpE,eAAiB,iBAAmB,SAAS,KAAK,SAAW,OAAO,QAAQ,EAAE,IAAM,OAAO,gBAAgB,CAAC,EAAI,KAClH,gBACF,aAAa,QAAQ,CAAC,MAAO,QAAU,CACrC,MAAM,cAAgB,eAAe,QAAQ,KAAK,EAClD,IAAI,QAAS,KAAK,EAAE,QAAQ,OAAS,CAAE,MAAM,QAAU,MAAM,QAAU,aAAe,CAAC,CACzF,CAAC,EAEH,cAAc,EACd,KAAK,iBAAiB,SAAU,aAAa,EAC7C,KAAK,iBAAiB,SAAU,MAAM,OAAS,CAE7C,GADA,MAAM,eAAe,EACjB,YAAc,QAAQ,QAAQ,qBAAuB,OAAQ,OACjE,MAAM,cAAgB,GAAG,oBAAqB,IAAI,EAC5C,QAAU,yBAAyB,IAAI,OAAO,OAAO,KAAK,CAAC,EAC7D,yBAAyB,IAAI,OAAO,OAAO,KAAK,CAAC,EACjD,OAAO,oBAAoB,EAAE,KAAK,CAAC,CAAE,IAAK,IAAM,OAAO,KAAK,UAAU,IAAM,OAAO,OAAO,KAAK,CAAC,GAAG,KAAK,UAAY,CAAC,EACnH,UAAY,OAAO,eAAe,OAAS,CAAC,EACrC,qBAAqB,OAAO,MAAO,QAAU,SAAS,GACvD,UACZ,WAAW,MAAM,EACjB,wBAAwB,OAAQ,SAAS,EACzC,oBAAoB,OAAO,MAAO,yBAAyB,IAAI,OAAO,OAAO,KAAK,CAAC,GAAK,OAAO,GAAG,oBAAqB,IAAI,GAAG,OAAS,CAAC,CAAC,EACzI,SAAS,QAAQ,OAAO,CAAC,EAC3B,CAAC,CACH,CAAC,CACH,CACA,iBAAiB,EACjB,SAAS,cAAc,KAAM,SAAU,CACrC,MAAM,MAAQ,KAAK,IAAI,EAAG,KAAK,IAAI,IAAK,OAAO,QAAQ,GAAK,CAAC,CAAC,EACxD,YAAc,MAAQ,IACtB,WAAa,GAAK,YAClB,MAAQ,KAAK,IAAI,GAAI,KAAK,IAAI,IAAK,WAAa,CAAC,CAAC,EAClD,KAAO,MAAQ,GACf,OAAS,KAAK,IAAI,GAAI,KAAK,IAAI,IAAK,UAAU,CAAC,EAE/C,MAAQ,GADS,KAAK,MAAM,MAAQ,EAAE,EAAI,EACjB,KACzB,KAAO,GAAG,sBAAuB,IAAI,EACrC,UAAY,GAAG,4BAA6B,IAAI,EAChD,KAAO,GAAG,sBAAuB,IAAI,EACrC,UAAY,GAAG,4BAA6B,IAAI,EAChD,IAAM,GAAG,qBAAsB,IAAI,EACnC,WAAa,GAAG,uBAAwB,IAAI,EAC5C,gBAAkB,GAAG,0BAA2B,IAAI,EACpD,UAAY,GAAG,4BAA6B,IAAI,EAItD,GAHI,MAAM,KAAK,aAAa,QAAS,OAAO,KAAK,IAAI,EAAG,WAAW,CAAC,CAAC,EACjE,WAAW,UAAU,aAAa,QAAS,OAAO,KAAK,IAAI,EAAG,WAAW,CAAC,CAAC,EAC3E,MAAM,KAAK,aAAa,IAAK,OAAO,KAAK,CAAC,EAC1C,UAAW,CACb,MAAM,OAAS,MAAQ,KACnB,UAAU,QAAQ,YAAY,IAAM,QACtC,UAAU,aAAa,KAAM,OAAO,MAAQ,CAAC,CAAC,EAC9C,UAAU,aAAa,KAAM,OAAO,MAAQ,CAAC,CAAC,GAE9C,UAAU,aAAa,IAAK,OAAO,MAAM,CAAC,CAE9C,CACI,MACF,IAAI,aAAa,IAAK,OAAO,IAAI,CAAC,EAClC,IAAI,aAAa,QAAS,OAAO,KAAK,IAAI,EAAG,IAAM,IAAI,CAAC,CAAC,GAEvD,YAAY,WAAW,aAAa,YAAa,aAAa,MAAM,KAAK,EACzE,kBACF,gBAAgB,aAAa,IAAK,KAAK,EACvC,gBAAgB,aAAa,QAAS,IAAI,GAExC,YAAW,UAAU,YAAc,MACzC,CAEA,SAAS,iBAAiB,MAAO,CAC/B,MAAM,WAAa,OAAO,KAAK,EAAE,KAAK,EACnC,QAAQ,mBAAoB,OAAS,OAAO,MAAM,WAAW,CAAC,EAAI,IAAI,CAAC,EACvE,QAAQ,mBAAoB,OAAS,OAAO,MAAM,WAAW,CAAC,EAAI,IAAI,CAAC,EACvE,QAAQ,UAAW,GAAG,EACzB,MAAO,4BAA4B,KAAK,UAAU,EAAI,OAAO,UAAU,EAAI,GAC7E,CACA,SAAS,uBAAuB,MAAO,KAAM,CAC3C,MAAM,UAAY,OAAS,KAAO,EAAI,EAEtC,OAAO,MAAM,eAAe,OAAW,MAAQ,GAAK,MAAQ,GAAM,IAAM,CAAC,UACrE,CAAC,yBAA0B,CAAC,EAAI,CAAC,sBAAuB,SAAS,CAAC,CACxE,CACA,SAAS,mBAAoB,CAC3B,IAAI,mBAAmB,EAAE,QAAQ,MAAQ,CAEvC,GADA,KAAK,UAAU,IAAI,mBAAmB,EAClC,KAAK,QAAQ,OAAS,SAAU,CAClC,MAAM,SAAW,GAAG,uBAAwB,IAAI,EAAS,KAAO,GAAG,mBAAoB,IAAI,EACrF,CAAC,OAAQ,MAAO,MAAO,SAAS,EAAI,SAAS,MAAM,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,QAAU,QAAU,EAAI,MAAQ,OAAO,KAAK,CAAC,EACtH,OAAS,OAAO,KAAK,KAAK,EAAS,cAAgB,OAAS,MAAa,MAAQ,KAAK,MAAO,OAAS,cAAiB,GAAI,EAAI,GAAU,MAAQ,OAAS,OAAc,WAAa,YAAc,SAAW,OAAS,OAAS,EAAS,SAAW,OAAS,WAAkB,KAAO,YAAc,SAAW,OAAO,KAAK,EAAI,SAAY,OAAO,KAAK,EAAI,SAAY,EACvW,UAAY,GAAG,yBAA0B,IAAI,EAC/C,YACF,UAAU,YAAc,KAAK,OAAS,KAClC,YAAY,WAAW,YACtB,YAAc,QAAU,YAAY,WAAW,aAAe,YAAY,WAAW,eAE5F,MAAM,SAAW,GAAG,wBAAyB,IAAI,EAC3C,SAAW,GAAG,wBAAyB,IAAI,EAC7C,WAAU,SAAS,YAAc,GAAG,KAAK,GAAG,OAC5C,WAAU,SAAS,YAAc,GAAG,KAAK,GAAG,OAChD,GAAG,qBAAsB,IAAI,EAAE,YAAc,GAAG,MAAM,MAAO,GAAG,eAAgB,IAAI,EAAE,YAAc,MAAM,eAAe,OAAU,CAAC,sBAAsB,CAAC,CAAC,EAAG,GAAG,qBAAsB,IAAI,EAAE,YAAc,KAAK,OAAS,KAAO,gBAAgB,KAAK,EAAI,QAAS,GAAG,eAAgB,IAAI,EAAE,YAAc,KAAK,MAAM,KAAK,EAAE,eAAe,OAAU,CAAC,sBAAsB,CAAC,CAAC,EAAG,GAAG,kBAAmB,IAAI,EAAE,YAAc,SAAS,eAAe,OAAU,CAAC,sBAAsB,CAAC,CAAC,EAAG,GAAG,wBAAyB,IAAI,EAAE,YAAc,YAAY,WAAW,eAAgB,GAAG,cAAe,IAAI,EAAE,YAAc,OAAO,KAAK,eAAe,OAAU,CAAC,sBAAsB,CAAC,CAAC,CAAC,GAAI,GAAG,oBAAqB,IAAI,EAAE,YAAc,YAAc,QAAW,YAAY,WAAW,aAAiB,YAAY,WAAW,cAAgB,GAAG,4BAA6B,IAAI,EAAE,YAAc,GAAG,MAAM,iBAAc,KAAK,kBAAe,cAAc,eAAe,OAAU,CAAC,sBAAsB,CAAC,CAAC,CAAC,QAC/8B,KAAO,CACL,MAAM,KAAO,OAAO,GAAG,oBAAqB,IAAI,EAAE,KAAK,EACjD,MAAQ,OAAO,GAAG,qBAAsB,IAAI,EAAE,KAAK,EACnD,KAAO,GAAG,oBAAqB,IAAI,EAAE,MACrC,YAAc,GAAG,oBAAqB,IAAI,EAC1C,aAAe,GAAG,2BAA4B,IAAI,EAClD,KAAO,iBAAiB,YAAY,KAAK,EACzC,WAAa,iBAAiB,aAAa,KAAK,EAChD,cAAgB,KAAO,MACvB,UAAY,cAAgB,IAC5B,OAAS,OAAS,KAAO,WAAa,UAAa,KAAO,cAAiB,IAC3E,UAAY,GAAG,0BAA2B,IAAI,EAC9C,WAAa,GAAG,2BAA4B,IAAI,EACtD,UAAU,OAAS,OAAS,KAC5B,WAAW,OAAS,OAAS,KAC7B,MAAM,YAAc,OAAS,KAAO,WAAa,KAC3C,MAAQ,OAAO,SAAS,WAAW,GAAK,YAAc,GAAK,OAAO,SAAS,MAAM,GAAK,OAAS,GAAK,cAAgB,EAC1H,YAAY,aAAa,eAAgB,OAAO,OAAS,MAAQ,CAAC,KAAK,CAAC,EACxE,aAAa,aAAa,eAAgB,OAAO,OAAS,MAAQ,CAAC,KAAK,CAAC,EACzE,MAAM,WAAa,GAAG,2BAA4B,IAAI,EAClD,aAAY,WAAW,OAAS,OACpC,GAAG,sBAAuB,IAAI,EAAE,YAAc,MAAQ,uBAAuB,OAAQ,IAAI,EAAI,SAC7F,GAAG,2BAA4B,IAAI,EAAE,YAAc,OAAS,KAAO,KAAQ,KAAK,OAAS,KAAO,gBAAgB,MAAM,EAAI,QAC1H,GAAG,4BAA6B,IAAI,EAAE,YAAc,OAAS,KAAQ,YAAY,WAAW,eAAmB,YAAY,WAAW,cACtI,GAAG,6BAA8B,IAAI,EAAE,aAAe,KAAK,MAAM,cAAgB,EAAE,EAAI,IAAI,eAAe,OAAU,CAAC,sBAAsB,CAAC,CAAC,EAC7I,GAAG,uBAAwB,IAAI,EAAE,YAAc,UAAU,eAAe,OAAU,CAAC,sBAAsB,CAAC,CAAC,EAC3G,MAAM,eAAiB,GAAG,0BAA2B,IAAI,EACrD,iBACF,eAAe,YAAc,OAC7B,eAAe,aAAa,MAAO,KAAK,GAE1C,MAAM,QAAU,GAAG,kBAAmB,IAAI,EACtC,UAAS,QAAQ,OAAS,CAAC,OAC/B,cAAc,KAAM,MAAS,OAAS,KAAO,WAAa,OAAU,CAAC,EACrE,MAAM,QAAU,GAAG,uBAAwB,IAAI,EAC3C,UAAS,QAAQ,OAAS,CAAC,QAAU,OAAS,KAAO,WAAa,SAAW,IACnF,CACF,CAAC,CACH,CACA,SAAS,qBAAqB,MAAQ,SAAU,CAC9C,IAAI,mDAAoD,KAAK,EAAE,QAAQ,SAAW,CAC5E,QAAQ,QAAQ,kBAAoB,SACxC,QAAQ,QAAQ,gBAAkB,OAClC,QAAQ,iBAAiB,QAAS,iBAAiB,EACrD,CAAC,CACH,CACA,SAAS,kCAAmC,CAC1C,MAAM,OAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM,EACnD,UAAY,OAAO,IAAI,MAAM,EAC7B,WAAa,OAAO,IAAI,OAAO,EACrC,GAAI,CAAC,WAAa,CAAC,WAAY,OAC/B,MAAM,oBAAsB,CAAC,OAAQ,WAAa,CAChD,GAAI,CAAC,QAAU,WAAa,KAAM,OAAO,KACzC,MAAM,UAAY,OAAO,QAAQ,EAKjC,OAJc,IAAI,SAAU,MAAM,EAAE,KAAK,QACvC,OAAO,QAAU,UAChB,OAAO,SAAS,SAAS,GAAK,OAAO,OAAO,KAAK,IAAM,SACzD,GACa,OAAS,IACzB,EACA,IAAI,+CAA+C,EAAE,QAAQ,MAAQ,CACnE,MAAM,KAAO,GAAG,oBAAqB,IAAI,EACnC,MAAQ,GAAG,qBAAsB,IAAI,EACrC,oBAAsB,oBAAoB,KAAM,SAAS,EACzD,qBAAuB,oBAAoB,MAAO,UAAU,EAC9D,sBACF,KAAK,MAAQ,oBACb,IAAI,2BAA4B,IAAI,EAAE,QAAQ,QAAU,OAAO,UAAU,OAAO,cAAe,OAAO,QAAQ,kBAAoB,mBAAmB,CAAC,GAEpJ,uBACF,MAAM,MAAQ,qBACd,IAAI,4BAA6B,IAAI,EAAE,QAAQ,QAAU,OAAO,UAAU,OAAO,cAAe,OAAO,QAAQ,mBAAqB,oBAAoB,CAAC,EAE7J,CAAC,CACH,CACA,qBAAqB,EACrB,iCAAiC,EACjC,kBAAkB,EAClB,uBAAuB,EACvB,SAAS,iBAAiB,uBAAwB,OAAS,CACzD,8BAA8B,MAAM,MAAM,EAC1C,iBAAiB,MAAM,MAAM,EAC7B,qBAAqB,MAAM,MAAM,EACjC,iCAAiC,EACjC,kBAAkB,EAClB,mBAAmB,KAAK,IAAI,EAC5B,uBAAuB,MAAM,MAAM,EACnC,oCAAoC,oBAAoB,CAAC,EACzD,eAAe,EACf,yBAAyB,CAC3B,CAAC,EACD,MAAM,aAAe,oEACA,IAAI,iBAAiB,WAAa,CAC/B,UAAU,KAAK,UAAY,CAAC,GAAG,SAAS,UAAU,EAAE,KAAK,MACzE,SAAS,OAAO,UAAU,YAAY,GAAK,KAAK,aAAa,SAAS,6DAA6D,EAAU,GAC7I,KAAK,WAAa,KAAK,aAAqB,GACzC,KAAK,UAAU,YAAY,GAAK,EAAQ,KAAK,gBAAgB,YAAY,CACjF,CAAC,GACiB,yBAAyB,EAAE,CAChD,CAAC,EACY,QAAQ,SAAS,KAAM,CAAE,UAAW,GAAM,QAAS,EAAK,CAAC,EACtE,yBAAyB,GAAG,EAC5B,OAAO,WAAW,qBAAsB,IAAI,EAC5C,wBAAwB,EACxB,uBAAuB,EACvB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,OAAO,iBAAiB,OAAQ,IAAM,CACpC,eAAe,CACjB,CAAC,EACD,OAAO,iBAAiB,WAAY,OAAS,CAC3C,SAAS,MAAM,UAAU,OAAO,iBAAiB,EACjD,qBAAqB,EACrB,eAAe,EACf,2BAA2B,EACvB,MAAM,WAAW,YAAY,EAAE,MAAM,IAAM,CAAC,CAAC,CACnD,CAAC,EACD,oBAAoB,EACpB,2BAA2B,EAC3B,MAAM,WAAa,gBAAgB,KAAK,OAAO,SAAS,QAAQ,EAAI,KAAO,GAC3E,GAAI,CAAE,aAAa,WAAW,SAAS,CAAG,MAAY,CAAC,CACvD,oBAAoB,YAAc,KAAK,QAAU,KAAO,KAAO,KAAM,CAAE,UAAW,EAAM,CAAC,EACzF,uBAAuB,EACvB,yBAAyB,EACzB,eAAe,EACf,gBAAgB,EAChB,MAAM,iBAAmB,OAAO,aAAa,8BAA8B,EACrE,qBAAuB,IAAM,CACjC,IAAI,MACJ,GAAI,CAAE,MAAQ,aAAa,QAAQ,SAAS,CAAG,MAAY,CAAC,CACxD,QAAU,KAAO,QAAU,MAC/B,KAAK,QAAQ,MAAQ,kBAAkB,QAAU,OAAS,QAC1D,uBAAuB,EACvB,eAAe,EACf,gBAAgB,EAClB,EACA,kBAAkB,iBAAiB,SAAU,oBAAoB,EACjE,OAAO,iBAAiB,WAAY,oBAAoB,EACxD,MAAM,sBAAwB,IAAM,mBAAmB,EACpD,KAAK,IAAM,CAAM,0BAA0B,6BAA6B,CAAG,CAAC,EAC5E,MAAM,IAAM,CAAM,0BAA0B,6BAA6B,CAAG,CAAC,EAC5E,yBAA0B,sBAAsB,GAEnC,OAAO,sBAAwB,UAAY,OAAO,WAAW,SAAU,GAAG,IAClF,sBAAuB,CAAE,QAAS,IAAK,CAAC,EAIjD,SAAS,aAAa,MAAO,eAAgB,CAC3C,IAAI,mBAAoB,KAAK,EAAE,QAAQ,QAAU,CAC/C,MAAM,UAAY,OAAO,OAAO,QAAQ,mBAAqB,CAAC,EACxD,SAAW,gBAAmB,MAAwC,iBAAmB,GAAK,IAAM,OAAO,cAAc,EACzH,KAAO,OAAO,SAAS,QAAQ,GAAK,SAAW,GAAK,UAAY,UACtE,OAAO,OAAS,CAAC,KACb,MAAM,IAAI,yBAA0B,MAAM,EAAE,QAAQ,OAAS,CAAE,MAAM,YAAc,OAAO,QAAQ,CAAG,CAAC,CAC5G,CAAC,CACH,CAEA,MAAM,kBAAoB,GAE1B,SAAS,yBAAyB,IAAM,IAAI,KAAQ,CAClD,MAAM,MAAQ,IAAI,KAAK,IAAI,QAAQ,EAAI,KAAW,EAClD,OAAO,kBAAoB,IAAM,MAAM,YAAY,EAAI,GAAK,MAAM,cAAc,EAClF,CAGA,SAAS,UAAU,UAAY,EAAG,IAAM,IAAI,KAAQ,CAClD,OAAO,IAAI,KAAK,IAAI,QAAQ,EAAI,EAAI,KAAU,UAAY,KAAQ,EAAE,YAAY,EAAE,MAAM,EAAG,EAAE,CAC/F,CAEA,SAAS,cAAc,KAAM,KAAM,KAAM,CACvC,MAAM,KAAO,KAAK,QACZ,OAAS,OAAS,KAAO,KAAO,KAChC,UAAY,KAAK,UAAY,IAAI,MAAM,GAAG,EAAE,OAAO,OAAO,EAEhE,GAAI,SAAS,SAAS,UAAU,CAAC,CAAC,EAAG,OAAO,KAAK,UAAU,MAAM,EAAE,GAAK,KAAK,QAAQ,MAAM,EAAE,GAAK,GAClG,GAAI,MAAQ,GAAK,SAAS,SAAS,UAAU,CAAC,CAAC,EAAG,OAAO,KAAK,aAAa,MAAM,EAAE,GAAK,KAAK,UAAU,MAAM,EAAE,GAAK,GACpH,GAAI,MAAQ,EAAG,OAAO,KAAK,QAAQ,MAAM,EAAE,GAAK,GAEhD,GAAI,KAAO,KAAO,KAAK,QAAQ,MAAM,EAAE,EAAG,OAAO,KAAK,QAAQ,MAAM,EAAE,EACtE,MAAM,MAAQ,KAAK,MAAM,KAAO,EAAE,EAC5B,QAAU,KAAO,GACjB,SAAW,MAAQ,GAAG,KAAK,IAAI,KAAK,QAAQ,MAAM,EAAE,CAAC,GAAK,GAC1D,WAAa,SAAW,CAAC,MAAQ,GAAG,OAAO,IAAI,KAAK,UAAU,MAAM,EAAE,CAAC,GAAK,GAC5E,KAAO,CAAC,SAAU,UAAU,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAC5D,OAAQ,KAAK,SAAS,MAAM,EAAE,GAAK,IAAI,QAAQ,SAAU,IAAI,CAC/D,CAEA,SAAS,0BAA2B,CAClC,MAAM,KAAO,yBAAyB,EACtC,IAAI,2BAA2B,EAAE,QAAQ,MAAQ,CAC/C,MAAM,GAAK,GAAG,+BAAgC,IAAI,EAC5C,GAAK,GAAG,+BAAgC,IAAI,EAC9C,KAAI,GAAG,YAAc,cAAc,KAAM,KAAM,IAAI,GACnD,KAAI,GAAG,YAAc,cAAc,KAAM,KAAM,IAAI,EACzD,CAAC,CACH,CAEA,yBAAyB,EACzB,OAAO,YAAY,IAAM,CAAM,SAAS,kBAAoB,UAAU,yBAAyB,CAAG,EAAG,GAAK,EAC1G,SAAS,iBAAiB,mBAAoB,IAAM,CAAM,SAAS,kBAAoB,WAAW,yBAAyB,CAAG,CAAC,EAI/H,MAAM,gBAAkB,GAAG,0BAA0B,EAC/C,qBAAuB,mBACvB,qBAAuB,aACvB,sBAAwB,GACxB,4BAA8B,MAAc,GAElD,SAAS,qBAAsB,CAC7B,MAAM,MAAQ,EAAQ,aAAa,KAAK,EACxC,IAAI,yBAAyB,EAAE,QAAQ,MAAQ,CAAE,KAAK,OAAS,CAAC,KAAO,CAAC,CAC1E,CAEA,SAAS,kBAAkB,IAAK,MAAO,CACrC,GAAI,CACF,GAAI,QAAU,OAAW,OAAO,OAAO,aAAa,QAAQ,GAAG,EAC/D,OAAO,aAAa,QAAQ,IAAK,KAAK,CACxC,MAAY,CAAC,CACb,OAAO,IACT,CAEA,SAAS,eAAe,KAAM,CAC5B,MAAM,KAAO,KAAK,OAAS,KAAO,KAAO,KACzC,OAAO,iBAAiB,QAAQ,GAAG,IAAI,GAAG,IAAI,EAAE,GAAK,iBAAiB,QAAQ,GAAG,IAAI,IAAI,GAAK,EAChG,CAEA,SAAS,mBAAoB,CAG3B,MAFI,CAAC,iBAAmB,OAAO,gBAAgB,WAAc,YACzD,kBAAkB,oBAAoB,IAAM,KAC5C,OAAO,kBAAkB,oBAAoB,GAAK,CAAC,EAAI,KAAK,IAAI,EAAU,GACvE,CAAC,aAAa,KAAK,CAC5B,CAEA,SAAS,YAAa,CACpB,OAAO,KAAK,UAAU,SAAS,eAAe,GACzC,KAAK,UAAU,SAAS,qBAAqB,GAC7C,KAAK,UAAU,SAAS,qBAAqB,GAC7C,EAAQ,GAAG,sBAAsB,CACxC,CAEA,IAAI,gBAAkB,GACtB,SAAS,qBAAsB,CAC7B,GAAI,mBAAmB,CAAC,kBAAkB,GAC1C,IAAI,WAAW,GAAK,SAAS,kBAAoB,SAAU,CACzD,OAAO,WAAW,oBAAqB,GAAK,EAC5C,MACF,CACA,gBAAkB,GAClB,gBAAgB,UAAU,EAC5B,CAEA,SAAS,sBAAuB,CAC9B,GAAI,CAAC,iBAAiB,KAAM,OACV,CAAC,GAAG,4BAA6B,eAAe,EAAE,QACpD,kBAAkB,qBAAsB,OAAO,KAAK,IAAI,EAAI,sBAAwB,KAAQ,CAAC,EAC7G,gBAAgB,MAAM,CACxB,CAEA,eAAe,iBAAiB,MAAO,CACrC,MAAM,eAAe,EACrB,MAAM,KAAO,MAAM,cACb,OAAS,GAAG,4BAA6B,eAAe,EACxD,OAAS,GAAG,4BAA6B,IAAI,EAC7C,MAAQ,OAAO,KAAK,SAAS,MAAM,OAAS,EAAE,EAAE,KAAK,EAAE,YAAY,EAEzE,GADA,OAAO,YAAc,GACjB,CAAC,6BAA6B,KAAK,KAAK,EAAG,CAC7C,OAAO,YAAc,eAAe,cAAc,EAClD,KAAK,SAAS,MAAM,MAAM,EAC1B,MACF,CACA,OAAO,SAAW,GAClB,GAAI,CACF,MAAM,SAAW,GAAG,OAAO,OAAO,UAAY,+BAA+B,EAAE,QAAQ,MAAO,EAAE,CAAC,aAC3F,SAAW,MAAM,MAAM,SAAU,CACrC,OAAQ,OACR,QAAS,CAAE,eAAgB,kBAAmB,EAC9C,YAAa,OACb,KAAM,KAAK,UAAU,CACnB,MACA,QAAS,KAAK,SAAS,SAAS,OAAS,GACzC,OAAQ,cACR,SAAU,CAAE,WAAY,cAAe,WAAY,OAAQ,CAC7D,CAAC,CACH,CAAC,EACK,QAAU,MAAM,SAAS,KAAK,EAAE,MAAM,KAAO,CAAC,EAAE,EACtD,GAAI,CAAC,SAAS,IAAM,CAAC,QAAQ,KAAM,CACjC,MAAM,IAAM,SAAS,SAAW,IAAM,eAAiB,SAAS,SAAW,IAAM,cAAgB,SAAS,SAAW,IAAM,YAAc,eACzI,MAAM,IAAI,MAAM,eAAe,GAAG,CAAC,CACrC,CACA,aAAa,KAAK,CAAE,MAAO,KAAM,QAAQ,KAAM,UAAW,KAAK,MAAM,KAAK,IAAI,EAAI,GAAI,EAAI,2BAA4B,CAAC,EACvH,kBAAkB,qBAAsB,GAAG,EAE3C,MAAM,aAAa,mBAAmB,QAAQ,IAAI,CAAC,uBAAwB,CAAE,YAAa,aAAc,CAAC,EAAE,MAAM,IAAM,CAAC,CAAC,EACzH,GAAG,0BAA2B,eAAe,EAAE,YAAc,QAAQ,KACrE,GAAG,gCAAiC,eAAe,EAAE,OAAS,GAC9D,GAAG,4BAA6B,eAAe,EAAE,OAAS,GAC1D,GAAG,gDAAiD,eAAe,GAAG,MAAM,EAC5E,oBAAoB,CACtB,OAAS,MAAO,CACd,OAAO,YAAc,MAAM,SAAW,eAAe,cAAc,EACnE,OAAO,SAAW,EACpB,CACF,CAEA,SAAS,qBAAsB,CAc7B,GAbA,oBAAoB,EAChB,CAAC,kBACL,GAAG,0BAA2B,eAAe,GAAG,iBAAiB,SAAU,gBAAgB,EAC3F,IAAI,2BAA4B,eAAe,EAAE,QAAQ,QAAU,OAAO,iBAAiB,QAAS,oBAAoB,CAAC,EACzH,gBAAgB,iBAAiB,SAAU,OAAS,CAAE,MAAM,eAAe,EAAG,qBAAqB,CAAG,CAAC,EACvG,gBAAgB,iBAAiB,QAAS,OAAS,CAAM,MAAM,SAAW,iBAAiB,qBAAqB,CAAG,CAAC,EACpH,GAAG,0BAA2B,eAAe,GAAG,iBAAiB,QAAS,SAAY,CACpF,MAAM,KAAO,GAAG,0BAA2B,eAAe,EAAE,YAC5D,GAAI,CAAE,MAAM,UAAU,UAAU,UAAU,IAAI,CAAG,MAAY,CAAE,MAAQ,CACvE,IAAI,4CAA6C,eAAe,EAAE,QAAQ,OAAS,CACjF,MAAM,YAAc,MAAM,aAAa,oBAAoB,EAAI,gBAAgB,QAAQ,SAAW,gBAAgB,QAAQ,QAC5H,CAAC,CACH,CAAC,EACG,CAAC,kBAAkB,GAAG,OAC1B,MAAM,YAAc,OAAO,aAAa,4CAA4C,EAAE,QAChF,UAAY,KAAK,IAAI,EAC3B,GAAI,YACF,SAAS,iBAAiB,WAAY,OAAS,CACzC,CAAC,MAAM,eAAiB,MAAM,SAAW,GAAK,KAAK,IAAI,EAAI,UAAY,KAAM,oBAAoB,CACvG,CAAC,EACD,OAAO,WAAW,oBAAqB,GAAK,MACvC,CACL,OAAO,WAAW,oBAAqB,GAAK,EAC5C,MAAM,SAAW,IAAM,CACrB,MAAM,WAAa,SAAS,gBAAgB,aAAe,OAAO,YAC9D,WAAa,GAAK,OAAO,QAAU,YAAc,KACnD,OAAO,oBAAoB,SAAU,QAAQ,EAC7C,oBAAoB,EAExB,EACA,OAAO,iBAAiB,SAAU,SAAU,CAAE,QAAS,EAAK,CAAC,CAC/D,CACF,CAEA,oBAAoB,CACtB,GAAG",
  "names": ["message", "document", "window", "URL", "history", "sessionStorage", "navigator", "fetch", "DOMParser", "root", "qs", "qsa", "closeCart", "scrollTargetForHash", "clearHashScroll", "scrollToHashTarget", "cleanHomeSectionUrl", "isHomePath", "homePathKey", "animateScrollTo", "prefersReducedMotion", "stripLocalePrefix", "bindCalculatorInputs", "applyReconstitutionPresetFromUrl", "applyInstantLocale", "syncLocalizedLinks", "updateCalculators", "navigateWithMotion", "startPageExit", "isNavigationUrl", "prefetchPage", "isCalculatorPageUrl", "fetchCalculatorPage", "prefetchCalculatorTabs", "swapCalculatorPage", "HTMLElement", "scrim", "cartDrawer", "mobileDock", "mobileDockMenu", "mobileDockMenuButton", "mobileDockMedia", "requestAnimationFrame", "setPageRegionsInert", "showModalScrim", "hideModalScrim", "closeMobileDockMenu", "openMobileDockMenu", "toggleMobileDockMenu", "Date", "config", "isCartRendered", "ensureCartRendered", "announce", "openCart", "toggleCart", "URLSearchParams", "Event", "runtimeCopy", "persistDesiredQuantitiesForNavigation", "selectedProductVariantForStoq", "cancelStoqOpenIntent", "openStoqWaitlist", "tryOpenStoqWaitlist", "localizeStoqWaitlist", "synchronizeStoqVariant", "scheduleStoqLocalization", "openStoqFromNotifyParam", "desiredVariantQuantities", "clampVariantQuantity", "syncStepperLimitState", "getVariantInventoryLimit", "instantCopy", "escapeHtml", "formatMoney", "setVariantInventoryLimit", "CSS", "getCart", "changeComplimentaryBacQuantity", "isComplimentaryBac", "visibleItemsFromCart", "cartQualifiesForComplimentaryBac", "syncComplimentaryBac", "nextCart", "normalizeCartProductTitle", "syncProductControlsFromVisibleItems", "resetAddButton", "applyDesiredQuantities", "renderVisibleItems", "optimisticAddFromButton", "optimisticSetVariantQuantity", "total", "pulseQuantity", "scheduleVariantSync", "enqueueCartOperation", "setVariantQuantity", "syncVariantNow", "flushCartSyncs", "setCardQuantity", "pendingComplimentaryBacStatus", "renderCart", "flashAdded", "refreshCart", "addItems", "changeLine", "getVisibleCartItems", "animation"]
}
