{
  "version": 3,
  "sources": ["/cdn/shop/t/47/assets/gallery-wall-builder.js?gwb=wall-designer-20260614b"],
  "sourcesContent": ["(function () {\n  \"use strict\";\n\n  var CONFIGS = window.HUEDRA_GALLERY_WALL_BUILDER || {};\n  var INITIAL_VISIBLE_PRODUCTS = 12;\n  var PREVIEW_IMAGE_WIDTH = 1000;\n  var WALL_ASPECT_RATIO = 1.55;\n  var ART_ASPECT_RATIO = 0.707;\n\n  function ready(fn) {\n    if (document.readyState === \"loading\") {\n      document.addEventListener(\"DOMContentLoaded\", fn);\n    } else {\n      fn();\n    }\n  }\n\n  function initAll() {\n    document.querySelectorAll(\"[data-gallery-wall-builder]\").forEach(initBuilder);\n  }\n\n  function initBuilder(root) {\n    var configId = root.getAttribute(\"data-config-id\") || \"default\";\n    var config = CONFIGS[configId] || CONFIGS.default || {};\n    var state = {\n      placements: [],\n      selectedPlacementId: \"\",\n      products: [],\n      search: \"\",\n      tag: \"all\",\n      material: getInitialMaterial(config),\n      sort: \"featured\",\n      visibleCount: INITIAL_VISIBLE_PRODUCTS,\n      backgroundObjectUrl: \"\"\n    };\n\n    var els = {\n      addWall: root.querySelector(\"[data-add-wall]\"),\n      backgroundInput: root.querySelector(\"[data-background-input]\"),\n      backgroundUpload: root.querySelector(\"[data-background-upload]\"),\n      clearFilters: root.querySelector(\"[data-clear-filters]\"),\n      clearWall: root.querySelector(\"[data-clear-wall]\"),\n      loadMore: root.querySelector(\"[data-load-more]\"),\n      materialSelect: root.querySelector(\"[data-material-select]\"),\n      productList: root.querySelector(\"[data-product-list]\"),\n      searchInput: root.querySelector(\"[data-search-input]\"),\n      selectedCount: root.querySelector(\"[data-selected-count]\"),\n      sortSelect: root.querySelector(\"[data-sort-select]\"),\n      stage: root.querySelector(\"[data-stage]\"),\n      status: root.querySelector(\"[data-status]\"),\n      tagSelect: root.querySelector(\"[data-tag-select]\"),\n      totalPrice: root.querySelector(\"[data-total-price]\"),\n      wall: root.querySelector(\"[data-wall]\"),\n      wallSummary: root.querySelector(\"[data-wall-summary]\")\n    };\n\n    bindBaseEvents(els, state, config);\n    renderWall(els, state, config);\n    setStatus(els, \"Loading products...\");\n\n    loadProducts(root, config)\n      .then(function (products) {\n        state.products = products;\n        hydrateSelectors(els, state);\n        renderAll(els, state, config);\n        setStatus(els, products.length ? \"\" : \"No products found.\");\n      })\n      .catch(function (error) {\n        hydrateSelectors(els, state);\n        renderAll(els, state, config);\n        setStatus(els, error.message || \"Could not load products.\");\n      });\n  }\n\n  function bindBaseEvents(els, state, config) {\n    if (els.searchInput) {\n      els.searchInput.addEventListener(\"input\", function (event) {\n        state.search = event.target.value.trim().toLowerCase();\n        resetVisibleProducts(state);\n        renderProducts(els, state, config);\n      });\n    }\n\n    if (els.tagSelect) {\n      els.tagSelect.addEventListener(\"change\", function (event) {\n        state.tag = event.target.value;\n        resetVisibleProducts(state);\n        renderProducts(els, state, config);\n      });\n    }\n\n    if (els.materialSelect) {\n      els.materialSelect.addEventListener(\"change\", function (event) {\n        state.material = event.target.value;\n        resetVisibleProducts(state);\n        renderProducts(els, state, config);\n      });\n    }\n\n    if (els.sortSelect) {\n      els.sortSelect.addEventListener(\"change\", function (event) {\n        state.sort = event.target.value;\n        resetVisibleProducts(state);\n        renderProducts(els, state, config);\n      });\n    }\n\n    if (els.clearFilters) {\n      els.clearFilters.addEventListener(\"click\", function () {\n        state.search = \"\";\n        state.tag = \"all\";\n        state.material = getInitialMaterial(config);\n        state.sort = \"featured\";\n        resetVisibleProducts(state);\n        syncFilterControls(els, state);\n        renderProducts(els, state, config);\n      });\n    }\n\n    if (els.loadMore) {\n      els.loadMore.addEventListener(\"click\", function () {\n        state.visibleCount += INITIAL_VISIBLE_PRODUCTS;\n        renderProducts(els, state, config);\n      });\n    }\n\n    if (els.clearWall) {\n      els.clearWall.addEventListener(\"click\", function () {\n        state.placements = [];\n        state.selectedPlacementId = \"\";\n        renderAll(els, state, config);\n        setStatus(els, \"\");\n      });\n    }\n\n    if (els.backgroundUpload && els.backgroundInput) {\n      els.backgroundUpload.addEventListener(\"click\", function () {\n        els.backgroundInput.click();\n      });\n      els.backgroundInput.addEventListener(\"change\", function (event) {\n        var file = event.target.files && event.target.files[0];\n        if (!file) return;\n        if (state.backgroundObjectUrl) URL.revokeObjectURL(state.backgroundObjectUrl);\n        state.backgroundObjectUrl = URL.createObjectURL(file);\n        applyBackground(els, state.backgroundObjectUrl);\n      });\n    }\n\n    if (els.stage) {\n      els.stage.addEventListener(\"click\", function (event) {\n        if (event.target.closest(\".huedra-gwb__placement\") || isControlTarget(event.target)) return;\n        state.selectedPlacementId = \"\";\n        renderWall(els, state, config);\n      });\n    }\n\n    if (els.addWall) {\n      els.addWall.addEventListener(\"click\", function () {\n        addWallToCart(els, state, config);\n      });\n    }\n  }\n\n  function renderAll(els, state, config) {\n    renderWall(els, state, config);\n    renderProducts(els, state, config);\n    renderSummary(els, state, config);\n  }\n\n  function renderWall(els, state, config) {\n    if (!els.wall) return;\n    els.wall.innerHTML = \"\";\n\n    if (!state.placements.length) {\n      var empty = document.createElement(\"div\");\n      empty.className = \"huedra-gwb__wall-empty\";\n      empty.textContent = \"Select artworks to begin\";\n      els.wall.appendChild(empty);\n    }\n\n    state.placements.forEach(function (placement) {\n      var selected = placement.id === state.selectedPlacementId;\n      var item = document.createElement(\"div\");\n      item.className = \"huedra-gwb__placement\";\n      item.tabIndex = 0;\n      item.style.setProperty(\"--placement-x\", placement.x + \"%\");\n      item.style.setProperty(\"--placement-y\", placement.y + \"%\");\n      item.style.setProperty(\"--placement-w\", placement.width + \"%\");\n      item.style.setProperty(\"--art-crop\", getArtworkCrop(placement, state));\n      item.setAttribute(\"aria-label\", placement.product.title);\n      item.setAttribute(\"aria-selected\", selected ? \"true\" : \"false\");\n      item.setAttribute(\"data-frame-style\", getFrameStyle(placement.frame, placement));\n      item.setAttribute(\"data-material\", placement.product.material || \"print\");\n\n      item.addEventListener(\"pointerdown\", function (event) {\n        if (event.button !== 0 || isControlTarget(event.target)) return;\n        state.selectedPlacementId = placement.id;\n        startDrag(event, placement, els, state, config);\n      });\n\n      item.addEventListener(\"click\", function (event) {\n        if (isControlTarget(event.target)) return;\n        state.selectedPlacementId = placement.id;\n        renderAll(els, state, config);\n      });\n\n      item.addEventListener(\"keydown\", function (event) {\n        var amount = event.shiftKey ? 4 : 1.5;\n        var handled = true;\n        if (event.key === \"ArrowLeft\") placement.x -= amount;\n        else if (event.key === \"ArrowRight\") placement.x += amount;\n        else if (event.key === \"ArrowUp\") placement.y -= amount;\n        else if (event.key === \"ArrowDown\") placement.y += amount;\n        else if (event.key === \"Enter\" || event.key === \" \") state.selectedPlacementId = placement.id;\n        else handled = false;\n\n        if (handled) {\n          event.preventDefault();\n          clampPlacement(placement);\n          renderAll(els, state, config);\n        }\n      });\n\n      var preview = document.createElement(\"span\");\n      preview.className = \"huedra-gwb__art-preview\";\n\n      var image = document.createElement(\"img\");\n      image.className = \"huedra-gwb__placement-img\";\n      image.src = getArtworkImage(placement, state);\n      image.alt = placement.product.title;\n      image.draggable = false;\n      preview.appendChild(image);\n      item.appendChild(preview);\n\n      var remove = document.createElement(\"button\");\n      remove.className = \"huedra-gwb__placement-remove\";\n      remove.type = \"button\";\n      remove.textContent = \"\u00D7\";\n      remove.setAttribute(\"aria-label\", \"Remove \" + placement.product.title);\n      remove.addEventListener(\"click\", function (event) {\n        event.stopPropagation();\n        removePlacement(state, placement.id);\n        renderAll(els, state, config);\n      });\n      item.appendChild(remove);\n\n      if (selected) {\n        item.appendChild(renderPlacementControls(placement, els, state, config));\n      }\n\n      els.wall.appendChild(item);\n    });\n  }\n\n  function renderPlacementControls(placement, els, state, config) {\n    var controls = document.createElement(\"div\");\n    controls.className = \"huedra-gwb__placement-controls\";\n    controls.addEventListener(\"pointerdown\", function (event) {\n      event.stopPropagation();\n    });\n\n    controls.appendChild(buildPlacementSelect(\"Material\", getMaterialOptions(placement.product, state), placement.product.material, function (value) {\n      switchPlacementMaterial(placement, value, state, config);\n      renderAll(els, state, config);\n    }));\n\n    controls.appendChild(buildPlacementSelect(\"Frame\", getFrameValues(placement.product), placement.frame, function (value) {\n      placement.frame = value;\n      refreshPlacementVariant(placement);\n      renderAll(els, state, config);\n    }));\n\n    controls.appendChild(buildPlacementSelect(\"Size\", getOptionValues(placement.product, \"size\"), placement.size, function (value) {\n      placement.size = value;\n      placement.width = widthForSize(value, placement.product.material);\n      refreshPlacementVariant(placement);\n      clampPlacement(placement);\n      renderAll(els, state, config);\n    }));\n\n    return controls;\n  }\n\n  function buildPlacementSelect(label, values, selected, onChange) {\n    var cleanValues = values.length ? values : [\"\"];\n    var wrapper = document.createElement(\"label\");\n    wrapper.className = \"huedra-gwb__placement-field\";\n\n    var text = document.createElement(\"span\");\n    text.className = \"visually-hidden\";\n    text.textContent = label;\n    wrapper.appendChild(text);\n\n    var select = document.createElement(\"select\");\n    select.className = \"huedra-gwb__placement-select\";\n    cleanValues.forEach(function (value) {\n      var option = document.createElement(\"option\");\n      option.value = value;\n      option.textContent = label === \"Material\" ? materialLabel({ material: value }) : value || \"Default\";\n      option.selected = value === selected;\n      select.appendChild(option);\n    });\n    select.disabled = cleanValues.length < 2;\n    select.addEventListener(\"change\", function (event) {\n      onChange(event.target.value);\n    });\n    wrapper.appendChild(select);\n    return wrapper;\n  }\n\n  function renderProducts(els, state, config) {\n    if (!els.productList) return;\n    var products = getFilteredProducts(state);\n    var visibleProducts = products.slice(0, state.visibleCount);\n    els.productList.innerHTML = \"\";\n\n    if (!state.products.length) {\n      els.productList.appendChild(messageNode(\"Products unavailable\"));\n      toggleLoadMore(els, false);\n      return;\n    }\n\n    if (!products.length) {\n      els.productList.appendChild(messageNode(\"No matching products\"));\n      toggleLoadMore(els, false);\n      return;\n    }\n\n    visibleProducts.forEach(function (product) {\n      var variant = findVariant(product, getDefaultSize(product, config), getDefaultFrame(product, config));\n      var card = document.createElement(\"button\");\n      card.className = \"huedra-gwb__product\";\n      card.type = \"button\";\n      card.setAttribute(\"aria-pressed\", isProductPlaced(product, state) ? \"true\" : \"false\");\n      card.addEventListener(\"click\", function () {\n        addPlacement(product, state, config);\n        renderAll(els, state, config);\n        setStatus(els, \"\");\n      });\n\n      var media = document.createElement(\"span\");\n      media.className = \"huedra-gwb__product-media\";\n\n      var image = document.createElement(\"img\");\n      image.className = \"huedra-gwb__product-img\";\n      image.src = getProductImage(product, variant);\n      image.alt = product.title;\n      image.loading = \"lazy\";\n      media.appendChild(image);\n\n      var title = document.createElement(\"span\");\n      title.className = \"huedra-gwb__product-title\";\n      title.textContent = product.title;\n\n      var artist = document.createElement(\"span\");\n      artist.className = \"huedra-gwb__product-artist\";\n      artist.textContent = product.vendor || materialLabel(product);\n\n      var price = document.createElement(\"span\");\n      price.className = \"huedra-gwb__product-price\";\n      price.textContent = \"From \" + formatMoney(minProductPrice(product), productCurrency(product, config));\n\n      card.appendChild(media);\n      card.appendChild(title);\n      card.appendChild(artist);\n      card.appendChild(price);\n      els.productList.appendChild(card);\n    });\n\n    toggleLoadMore(els, products.length > visibleProducts.length);\n  }\n\n  function renderSummary(els, state, config) {\n    var placements = state.placements;\n    var total = placements.reduce(function (sum, placement) {\n      return sum + parseFloat(placement.variant && placement.variant.price ? placement.variant.price.amount : 0);\n    }, 0);\n    var count = placements.length;\n    var currency = placements[0] && placements[0].variant && placements[0].variant.price\n      ? placements[0].variant.price.currencyCode\n      : state.products[0] ? productCurrency(state.products[0], config) : config.currency || \"GBP\";\n\n    if (els.selectedCount) els.selectedCount.textContent = count === 1 ? \"1 product\" : count + \" products\";\n    if (els.totalPrice) els.totalPrice.textContent = formatMoney(total, currency);\n    if (els.wallSummary) {\n      els.wallSummary.textContent = count\n        ? count + (count === 1 ? \" artwork selected\" : \" artworks selected\")\n        : \"No products selected\";\n    }\n    if (els.addWall) {\n      els.addWall.disabled = !(placements.length && placements.every(function (placement) {\n        return getCartVariantId(placement.variant);\n      }));\n    }\n  }\n\n  function hydrateSelectors(els, state) {\n    var tags = uniqueValues(state.products.flatMap(function (product) {\n      return product.tags.map(cleanTag).filter(Boolean);\n    })).sort();\n    fillSelect(els.tagSelect, [\"all\"].concat(tags), state.tag, function (value) {\n      return value === \"all\" ? \"All\" : value;\n    });\n\n    if (els.materialSelect) {\n      var materials = uniqueValues(state.products.map(function (product) {\n        return product.material;\n      })).filter(Boolean);\n      if ([\"all\"].concat(materials).indexOf(state.material) === -1) {\n        state.material = materials[0] || \"all\";\n      }\n      fillSelect(els.materialSelect, [\"all\"].concat(materials), state.material, function (value) {\n        return value === \"all\" ? \"All\" : materialLabel({ material: value });\n      });\n    }\n\n    syncFilterControls(els, state);\n  }\n\n  function fillSelect(select, values, selected, labeler) {\n    if (!select) return;\n    select.innerHTML = \"\";\n    values.forEach(function (value) {\n      var option = document.createElement(\"option\");\n      option.value = value;\n      option.textContent = labeler(value);\n      option.selected = value === selected;\n      select.appendChild(option);\n    });\n    select.disabled = values.length < 2;\n  }\n\n  function syncFilterControls(els, state) {\n    if (els.searchInput) els.searchInput.value = state.search;\n    if (els.tagSelect) els.tagSelect.value = state.tag;\n    if (els.materialSelect) els.materialSelect.value = state.material;\n    if (els.sortSelect) els.sortSelect.value = state.sort;\n  }\n\n  function loadProducts(root, config) {\n    var embedded = readEmbeddedProducts(root);\n    if (embedded.length) return Promise.resolve(embedded);\n\n    if (Array.isArray(config.products) && config.products.length) {\n      return Promise.resolve(config.products.map(normalizeAnyProduct).filter(hasUsableVariant));\n    }\n\n    if (config.storefrontAccessToken && config.collectionHandle) {\n      return fetchStorefrontProducts(config);\n    }\n\n    if (config.collectionJsonUrl) {\n      return fetchCollectionJson(config.collectionJsonUrl);\n    }\n\n    if (config.collectionHandle) {\n      return fetchCollectionJson(\"/collections/\" + config.collectionHandle + \"/products.json?limit=\" + (config.maxProducts || 48));\n    }\n\n    return Promise.resolve([]);\n  }\n\n  function readEmbeddedProducts(root) {\n    var script = root.querySelector(\"script[data-gallery-wall-products]\");\n    if (!script || !script.textContent.trim()) return [];\n    try {\n      var parsed = JSON.parse(script.textContent);\n      var products = Array.isArray(parsed) ? parsed : parsed.products || [];\n      return products.map(normalizeAnyProduct).filter(hasUsableVariant);\n    } catch (error) {\n      return [];\n    }\n  }\n\n  function fetchCollectionJson(url) {\n    return fetch(url, {\n      credentials: \"same-origin\",\n      headers: { \"Accept\": \"application/json\" }\n    })\n      .then(function (response) {\n        if (!response.ok) throw new Error(\"Products returned \" + response.status);\n        return response.json();\n      })\n      .then(function (payload) {\n        return (payload.products || []).map(normalizeAnyProduct).filter(hasUsableVariant);\n      });\n  }\n\n  function fetchStorefrontProducts(config) {\n    var endpoint = \"/api/\" + (config.apiVersion || \"2026-04\") + \"/graphql.json\";\n    var query = [\n      \"query GalleryWallProducts($handle: String!, $first: Int!) {\",\n      \"  collection(handle: $handle) {\",\n      \"    products(first: $first) {\",\n      \"      nodes {\",\n      \"        id handle title tags productType vendor\",\n      \"        featuredImage { url altText width height }\",\n      \"        images(first: 8) { nodes { url altText width height } }\",\n      \"        options { name values }\",\n      \"        variants(first: 100) {\",\n      \"          nodes {\",\n      \"            id title availableForSale\",\n      \"            image { url altText width height }\",\n      \"            price { amount currencyCode }\",\n      \"            selectedOptions { name value }\",\n      \"          }\",\n      \"        }\",\n      \"      }\",\n      \"    }\",\n      \"  }\",\n      \"}\"\n    ].join(\"\\n\");\n\n    return fetch(endpoint, {\n      method: \"POST\",\n      credentials: \"same-origin\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        \"X-Shopify-Storefront-Access-Token\": config.storefrontAccessToken\n      },\n      body: JSON.stringify({\n        query: query,\n        variables: {\n          handle: config.collectionHandle,\n          first: parseInt(config.maxProducts, 10) || 48\n        }\n      })\n    })\n      .then(function (response) {\n        if (!response.ok) throw new Error(\"Storefront API returned \" + response.status);\n        return response.json();\n      })\n      .then(function (payload) {\n        if (payload.errors && payload.errors.length) throw new Error(payload.errors[0].message);\n        return ((((payload.data || {}).collection || {}).products || {}).nodes || [])\n          .map(normalizeStorefrontProduct)\n          .filter(hasUsableVariant);\n      });\n  }\n\n  function normalizeAnyProduct(product) {\n    if (product.variants && product.variants.nodes) return normalizeStorefrontProduct(product);\n    if (String(product.id || \"\").indexOf(\"gid://shopify/\") === 0) return normalizeStorefrontProduct(product);\n    return normalizeShopifyProduct(product);\n  }\n\n  function normalizeStorefrontProduct(product) {\n    var featuredMedia = normalizeImageData(product.featuredImage);\n    var media = uniqueMedia([featuredMedia].concat(nodes(product.images).map(function (image) {\n      return normalizeImageData(image);\n    })));\n    var images = media.map(function (image) {\n      return image.url;\n    }).filter(Boolean);\n    var featured = featuredMedia.url || images[0] || \"\";\n    var variants = nodes(product.variants).map(function (variant) {\n      return {\n        id: String(variant.id),\n        numericId: getNumericId(variant.id),\n        title: variant.title || \"\",\n        available: variant.availableForSale !== false,\n        image: normalizeImage(variant.image),\n        selectedOptions: variant.selectedOptions || [],\n        price: normalizePrice(variant.price && variant.price.amount, variant.price && variant.price.currencyCode)\n      };\n    }).filter(function (variant) {\n      return variant.available;\n    });\n\n    var normalized = {\n      id: String(product.id),\n      handle: product.handle || \"\",\n      title: product.title || \"\",\n      vendor: product.vendor || \"\",\n      tags: product.tags || [],\n      image: featured,\n      images: images,\n      media: media,\n      options: product.options || [],\n      productType: product.productType || \"\",\n      variants: variants\n    };\n    normalized.material = inferMaterial(normalized);\n    return normalized;\n  }\n\n  function normalizeShopifyProduct(product) {\n    var featuredMedia = normalizeImageData(product.featured_image || product.featured_image_url || product.image);\n    var media = uniqueMedia([featuredMedia].concat((product.images || []).map(function (image) {\n      return normalizeImageData(image);\n    })));\n    var images = media.map(function (image) {\n      return image.url;\n    }).filter(Boolean);\n    var featured = featuredMedia.url || images[0] || \"\";\n    var optionNames = (product.options || []).map(function (option, index) {\n      return typeof option === \"string\" ? option : option.name || \"Option \" + (index + 1);\n    });\n    var optionValues = [0, 1, 2].map(function (index) {\n      return uniqueValues((product.variants || []).map(function (variant) {\n        return variant[\"option\" + (index + 1)];\n      }));\n    });\n    var options = optionNames.map(function (name, index) {\n      return { name: name, values: optionValues[index] || [] };\n    });\n    var variants = (product.variants || []).map(function (variant) {\n      return {\n        id: String(variant.id),\n        numericId: getNumericId(variant.id),\n        title: variant.title || \"\",\n        available: variant.available !== false && variant.available_for_sale !== false,\n        image: normalizeImage(variant.featured_image || variant.image),\n        selectedOptions: [0, 1, 2].map(function (index) {\n          return {\n            name: optionNames[index] || \"Option \" + (index + 1),\n            value: variant[\"option\" + (index + 1)] || \"\"\n          };\n        }).filter(function (option) {\n          return option.value;\n        }),\n        price: normalizePrice(variant.price || product.price, product.currency || \"GBP\")\n      };\n    }).filter(function (variant) {\n      return variant.available;\n    });\n\n    var normalized = {\n      id: String(product.id),\n      handle: product.handle || \"\",\n      title: product.title || \"\",\n      vendor: product.vendor || \"\",\n      tags: normalizeTags(product.tags),\n      image: featured,\n      images: images,\n      media: media,\n      options: options,\n      productType: product.product_type || product.type || \"\",\n      variants: variants\n    };\n    normalized.material = inferMaterial(normalized);\n    return normalized;\n  }\n\n  function nodes(value) {\n    if (!value) return [];\n    if (Array.isArray(value)) return value;\n    if (Array.isArray(value.nodes)) return value.nodes;\n    if (Array.isArray(value.edges)) return value.edges.map(function (edge) { return edge.node; });\n    return [];\n  }\n\n  function normalizeImage(image) {\n    return normalizeImageData(image).url;\n  }\n\n  function normalizeImageData(image) {\n    if (!image) return { url: \"\", alt: \"\", width: 0, height: 0 };\n    if (typeof image === \"string\") return { url: image, alt: \"\", width: 0, height: 0 };\n    return {\n      url: image.url || image.src || image.preview_image && image.preview_image.src || \"\",\n      alt: image.altText || image.alt || image.alt_text || \"\",\n      width: image.width || 0,\n      height: image.height || 0\n    };\n  }\n\n  function uniqueMedia(media) {\n    var seen = {};\n    return media.map(function (image) {\n      return typeof image === \"string\" ? normalizeImageData(image) : image;\n    }).filter(function (image) {\n      var url = image && image.url;\n      if (!url || seen[url]) return false;\n      seen[url] = true;\n      return true;\n    });\n  }\n\n  function normalizePrice(value, currency) {\n    var amount = parseFloat(value || 0);\n    if (Number.isFinite(amount) && amount > 999) amount = amount / 100;\n    return { amount: amount.toFixed(2), currencyCode: currency || \"GBP\" };\n  }\n\n  function normalizeTags(tags) {\n    if (Array.isArray(tags)) return tags;\n    return String(tags || \"\").split(\",\").map(function (tag) { return tag.trim(); }).filter(Boolean);\n  }\n\n  function hasUsableVariant(product) {\n    return product && product.variants && product.variants.length && product.image;\n  }\n\n  function getFilteredProducts(state) {\n    var products = state.products.filter(function (product) {\n      var haystack = [product.title, product.handle, product.productType, product.vendor].concat(product.tags).join(\" \").toLowerCase();\n      var tagMatch = state.tag === \"all\" || product.tags.map(cleanTag).indexOf(state.tag) !== -1;\n      var materialMatch = state.material === \"all\" || product.material === state.material;\n      var searchMatch = !state.search || haystack.indexOf(state.search) !== -1;\n      return tagMatch && materialMatch && searchMatch;\n    });\n\n    if (state.sort === \"price-asc\") {\n      products.sort(function (a, b) { return minProductPrice(a) - minProductPrice(b); });\n    } else if (state.sort === \"price-desc\") {\n      products.sort(function (a, b) { return minProductPrice(b) - minProductPrice(a); });\n    } else if (state.sort === \"title-asc\") {\n      products.sort(function (a, b) { return a.title.localeCompare(b.title); });\n    }\n\n    return products;\n  }\n\n  function addPlacement(product, state, config) {\n    var size = getDefaultSize(product, config);\n    var frame = getDefaultFrame(product, config);\n    var variant = findVariant(product, size, frame);\n    var placement = {\n      id: \"placement-\" + Date.now() + \"-\" + Math.round(Math.random() * 100000),\n      product: product,\n      variant: variant,\n      size: optionValueFromVariant(variant, \"size\") || size,\n      frame: optionValueFromVariantAny(variant, [\"frame\", \"finish\", \"material\"]) || frame,\n      x: 30 + (state.placements.length % 3) * 20,\n      y: 40 + (state.placements.length % 2) * 10,\n      width: widthForSize(size, product.material)\n    };\n    clampPlacement(placement);\n    state.placements.push(placement);\n    state.selectedPlacementId = placement.id;\n  }\n\n  function removePlacement(state, id) {\n    state.placements = state.placements.filter(function (placement) {\n      return placement.id !== id;\n    });\n    state.selectedPlacementId = state.placements.length ? state.placements[state.placements.length - 1].id : \"\";\n  }\n\n  function refreshPlacementVariant(placement) {\n    placement.variant = findVariant(placement.product, placement.size, placement.frame);\n    placement.size = optionValueFromVariant(placement.variant, \"size\") || placement.size;\n    placement.frame = optionValueFromVariantAny(placement.variant, [\"frame\", \"finish\", \"material\"]) || placement.frame;\n  }\n\n  function switchPlacementMaterial(placement, material, state, config) {\n    if (placement.product.material === material) return;\n    var product = findSiblingProduct(placement.product, material, state.products);\n    if (!product) return;\n    placement.product = product;\n    placement.size = pickPreferred(getOptionValues(product, \"size\"), placement.size) || getDefaultSize(product, config);\n    placement.frame = pickPreferred(getFrameValues(product), placement.frame) || getDefaultFrame(product, config);\n    placement.width = widthForSize(placement.size, product.material);\n    refreshPlacementVariant(placement);\n    clampPlacement(placement);\n  }\n\n  function findVariant(product, size, frame) {\n    if (!product || !product.variants.length) return null;\n    var available = product.variants.filter(function (variant) { return variant.available !== false; });\n    var exact = available.find(function (variant) {\n      return optionMatches(variant, \"size\", size) && optionMatchesAny(variant, [\"frame\", \"finish\", \"material\"], frame);\n    });\n    var sizeOnly = available.find(function (variant) {\n      return optionMatches(variant, \"size\", size);\n    });\n    var frameOnly = available.find(function (variant) {\n      return optionMatchesAny(variant, [\"frame\", \"finish\", \"material\"], frame);\n    });\n    return exact || sizeOnly || frameOnly || available[0] || product.variants[0];\n  }\n\n  function optionMatches(variant, nameNeedle, value) {\n    if (!value) return true;\n    return variant.selectedOptions.some(function (option) {\n      return option.name.toLowerCase().indexOf(nameNeedle) !== -1 && option.value === value;\n    });\n  }\n\n  function optionMatchesAny(variant, nameNeedles, value) {\n    if (!value) return true;\n    return nameNeedles.some(function (needle) {\n      return optionMatches(variant, needle, value);\n    });\n  }\n\n  function optionValueFromVariant(variant, nameNeedle) {\n    if (!variant) return \"\";\n    var option = variant.selectedOptions.find(function (item) {\n      return String(item.name || \"\").toLowerCase().indexOf(nameNeedle) !== -1;\n    });\n    return option ? option.value : \"\";\n  }\n\n  function optionValueFromVariantAny(variant, nameNeedles) {\n    if (!variant) return \"\";\n    var option = variant.selectedOptions.find(function (item) {\n      var name = String(item.name || \"\").toLowerCase();\n      return nameNeedles.some(function (needle) {\n        return name.indexOf(needle) !== -1;\n      });\n    });\n    return option ? option.value : \"\";\n  }\n\n  function getOptionValues(product, nameNeedle) {\n    return (product.options || []).filter(function (option) {\n      return option.name && option.name.toLowerCase().indexOf(nameNeedle) !== -1;\n    }).flatMap(function (option) {\n      return option.values || [];\n    });\n  }\n\n  function getFrameValues(product) {\n    return uniqueValues(\n      getOptionValues(product, \"frame\")\n        .concat(getOptionValues(product, \"finish\"))\n        .concat(getOptionValues(product, \"material\"))\n    );\n  }\n\n  function getDefaultSize(product, config) {\n    var values = getOptionValues(product, \"size\");\n    return pickPreferred(values, config.defaultSize) || values[0] || \"\";\n  }\n\n  function getDefaultFrame(product, config) {\n    var values = getFrameValues(product);\n    return pickPreferred(values, config.defaultFrame) || values[0] || \"\";\n  }\n\n  function getMaterialOptions(product, state) {\n    var base = baseProductKey(product);\n    return uniqueValues(state.products.filter(function (item) {\n      return baseProductKey(item) === base || normalizedProductTitle(item) === normalizedProductTitle(product);\n    }).map(function (item) {\n      return item.material;\n    })).sort(function (a, b) {\n      return a === \"print\" ? -1 : b === \"print\" ? 1 : a.localeCompare(b);\n    });\n  }\n\n  function findSiblingProduct(product, material, products) {\n    var base = baseProductKey(product);\n    var title = normalizedProductTitle(product);\n    return products.find(function (item) {\n      return item.material === material && baseProductKey(item) === base;\n    }) || products.find(function (item) {\n      return item.material === material && normalizedProductTitle(item) === title;\n    });\n  }\n\n  function baseProductKey(product) {\n    return String(product.handle || normalizedProductTitle(product))\n      .toLowerCase()\n      .replace(/-?(canvas|print|poster|framed-print)$/i, \"\")\n      .replace(/-$/, \"\");\n  }\n\n  function normalizedProductTitle(product) {\n    return String(product.title || \"\")\n      .toLowerCase()\n      .replace(/\\b(canvas|print|poster|framed print)\\b/g, \"\")\n      .replace(/\\s+/g, \" \")\n      .trim();\n  }\n\n  function startDrag(event, placement, els, state, config) {\n    event.preventDefault();\n    var pointerId = event.pointerId;\n    var wallRect = els.wall.getBoundingClientRect();\n    var target = event.currentTarget;\n    target.setPointerCapture(pointerId);\n    target.classList.add(\"is-dragging\");\n\n    function update(nextEvent) {\n      var x = ((nextEvent.clientX - wallRect.left) / wallRect.width) * 100;\n      var y = ((nextEvent.clientY - wallRect.top) / wallRect.height) * 100;\n      placement.x = x;\n      placement.y = y;\n      clampPlacement(placement);\n      target.style.setProperty(\"--placement-x\", placement.x + \"%\");\n      target.style.setProperty(\"--placement-y\", placement.y + \"%\");\n    }\n\n    function stop() {\n      target.classList.remove(\"is-dragging\");\n      target.releasePointerCapture(pointerId);\n      target.removeEventListener(\"pointermove\", update);\n      target.removeEventListener(\"pointerup\", stop);\n      target.removeEventListener(\"pointercancel\", stop);\n      renderAll(els, state, config);\n    }\n\n    update(event);\n    target.addEventListener(\"pointermove\", update);\n    target.addEventListener(\"pointerup\", stop);\n    target.addEventListener(\"pointercancel\", stop);\n  }\n\n  function clampPlacement(placement) {\n    var halfWidth = placement.width / 2;\n    var heightPercent = (placement.width * WALL_ASPECT_RATIO) / ART_ASPECT_RATIO;\n    var halfHeight = heightPercent / 2;\n    placement.x = clamp(placement.x, halfWidth, 100 - halfWidth);\n    placement.y = clamp(placement.y, halfHeight, 100 - halfHeight);\n  }\n\n  function widthForSize(size, material) {\n    var text = String(size || \"\").toUpperCase();\n    var base = 15;\n    if (text.indexOf(\"A0\") !== -1) base = 27;\n    else if (text.indexOf(\"A1\") !== -1) base = 23;\n    else if (text.indexOf(\"A2\") !== -1) base = 18;\n    else if (text.indexOf(\"A3\") !== -1) base = 14;\n    else if (text.indexOf(\"A4\") !== -1) base = 11;\n    if (material === \"canvas\") base += 1;\n    return base;\n  }\n\n  function clamp(value, min, max) {\n    return Math.max(min, Math.min(max, value));\n  }\n\n  function isControlTarget(target) {\n    return Boolean(target.closest(\"button, select, input, label, .huedra-gwb__placement-controls\"));\n  }\n\n  function getProductImage(product, variant) {\n    return variant && variant.image || product.image || product.images && product.images[0] || \"\";\n  }\n\n  function getArtworkImage(placement, state) {\n    var product = placement && placement.product;\n    if (!product) return \"\";\n    var artworkProduct = product;\n\n    if (product.material === \"canvas\") {\n      artworkProduct = findSiblingProduct(product, \"print\", state.products) || product;\n    }\n\n    return withImageWidth(\n      findArtworkImage(artworkProduct)\n        || findArtworkImage(product)\n        || getProductImage(product, placement.variant),\n      PREVIEW_IMAGE_WIDTH\n    );\n  }\n\n  function getArtworkCrop(placement, state) {\n    var product = placement && placement.product;\n    if (!product) return \"1\";\n    var artworkProduct = product.material === \"canvas\"\n      ? findSiblingProduct(product, \"print\", state.products) || product\n      : product;\n    var media = findArtworkMedia(artworkProduct) || findArtworkMedia(product);\n    var text = media ? imageText(media) : \"\";\n    if (!text) return \"1\";\n    if (text.indexOf(\"raw\") !== -1 || text.indexOf(\"clean\") !== -1 || text.indexOf(\"artwork-only\") !== -1) return \"1\";\n    if (text.indexOf(\"only\") !== -1 || text.indexOf(\"unframed\") !== -1) return \"1.36\";\n    return \"1\";\n  }\n\n  function findArtworkImage(product) {\n    var media = findArtworkMedia(product);\n    return media ? media.url : \"\";\n  }\n\n  function findArtworkMedia(product) {\n    var best = null;\n    var bestScore = 0;\n    getProductMedia(product).forEach(function (media, index) {\n      var score = scoreArtworkMedia(media, index);\n      if (score > bestScore) {\n        best = media;\n        bestScore = score;\n      }\n    });\n    return best;\n  }\n\n  function getProductMedia(product) {\n    if (!product) return [];\n    var media = uniqueMedia(product.media || []);\n    (product.images || []).forEach(function (url) {\n      if (url && !media.some(function (image) { return image.url === url; })) {\n        media.push({ url: url, alt: \"\", width: 0, height: 0 });\n      }\n    });\n    if (product.image && !media.some(function (image) { return image.url === product.image; })) {\n      media.unshift({ url: product.image, alt: \"\", width: 0, height: 0 });\n    }\n    return media;\n  }\n\n  function scoreArtworkMedia(media, index) {\n    var text = imageText(media);\n    var score = 0;\n    if (text.indexOf(\"artwork-only\") !== -1) score += 130;\n    if (text.indexOf(\"only\") !== -1) score += 110;\n    if (text.indexOf(\"unframed\") !== -1) score += 95;\n    if (text.indexOf(\"artwork\") !== -1 || text.indexOf(\"raw\") !== -1 || text.indexOf(\"clean\") !== -1) score += 65;\n    if (text.indexOf(\"black frame\") !== -1 || text.indexOf(\"white frame\") !== -1) score -= 140;\n    if (text.indexOf(\"natural frame\") !== -1 || text.indexOf(\"wood\") !== -1 || text.indexOf(\"oak\") !== -1) score -= 140;\n    if (text.indexOf(\"canvas\") !== -1) score -= 25;\n    return score - index;\n  }\n\n  function imageText(media) {\n    return [\n      media && media.alt,\n      media && media.url && media.url.split(\"/\").pop()\n    ].join(\" \").toLowerCase();\n  }\n\n  function withImageWidth(url, width) {\n    if (!url || !width || url.indexOf(\"/cdn/shop/\") === -1) return url || \"\";\n    if (/[?&]width=/.test(url)) return url.replace(/([?&]width=)\\d+/g, \"$1\" + width);\n    return url + (url.indexOf(\"?\") === -1 ? \"?width=\" : \"&width=\") + width;\n  }\n\n  function getFrameStyle(frame, placement) {\n    var normalized = String(frame || \"\").toLowerCase();\n    if (normalized.indexOf(\"unframed\") !== -1 || normalized.indexOf(\"none\") !== -1) return \"unframed\";\n    if (normalized.indexOf(\"white\") !== -1) return \"white\";\n    if (normalized.indexOf(\"oak\") !== -1 || normalized.indexOf(\"wood\") !== -1 || normalized.indexOf(\"natural\") !== -1 || normalized.indexOf(\"birch\") !== -1) return \"natural\";\n    return \"black\";\n  }\n\n  function inferMaterial(product) {\n    var text = [product.title, product.handle, product.productType].concat(product.tags || []).join(\" \").toLowerCase();\n    if (text.indexOf(\"canvas\") !== -1) return \"canvas\";\n    return \"print\";\n  }\n\n  function materialLabel(product) {\n    return product.material === \"canvas\" ? \"Canvas\" : \"Print\";\n  }\n\n  function minProductPrice(product) {\n    return product.variants.reduce(function (min, variant) {\n      var amount = parseFloat(variant.price && variant.price.amount || 0);\n      return amount && amount < min ? amount : min;\n    }, Number.POSITIVE_INFINITY) || 0;\n  }\n\n  function productCurrency(product, config) {\n    return product.variants[0] && product.variants[0].price && product.variants[0].price.currencyCode || config.currency || \"GBP\";\n  }\n\n  function isProductPlaced(product, state) {\n    return state.placements.some(function (placement) {\n      return placement.product.id === product.id;\n    });\n  }\n\n  function resetVisibleProducts(state) {\n    state.visibleCount = INITIAL_VISIBLE_PRODUCTS;\n  }\n\n  function getInitialMaterial(config) {\n    return config.defaultMaterial === \"canvas\" ? \"canvas\" : \"print\";\n  }\n\n  function toggleLoadMore(els, visible) {\n    if (!els.loadMore) return;\n    els.loadMore.hidden = !visible;\n  }\n\n  function applyBackground(els, objectUrl) {\n    if (!els.stage) return;\n    els.stage.style.backgroundImage = \"url(\\\"\" + objectUrl.replace(/\"/g, \"\\\\\\\"\") + \"\\\")\";\n    els.stage.classList.add(\"huedra-gwb__stage-wrap--photo\");\n  }\n\n  function cleanTag(tag) {\n    return String(tag || \"\")\n      .replace(/^style[:\\-_ ]/i, \"\")\n      .replace(/^room[:\\-_ ]/i, \"\")\n      .replace(/^colour[:\\-_ ]/i, \"\")\n      .replace(/^color[:\\-_ ]/i, \"\")\n      .trim();\n  }\n\n  function uniqueValues(values) {\n    var seen = {};\n    return values.filter(function (value) {\n      var key = String(value || \"\").trim();\n      if (!key || seen[key]) return false;\n      seen[key] = true;\n      return true;\n    });\n  }\n\n  function pickPreferred(values, preferred) {\n    if (!preferred) return \"\";\n    var lower = String(preferred).toLowerCase();\n    return values.find(function (value) {\n      return String(value).toLowerCase() === lower;\n    }) || \"\";\n  }\n\n  function formatMoney(amount, currency) {\n    var number = parseFloat(amount || 0);\n    return new Intl.NumberFormat(undefined, {\n      style: \"currency\",\n      currency: currency || \"GBP\",\n      maximumFractionDigits: number % 1 === 0 ? 0 : 2\n    }).format(number);\n  }\n\n  function formatMoneyWithTemplate(amount, currency, template) {\n    if (!template) return formatMoney(amount, currency);\n    var number = parseFloat(amount || 0);\n    return template\n      .replace(/\\{\\{\\s*amount_no_decimals\\s*\\}\\}/g, String(Math.round(number)))\n      .replace(/\\{\\{\\s*amount\\s*\\}\\}/g, number.toFixed(2));\n  }\n\n  function getNumericId(id) {\n    var match = String(id || \"\").match(/(\\d+)$/);\n    return match ? match[1] : \"\";\n  }\n\n  function getCartVariantId(variant) {\n    return variant && (variant.numericId || (/^\\d+$/.test(String(variant.id)) ? variant.id : \"\"));\n  }\n\n  function addWallToCart(els, state, config) {\n    var items = state.placements.map(function (placement) {\n      return {\n        id: getCartVariantId(placement.variant),\n        quantity: 1\n      };\n    }).filter(function (item) {\n      return item.id;\n    });\n\n    if (!items.length) {\n      setStatus(els, \"Choose at least one product.\");\n      return;\n    }\n\n    els.addWall.disabled = true;\n    setStatus(els, \"Adding...\");\n\n    if (config.localPreview) {\n      window.setTimeout(function () {\n        renderSummary(els, state, config);\n        setStatus(els, \"Preview only.\");\n      }, 250);\n      return;\n    }\n\n    fetch(\"/cart/add.js\", {\n      method: \"POST\",\n      credentials: \"same-origin\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        \"Accept\": \"application/json\"\n      },\n      body: JSON.stringify({\n        items: items,\n        sections: [\"cart-drawer\", \"cart-icon-bubble\"],\n        sections_url: window.location.pathname\n      })\n    })\n      .then(function (response) {\n        if (!response.ok) throw new Error(\"Cart returned \" + response.status);\n        return response.json();\n      })\n      .then(function (addedState) {\n        renderCartSections(addedState);\n        return fetchCart().then(function (cart) {\n          return { cart: cart, addedState: addedState };\n        });\n      })\n      .then(function (result) {\n        renderSummary(els, state, config);\n        refreshCartUi(result.cart, items, result.addedState);\n        setStatus(els, \"Added to cart.\");\n        if (config.redirectToCart) {\n          window.location.href = \"/cart\";\n        }\n      })\n      .catch(function (error) {\n        renderSummary(els, state, config);\n        setStatus(els, error.message || \"Could not add products.\");\n      });\n  }\n\n  function fetchCart() {\n    return fetch(\"/cart.js\", {\n      credentials: \"same-origin\",\n      headers: { \"Accept\": \"application/json\" }\n    }).then(function (response) {\n      if (!response.ok) throw new Error(\"Cart refresh returned \" + response.status);\n      return response.json();\n    });\n  }\n\n  function refreshCartUi(cart, items, addedState) {\n    if (addedState) renderCartSections(addedState, cart);\n    updateCartCounters(cart);\n    var detail = { cart: cart, items: items, source: \"gallery-wall-builder\" };\n    document.dispatchEvent(new CustomEvent(\"cart:refresh\", { bubbles: true, detail: detail }));\n    document.dispatchEvent(new CustomEvent(\"cart:updated\", { bubbles: true, detail: detail }));\n    document.dispatchEvent(new CustomEvent(\"cart:change\", { bubbles: true, detail: detail }));\n    document.dispatchEvent(new CustomEvent(\"huedra:gallery-wall-added\", { bubbles: true, detail: detail }));\n    window.dispatchEvent(new CustomEvent(\"cart:refresh\", { detail: detail }));\n\n    if (window.PUB_SUB_EVENTS && window.publish && window.PUB_SUB_EVENTS.cartUpdate) {\n      window.publish(window.PUB_SUB_EVENTS.cartUpdate, {\n        source: \"cart-items\",\n        productVariantId: items[0] && items[0].id,\n        cartData: cart\n      });\n    }\n\n    window.setTimeout(function () {\n      updateCartCounters(cart);\n    }, 80);\n    window.setTimeout(function () {\n      updateCartCounters(cart);\n    }, 600);\n  }\n\n  function renderCartSections(addedState, cart) {\n    if (!addedState || !addedState.sections) return false;\n    var rendered = false;\n\n    rendered = replaceSectionHtml(\"cart-drawer\", \"#CartDrawer\", addedState.sections[\"cart-drawer\"]) || rendered;\n    rendered = replaceSectionHtml(\"cart-icon-bubble\", null, addedState.sections[\"cart-icon-bubble\"]) || rendered;\n\n    var drawer = document.querySelector(\"cart-drawer\");\n    if (drawer && cart) {\n      drawer.classList.toggle(\"is-empty\", cart.item_count === 0);\n      var inner = drawer.querySelector(\".drawer__inner\");\n      if (inner) inner.classList.toggle(\"is-empty\", cart.item_count === 0);\n    }\n\n    return rendered;\n  }\n\n  function replaceSectionHtml(targetId, selector, html) {\n    if (!html) return false;\n    var target = selector ? document.querySelector(selector) : document.getElementById(targetId);\n    if (!target) return false;\n    var parsed = new DOMParser().parseFromString(html, \"text/html\");\n    var source = selector ? parsed.querySelector(selector) : parsed.querySelector(\".shopify-section\");\n    if (!source) return false;\n    target.innerHTML = source.innerHTML;\n    return true;\n  }\n\n  function updateCartCounters(cart) {\n    var count = String(cart && cart.item_count || 0);\n    [\n      \"[data-cart-count]\",\n      \"[data-header-cart-count]\",\n      \".cart-count\",\n      \".header__cart-count\",\n      \".site-header__cart-count\",\n      \"#CartCount\"\n    ].forEach(function (selector) {\n      document.querySelectorAll(selector).forEach(function (node) {\n        node.textContent = count;\n        node.setAttribute(\"aria-hidden\", count === \"0\" ? \"true\" : \"false\");\n      });\n    });\n\n    document.querySelectorAll(\".cart-count-bubble\").forEach(function (bubble) {\n      bubble.classList.remove(\"hidden\");\n      bubble.setAttribute(\"aria-hidden\", count === \"0\" ? \"true\" : \"false\");\n      var spans = bubble.querySelectorAll(\"span\");\n      if (!spans.length) {\n        bubble.textContent = count;\n        return;\n      }\n      spans.forEach(function (span) {\n        if (span.getAttribute(\"aria-hidden\") === \"true\" || span.classList.contains(\"visually-hidden\") || /^\\s*\\d+\\s*$/.test(span.textContent)) {\n          span.textContent = count;\n        }\n      });\n    });\n  }\n\n  function appliedFrameValue(variant, selectedFrame) {\n    if (!variant || !selectedFrame) return \"\";\n    var option = variant.selectedOptions.find(function (item) {\n      var name = String(item.name || \"\").toLowerCase();\n      return (name.indexOf(\"frame\") !== -1 || name.indexOf(\"finish\") !== -1 || name.indexOf(\"material\") !== -1)\n        && item.value === selectedFrame;\n    });\n    return option ? option.value : \"\";\n  }\n\n  function messageNode(text) {\n    var node = document.createElement(\"div\");\n    node.className = \"huedra-gwb__empty\";\n    node.textContent = text;\n    return node;\n  }\n\n  function setStatus(els, message) {\n    if (els.status) els.status.textContent = message || \"\";\n  }\n\n  ready(initAll);\n})();\n"],
  "mappings": "CAAC,UAAY,CACX,aAEA,IAAI,QAAU,OAAO,6BAA+B,CAAC,EACjD,yBAA2B,GAC3B,oBAAsB,IACtB,kBAAoB,KACpB,iBAAmB,KAEvB,SAAS,MAAM,GAAI,CACb,SAAS,aAAe,UAC1B,SAAS,iBAAiB,mBAAoB,EAAE,EAEhD,GAAG,CAEP,CAEA,SAAS,SAAU,CACjB,SAAS,iBAAiB,6BAA6B,EAAE,QAAQ,WAAW,CAC9E,CAEA,SAAS,YAAY,KAAM,CACzB,IAAI,SAAW,KAAK,aAAa,gBAAgB,GAAK,UAClD,OAAS,QAAQ,QAAQ,GAAK,QAAQ,SAAW,CAAC,EAClD,MAAQ,CACV,WAAY,CAAC,EACb,oBAAqB,GACrB,SAAU,CAAC,EACX,OAAQ,GACR,IAAK,MACL,SAAU,mBAAmB,MAAM,EACnC,KAAM,WACN,aAAc,yBACd,oBAAqB,EACvB,EAEI,IAAM,CACR,QAAS,KAAK,cAAc,iBAAiB,EAC7C,gBAAiB,KAAK,cAAc,yBAAyB,EAC7D,iBAAkB,KAAK,cAAc,0BAA0B,EAC/D,aAAc,KAAK,cAAc,sBAAsB,EACvD,UAAW,KAAK,cAAc,mBAAmB,EACjD,SAAU,KAAK,cAAc,kBAAkB,EAC/C,eAAgB,KAAK,cAAc,wBAAwB,EAC3D,YAAa,KAAK,cAAc,qBAAqB,EACrD,YAAa,KAAK,cAAc,qBAAqB,EACrD,cAAe,KAAK,cAAc,uBAAuB,EACzD,WAAY,KAAK,cAAc,oBAAoB,EACnD,MAAO,KAAK,cAAc,cAAc,EACxC,OAAQ,KAAK,cAAc,eAAe,EAC1C,UAAW,KAAK,cAAc,mBAAmB,EACjD,WAAY,KAAK,cAAc,oBAAoB,EACnD,KAAM,KAAK,cAAc,aAAa,EACtC,YAAa,KAAK,cAAc,qBAAqB,CACvD,EAEA,eAAe,IAAK,MAAO,MAAM,EACjC,WAAW,IAAK,MAAO,MAAM,EAC7B,UAAU,IAAK,qBAAqB,EAEpC,aAAa,KAAM,MAAM,EACtB,KAAK,SAAU,SAAU,CACxB,MAAM,SAAW,SACjB,iBAAiB,IAAK,KAAK,EAC3B,UAAU,IAAK,MAAO,MAAM,EAC5B,UAAU,IAAK,SAAS,OAAS,GAAK,oBAAoB,CAC5D,CAAC,EACA,MAAM,SAAU,MAAO,CACtB,iBAAiB,IAAK,KAAK,EAC3B,UAAU,IAAK,MAAO,MAAM,EAC5B,UAAU,IAAK,MAAM,SAAW,0BAA0B,CAC5D,CAAC,CACL,CAEA,SAAS,eAAe,IAAK,MAAO,OAAQ,CACtC,IAAI,aACN,IAAI,YAAY,iBAAiB,QAAS,SAAU,MAAO,CACzD,MAAM,OAAS,MAAM,OAAO,MAAM,KAAK,EAAE,YAAY,EACrD,qBAAqB,KAAK,EAC1B,eAAe,IAAK,MAAO,MAAM,CACnC,CAAC,EAGC,IAAI,WACN,IAAI,UAAU,iBAAiB,SAAU,SAAU,MAAO,CACxD,MAAM,IAAM,MAAM,OAAO,MACzB,qBAAqB,KAAK,EAC1B,eAAe,IAAK,MAAO,MAAM,CACnC,CAAC,EAGC,IAAI,gBACN,IAAI,eAAe,iBAAiB,SAAU,SAAU,MAAO,CAC7D,MAAM,SAAW,MAAM,OAAO,MAC9B,qBAAqB,KAAK,EAC1B,eAAe,IAAK,MAAO,MAAM,CACnC,CAAC,EAGC,IAAI,YACN,IAAI,WAAW,iBAAiB,SAAU,SAAU,MAAO,CACzD,MAAM,KAAO,MAAM,OAAO,MAC1B,qBAAqB,KAAK,EAC1B,eAAe,IAAK,MAAO,MAAM,CACnC,CAAC,EAGC,IAAI,cACN,IAAI,aAAa,iBAAiB,QAAS,UAAY,CACrD,MAAM,OAAS,GACf,MAAM,IAAM,MACZ,MAAM,SAAW,mBAAmB,MAAM,EAC1C,MAAM,KAAO,WACb,qBAAqB,KAAK,EAC1B,mBAAmB,IAAK,KAAK,EAC7B,eAAe,IAAK,MAAO,MAAM,CACnC,CAAC,EAGC,IAAI,UACN,IAAI,SAAS,iBAAiB,QAAS,UAAY,CACjD,MAAM,cAAgB,yBACtB,eAAe,IAAK,MAAO,MAAM,CACnC,CAAC,EAGC,IAAI,WACN,IAAI,UAAU,iBAAiB,QAAS,UAAY,CAClD,MAAM,WAAa,CAAC,EACpB,MAAM,oBAAsB,GAC5B,UAAU,IAAK,MAAO,MAAM,EAC5B,UAAU,IAAK,EAAE,CACnB,CAAC,EAGC,IAAI,kBAAoB,IAAI,kBAC9B,IAAI,iBAAiB,iBAAiB,QAAS,UAAY,CACzD,IAAI,gBAAgB,MAAM,CAC5B,CAAC,EACD,IAAI,gBAAgB,iBAAiB,SAAU,SAAU,MAAO,CAC9D,IAAI,KAAO,MAAM,OAAO,OAAS,MAAM,OAAO,MAAM,CAAC,EAChD,OACD,MAAM,qBAAqB,IAAI,gBAAgB,MAAM,mBAAmB,EAC5E,MAAM,oBAAsB,IAAI,gBAAgB,IAAI,EACpD,gBAAgB,IAAK,MAAM,mBAAmB,EAChD,CAAC,GAGC,IAAI,OACN,IAAI,MAAM,iBAAiB,QAAS,SAAU,MAAO,CAC/C,MAAM,OAAO,QAAQ,wBAAwB,GAAK,gBAAgB,MAAM,MAAM,IAClF,MAAM,oBAAsB,GAC5B,WAAW,IAAK,MAAO,MAAM,EAC/B,CAAC,EAGC,IAAI,SACN,IAAI,QAAQ,iBAAiB,QAAS,UAAY,CAChD,cAAc,IAAK,MAAO,MAAM,CAClC,CAAC,CAEL,CAEA,SAAS,UAAU,IAAK,MAAO,OAAQ,CACrC,WAAW,IAAK,MAAO,MAAM,EAC7B,eAAe,IAAK,MAAO,MAAM,EACjC,cAAc,IAAK,MAAO,MAAM,CAClC,CAEA,SAAS,WAAW,IAAK,MAAO,OAAQ,CACtC,GAAK,IAAI,KAGT,IAFA,IAAI,KAAK,UAAY,GAEjB,CAAC,MAAM,WAAW,OAAQ,CAC5B,IAAI,MAAQ,SAAS,cAAc,KAAK,EACxC,MAAM,UAAY,yBAClB,MAAM,YAAc,2BACpB,IAAI,KAAK,YAAY,KAAK,CAC5B,CAEA,MAAM,WAAW,QAAQ,SAAU,UAAW,CAC5C,IAAI,SAAW,UAAU,KAAO,MAAM,oBAClC,KAAO,SAAS,cAAc,KAAK,EACvC,KAAK,UAAY,wBACjB,KAAK,SAAW,EAChB,KAAK,MAAM,YAAY,gBAAiB,UAAU,EAAI,GAAG,EACzD,KAAK,MAAM,YAAY,gBAAiB,UAAU,EAAI,GAAG,EACzD,KAAK,MAAM,YAAY,gBAAiB,UAAU,MAAQ,GAAG,EAC7D,KAAK,MAAM,YAAY,aAAc,eAAe,UAAW,KAAK,CAAC,EACrE,KAAK,aAAa,aAAc,UAAU,QAAQ,KAAK,EACvD,KAAK,aAAa,gBAAiB,SAAW,OAAS,OAAO,EAC9D,KAAK,aAAa,mBAAoB,cAAc,UAAU,MAAO,SAAS,CAAC,EAC/E,KAAK,aAAa,gBAAiB,UAAU,QAAQ,UAAY,OAAO,EAExE,KAAK,iBAAiB,cAAe,SAAU,MAAO,CAChD,MAAM,SAAW,GAAK,gBAAgB,MAAM,MAAM,IACtD,MAAM,oBAAsB,UAAU,GACtC,UAAU,MAAO,UAAW,IAAK,MAAO,MAAM,EAChD,CAAC,EAED,KAAK,iBAAiB,QAAS,SAAU,MAAO,CAC1C,gBAAgB,MAAM,MAAM,IAChC,MAAM,oBAAsB,UAAU,GACtC,UAAU,IAAK,MAAO,MAAM,EAC9B,CAAC,EAED,KAAK,iBAAiB,UAAW,SAAU,MAAO,CAChD,IAAI,OAAS,MAAM,SAAW,EAAI,IAC9B,QAAU,GACV,MAAM,MAAQ,YAAa,UAAU,GAAK,OACrC,MAAM,MAAQ,aAAc,UAAU,GAAK,OAC3C,MAAM,MAAQ,UAAW,UAAU,GAAK,OACxC,MAAM,MAAQ,YAAa,UAAU,GAAK,OAC1C,MAAM,MAAQ,SAAW,MAAM,MAAQ,IAAK,MAAM,oBAAsB,UAAU,GACtF,QAAU,GAEX,UACF,MAAM,eAAe,EACrB,eAAe,SAAS,EACxB,UAAU,IAAK,MAAO,MAAM,EAEhC,CAAC,EAED,IAAI,QAAU,SAAS,cAAc,MAAM,EAC3C,QAAQ,UAAY,0BAEpB,IAAI,MAAQ,SAAS,cAAc,KAAK,EACxC,MAAM,UAAY,4BAClB,MAAM,IAAM,gBAAgB,UAAW,KAAK,EAC5C,MAAM,IAAM,UAAU,QAAQ,MAC9B,MAAM,UAAY,GAClB,QAAQ,YAAY,KAAK,EACzB,KAAK,YAAY,OAAO,EAExB,IAAI,OAAS,SAAS,cAAc,QAAQ,EAC5C,OAAO,UAAY,+BACnB,OAAO,KAAO,SACd,OAAO,YAAc,OACrB,OAAO,aAAa,aAAc,UAAY,UAAU,QAAQ,KAAK,EACrE,OAAO,iBAAiB,QAAS,SAAU,MAAO,CAChD,MAAM,gBAAgB,EACtB,gBAAgB,MAAO,UAAU,EAAE,EACnC,UAAU,IAAK,MAAO,MAAM,CAC9B,CAAC,EACD,KAAK,YAAY,MAAM,EAEnB,UACF,KAAK,YAAY,wBAAwB,UAAW,IAAK,MAAO,MAAM,CAAC,EAGzE,IAAI,KAAK,YAAY,IAAI,CAC3B,CAAC,EACH,CAEA,SAAS,wBAAwB,UAAW,IAAK,MAAO,OAAQ,CAC9D,IAAI,SAAW,SAAS,cAAc,KAAK,EAC3C,gBAAS,UAAY,iCACrB,SAAS,iBAAiB,cAAe,SAAU,MAAO,CACxD,MAAM,gBAAgB,CACxB,CAAC,EAED,SAAS,YAAY,qBAAqB,WAAY,mBAAmB,UAAU,QAAS,KAAK,EAAG,UAAU,QAAQ,SAAU,SAAU,MAAO,CAC/I,wBAAwB,UAAW,MAAO,MAAO,MAAM,EACvD,UAAU,IAAK,MAAO,MAAM,CAC9B,CAAC,CAAC,EAEF,SAAS,YAAY,qBAAqB,QAAS,eAAe,UAAU,OAAO,EAAG,UAAU,MAAO,SAAU,MAAO,CACtH,UAAU,MAAQ,MAClB,wBAAwB,SAAS,EACjC,UAAU,IAAK,MAAO,MAAM,CAC9B,CAAC,CAAC,EAEF,SAAS,YAAY,qBAAqB,OAAQ,gBAAgB,UAAU,QAAS,MAAM,EAAG,UAAU,KAAM,SAAU,MAAO,CAC7H,UAAU,KAAO,MACjB,UAAU,MAAQ,aAAa,MAAO,UAAU,QAAQ,QAAQ,EAChE,wBAAwB,SAAS,EACjC,eAAe,SAAS,EACxB,UAAU,IAAK,MAAO,MAAM,CAC9B,CAAC,CAAC,EAEK,QACT,CAEA,SAAS,qBAAqB,MAAO,OAAQ,SAAU,SAAU,CAC/D,IAAI,YAAc,OAAO,OAAS,OAAS,CAAC,EAAE,EAC1C,QAAU,SAAS,cAAc,OAAO,EAC5C,QAAQ,UAAY,8BAEpB,IAAI,KAAO,SAAS,cAAc,MAAM,EACxC,KAAK,UAAY,kBACjB,KAAK,YAAc,MACnB,QAAQ,YAAY,IAAI,EAExB,IAAI,OAAS,SAAS,cAAc,QAAQ,EAC5C,cAAO,UAAY,+BACnB,YAAY,QAAQ,SAAU,MAAO,CACnC,IAAI,OAAS,SAAS,cAAc,QAAQ,EAC5C,OAAO,MAAQ,MACf,OAAO,YAAc,QAAU,WAAa,cAAc,CAAE,SAAU,KAAM,CAAC,EAAI,OAAS,UAC1F,OAAO,SAAW,QAAU,SAC5B,OAAO,YAAY,MAAM,CAC3B,CAAC,EACD,OAAO,SAAW,YAAY,OAAS,EACvC,OAAO,iBAAiB,SAAU,SAAU,MAAO,CACjD,SAAS,MAAM,OAAO,KAAK,CAC7B,CAAC,EACD,QAAQ,YAAY,MAAM,EACnB,OACT,CAEA,SAAS,eAAe,IAAK,MAAO,OAAQ,CAC1C,GAAK,IAAI,YACT,KAAI,SAAW,oBAAoB,KAAK,EACpC,gBAAkB,SAAS,MAAM,EAAG,MAAM,YAAY,EAG1D,GAFA,IAAI,YAAY,UAAY,GAExB,CAAC,MAAM,SAAS,OAAQ,CAC1B,IAAI,YAAY,YAAY,YAAY,sBAAsB,CAAC,EAC/D,eAAe,IAAK,EAAK,EACzB,MACF,CAEA,GAAI,CAAC,SAAS,OAAQ,CACpB,IAAI,YAAY,YAAY,YAAY,sBAAsB,CAAC,EAC/D,eAAe,IAAK,EAAK,EACzB,MACF,CAEA,gBAAgB,QAAQ,SAAU,QAAS,CACzC,IAAI,QAAU,YAAY,QAAS,eAAe,QAAS,MAAM,EAAG,gBAAgB,QAAS,MAAM,CAAC,EAChG,KAAO,SAAS,cAAc,QAAQ,EAC1C,KAAK,UAAY,sBACjB,KAAK,KAAO,SACZ,KAAK,aAAa,eAAgB,gBAAgB,QAAS,KAAK,EAAI,OAAS,OAAO,EACpF,KAAK,iBAAiB,QAAS,UAAY,CACzC,aAAa,QAAS,MAAO,MAAM,EACnC,UAAU,IAAK,MAAO,MAAM,EAC5B,UAAU,IAAK,EAAE,CACnB,CAAC,EAED,IAAI,MAAQ,SAAS,cAAc,MAAM,EACzC,MAAM,UAAY,4BAElB,IAAI,MAAQ,SAAS,cAAc,KAAK,EACxC,MAAM,UAAY,0BAClB,MAAM,IAAM,gBAAgB,QAAS,OAAO,EAC5C,MAAM,IAAM,QAAQ,MACpB,MAAM,QAAU,OAChB,MAAM,YAAY,KAAK,EAEvB,IAAI,MAAQ,SAAS,cAAc,MAAM,EACzC,MAAM,UAAY,4BAClB,MAAM,YAAc,QAAQ,MAE5B,IAAI,OAAS,SAAS,cAAc,MAAM,EAC1C,OAAO,UAAY,6BACnB,OAAO,YAAc,QAAQ,QAAU,cAAc,OAAO,EAE5D,IAAI,MAAQ,SAAS,cAAc,MAAM,EACzC,MAAM,UAAY,4BAClB,MAAM,YAAc,QAAU,YAAY,gBAAgB,OAAO,EAAG,gBAAgB,QAAS,MAAM,CAAC,EAEpG,KAAK,YAAY,KAAK,EACtB,KAAK,YAAY,KAAK,EACtB,KAAK,YAAY,MAAM,EACvB,KAAK,YAAY,KAAK,EACtB,IAAI,YAAY,YAAY,IAAI,CAClC,CAAC,EAED,eAAe,IAAK,SAAS,OAAS,gBAAgB,MAAM,EAC9D,CAEA,SAAS,cAAc,IAAK,MAAO,OAAQ,CACzC,IAAI,WAAa,MAAM,WACnB,MAAQ,WAAW,OAAO,SAAU,IAAK,UAAW,CACtD,OAAO,IAAM,WAAW,UAAU,SAAW,UAAU,QAAQ,MAAQ,UAAU,QAAQ,MAAM,OAAS,CAAC,CAC3G,EAAG,CAAC,EACA,MAAQ,WAAW,OACnB,SAAW,WAAW,CAAC,GAAK,WAAW,CAAC,EAAE,SAAW,WAAW,CAAC,EAAE,QAAQ,MAC3E,WAAW,CAAC,EAAE,QAAQ,MAAM,aAC5B,MAAM,SAAS,CAAC,EAAI,gBAAgB,MAAM,SAAS,CAAC,EAAG,MAAM,EAAI,OAAO,UAAY,MAEpF,IAAI,gBAAe,IAAI,cAAc,YAAc,QAAU,EAAI,YAAc,MAAQ,aACvF,IAAI,aAAY,IAAI,WAAW,YAAc,YAAY,MAAO,QAAQ,GACxE,IAAI,cACN,IAAI,YAAY,YAAc,MAC1B,OAAS,QAAU,EAAI,oBAAsB,sBAC7C,wBAEF,IAAI,UACN,IAAI,QAAQ,SAAW,EAAE,WAAW,QAAU,WAAW,MAAM,SAAU,UAAW,CAClF,OAAO,iBAAiB,UAAU,OAAO,CAC3C,CAAC,GAEL,CAEA,SAAS,iBAAiB,IAAK,MAAO,CACpC,IAAI,KAAO,aAAa,MAAM,SAAS,QAAQ,SAAU,QAAS,CAChE,OAAO,QAAQ,KAAK,IAAI,QAAQ,EAAE,OAAO,OAAO,CAClD,CAAC,CAAC,EAAE,KAAK,EAKT,GAJA,WAAW,IAAI,UAAW,CAAC,KAAK,EAAE,OAAO,IAAI,EAAG,MAAM,IAAK,SAAU,MAAO,CAC1E,OAAO,QAAU,MAAQ,MAAQ,KACnC,CAAC,EAEG,IAAI,eAAgB,CACtB,IAAI,UAAY,aAAa,MAAM,SAAS,IAAI,SAAU,QAAS,CACjE,OAAO,QAAQ,QACjB,CAAC,CAAC,EAAE,OAAO,OAAO,EACd,CAAC,KAAK,EAAE,OAAO,SAAS,EAAE,QAAQ,MAAM,QAAQ,IAAM,KACxD,MAAM,SAAW,UAAU,CAAC,GAAK,OAEnC,WAAW,IAAI,eAAgB,CAAC,KAAK,EAAE,OAAO,SAAS,EAAG,MAAM,SAAU,SAAU,MAAO,CACzF,OAAO,QAAU,MAAQ,MAAQ,cAAc,CAAE,SAAU,KAAM,CAAC,CACpE,CAAC,CACH,CAEA,mBAAmB,IAAK,KAAK,CAC/B,CAEA,SAAS,WAAW,OAAQ,OAAQ,SAAU,QAAS,CAChD,SACL,OAAO,UAAY,GACnB,OAAO,QAAQ,SAAU,MAAO,CAC9B,IAAI,OAAS,SAAS,cAAc,QAAQ,EAC5C,OAAO,MAAQ,MACf,OAAO,YAAc,QAAQ,KAAK,EAClC,OAAO,SAAW,QAAU,SAC5B,OAAO,YAAY,MAAM,CAC3B,CAAC,EACD,OAAO,SAAW,OAAO,OAAS,EACpC,CAEA,SAAS,mBAAmB,IAAK,MAAO,CAClC,IAAI,cAAa,IAAI,YAAY,MAAQ,MAAM,QAC/C,IAAI,YAAW,IAAI,UAAU,MAAQ,MAAM,KAC3C,IAAI,iBAAgB,IAAI,eAAe,MAAQ,MAAM,UACrD,IAAI,aAAY,IAAI,WAAW,MAAQ,MAAM,KACnD,CAEA,SAAS,aAAa,KAAM,OAAQ,CAClC,IAAI,SAAW,qBAAqB,IAAI,EACxC,OAAI,SAAS,OAAe,QAAQ,QAAQ,QAAQ,EAEhD,MAAM,QAAQ,OAAO,QAAQ,GAAK,OAAO,SAAS,OAC7C,QAAQ,QAAQ,OAAO,SAAS,IAAI,mBAAmB,EAAE,OAAO,gBAAgB,CAAC,EAGtF,OAAO,uBAAyB,OAAO,iBAClC,wBAAwB,MAAM,EAGnC,OAAO,kBACF,oBAAoB,OAAO,iBAAiB,EAGjD,OAAO,iBACF,oBAAoB,gBAAkB,OAAO,iBAAmB,yBAA2B,OAAO,aAAe,GAAG,EAGtH,QAAQ,QAAQ,CAAC,CAAC,CAC3B,CAEA,SAAS,qBAAqB,KAAM,CAClC,IAAI,OAAS,KAAK,cAAc,oCAAoC,EACpE,GAAI,CAAC,QAAU,CAAC,OAAO,YAAY,KAAK,EAAG,MAAO,CAAC,EACnD,GAAI,CACF,IAAI,OAAS,KAAK,MAAM,OAAO,WAAW,EACtC,SAAW,MAAM,QAAQ,MAAM,EAAI,OAAS,OAAO,UAAY,CAAC,EACpE,OAAO,SAAS,IAAI,mBAAmB,EAAE,OAAO,gBAAgB,CAClE,OAAS,MAAO,CACd,MAAO,CAAC,CACV,CACF,CAEA,SAAS,oBAAoB,IAAK,CAChC,OAAO,MAAM,IAAK,CAChB,YAAa,cACb,QAAS,CAAE,OAAU,kBAAmB,CAC1C,CAAC,EACE,KAAK,SAAU,SAAU,CACxB,GAAI,CAAC,SAAS,GAAI,MAAM,IAAI,MAAM,qBAAuB,SAAS,MAAM,EACxE,OAAO,SAAS,KAAK,CACvB,CAAC,EACA,KAAK,SAAU,QAAS,CACvB,OAAQ,QAAQ,UAAY,CAAC,GAAG,IAAI,mBAAmB,EAAE,OAAO,gBAAgB,CAClF,CAAC,CACL,CAEA,SAAS,wBAAwB,OAAQ,CACvC,IAAI,SAAW,SAAW,OAAO,YAAc,WAAa,gBACxD,MAAQ,CACV,8DACA,kCACA,gCACA,gBACA,kDACA,qDACA,kEACA,kCACA,iCACA,oBACA,wCACA,iDACA,4CACA,6CACA,cACA,YACA,UACA,QACA,MACA,GACF,EAAE,KAAK,IAAI,EAEX,OAAO,MAAM,SAAU,CACrB,OAAQ,OACR,YAAa,cACb,QAAS,CACP,eAAgB,mBAChB,oCAAqC,OAAO,qBAC9C,EACA,KAAM,KAAK,UAAU,CACnB,MAAO,MACP,UAAW,CACT,OAAQ,OAAO,iBACf,MAAO,SAAS,OAAO,YAAa,EAAE,GAAK,EAC7C,CACF,CAAC,CACH,CAAC,EACE,KAAK,SAAU,SAAU,CACxB,GAAI,CAAC,SAAS,GAAI,MAAM,IAAI,MAAM,2BAA6B,SAAS,MAAM,EAC9E,OAAO,SAAS,KAAK,CACvB,CAAC,EACA,KAAK,SAAU,QAAS,CACvB,GAAI,QAAQ,QAAU,QAAQ,OAAO,OAAQ,MAAM,IAAI,MAAM,QAAQ,OAAO,CAAC,EAAE,OAAO,EACtF,UAAW,QAAQ,MAAQ,CAAC,GAAG,YAAc,CAAC,GAAG,UAAY,CAAC,GAAG,OAAS,CAAC,GACxE,IAAI,0BAA0B,EAC9B,OAAO,gBAAgB,CAC5B,CAAC,CACL,CAEA,SAAS,oBAAoB,QAAS,CAEpC,OADI,QAAQ,UAAY,QAAQ,SAAS,OACrC,OAAO,QAAQ,IAAM,EAAE,EAAE,QAAQ,gBAAgB,IAAM,EAAU,2BAA2B,OAAO,EAChG,wBAAwB,OAAO,CACxC,CAEA,SAAS,2BAA2B,QAAS,CAC3C,IAAI,cAAgB,mBAAmB,QAAQ,aAAa,EACxD,MAAQ,YAAY,CAAC,aAAa,EAAE,OAAO,MAAM,QAAQ,MAAM,EAAE,IAAI,SAAU,MAAO,CACxF,OAAO,mBAAmB,KAAK,CACjC,CAAC,CAAC,CAAC,EACC,OAAS,MAAM,IAAI,SAAU,MAAO,CACtC,OAAO,MAAM,GACf,CAAC,EAAE,OAAO,OAAO,EACb,SAAW,cAAc,KAAO,OAAO,CAAC,GAAK,GAC7C,SAAW,MAAM,QAAQ,QAAQ,EAAE,IAAI,SAAU,QAAS,CAC5D,MAAO,CACL,GAAI,OAAO,QAAQ,EAAE,EACrB,UAAW,aAAa,QAAQ,EAAE,EAClC,MAAO,QAAQ,OAAS,GACxB,UAAW,QAAQ,mBAAqB,GACxC,MAAO,eAAe,QAAQ,KAAK,EACnC,gBAAiB,QAAQ,iBAAmB,CAAC,EAC7C,MAAO,eAAe,QAAQ,OAAS,QAAQ,MAAM,OAAQ,QAAQ,OAAS,QAAQ,MAAM,YAAY,CAC1G,CACF,CAAC,EAAE,OAAO,SAAU,QAAS,CAC3B,OAAO,QAAQ,SACjB,CAAC,EAEG,WAAa,CACf,GAAI,OAAO,QAAQ,EAAE,EACrB,OAAQ,QAAQ,QAAU,GAC1B,MAAO,QAAQ,OAAS,GACxB,OAAQ,QAAQ,QAAU,GAC1B,KAAM,QAAQ,MAAQ,CAAC,EACvB,MAAO,SACP,OAAQ,OACR,MAAO,MACP,QAAS,QAAQ,SAAW,CAAC,EAC7B,YAAa,QAAQ,aAAe,GACpC,SAAU,QACZ,EACA,kBAAW,SAAW,cAAc,UAAU,EACvC,UACT,CAEA,SAAS,wBAAwB,QAAS,CACxC,IAAI,cAAgB,mBAAmB,QAAQ,gBAAkB,QAAQ,oBAAsB,QAAQ,KAAK,EACxG,MAAQ,YAAY,CAAC,aAAa,EAAE,QAAQ,QAAQ,QAAU,CAAC,GAAG,IAAI,SAAU,MAAO,CACzF,OAAO,mBAAmB,KAAK,CACjC,CAAC,CAAC,CAAC,EACC,OAAS,MAAM,IAAI,SAAU,MAAO,CACtC,OAAO,MAAM,GACf,CAAC,EAAE,OAAO,OAAO,EACb,SAAW,cAAc,KAAO,OAAO,CAAC,GAAK,GAC7C,aAAe,QAAQ,SAAW,CAAC,GAAG,IAAI,SAAU,OAAQ,MAAO,CACrE,OAAO,OAAO,QAAW,SAAW,OAAS,OAAO,MAAQ,WAAa,MAAQ,EACnF,CAAC,EACG,aAAe,CAAC,EAAG,EAAG,CAAC,EAAE,IAAI,SAAU,MAAO,CAChD,OAAO,cAAc,QAAQ,UAAY,CAAC,GAAG,IAAI,SAAU,QAAS,CAClE,OAAO,QAAQ,UAAY,MAAQ,EAAE,CACvC,CAAC,CAAC,CACJ,CAAC,EACG,QAAU,YAAY,IAAI,SAAU,KAAM,MAAO,CACnD,MAAO,CAAE,KAAM,KAAM,OAAQ,aAAa,KAAK,GAAK,CAAC,CAAE,CACzD,CAAC,EACG,UAAY,QAAQ,UAAY,CAAC,GAAG,IAAI,SAAU,QAAS,CAC7D,MAAO,CACL,GAAI,OAAO,QAAQ,EAAE,EACrB,UAAW,aAAa,QAAQ,EAAE,EAClC,MAAO,QAAQ,OAAS,GACxB,UAAW,QAAQ,YAAc,IAAS,QAAQ,qBAAuB,GACzE,MAAO,eAAe,QAAQ,gBAAkB,QAAQ,KAAK,EAC7D,gBAAiB,CAAC,EAAG,EAAG,CAAC,EAAE,IAAI,SAAU,MAAO,CAC9C,MAAO,CACL,KAAM,YAAY,KAAK,GAAK,WAAa,MAAQ,GACjD,MAAO,QAAQ,UAAY,MAAQ,EAAE,GAAK,EAC5C,CACF,CAAC,EAAE,OAAO,SAAU,OAAQ,CAC1B,OAAO,OAAO,KAChB,CAAC,EACD,MAAO,eAAe,QAAQ,OAAS,QAAQ,MAAO,QAAQ,UAAY,KAAK,CACjF,CACF,CAAC,EAAE,OAAO,SAAU,QAAS,CAC3B,OAAO,QAAQ,SACjB,CAAC,EAEG,WAAa,CACf,GAAI,OAAO,QAAQ,EAAE,EACrB,OAAQ,QAAQ,QAAU,GAC1B,MAAO,QAAQ,OAAS,GACxB,OAAQ,QAAQ,QAAU,GAC1B,KAAM,cAAc,QAAQ,IAAI,EAChC,MAAO,SACP,OAAQ,OACR,MAAO,MACP,QAAS,QACT,YAAa,QAAQ,cAAgB,QAAQ,MAAQ,GACrD,SAAU,QACZ,EACA,kBAAW,SAAW,cAAc,UAAU,EACvC,UACT,CAEA,SAAS,MAAM,MAAO,CACpB,OAAK,MACD,MAAM,QAAQ,KAAK,EAAU,MAC7B,MAAM,QAAQ,MAAM,KAAK,EAAU,MAAM,MACzC,MAAM,QAAQ,MAAM,KAAK,EAAU,MAAM,MAAM,IAAI,SAAU,KAAM,CAAE,OAAO,KAAK,IAAM,CAAC,EACrF,CAAC,EAJW,CAAC,CAKtB,CAEA,SAAS,eAAe,MAAO,CAC7B,OAAO,mBAAmB,KAAK,EAAE,GACnC,CAEA,SAAS,mBAAmB,MAAO,CACjC,OAAK,MACD,OAAO,OAAU,SAAiB,CAAE,IAAK,MAAO,IAAK,GAAI,MAAO,EAAG,OAAQ,CAAE,EAC1E,CACL,IAAK,MAAM,KAAO,MAAM,KAAO,MAAM,eAAiB,MAAM,cAAc,KAAO,GACjF,IAAK,MAAM,SAAW,MAAM,KAAO,MAAM,UAAY,GACrD,MAAO,MAAM,OAAS,EACtB,OAAQ,MAAM,QAAU,CAC1B,EAPmB,CAAE,IAAK,GAAI,IAAK,GAAI,MAAO,EAAG,OAAQ,CAAE,CAQ7D,CAEA,SAAS,YAAY,MAAO,CAC1B,IAAI,KAAO,CAAC,EACZ,OAAO,MAAM,IAAI,SAAU,MAAO,CAChC,OAAO,OAAO,OAAU,SAAW,mBAAmB,KAAK,EAAI,KACjE,CAAC,EAAE,OAAO,SAAU,MAAO,CACzB,IAAI,IAAM,OAAS,MAAM,IACzB,MAAI,CAAC,KAAO,KAAK,GAAG,EAAU,IAC9B,KAAK,GAAG,EAAI,GACL,GACT,CAAC,CACH,CAEA,SAAS,eAAe,MAAO,SAAU,CACvC,IAAI,OAAS,WAAW,OAAS,CAAC,EAClC,OAAI,OAAO,SAAS,MAAM,GAAK,OAAS,MAAK,OAAS,OAAS,KACxD,CAAE,OAAQ,OAAO,QAAQ,CAAC,EAAG,aAAc,UAAY,KAAM,CACtE,CAEA,SAAS,cAAc,KAAM,CAC3B,OAAI,MAAM,QAAQ,IAAI,EAAU,KACzB,OAAO,MAAQ,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,SAAU,IAAK,CAAE,OAAO,IAAI,KAAK,CAAG,CAAC,EAAE,OAAO,OAAO,CAChG,CAEA,SAAS,iBAAiB,QAAS,CACjC,OAAO,SAAW,QAAQ,UAAY,QAAQ,SAAS,QAAU,QAAQ,KAC3E,CAEA,SAAS,oBAAoB,MAAO,CAClC,IAAI,SAAW,MAAM,SAAS,OAAO,SAAU,QAAS,CACtD,IAAI,SAAW,CAAC,QAAQ,MAAO,QAAQ,OAAQ,QAAQ,YAAa,QAAQ,MAAM,EAAE,OAAO,QAAQ,IAAI,EAAE,KAAK,GAAG,EAAE,YAAY,EAC3H,SAAW,MAAM,MAAQ,OAAS,QAAQ,KAAK,IAAI,QAAQ,EAAE,QAAQ,MAAM,GAAG,IAAM,GACpF,cAAgB,MAAM,WAAa,OAAS,QAAQ,WAAa,MAAM,SACvE,YAAc,CAAC,MAAM,QAAU,SAAS,QAAQ,MAAM,MAAM,IAAM,GACtE,OAAO,UAAY,eAAiB,WACtC,CAAC,EAED,OAAI,MAAM,OAAS,YACjB,SAAS,KAAK,SAAU,EAAG,EAAG,CAAE,OAAO,gBAAgB,CAAC,EAAI,gBAAgB,CAAC,CAAG,CAAC,EACxE,MAAM,OAAS,aACxB,SAAS,KAAK,SAAU,EAAG,EAAG,CAAE,OAAO,gBAAgB,CAAC,EAAI,gBAAgB,CAAC,CAAG,CAAC,EACxE,MAAM,OAAS,aACxB,SAAS,KAAK,SAAU,EAAG,EAAG,CAAE,OAAO,EAAE,MAAM,cAAc,EAAE,KAAK,CAAG,CAAC,EAGnE,QACT,CAEA,SAAS,aAAa,QAAS,MAAO,OAAQ,CAC5C,IAAI,KAAO,eAAe,QAAS,MAAM,EACrC,MAAQ,gBAAgB,QAAS,MAAM,EACvC,QAAU,YAAY,QAAS,KAAM,KAAK,EAC1C,UAAY,CACd,GAAI,aAAe,KAAK,IAAI,EAAI,IAAM,KAAK,MAAM,KAAK,OAAO,EAAI,GAAM,EACvE,QAAS,QACT,QAAS,QACT,KAAM,uBAAuB,QAAS,MAAM,GAAK,KACjD,MAAO,0BAA0B,QAAS,CAAC,QAAS,SAAU,UAAU,CAAC,GAAK,MAC9E,EAAG,GAAM,MAAM,WAAW,OAAS,EAAK,GACxC,EAAG,GAAM,MAAM,WAAW,OAAS,EAAK,GACxC,MAAO,aAAa,KAAM,QAAQ,QAAQ,CAC5C,EACA,eAAe,SAAS,EACxB,MAAM,WAAW,KAAK,SAAS,EAC/B,MAAM,oBAAsB,UAAU,EACxC,CAEA,SAAS,gBAAgB,MAAO,GAAI,CAClC,MAAM,WAAa,MAAM,WAAW,OAAO,SAAU,UAAW,CAC9D,OAAO,UAAU,KAAO,EAC1B,CAAC,EACD,MAAM,oBAAsB,MAAM,WAAW,OAAS,MAAM,WAAW,MAAM,WAAW,OAAS,CAAC,EAAE,GAAK,EAC3G,CAEA,SAAS,wBAAwB,UAAW,CAC1C,UAAU,QAAU,YAAY,UAAU,QAAS,UAAU,KAAM,UAAU,KAAK,EAClF,UAAU,KAAO,uBAAuB,UAAU,QAAS,MAAM,GAAK,UAAU,KAChF,UAAU,MAAQ,0BAA0B,UAAU,QAAS,CAAC,QAAS,SAAU,UAAU,CAAC,GAAK,UAAU,KAC/G,CAEA,SAAS,wBAAwB,UAAW,SAAU,MAAO,OAAQ,CACnE,GAAI,UAAU,QAAQ,WAAa,SACnC,KAAI,QAAU,mBAAmB,UAAU,QAAS,SAAU,MAAM,QAAQ,EACvE,UACL,UAAU,QAAU,QACpB,UAAU,KAAO,cAAc,gBAAgB,QAAS,MAAM,EAAG,UAAU,IAAI,GAAK,eAAe,QAAS,MAAM,EAClH,UAAU,MAAQ,cAAc,eAAe,OAAO,EAAG,UAAU,KAAK,GAAK,gBAAgB,QAAS,MAAM,EAC5G,UAAU,MAAQ,aAAa,UAAU,KAAM,QAAQ,QAAQ,EAC/D,wBAAwB,SAAS,EACjC,eAAe,SAAS,GAC1B,CAEA,SAAS,YAAY,QAAS,KAAM,MAAO,CACzC,GAAI,CAAC,SAAW,CAAC,QAAQ,SAAS,OAAQ,OAAO,KACjD,IAAI,UAAY,QAAQ,SAAS,OAAO,SAAU,QAAS,CAAE,OAAO,QAAQ,YAAc,EAAO,CAAC,EAC9F,MAAQ,UAAU,KAAK,SAAU,QAAS,CAC5C,OAAO,cAAc,QAAS,OAAQ,IAAI,GAAK,iBAAiB,QAAS,CAAC,QAAS,SAAU,UAAU,EAAG,KAAK,CACjH,CAAC,EACG,SAAW,UAAU,KAAK,SAAU,QAAS,CAC/C,OAAO,cAAc,QAAS,OAAQ,IAAI,CAC5C,CAAC,EACG,UAAY,UAAU,KAAK,SAAU,QAAS,CAChD,OAAO,iBAAiB,QAAS,CAAC,QAAS,SAAU,UAAU,EAAG,KAAK,CACzE,CAAC,EACD,OAAO,OAAS,UAAY,WAAa,UAAU,CAAC,GAAK,QAAQ,SAAS,CAAC,CAC7E,CAEA,SAAS,cAAc,QAAS,WAAY,MAAO,CACjD,OAAK,MACE,QAAQ,gBAAgB,KAAK,SAAU,OAAQ,CACpD,OAAO,OAAO,KAAK,YAAY,EAAE,QAAQ,UAAU,IAAM,IAAM,OAAO,QAAU,KAClF,CAAC,EAHkB,EAIrB,CAEA,SAAS,iBAAiB,QAAS,YAAa,MAAO,CACrD,OAAK,MACE,YAAY,KAAK,SAAU,OAAQ,CACxC,OAAO,cAAc,QAAS,OAAQ,KAAK,CAC7C,CAAC,EAHkB,EAIrB,CAEA,SAAS,uBAAuB,QAAS,WAAY,CACnD,GAAI,CAAC,QAAS,MAAO,GACrB,IAAI,OAAS,QAAQ,gBAAgB,KAAK,SAAU,KAAM,CACxD,OAAO,OAAO,KAAK,MAAQ,EAAE,EAAE,YAAY,EAAE,QAAQ,UAAU,IAAM,EACvE,CAAC,EACD,OAAO,OAAS,OAAO,MAAQ,EACjC,CAEA,SAAS,0BAA0B,QAAS,YAAa,CACvD,GAAI,CAAC,QAAS,MAAO,GACrB,IAAI,OAAS,QAAQ,gBAAgB,KAAK,SAAU,KAAM,CACxD,IAAI,KAAO,OAAO,KAAK,MAAQ,EAAE,EAAE,YAAY,EAC/C,OAAO,YAAY,KAAK,SAAU,OAAQ,CACxC,OAAO,KAAK,QAAQ,MAAM,IAAM,EAClC,CAAC,CACH,CAAC,EACD,OAAO,OAAS,OAAO,MAAQ,EACjC,CAEA,SAAS,gBAAgB,QAAS,WAAY,CAC5C,OAAQ,QAAQ,SAAW,CAAC,GAAG,OAAO,SAAU,OAAQ,CACtD,OAAO,OAAO,MAAQ,OAAO,KAAK,YAAY,EAAE,QAAQ,UAAU,IAAM,EAC1E,CAAC,EAAE,QAAQ,SAAU,OAAQ,CAC3B,OAAO,OAAO,QAAU,CAAC,CAC3B,CAAC,CACH,CAEA,SAAS,eAAe,QAAS,CAC/B,OAAO,aACL,gBAAgB,QAAS,OAAO,EAC7B,OAAO,gBAAgB,QAAS,QAAQ,CAAC,EACzC,OAAO,gBAAgB,QAAS,UAAU,CAAC,CAChD,CACF,CAEA,SAAS,eAAe,QAAS,OAAQ,CACvC,IAAI,OAAS,gBAAgB,QAAS,MAAM,EAC5C,OAAO,cAAc,OAAQ,OAAO,WAAW,GAAK,OAAO,CAAC,GAAK,EACnE,CAEA,SAAS,gBAAgB,QAAS,OAAQ,CACxC,IAAI,OAAS,eAAe,OAAO,EACnC,OAAO,cAAc,OAAQ,OAAO,YAAY,GAAK,OAAO,CAAC,GAAK,EACpE,CAEA,SAAS,mBAAmB,QAAS,MAAO,CAC1C,IAAI,KAAO,eAAe,OAAO,EACjC,OAAO,aAAa,MAAM,SAAS,OAAO,SAAU,KAAM,CACxD,OAAO,eAAe,IAAI,IAAM,MAAQ,uBAAuB,IAAI,IAAM,uBAAuB,OAAO,CACzG,CAAC,EAAE,IAAI,SAAU,KAAM,CACrB,OAAO,KAAK,QACd,CAAC,CAAC,EAAE,KAAK,SAAU,EAAG,EAAG,CACvB,OAAO,IAAM,QAAU,GAAK,IAAM,QAAU,EAAI,EAAE,cAAc,CAAC,CACnE,CAAC,CACH,CAEA,SAAS,mBAAmB,QAAS,SAAU,SAAU,CACvD,IAAI,KAAO,eAAe,OAAO,EAC7B,MAAQ,uBAAuB,OAAO,EAC1C,OAAO,SAAS,KAAK,SAAU,KAAM,CACnC,OAAO,KAAK,WAAa,UAAY,eAAe,IAAI,IAAM,IAChE,CAAC,GAAK,SAAS,KAAK,SAAU,KAAM,CAClC,OAAO,KAAK,WAAa,UAAY,uBAAuB,IAAI,IAAM,KACxE,CAAC,CACH,CAEA,SAAS,eAAe,QAAS,CAC/B,OAAO,OAAO,QAAQ,QAAU,uBAAuB,OAAO,CAAC,EAC5D,YAAY,EACZ,QAAQ,yCAA0C,EAAE,EACpD,QAAQ,KAAM,EAAE,CACrB,CAEA,SAAS,uBAAuB,QAAS,CACvC,OAAO,OAAO,QAAQ,OAAS,EAAE,EAC9B,YAAY,EACZ,QAAQ,0CAA2C,EAAE,EACrD,QAAQ,OAAQ,GAAG,EACnB,KAAK,CACV,CAEA,SAAS,UAAU,MAAO,UAAW,IAAK,MAAO,OAAQ,CACvD,MAAM,eAAe,EACrB,IAAI,UAAY,MAAM,UAClB,SAAW,IAAI,KAAK,sBAAsB,EAC1C,OAAS,MAAM,cACnB,OAAO,kBAAkB,SAAS,EAClC,OAAO,UAAU,IAAI,aAAa,EAElC,SAAS,OAAO,UAAW,CACzB,IAAI,GAAM,UAAU,QAAU,SAAS,MAAQ,SAAS,MAAS,IAC7D,GAAM,UAAU,QAAU,SAAS,KAAO,SAAS,OAAU,IACjE,UAAU,EAAI,EACd,UAAU,EAAI,EACd,eAAe,SAAS,EACxB,OAAO,MAAM,YAAY,gBAAiB,UAAU,EAAI,GAAG,EAC3D,OAAO,MAAM,YAAY,gBAAiB,UAAU,EAAI,GAAG,CAC7D,CAEA,SAAS,MAAO,CACd,OAAO,UAAU,OAAO,aAAa,EACrC,OAAO,sBAAsB,SAAS,EACtC,OAAO,oBAAoB,cAAe,MAAM,EAChD,OAAO,oBAAoB,YAAa,IAAI,EAC5C,OAAO,oBAAoB,gBAAiB,IAAI,EAChD,UAAU,IAAK,MAAO,MAAM,CAC9B,CAEA,OAAO,KAAK,EACZ,OAAO,iBAAiB,cAAe,MAAM,EAC7C,OAAO,iBAAiB,YAAa,IAAI,EACzC,OAAO,iBAAiB,gBAAiB,IAAI,CAC/C,CAEA,SAAS,eAAe,UAAW,CACjC,IAAI,UAAY,UAAU,MAAQ,EAC9B,cAAiB,UAAU,MAAQ,kBAAqB,iBACxD,WAAa,cAAgB,EACjC,UAAU,EAAI,MAAM,UAAU,EAAG,UAAW,IAAM,SAAS,EAC3D,UAAU,EAAI,MAAM,UAAU,EAAG,WAAY,IAAM,UAAU,CAC/D,CAEA,SAAS,aAAa,KAAM,SAAU,CACpC,IAAI,KAAO,OAAO,MAAQ,EAAE,EAAE,YAAY,EACtC,KAAO,GACX,OAAI,KAAK,QAAQ,IAAI,IAAM,GAAI,KAAO,GAC7B,KAAK,QAAQ,IAAI,IAAM,GAAI,KAAO,GAClC,KAAK,QAAQ,IAAI,IAAM,GAAI,KAAO,GAClC,KAAK,QAAQ,IAAI,IAAM,GAAI,KAAO,GAClC,KAAK,QAAQ,IAAI,IAAM,KAAI,KAAO,IACvC,WAAa,WAAU,MAAQ,GAC5B,IACT,CAEA,SAAS,MAAM,MAAO,IAAK,IAAK,CAC9B,OAAO,KAAK,IAAI,IAAK,KAAK,IAAI,IAAK,KAAK,CAAC,CAC3C,CAEA,SAAS,gBAAgB,OAAQ,CAC/B,MAAO,EAAQ,OAAO,QAAQ,+DAA+D,CAC/F,CAEA,SAAS,gBAAgB,QAAS,QAAS,CACzC,OAAO,SAAW,QAAQ,OAAS,QAAQ,OAAS,QAAQ,QAAU,QAAQ,OAAO,CAAC,GAAK,EAC7F,CAEA,SAAS,gBAAgB,UAAW,MAAO,CACzC,IAAI,QAAU,WAAa,UAAU,QACrC,GAAI,CAAC,QAAS,MAAO,GACrB,IAAI,eAAiB,QAErB,OAAI,QAAQ,WAAa,WACvB,eAAiB,mBAAmB,QAAS,QAAS,MAAM,QAAQ,GAAK,SAGpE,eACL,iBAAiB,cAAc,GAC1B,iBAAiB,OAAO,GACxB,gBAAgB,QAAS,UAAU,OAAO,EAC/C,mBACF,CACF,CAEA,SAAS,eAAe,UAAW,MAAO,CACxC,IAAI,QAAU,WAAa,UAAU,QACrC,GAAI,CAAC,QAAS,MAAO,IACrB,IAAI,eAAiB,QAAQ,WAAa,UACtC,mBAAmB,QAAS,QAAS,MAAM,QAAQ,GAAK,QAExD,MAAQ,iBAAiB,cAAc,GAAK,iBAAiB,OAAO,EACpE,KAAO,MAAQ,UAAU,KAAK,EAAI,GAEtC,MADI,CAAC,MACD,KAAK,QAAQ,KAAK,IAAM,IAAM,KAAK,QAAQ,OAAO,IAAM,IAAM,KAAK,QAAQ,cAAc,IAAM,GAAW,IAC1G,KAAK,QAAQ,MAAM,IAAM,IAAM,KAAK,QAAQ,UAAU,IAAM,GAAW,OACpE,GACT,CAEA,SAAS,iBAAiB,QAAS,CACjC,IAAI,MAAQ,iBAAiB,OAAO,EACpC,OAAO,MAAQ,MAAM,IAAM,EAC7B,CAEA,SAAS,iBAAiB,QAAS,CACjC,IAAI,KAAO,KACP,UAAY,EAChB,uBAAgB,OAAO,EAAE,QAAQ,SAAU,MAAO,MAAO,CACvD,IAAI,MAAQ,kBAAkB,MAAO,KAAK,EACtC,MAAQ,YACV,KAAO,MACP,UAAY,MAEhB,CAAC,EACM,IACT,CAEA,SAAS,gBAAgB,QAAS,CAChC,GAAI,CAAC,QAAS,MAAO,CAAC,EACtB,IAAI,MAAQ,YAAY,QAAQ,OAAS,CAAC,CAAC,EAC3C,OAAC,QAAQ,QAAU,CAAC,GAAG,QAAQ,SAAU,IAAK,CACxC,KAAO,CAAC,MAAM,KAAK,SAAU,MAAO,CAAE,OAAO,MAAM,MAAQ,GAAK,CAAC,GACnE,MAAM,KAAK,CAAE,IAAK,IAAK,IAAK,GAAI,MAAO,EAAG,OAAQ,CAAE,CAAC,CAEzD,CAAC,EACG,QAAQ,OAAS,CAAC,MAAM,KAAK,SAAU,MAAO,CAAE,OAAO,MAAM,MAAQ,QAAQ,KAAO,CAAC,GACvF,MAAM,QAAQ,CAAE,IAAK,QAAQ,MAAO,IAAK,GAAI,MAAO,EAAG,OAAQ,CAAE,CAAC,EAE7D,KACT,CAEA,SAAS,kBAAkB,MAAO,MAAO,CACvC,IAAI,KAAO,UAAU,KAAK,EACtB,MAAQ,EACZ,OAAI,KAAK,QAAQ,cAAc,IAAM,KAAI,OAAS,KAC9C,KAAK,QAAQ,MAAM,IAAM,KAAI,OAAS,KACtC,KAAK,QAAQ,UAAU,IAAM,KAAI,OAAS,KAC1C,KAAK,QAAQ,SAAS,IAAM,IAAM,KAAK,QAAQ,KAAK,IAAM,IAAM,KAAK,QAAQ,OAAO,IAAM,MAAI,OAAS,KACvG,KAAK,QAAQ,aAAa,IAAM,IAAM,KAAK,QAAQ,aAAa,IAAM,MAAI,OAAS,MACnF,KAAK,QAAQ,eAAe,IAAM,IAAM,KAAK,QAAQ,MAAM,IAAM,IAAM,KAAK,QAAQ,KAAK,IAAM,MAAI,OAAS,KAC5G,KAAK,QAAQ,QAAQ,IAAM,KAAI,OAAS,IACrC,MAAQ,KACjB,CAEA,SAAS,UAAU,MAAO,CACxB,MAAO,CACL,OAAS,MAAM,IACf,OAAS,MAAM,KAAO,MAAM,IAAI,MAAM,GAAG,EAAE,IAAI,CACjD,EAAE,KAAK,GAAG,EAAE,YAAY,CAC1B,CAEA,SAAS,eAAe,IAAK,MAAO,CAClC,MAAI,CAAC,KAAO,CAAC,OAAS,IAAI,QAAQ,YAAY,IAAM,GAAW,KAAO,GAClE,aAAa,KAAK,GAAG,EAAU,IAAI,QAAQ,mBAAoB,KAAO,KAAK,EACxE,KAAO,IAAI,QAAQ,GAAG,IAAM,GAAK,UAAY,WAAa,KACnE,CAEA,SAAS,cAAc,MAAO,UAAW,CACvC,IAAI,WAAa,OAAO,OAAS,EAAE,EAAE,YAAY,EACjD,OAAI,WAAW,QAAQ,UAAU,IAAM,IAAM,WAAW,QAAQ,MAAM,IAAM,GAAW,WACnF,WAAW,QAAQ,OAAO,IAAM,GAAW,QAC3C,WAAW,QAAQ,KAAK,IAAM,IAAM,WAAW,QAAQ,MAAM,IAAM,IAAM,WAAW,QAAQ,SAAS,IAAM,IAAM,WAAW,QAAQ,OAAO,IAAM,GAAW,UACzJ,OACT,CAEA,SAAS,cAAc,QAAS,CAC9B,IAAI,KAAO,CAAC,QAAQ,MAAO,QAAQ,OAAQ,QAAQ,WAAW,EAAE,OAAO,QAAQ,MAAQ,CAAC,CAAC,EAAE,KAAK,GAAG,EAAE,YAAY,EACjH,OAAI,KAAK,QAAQ,QAAQ,IAAM,GAAW,SACnC,OACT,CAEA,SAAS,cAAc,QAAS,CAC9B,OAAO,QAAQ,WAAa,SAAW,SAAW,OACpD,CAEA,SAAS,gBAAgB,QAAS,CAChC,OAAO,QAAQ,SAAS,OAAO,SAAU,IAAK,QAAS,CACrD,IAAI,OAAS,WAAW,QAAQ,OAAS,QAAQ,MAAM,QAAU,CAAC,EAClE,OAAO,QAAU,OAAS,IAAM,OAAS,GAC3C,EAAG,OAAO,iBAAiB,GAAK,CAClC,CAEA,SAAS,gBAAgB,QAAS,OAAQ,CACxC,OAAO,QAAQ,SAAS,CAAC,GAAK,QAAQ,SAAS,CAAC,EAAE,OAAS,QAAQ,SAAS,CAAC,EAAE,MAAM,cAAgB,OAAO,UAAY,KAC1H,CAEA,SAAS,gBAAgB,QAAS,MAAO,CACvC,OAAO,MAAM,WAAW,KAAK,SAAU,UAAW,CAChD,OAAO,UAAU,QAAQ,KAAO,QAAQ,EAC1C,CAAC,CACH,CAEA,SAAS,qBAAqB,MAAO,CACnC,MAAM,aAAe,wBACvB,CAEA,SAAS,mBAAmB,OAAQ,CAClC,OAAO,OAAO,kBAAoB,SAAW,SAAW,OAC1D,CAEA,SAAS,eAAe,IAAK,QAAS,CAC/B,IAAI,WACT,IAAI,SAAS,OAAS,CAAC,QACzB,CAEA,SAAS,gBAAgB,IAAK,UAAW,CAClC,IAAI,QACT,IAAI,MAAM,MAAM,gBAAkB,QAAW,UAAU,QAAQ,KAAM,KAAM,EAAI,KAC/E,IAAI,MAAM,UAAU,IAAI,+BAA+B,EACzD,CAEA,SAAS,SAAS,IAAK,CACrB,OAAO,OAAO,KAAO,EAAE,EACpB,QAAQ,iBAAkB,EAAE,EAC5B,QAAQ,gBAAiB,EAAE,EAC3B,QAAQ,kBAAmB,EAAE,EAC7B,QAAQ,iBAAkB,EAAE,EAC5B,KAAK,CACV,CAEA,SAAS,aAAa,OAAQ,CAC5B,IAAI,KAAO,CAAC,EACZ,OAAO,OAAO,OAAO,SAAU,MAAO,CACpC,IAAI,IAAM,OAAO,OAAS,EAAE,EAAE,KAAK,EACnC,MAAI,CAAC,KAAO,KAAK,GAAG,EAAU,IAC9B,KAAK,GAAG,EAAI,GACL,GACT,CAAC,CACH,CAEA,SAAS,cAAc,OAAQ,UAAW,CACxC,GAAI,CAAC,UAAW,MAAO,GACvB,IAAI,MAAQ,OAAO,SAAS,EAAE,YAAY,EAC1C,OAAO,OAAO,KAAK,SAAU,MAAO,CAClC,OAAO,OAAO,KAAK,EAAE,YAAY,IAAM,KACzC,CAAC,GAAK,EACR,CAEA,SAAS,YAAY,OAAQ,SAAU,CACrC,IAAI,OAAS,WAAW,QAAU,CAAC,EACnC,OAAO,IAAI,KAAK,aAAa,OAAW,CACtC,MAAO,WACP,SAAU,UAAY,MACtB,sBAAuB,OAAS,IAAM,EAAI,EAAI,CAChD,CAAC,EAAE,OAAO,MAAM,CAClB,CAEA,SAAS,wBAAwB,OAAQ,SAAU,SAAU,CAC3D,GAAI,CAAC,SAAU,OAAO,YAAY,OAAQ,QAAQ,EAClD,IAAI,OAAS,WAAW,QAAU,CAAC,EACnC,OAAO,SACJ,QAAQ,oCAAqC,OAAO,KAAK,MAAM,MAAM,CAAC,CAAC,EACvE,QAAQ,wBAAyB,OAAO,QAAQ,CAAC,CAAC,CACvD,CAEA,SAAS,aAAa,GAAI,CACxB,IAAI,MAAQ,OAAO,IAAM,EAAE,EAAE,MAAM,QAAQ,EAC3C,OAAO,MAAQ,MAAM,CAAC,EAAI,EAC5B,CAEA,SAAS,iBAAiB,QAAS,CACjC,OAAO,UAAY,QAAQ,YAAc,QAAQ,KAAK,OAAO,QAAQ,EAAE,CAAC,EAAI,QAAQ,GAAK,IAC3F,CAEA,SAAS,cAAc,IAAK,MAAO,OAAQ,CACzC,IAAI,MAAQ,MAAM,WAAW,IAAI,SAAU,UAAW,CACpD,MAAO,CACL,GAAI,iBAAiB,UAAU,OAAO,EACtC,SAAU,CACZ,CACF,CAAC,EAAE,OAAO,SAAU,KAAM,CACxB,OAAO,KAAK,EACd,CAAC,EAED,GAAI,CAAC,MAAM,OAAQ,CACjB,UAAU,IAAK,8BAA8B,EAC7C,MACF,CAKA,GAHA,IAAI,QAAQ,SAAW,GACvB,UAAU,IAAK,WAAW,EAEtB,OAAO,aAAc,CACvB,OAAO,WAAW,UAAY,CAC5B,cAAc,IAAK,MAAO,MAAM,EAChC,UAAU,IAAK,eAAe,CAChC,EAAG,GAAG,EACN,MACF,CAEA,MAAM,eAAgB,CACpB,OAAQ,OACR,YAAa,cACb,QAAS,CACP,eAAgB,mBAChB,OAAU,kBACZ,EACA,KAAM,KAAK,UAAU,CACnB,MAAO,MACP,SAAU,CAAC,cAAe,kBAAkB,EAC5C,aAAc,OAAO,SAAS,QAChC,CAAC,CACH,CAAC,EACE,KAAK,SAAU,SAAU,CACxB,GAAI,CAAC,SAAS,GAAI,MAAM,IAAI,MAAM,iBAAmB,SAAS,MAAM,EACpE,OAAO,SAAS,KAAK,CACvB,CAAC,EACA,KAAK,SAAU,WAAY,CAC1B,0BAAmB,UAAU,EACtB,UAAU,EAAE,KAAK,SAAU,KAAM,CACtC,MAAO,CAAE,KAAM,KAAM,WAAY,UAAW,CAC9C,CAAC,CACH,CAAC,EACA,KAAK,SAAU,OAAQ,CACtB,cAAc,IAAK,MAAO,MAAM,EAChC,cAAc,OAAO,KAAM,MAAO,OAAO,UAAU,EACnD,UAAU,IAAK,gBAAgB,EAC3B,OAAO,iBACT,OAAO,SAAS,KAAO,QAE3B,CAAC,EACA,MAAM,SAAU,MAAO,CACtB,cAAc,IAAK,MAAO,MAAM,EAChC,UAAU,IAAK,MAAM,SAAW,yBAAyB,CAC3D,CAAC,CACL,CAEA,SAAS,WAAY,CACnB,OAAO,MAAM,WAAY,CACvB,YAAa,cACb,QAAS,CAAE,OAAU,kBAAmB,CAC1C,CAAC,EAAE,KAAK,SAAU,SAAU,CAC1B,GAAI,CAAC,SAAS,GAAI,MAAM,IAAI,MAAM,yBAA2B,SAAS,MAAM,EAC5E,OAAO,SAAS,KAAK,CACvB,CAAC,CACH,CAEA,SAAS,cAAc,KAAM,MAAO,WAAY,CAC1C,YAAY,mBAAmB,WAAY,IAAI,EACnD,mBAAmB,IAAI,EACvB,IAAI,OAAS,CAAE,KAAM,KAAM,MAAO,MAAO,OAAQ,sBAAuB,EACxE,SAAS,cAAc,IAAI,YAAY,eAAgB,CAAE,QAAS,GAAM,OAAQ,MAAO,CAAC,CAAC,EACzF,SAAS,cAAc,IAAI,YAAY,eAAgB,CAAE,QAAS,GAAM,OAAQ,MAAO,CAAC,CAAC,EACzF,SAAS,cAAc,IAAI,YAAY,cAAe,CAAE,QAAS,GAAM,OAAQ,MAAO,CAAC,CAAC,EACxF,SAAS,cAAc,IAAI,YAAY,4BAA6B,CAAE,QAAS,GAAM,OAAQ,MAAO,CAAC,CAAC,EACtG,OAAO,cAAc,IAAI,YAAY,eAAgB,CAAE,OAAQ,MAAO,CAAC,CAAC,EAEpE,OAAO,gBAAkB,OAAO,SAAW,OAAO,eAAe,YACnE,OAAO,QAAQ,OAAO,eAAe,WAAY,CAC/C,OAAQ,aACR,iBAAkB,MAAM,CAAC,GAAK,MAAM,CAAC,EAAE,GACvC,SAAU,IACZ,CAAC,EAGH,OAAO,WAAW,UAAY,CAC5B,mBAAmB,IAAI,CACzB,EAAG,EAAE,EACL,OAAO,WAAW,UAAY,CAC5B,mBAAmB,IAAI,CACzB,EAAG,GAAG,CACR,CAEA,SAAS,mBAAmB,WAAY,KAAM,CAC5C,GAAI,CAAC,YAAc,CAAC,WAAW,SAAU,MAAO,GAChD,IAAI,SAAW,GAEf,SAAW,mBAAmB,cAAe,cAAe,WAAW,SAAS,aAAa,CAAC,GAAK,SACnG,SAAW,mBAAmB,mBAAoB,KAAM,WAAW,SAAS,kBAAkB,CAAC,GAAK,SAEpG,IAAI,OAAS,SAAS,cAAc,aAAa,EACjD,GAAI,QAAU,KAAM,CAClB,OAAO,UAAU,OAAO,WAAY,KAAK,aAAe,CAAC,EACzD,IAAI,MAAQ,OAAO,cAAc,gBAAgB,EAC7C,OAAO,MAAM,UAAU,OAAO,WAAY,KAAK,aAAe,CAAC,CACrE,CAEA,OAAO,QACT,CAEA,SAAS,mBAAmB,SAAU,SAAU,KAAM,CACpD,GAAI,CAAC,KAAM,MAAO,GAClB,IAAI,OAAS,SAAW,SAAS,cAAc,QAAQ,EAAI,SAAS,eAAe,QAAQ,EAC3F,GAAI,CAAC,OAAQ,MAAO,GACpB,IAAI,OAAS,IAAI,UAAU,EAAE,gBAAgB,KAAM,WAAW,EAC1D,OAAS,SAAW,OAAO,cAAc,QAAQ,EAAI,OAAO,cAAc,kBAAkB,EAChG,OAAK,QACL,OAAO,UAAY,OAAO,UACnB,IAFa,EAGtB,CAEA,SAAS,mBAAmB,KAAM,CAChC,IAAI,MAAQ,OAAO,MAAQ,KAAK,YAAc,CAAC,EAC/C,CACE,oBACA,2BACA,cACA,sBACA,2BACA,YACF,EAAE,QAAQ,SAAU,SAAU,CAC5B,SAAS,iBAAiB,QAAQ,EAAE,QAAQ,SAAU,KAAM,CAC1D,KAAK,YAAc,MACnB,KAAK,aAAa,cAAe,QAAU,IAAM,OAAS,OAAO,CACnE,CAAC,CACH,CAAC,EAED,SAAS,iBAAiB,oBAAoB,EAAE,QAAQ,SAAU,OAAQ,CACxE,OAAO,UAAU,OAAO,QAAQ,EAChC,OAAO,aAAa,cAAe,QAAU,IAAM,OAAS,OAAO,EACnE,IAAI,MAAQ,OAAO,iBAAiB,MAAM,EAC1C,GAAI,CAAC,MAAM,OAAQ,CACjB,OAAO,YAAc,MACrB,MACF,CACA,MAAM,QAAQ,SAAU,KAAM,EACxB,KAAK,aAAa,aAAa,IAAM,QAAU,KAAK,UAAU,SAAS,iBAAiB,GAAK,cAAc,KAAK,KAAK,WAAW,KAClI,KAAK,YAAc,MAEvB,CAAC,CACH,CAAC,CACH,CAEA,SAAS,kBAAkB,QAAS,cAAe,CACjD,GAAI,CAAC,SAAW,CAAC,cAAe,MAAO,GACvC,IAAI,OAAS,QAAQ,gBAAgB,KAAK,SAAU,KAAM,CACxD,IAAI,KAAO,OAAO,KAAK,MAAQ,EAAE,EAAE,YAAY,EAC/C,OAAQ,KAAK,QAAQ,OAAO,IAAM,IAAM,KAAK,QAAQ,QAAQ,IAAM,IAAM,KAAK,QAAQ,UAAU,IAAM,KACjG,KAAK,QAAU,aACtB,CAAC,EACD,OAAO,OAAS,OAAO,MAAQ,EACjC,CAEA,SAAS,YAAY,KAAM,CACzB,IAAI,KAAO,SAAS,cAAc,KAAK,EACvC,YAAK,UAAY,oBACjB,KAAK,YAAc,KACZ,IACT,CAEA,SAAS,UAAU,IAAK,QAAS,CAC3B,IAAI,SAAQ,IAAI,OAAO,YAAc,SAAW,GACtD,CAEA,MAAM,OAAO,CACf,GAAG",
  "names": []
}
