{
  "version": 3,
  "sources": ["/cdn/shop/t/1/assets/cc-signup.js?nocache=1793701692255"],
  "sourcesContent": ["// CloudCo CLOUD50 email signup (snippets/cc-signup.liquid).\n// Modes: production (Theme settings > Email popup (Klaviyo) turned on with both Klaviyo IDs) or preview (?cc_signup=preview,\n// also while production is on). Anything else: nothing is shown. Preview never transmits or stores the entered email address.\n// No customer text lives here: every word comes from the snippet (translated by i18n/i18n_build.py).\n(() => {\n  'use strict';\n  const root = document.querySelector('[data-cc-signup]');\n  const configNode = document.querySelector('[data-cc-signup-config]');\n  if (!root || !configNode || root.dataset.ccSignupReady) return;\n  const warn = message => { try { window.console?.warn('[CloudCo signup] ' + message); } catch (_) {} };\n  let config;\n  try { config = JSON.parse(configNode.textContent); } catch (_) { return; }\n  const preview = /[?&]cc_signup=preview(?:&|$)/.test(window.location.search || '');\n  const production = !preview && config.live === true;\n  if (!preview && !production) return;\n  const code = String(config.code || '');\n  const amount = Number(config.amount);\n  const delaySeconds = Number(config.delay);\n  if (!/^[A-Z0-9_-]{2,40}$/.test(code)) { warn('the discount code setting is not a valid code'); return; }\n  if (!Number.isInteger(amount) || amount < 1 || amount > 100000) { warn('the offer amount setting must be a whole number of dollars'); return; }\n  let client = null;\n  if (production) {\n    const ID = /^[A-Za-z0-9]{6}$/;\n    if (!ID.test(config.companyId) || !ID.test(config.listId)) { warn('the Klaviyo company ID and list ID must each be 6 letters or digits (the public site ID, never a private key)'); return; }\n    const api = window.CCKlaviyoClient;\n    if (!api || typeof api.create !== 'function') return;\n    client = api.create({enabled: true, companyId: config.companyId, listId: config.listId});\n    if (!client?.enabled || typeof client.subscribe !== 'function') return;\n  }\n\n  // The offer amount in the visitor's currency: US dollars x Shopify's rate, rounded down to whole units, written like the page's\n  // own prices (window.CCI18N.sample is 123456 cents through snippets/cc-money.liquid: $1,234.56, 1.234,56 \u20AC, 1 234,56 \u20AC).\n  function offerText() {\n    const currency = window.Shopify?.currency || {};\n    const active = String(currency.active || 'USD').toUpperCase();\n    const rate = parseFloat(currency.rate);\n    let units = amount;\n    if (active !== 'USD') {\n      if (!(rate > 0)) return null;\n      units = Math.floor(Math.round(amount * rate * 1e6) / 1e6);\n      if (units < 1) return null;\n    }\n    const sample = window.CCI18N?.sample;\n    const match = typeof sample === 'string' && sample.match(/\\d(?:[\\d.,'\\s\u00A0\u202F]*\\d)?/);\n    if (match) {\n      const n = match[0];\n      const group = /\\d/.test(n.charAt(1)) ? '' : n.charAt(1);\n      return sample.replace(n, String(units).replace(/\\B(?=(\\d{3})+(?!\\d))/g, group));\n    }\n    try { return new Intl.NumberFormat(document.documentElement.lang || 'en', {style: 'currency', currency: active, maximumFractionDigits: 0, minimumFractionDigits: 0}).format(units); }\n    catch (_) { return active === 'USD' ? '$' + units : null; }\n  }\n  const offer$ = offerText();\n  if (!offer$) { warn('no exchange rate for this currency, so the offer is not shown'); return; }\n\n  const dialog = root.querySelector('[data-cc-signup-dialog]');\n  const form = root.querySelector('[data-cc-signup-form]');\n  const email = root.querySelector('[data-cc-signup-email]');\n  const submit = root.querySelector('[data-cc-signup-submit]');\n  const offer = root.querySelector('[data-cc-signup-offer]');\n  const success = root.querySelector('[data-cc-signup-success]');\n  const error = root.querySelector('[data-cc-signup-error]');\n  const codeField = root.querySelector('[data-cc-signup-code]');\n  const copy = root.querySelector('[data-cc-signup-copy]');\n  const copyStatus = root.querySelector('[data-cc-signup-copy-status]');\n  const successTitle = root.querySelector('#CcSignupDoneTitle');\n  const launcher = document.querySelector('[data-cc-signup-launcher]');\n  const stickyBuy = document.querySelector('[data-stick]');\n  if (![dialog, form, email, submit, offer, success, error, codeField, copy, copyStatus, successTitle].every(Boolean)) return;\n  const strings = config.strings || {};\n  if (!['emailError', 'copied', 'copyFallback', 'submitting', 'serviceError', 'timeoutError', 'rateLimitError'].every(key => typeof strings[key] === 'string' && strings[key])) return;\n\n  // Fill every {amount} before anything can be seen: text, the aria labels and the script's own messages.\n  const fill = value => value.split('{amount}').join(offer$);\n  [root, launcher].filter(Boolean).forEach(scope => {\n    const walker = document.createTreeWalker(scope, NodeFilter.SHOW_TEXT);\n    for (let node = walker.nextNode(); node; node = walker.nextNode()) if (node.nodeValue.includes('{amount}')) node.nodeValue = fill(node.nodeValue);\n    [scope, ...scope.querySelectorAll('[aria-label],[placeholder]')].forEach(element => {\n      ['aria-label', 'placeholder'].forEach(name => { const v = element.getAttribute(name); if (v && v.includes('{amount}')) element.setAttribute(name, fill(v)); });\n    });\n  });\n  Object.keys(strings).forEach(key => { strings[key] = fill(strings[key]); });\n\n  const storageKey = production ? 'cc-signup-popup-v1' : 'cc-signup-popup-preview-v1';\n  let storage;\n  try { storage = window.sessionStorage; } catch (_) {}\n  const readState = () => { try { return storage?.getItem(storageKey); } catch (_) { return null; } };\n  const remember = value => { try { storage?.setItem(storageKey, value); } catch (_) {} };\n  let previousFocus = null;\n  let inerted = [];\n  let completed = false;\n  let timer = null;\n  let copyPending = false;\n  let pending = false;\n  let retryUntil = 0;\n  const submitLabel = submit.textContent;\n  root.dataset.ccSignupReady = 'true';\n  root.dataset.ccSignupMode = production ? 'production' : 'preview';\n  codeField.value = code;\n  // The picture starts loading now, during the delay, so it is there when the dialog opens.\n  root.querySelectorAll('img[data-ccsu-pic]').forEach(img => { if (img.dataset.ccsuSrcset) img.srcset = img.dataset.ccsuSrcset; if (img.dataset.ccsuSrc) img.src = img.dataset.ccsuSrc; });\n  const previewNote = root.querySelector('[data-cc-signup-preview-note]');\n  if (previewNote) previewNote.hidden = production;\n\n  // The tab sits bottom left and moves above the chair page's sticky buy bar whenever that bar is up.\n  function positionLauncher() {\n    if (!launcher || launcher.hidden) return;\n    const up = stickyBuy && stickyBuy.classList.contains('is-on') && stickyBuy.offsetHeight > 0;\n    if (up) launcher.style.setProperty('--ccsu-lift', (stickyBuy.offsetHeight + 12) + 'px');\n    else launcher.style.removeProperty('--ccsu-lift');\n  }\n  function showLauncher() {\n    if (!launcher) return;\n    launcher.hidden = false;\n    launcher.setAttribute('aria-expanded', 'false');\n    positionLauncher();\n  }\n  if (launcher && stickyBuy) {\n    if (typeof window.MutationObserver === 'function') new window.MutationObserver(positionLauncher).observe(stickyBuy, {attributes: true, attributeFilter: ['class']});\n    if (typeof window.ResizeObserver === 'function') new window.ResizeObserver(positionLauncher).observe(stickyBuy);\n  }\n  window.addEventListener('resize', positionLauncher, {passive: true});\n\n  function backgroundInert(enable) {\n    if (!enable) {\n      inerted.forEach(element => element.removeAttribute('inert'));\n      inerted = [];\n      return;\n    }\n    let branch = root;\n    while (branch.parentElement) {\n      [...branch.parentElement.children].forEach(element => {\n        if (element === branch || element.hasAttribute('inert') || /^(SCRIPT|STYLE|LINK)$/.test(element.tagName)) return;\n        element.setAttribute('inert', '');\n        inerted.push(element);\n      });\n      if (branch.parentElement === document.body) break;\n      branch = branch.parentElement;\n    }\n  }\n  // Never on top of the open side cart, an open country or language list, or another site dialog.\n  function blockingSurface() {\n    if (document.body.classList.contains('cc-lock') || document.querySelector('.cc-drawer.is-on, details.cc-pick[open], .cc-nav.is-on')) return true;\n    const cookieBanner = document.getElementById('shopify-pc__banner');\n    if (cookieBanner && cookieBanner.getClientRects().length && window.getComputedStyle(cookieBanner).visibility !== 'hidden') return true;\n    return [...document.querySelectorAll('[role=\"dialog\"][aria-modal=\"true\"]')].some(element => !root.contains(element) && !element.closest('[hidden]'));\n  }\n  function open(manual = false) {\n    if (!root.hidden || blockingSurface() || (!manual && readState())) return false;\n    if (timer !== null) { window.clearTimeout(timer); timer = null; }\n    previousFocus = document.activeElement;\n    if (launcher) { launcher.hidden = true; launcher.setAttribute('aria-expanded', 'true'); }\n    root.hidden = false;\n    document.body.classList.add('ccsu-open');\n    document.documentElement.classList.add('ccsu-open');\n    backgroundInert(true);\n    if (completed) successTitle.focus({preventScroll: true});\n    else if (window.matchMedia?.('(pointer: coarse)').matches) dialog.focus({preventScroll: true});\n    else email.focus({preventScroll: true});\n    return true;\n  }\n  function close() {\n    if (root.hidden) return;\n    root.hidden = true;\n    document.body.classList.remove('ccsu-open');\n    document.documentElement.classList.remove('ccsu-open');\n    backgroundInert(false);\n    remember(completed ? 'complete' : 'dismissed');\n    showLauncher();\n    if (previousFocus?.isConnected && !previousFocus.closest('[inert]')) previousFocus.focus({preventScroll: true});\n  }\n  root.querySelectorAll('[data-cc-signup-close]').forEach(button => button.addEventListener('click', close));\n  root.querySelector('[data-cc-signup-backdrop]').addEventListener('click', close);\n  if (launcher) launcher.addEventListener('click', event => { event.preventDefault(); open(true); });\n  document.addEventListener('keydown', event => {\n    if (root.hidden) return;\n    if (event.key === 'Escape') { event.preventDefault(); event.stopPropagation(); close(); return; }\n    if (event.key !== 'Tab') return;\n    const targets = [...dialog.querySelectorAll('a[href],button:not([disabled]),input:not([disabled]),[tabindex=\"0\"]')].filter(element => !element.closest('[hidden]'));\n    if (!targets.length) { event.preventDefault(); dialog.focus(); return; }\n    const first = targets[0], last = targets[targets.length - 1];\n    if (event.shiftKey && (document.activeElement === first || !dialog.contains(document.activeElement))) { event.preventDefault(); last.focus(); }\n    else if (!event.shiftKey && (document.activeElement === last || !dialog.contains(document.activeElement))) { event.preventDefault(); first.focus(); }\n  }, true);\n  function showError(message, invalidEmail = false) {\n    error.textContent = message;\n    error.hidden = false;\n    if (invalidEmail) email.setAttribute('aria-invalid', 'true');\n    if (!root.hidden) email.focus({preventScroll: true});\n  }\n  function finishSignup() {\n    email.value = '';\n    error.hidden = true;\n    email.removeAttribute('aria-invalid');\n    completed = true;\n    remember('complete');\n    offer.hidden = true;\n    success.hidden = false;\n    dialog.setAttribute('aria-labelledby', 'CcSignupDoneTitle');\n    dialog.setAttribute('aria-describedby', 'CcSignupDoneText');\n    if (!root.hidden) successTitle.focus({preventScroll: true});\n  }\n  email.addEventListener('input', () => { email.removeAttribute('aria-invalid'); error.hidden = true; error.textContent = ''; });\n  form.addEventListener('submit', async event => {\n    event.preventDefault();\n    if (root.hidden || completed || pending) return;\n    const value = email.value.trim();\n    const nativeValid = typeof email.checkValidity === 'function' ? email.checkValidity() : true;\n    if (!value || value.length > 254 || !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value) || !nativeValid) { showError(strings.emailError, true); return; }\n    if (!production) {\n      // Preview never persists or transmits the entered email address.\n      finishSignup();\n      return;\n    }\n    if (Date.now() < retryUntil) { showError(strings.rateLimitError); return; }\n    pending = true;\n    email.disabled = true;\n    submit.disabled = true;\n    submit.textContent = strings.submitting;\n    form.setAttribute('aria-busy', 'true');\n    error.hidden = true;\n    email.removeAttribute('aria-invalid');\n    try {\n      // The visitor submits directly beneath the displayed marketing-consent notice.\n      const result = await client.subscribe({email: value, language: config.locale, consent: true});\n      if (result?.ok === true && result.status === 'accepted' && result.httpStatus === 202) {\n        // Acceptance is not confirmation of email delivery. The success copy only gives the code and how to use it.\n        finishSignup();\n      } else if (result?.status === 'rate_limited') {\n        const seconds = Number(result.retryAfterSeconds);\n        retryUntil = Date.now() + (Number.isFinite(seconds) && seconds > 0 ? Math.min(seconds, 86400) : 60) * 1000;\n        showError(strings.rateLimitError);\n      } else {\n        showError(result?.status === 'timeout' ? strings.timeoutError : result?.status === 'invalid_email' ? strings.emailError : strings.serviceError, result?.status === 'invalid_email');\n      }\n    } catch (_) {\n      showError(strings.serviceError);\n    } finally {\n      pending = false;\n      email.disabled = false;\n      submit.disabled = false;\n      submit.textContent = submitLabel;\n      form.removeAttribute('aria-busy');\n      if (!root.hidden && !error.hidden) email.focus({preventScroll: true});\n    }\n  });\n  copy.addEventListener('click', async () => {\n    if (root.hidden || !completed || copyPending) return;\n    copyPending = true;\n    try {\n      if (!window.navigator?.clipboard?.writeText) throw new Error('Clipboard unavailable');\n      await window.navigator.clipboard.writeText(code);\n      copyStatus.textContent = strings.copied;\n    } catch (_) {\n      codeField.focus({preventScroll: true});\n      codeField.select?.();\n      copyStatus.textContent = strings.copyFallback;\n    } finally { copyPending = false; }\n  });\n  // Bind prevention handlers before enabling the form. No-JS markup cannot submit an email.\n  email.disabled = false;\n  submit.disabled = false;\n  const savedState = readState();\n  if (savedState === 'complete') finishSignup();\n  if (savedState) showLauncher();\n  else {\n    const wait = preview ? 1000 : Math.round(Math.min(120, Math.max(0, Number.isFinite(delaySeconds) ? delaySeconds : 5)) * 1000);\n    let tries = 0;\n    const attempt = () => { timer = null; if (open() || readState()) return; if (++tries < 20 && blockingSurface()) { timer = window.setTimeout(attempt, 1500); return; } showLauncher(); };\n    timer = window.setTimeout(attempt, wait);\n  }\n})();\n"],
  "mappings": "CAIC,IAAM,CACL,aACA,MAAM,KAAO,SAAS,cAAc,kBAAkB,EAChD,WAAa,SAAS,cAAc,yBAAyB,EACnE,GAAI,CAAC,MAAQ,CAAC,YAAc,KAAK,QAAQ,cAAe,OACxD,MAAM,KAAO,SAAW,CAAE,GAAI,CAAE,OAAO,SAAS,KAAK,oBAAsB,OAAO,CAAG,MAAY,CAAC,CAAE,EACpG,IAAI,OACJ,GAAI,CAAE,OAAS,KAAK,MAAM,WAAW,WAAW,CAAG,MAAY,CAAE,MAAQ,CACzE,MAAM,QAAU,+BAA+B,KAAK,OAAO,SAAS,QAAU,EAAE,EAC1E,WAAa,CAAC,SAAW,OAAO,OAAS,GAC/C,GAAI,CAAC,SAAW,CAAC,WAAY,OAC7B,MAAM,KAAO,OAAO,OAAO,MAAQ,EAAE,EAC/B,OAAS,OAAO,OAAO,MAAM,EAC7B,aAAe,OAAO,OAAO,KAAK,EACxC,GAAI,CAAC,qBAAqB,KAAK,IAAI,EAAG,CAAE,KAAK,+CAA+C,EAAG,MAAQ,CACvG,GAAI,CAAC,OAAO,UAAU,MAAM,GAAK,OAAS,GAAK,OAAS,IAAQ,CAAE,KAAK,4DAA4D,EAAG,MAAQ,CAC9I,IAAI,OAAS,KACb,GAAI,WAAY,CACd,MAAM,GAAK,mBACX,GAAI,CAAC,GAAG,KAAK,OAAO,SAAS,GAAK,CAAC,GAAG,KAAK,OAAO,MAAM,EAAG,CAAE,KAAK,+GAA+G,EAAG,MAAQ,CAC5L,MAAM,IAAM,OAAO,gBAGnB,GAFI,CAAC,KAAO,OAAO,IAAI,QAAW,aAClC,OAAS,IAAI,OAAO,CAAC,QAAS,GAAM,UAAW,OAAO,UAAW,OAAQ,OAAO,MAAM,CAAC,EACnF,CAAC,QAAQ,SAAW,OAAO,OAAO,WAAc,YAAY,MAClE,CAIA,SAAS,WAAY,CACnB,MAAM,SAAW,OAAO,SAAS,UAAY,CAAC,EACxC,OAAS,OAAO,SAAS,QAAU,KAAK,EAAE,YAAY,EACtD,KAAO,WAAW,SAAS,IAAI,EACrC,IAAI,MAAQ,OACZ,GAAI,SAAW,QACT,EAAE,KAAO,KACb,MAAQ,KAAK,MAAM,KAAK,MAAM,OAAS,KAAO,GAAG,EAAI,GAAG,EACpD,MAAQ,IAAG,OAAO,KAExB,MAAM,OAAS,OAAO,QAAQ,OACxB,MAAQ,OAAO,QAAW,UAAY,OAAO,MAAM,uBAAuB,EAChF,GAAI,MAAO,CACT,MAAM,EAAI,MAAM,CAAC,EACX,MAAQ,KAAK,KAAK,EAAE,OAAO,CAAC,CAAC,EAAI,GAAK,EAAE,OAAO,CAAC,EACtD,OAAO,OAAO,QAAQ,EAAG,OAAO,KAAK,EAAE,QAAQ,wBAAyB,KAAK,CAAC,CAChF,CACA,GAAI,CAAE,OAAO,IAAI,KAAK,aAAa,SAAS,gBAAgB,MAAQ,KAAM,CAAC,MAAO,WAAY,SAAU,OAAQ,sBAAuB,EAAG,sBAAuB,CAAC,CAAC,EAAE,OAAO,KAAK,CAAG,MAC1K,CAAE,OAAO,SAAW,MAAQ,IAAM,MAAQ,IAAM,CAC5D,CACA,MAAM,OAAS,UAAU,EACzB,GAAI,CAAC,OAAQ,CAAE,KAAK,+DAA+D,EAAG,MAAQ,CAE9F,MAAM,OAAS,KAAK,cAAc,yBAAyB,EACrD,KAAO,KAAK,cAAc,uBAAuB,EACjD,MAAQ,KAAK,cAAc,wBAAwB,EACnD,OAAS,KAAK,cAAc,yBAAyB,EACrD,MAAQ,KAAK,cAAc,wBAAwB,EACnD,QAAU,KAAK,cAAc,0BAA0B,EACvD,MAAQ,KAAK,cAAc,wBAAwB,EACnD,UAAY,KAAK,cAAc,uBAAuB,EACtD,KAAO,KAAK,cAAc,uBAAuB,EACjD,WAAa,KAAK,cAAc,8BAA8B,EAC9D,aAAe,KAAK,cAAc,oBAAoB,EACtD,SAAW,SAAS,cAAc,2BAA2B,EAC7D,UAAY,SAAS,cAAc,cAAc,EACvD,GAAI,CAAC,CAAC,OAAQ,KAAM,MAAO,OAAQ,MAAO,QAAS,MAAO,UAAW,KAAM,WAAY,YAAY,EAAE,MAAM,OAAO,EAAG,OACrH,MAAM,QAAU,OAAO,SAAW,CAAC,EACnC,GAAI,CAAC,CAAC,aAAc,SAAU,eAAgB,aAAc,eAAgB,eAAgB,gBAAgB,EAAE,MAAM,KAAO,OAAO,QAAQ,GAAG,GAAM,UAAY,QAAQ,GAAG,CAAC,EAAG,OAG9K,MAAM,KAAO,OAAS,MAAM,MAAM,UAAU,EAAE,KAAK,MAAM,EACzD,CAAC,KAAM,QAAQ,EAAE,OAAO,OAAO,EAAE,QAAQ,OAAS,CAChD,MAAM,OAAS,SAAS,iBAAiB,MAAO,WAAW,SAAS,EACpE,QAAS,KAAO,OAAO,SAAS,EAAG,KAAM,KAAO,OAAO,SAAS,EAAO,KAAK,UAAU,SAAS,UAAU,IAAG,KAAK,UAAY,KAAK,KAAK,SAAS,GAChJ,CAAC,MAAO,GAAG,MAAM,iBAAiB,4BAA4B,CAAC,EAAE,QAAQ,SAAW,CAClF,CAAC,aAAc,aAAa,EAAE,QAAQ,MAAQ,CAAE,MAAM,EAAI,QAAQ,aAAa,IAAI,EAAO,GAAK,EAAE,SAAS,UAAU,GAAG,QAAQ,aAAa,KAAM,KAAK,CAAC,CAAC,CAAG,CAAC,CAC/J,CAAC,CACH,CAAC,EACD,OAAO,KAAK,OAAO,EAAE,QAAQ,KAAO,CAAE,QAAQ,GAAG,EAAI,KAAK,QAAQ,GAAG,CAAC,CAAG,CAAC,EAE1E,MAAM,WAAa,WAAa,qBAAuB,6BACvD,IAAI,QACJ,GAAI,CAAE,QAAU,OAAO,cAAgB,MAAY,CAAC,CACpD,MAAM,UAAY,IAAM,CAAE,GAAI,CAAE,OAAO,SAAS,QAAQ,UAAU,CAAG,MAAY,CAAE,OAAO,IAAM,CAAE,EAC5F,SAAW,OAAS,CAAE,GAAI,CAAE,SAAS,QAAQ,WAAY,KAAK,CAAG,MAAY,CAAC,CAAE,EACtF,IAAI,cAAgB,KAChB,QAAU,CAAC,EACX,UAAY,GACZ,MAAQ,KACR,YAAc,GACd,QAAU,GACV,WAAa,EACjB,MAAM,YAAc,OAAO,YAC3B,KAAK,QAAQ,cAAgB,OAC7B,KAAK,QAAQ,aAAe,WAAa,aAAe,UACxD,UAAU,MAAQ,KAElB,KAAK,iBAAiB,oBAAoB,EAAE,QAAQ,KAAO,CAAM,IAAI,QAAQ,aAAY,IAAI,OAAS,IAAI,QAAQ,YAAgB,IAAI,QAAQ,UAAS,IAAI,IAAM,IAAI,QAAQ,QAAS,CAAC,EACvL,MAAM,YAAc,KAAK,cAAc,+BAA+B,EAClE,cAAa,YAAY,OAAS,YAGtC,SAAS,kBAAmB,CAC1B,GAAI,CAAC,UAAY,SAAS,OAAQ,OACvB,WAAa,UAAU,UAAU,SAAS,OAAO,GAAK,UAAU,aAAe,EAClF,SAAS,MAAM,YAAY,cAAgB,UAAU,aAAe,GAAM,IAAI,EACjF,SAAS,MAAM,eAAe,aAAa,CAClD,CACA,SAAS,cAAe,CACjB,WACL,SAAS,OAAS,GAClB,SAAS,aAAa,gBAAiB,OAAO,EAC9C,iBAAiB,EACnB,CACI,UAAY,YACV,OAAO,OAAO,kBAAqB,YAAY,IAAI,OAAO,iBAAiB,gBAAgB,EAAE,QAAQ,UAAW,CAAC,WAAY,GAAM,gBAAiB,CAAC,OAAO,CAAC,CAAC,EAC9J,OAAO,OAAO,gBAAmB,YAAY,IAAI,OAAO,eAAe,gBAAgB,EAAE,QAAQ,SAAS,GAEhH,OAAO,iBAAiB,SAAU,iBAAkB,CAAC,QAAS,EAAI,CAAC,EAEnE,SAAS,gBAAgB,OAAQ,CAC/B,GAAI,CAAC,OAAQ,CACX,QAAQ,QAAQ,SAAW,QAAQ,gBAAgB,OAAO,CAAC,EAC3D,QAAU,CAAC,EACX,MACF,CACA,IAAI,OAAS,KACb,KAAO,OAAO,gBACZ,CAAC,GAAG,OAAO,cAAc,QAAQ,EAAE,QAAQ,SAAW,CAChD,UAAY,QAAU,QAAQ,aAAa,OAAO,GAAK,wBAAwB,KAAK,QAAQ,OAAO,IACvG,QAAQ,aAAa,QAAS,EAAE,EAChC,QAAQ,KAAK,OAAO,EACtB,CAAC,EACG,OAAO,gBAAkB,SAAS,OACtC,OAAS,OAAO,aAEpB,CAEA,SAAS,iBAAkB,CACzB,GAAI,SAAS,KAAK,UAAU,SAAS,SAAS,GAAK,SAAS,cAAc,wDAAwD,EAAG,MAAO,GAC5I,MAAM,aAAe,SAAS,eAAe,oBAAoB,EACjE,OAAI,cAAgB,aAAa,eAAe,EAAE,QAAU,OAAO,iBAAiB,YAAY,EAAE,aAAe,SAAiB,GAC3H,CAAC,GAAG,SAAS,iBAAiB,oCAAoC,CAAC,EAAE,KAAK,SAAW,CAAC,KAAK,SAAS,OAAO,GAAK,CAAC,QAAQ,QAAQ,UAAU,CAAC,CACrJ,CACA,SAAS,KAAK,OAAS,GAAO,CAC5B,MAAI,CAAC,KAAK,QAAU,gBAAgB,GAAM,CAAC,QAAU,UAAU,EAAW,IACtE,QAAU,OAAQ,OAAO,aAAa,KAAK,EAAG,MAAQ,MAC1D,cAAgB,SAAS,cACrB,WAAY,SAAS,OAAS,GAAM,SAAS,aAAa,gBAAiB,MAAM,GACrF,KAAK,OAAS,GACd,SAAS,KAAK,UAAU,IAAI,WAAW,EACvC,SAAS,gBAAgB,UAAU,IAAI,WAAW,EAClD,gBAAgB,EAAI,EAChB,UAAW,aAAa,MAAM,CAAC,cAAe,EAAI,CAAC,EAC9C,OAAO,aAAa,mBAAmB,EAAE,QAAS,OAAO,MAAM,CAAC,cAAe,EAAI,CAAC,EACxF,MAAM,MAAM,CAAC,cAAe,EAAI,CAAC,EAC/B,GACT,CACA,SAAS,OAAQ,CACX,KAAK,SACT,KAAK,OAAS,GACd,SAAS,KAAK,UAAU,OAAO,WAAW,EAC1C,SAAS,gBAAgB,UAAU,OAAO,WAAW,EACrD,gBAAgB,EAAK,EACrB,SAAS,UAAY,WAAa,WAAW,EAC7C,aAAa,EACT,eAAe,aAAe,CAAC,cAAc,QAAQ,SAAS,GAAG,cAAc,MAAM,CAAC,cAAe,EAAI,CAAC,EAChH,CACA,KAAK,iBAAiB,wBAAwB,EAAE,QAAQ,QAAU,OAAO,iBAAiB,QAAS,KAAK,CAAC,EACzG,KAAK,cAAc,2BAA2B,EAAE,iBAAiB,QAAS,KAAK,EAC3E,UAAU,SAAS,iBAAiB,QAAS,OAAS,CAAE,MAAM,eAAe,EAAG,KAAK,EAAI,CAAG,CAAC,EACjG,SAAS,iBAAiB,UAAW,OAAS,CAC5C,GAAI,KAAK,OAAQ,OACjB,GAAI,MAAM,MAAQ,SAAU,CAAE,MAAM,eAAe,EAAG,MAAM,gBAAgB,EAAG,MAAM,EAAG,MAAQ,CAChG,GAAI,MAAM,MAAQ,MAAO,OACzB,MAAM,QAAU,CAAC,GAAG,OAAO,iBAAiB,qEAAqE,CAAC,EAAE,OAAO,SAAW,CAAC,QAAQ,QAAQ,UAAU,CAAC,EAClK,GAAI,CAAC,QAAQ,OAAQ,CAAE,MAAM,eAAe,EAAG,OAAO,MAAM,EAAG,MAAQ,CACvE,MAAM,MAAQ,QAAQ,CAAC,EAAG,KAAO,QAAQ,QAAQ,OAAS,CAAC,EACvD,MAAM,WAAa,SAAS,gBAAkB,OAAS,CAAC,OAAO,SAAS,SAAS,aAAa,IAAM,MAAM,eAAe,EAAG,KAAK,MAAM,GAClI,CAAC,MAAM,WAAa,SAAS,gBAAkB,MAAQ,CAAC,OAAO,SAAS,SAAS,aAAa,KAAM,MAAM,eAAe,EAAG,MAAM,MAAM,EACnJ,EAAG,EAAI,EACP,SAAS,UAAU,QAAS,aAAe,GAAO,CAChD,MAAM,YAAc,QACpB,MAAM,OAAS,GACX,cAAc,MAAM,aAAa,eAAgB,MAAM,EACtD,KAAK,QAAQ,MAAM,MAAM,CAAC,cAAe,EAAI,CAAC,CACrD,CACA,SAAS,cAAe,CACtB,MAAM,MAAQ,GACd,MAAM,OAAS,GACf,MAAM,gBAAgB,cAAc,EACpC,UAAY,GACZ,SAAS,UAAU,EACnB,MAAM,OAAS,GACf,QAAQ,OAAS,GACjB,OAAO,aAAa,kBAAmB,mBAAmB,EAC1D,OAAO,aAAa,mBAAoB,kBAAkB,EACrD,KAAK,QAAQ,aAAa,MAAM,CAAC,cAAe,EAAI,CAAC,CAC5D,CACA,MAAM,iBAAiB,QAAS,IAAM,CAAE,MAAM,gBAAgB,cAAc,EAAG,MAAM,OAAS,GAAM,MAAM,YAAc,EAAI,CAAC,EAC7H,KAAK,iBAAiB,SAAU,MAAM,OAAS,CAE7C,GADA,MAAM,eAAe,EACjB,KAAK,QAAU,WAAa,QAAS,OACzC,MAAM,MAAQ,MAAM,MAAM,KAAK,EACzB,YAAc,OAAO,MAAM,eAAkB,WAAa,MAAM,cAAc,EAAI,GACxF,GAAI,CAAC,OAAS,MAAM,OAAS,KAAO,CAAC,6BAA6B,KAAK,KAAK,GAAK,CAAC,YAAa,CAAE,UAAU,QAAQ,WAAY,EAAI,EAAG,MAAQ,CAC9I,GAAI,CAAC,WAAY,CAEf,aAAa,EACb,MACF,CACA,GAAI,KAAK,IAAI,EAAI,WAAY,CAAE,UAAU,QAAQ,cAAc,EAAG,MAAQ,CAC1E,QAAU,GACV,MAAM,SAAW,GACjB,OAAO,SAAW,GAClB,OAAO,YAAc,QAAQ,WAC7B,KAAK,aAAa,YAAa,MAAM,EACrC,MAAM,OAAS,GACf,MAAM,gBAAgB,cAAc,EACpC,GAAI,CAEF,MAAM,OAAS,MAAM,OAAO,UAAU,CAAC,MAAO,MAAO,SAAU,OAAO,OAAQ,QAAS,EAAI,CAAC,EAC5F,GAAI,QAAQ,KAAO,IAAQ,OAAO,SAAW,YAAc,OAAO,aAAe,IAE/E,aAAa,UACJ,QAAQ,SAAW,eAAgB,CAC5C,MAAM,QAAU,OAAO,OAAO,iBAAiB,EAC/C,WAAa,KAAK,IAAI,GAAK,OAAO,SAAS,OAAO,GAAK,QAAU,EAAI,KAAK,IAAI,QAAS,KAAK,EAAI,IAAM,IACtG,UAAU,QAAQ,cAAc,CAClC,MACE,UAAU,QAAQ,SAAW,UAAY,QAAQ,aAAe,QAAQ,SAAW,gBAAkB,QAAQ,WAAa,QAAQ,aAAc,QAAQ,SAAW,eAAe,CAEtL,MAAY,CACV,UAAU,QAAQ,YAAY,CAChC,QAAE,CACA,QAAU,GACV,MAAM,SAAW,GACjB,OAAO,SAAW,GAClB,OAAO,YAAc,YACrB,KAAK,gBAAgB,WAAW,EAC5B,CAAC,KAAK,QAAU,CAAC,MAAM,QAAQ,MAAM,MAAM,CAAC,cAAe,EAAI,CAAC,CACtE,CACF,CAAC,EACD,KAAK,iBAAiB,QAAS,SAAY,CACzC,GAAI,OAAK,QAAU,CAAC,WAAa,aACjC,aAAc,GACd,GAAI,CACF,GAAI,CAAC,OAAO,WAAW,WAAW,UAAW,MAAM,IAAI,MAAM,uBAAuB,EACpF,MAAM,OAAO,UAAU,UAAU,UAAU,IAAI,EAC/C,WAAW,YAAc,QAAQ,MACnC,MAAY,CACV,UAAU,MAAM,CAAC,cAAe,EAAI,CAAC,EACrC,UAAU,SAAS,EACnB,WAAW,YAAc,QAAQ,YACnC,QAAE,CAAU,YAAc,EAAO,EACnC,CAAC,EAED,MAAM,SAAW,GACjB,OAAO,SAAW,GAClB,MAAM,WAAa,UAAU,EAE7B,GADI,aAAe,YAAY,aAAa,EACxC,WAAY,aAAa,MACxB,CACH,MAAM,KAAO,QAAU,IAAO,KAAK,MAAM,KAAK,IAAI,IAAK,KAAK,IAAI,EAAG,OAAO,SAAS,YAAY,EAAI,aAAe,CAAC,CAAC,EAAI,GAAI,EAC5H,IAAI,MAAQ,EACZ,MAAM,QAAU,IAAM,CAAgB,GAAd,MAAQ,KAAU,OAAK,GAAK,UAAU,GAAW,IAAI,EAAE,MAAQ,IAAM,gBAAgB,EAAG,CAAE,MAAQ,OAAO,WAAW,QAAS,IAAI,EAAG,MAAQ,CAAE,aAAa,EAAG,EACtL,MAAQ,OAAO,WAAW,QAAS,IAAI,CACzC,CACF,GAAG",
  "names": []
}
