@ecomiq/storefront 1.1.1 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -4
- package/dist/{chunk-W372BFMG.js → chunk-6TMU4OXP.js} +26 -28
- package/dist/chunk-6TMU4OXP.js.map +1 -0
- package/dist/{chunk-3C4ZLHSU.js → chunk-YSD62KQM.js} +22 -27
- package/dist/chunk-YSD62KQM.js.map +1 -0
- package/dist/chunks/client.css +811 -0
- package/dist/chunks/client.css.map +1 -0
- package/dist/chunks/client.d.ts +1533 -9
- package/dist/chunks/client.js +2874 -27
- package/dist/chunks/client.js.map +1 -1
- package/dist/chunks/config.d.ts +6 -5
- package/dist/chunks/config.js +1 -1
- package/dist/chunks/server-nextjs.d.ts +4 -5
- package/dist/chunks/server-nextjs.js +3 -3
- package/dist/chunks/server-nextjs.js.map +1 -1
- package/dist/chunks/server-tanstack.d.ts +2 -3
- package/dist/chunks/server-tanstack.js +3 -3
- package/dist/chunks/server-tanstack.js.map +1 -1
- package/dist/{ecomiq-oauth-password-plugin-DJCOOij3.d.ts → ecomiq-oauth-password-plugin-gw2dPyYb.d.ts} +12 -0
- package/package.json +1 -1
- package/dist/chunk-3C4ZLHSU.js.map +0 -1
- package/dist/chunk-W372BFMG.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/client/store-api-errors.ts","../../src/core/client/store-api-client.ts","../../src/core/models/product.ts","../../src/core/client/store-api-product.service.ts","../../src/core/models/collection.ts","../../src/core/client/store-api-collection.service.ts","../../src/core/models/page.ts","../../src/core/client/store-api-pages.service.ts","../../src/core/models/cart.ts","../../src/core/client/store-api-cart.service.ts","../../src/core/client/store-api-customer.service.ts","../../src/core/client/store-api-customer-order.service.ts","../../src/core/models/order-draft.ts","../../src/core/client/store-api-order-draft.service.ts","../../src/react/providers/query-provider.tsx","../../src/react/providers/storefront-auth-context.tsx","../../src/react/shell/hooks/use-store-products.ts","../../src/react/shell/hooks/use-store-collections.ts","../../src/react/shell/hooks/use-store-pages.ts","../../src/react/stores/use-cart.ts","../../src/react/shell/hooks/use-store-cart.ts","../../src/react/stores/use-store.ts","../../src/react/shell/providers/EcomiqProvider.tsx","../../src/react/auth/ecomiq-oauth-password-constants.ts","../../src/react/auth/ecomiq-oauth-password-client.ts","../../src/core/models/store.ts","../../src/core/lib/ecomiq-oauth-identity.ts","../../src/react/auth/ecomiq-storefront-sign-in.ts","../../src/core/constants/currency.ts","../../src/core/utils/format-currency.ts","../../src/react/shell/components/product-variant-selector/ProductVariantSelector.tsx"],"names":["z","jsx","useQuery","useQueryClient","useMutation","cart","count","useRef","useEffect","create","QueryClient","QueryClientProvider","React","useState","jsxs"],"mappings":"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","file":"client.js","sourcesContent":["/**\n * Respuesta ProblemDetails / validation típica de la API cuando el carrito ya no existe o no está activo.\n */\nexport function isCartNotActiveApiError(error: unknown): boolean {\n if (!error || typeof error !== \"object\") return false;\n const e = error as { status?: number; body?: unknown };\n if (e.status !== 400) return false;\n const body = e.body as { errors?: Record<string, string[]> } | undefined;\n const keys = body?.errors ? Object.keys(body.errors) : [];\n return keys.includes(\"Carts.NotActive\");\n}\n","/**\n * Cliente para el proxy Next.js (`/api/store/*`), que a su vez llama al API Ecomiq con headers\n * definidos allí (`Authorization`, `X-Store-Id`, etc.). Ecomiq upstream no recibe `Cookie` del navegador.\n *\n * - En browser: base = `/api/store` + `credentials: \"include\"`. Cada request debe llevar `X-Store-Id`\n * (`setClientStoreId` desde `EcomiqProvider`); el proxy no resuelve tienda sin ese header.\n * - En server: URL absoluta vía `setServerRequestOrigin()` y `X-Store-Id` vía `setServerStoreId()` tras\n * `getPublicStore` (settings vía upstream o KV, nunca el proxy sin id).\n */\n\nconst STORE_API_PATH = \"/api/store\";\n\n/** Getter inyectado por la app (usa next/headers). Solo se llama en server. */\nlet serverRequestOriginGetter: string | null = null;\n\n/** Store id inyectado en server tras resolver settings (misma idea que `setServerRequestOrigin`). */\nlet serverStoreIdGetter: string | null = null;\n\n/** Store id en browser; lo asigna `EcomiqProvider` al hidratar la tienda. */\nlet clientStoreIdGetter: string | null = null;\n\n/**\n * Inyectar en server para que las llamadas al proxy usen el mismo origen que la request.\n * Ejemplo en la app: setServerRequestOrigin(getRequestOrigin) con getRequestOrigin usando headers().\n */\nexport function setServerRequestOrigin(getter: string | null): void {\n serverRequestOriginGetter = getter;\n}\n\n/** Inyectar en server el id de tienda ya resuelto (p. ej. tras `getPublicStore`). */\nexport function setServerStoreId(storeId: string | null): void {\n serverStoreIdGetter = storeId?.trim() || null;\n}\n\n/** Inyectar en el cliente el id de tienda (p. ej. desde `EcomiqProvider` con el payload de layout). */\nexport function setClientStoreId(storeId: string | null): void {\n if (typeof window === \"undefined\") return;\n clientStoreIdGetter = storeId?.trim() || null;\n}\n\n/**\n * Resuelve la URL base del API de store.\n * En server usa el getter inyectado; en browser devuelve path relativo.\n */\nexport async function getStoreApiBaseUrl(): Promise<string> {\n if (typeof window !== \"undefined\") {\n return STORE_API_PATH;\n }\n if (serverRequestOriginGetter) {\n return `${serverRequestOriginGetter.replace(/\\/$/, \"\")}/${STORE_API_PATH.replace(/^\\//, \"\")}`;\n }\n return STORE_API_PATH;\n}\n\n/**\n * Crea una instancia del cliente con la base URL indicada.\n * Para obtener la base correcta (sobre todo en server) usar getStoreApiClient().\n */\nexport function createStoreApiClient(baseUrl: string): StoreApiClient {\n return new StoreApiClient(baseUrl);\n}\n\n/**\n * Devuelve una instancia del cliente con la base URL resuelta (misma origen en server).\n * Usar este en servicios en lugar del singleton.\n */\nexport async function getStoreApiClient(): Promise<StoreApiClient> {\n const baseUrl = await getStoreApiBaseUrl();\n return new StoreApiClient(baseUrl);\n}\n\n/** Opciones de request al proxy /api/store (se reenvían al upstream salvo las filtradas por el handler). */\nexport type StoreApiGetOptions = {\n /** Header `X-Store-Id` (prioridad sobre los setters de runtime). */\n xStoreId?: string;\n /** Header X-Store-Domain para que el proxy resuelva la tienda cuando aún no hay `X-Store-Id`. */\n xStoreDomain?: string;\n xCartId?: string;\n /**\n * Bearer hacia `/api/store`. El proxy reenvía ese `Authorization` a Ecomiq (API privada solo acepta Bearer).\n * Omitir cuando el navegador use solo la cookie HttpOnly acotada a `/api/store`.\n */\n bearerToken?: string;\n /**\n * Cache key para el cache incremental.\n */\n cacheKey?: string;\n /**\n * Fuerza lectura fresca en Next/server. Usar cuando el backend ya aplica cache-aside.\n */\n noStore?: boolean;\n};\n\nexport class StoreApiClient {\n private readonly baseUrl: string;\n\n constructor(baseUrl: string = STORE_API_PATH) {\n this.baseUrl = baseUrl.replace(/\\/$/, \"\");\n }\n\n private async request<T>(\n path: string,\n init: RequestInit,\n options?: StoreApiGetOptions\n ): Promise<T> {\n const pathNorm = path.replace(/^\\/+/, \"\");\n const url = path.startsWith(\"http\")\n ? path\n : `${this.baseUrl}/${pathNorm}`;\n\n const headers = new Headers(init.headers ?? {});\n headers.set(\"Content-Type\", \"application/json\");\n headers.set(\"Accept-Encoding\", \"identity\");\n\n const explicitStoreId = options?.xStoreId?.trim();\n const runtimeStoreId =\n explicitStoreId ||\n (typeof window === \"undefined\" ? serverStoreIdGetter : clientStoreIdGetter);\n if (runtimeStoreId && !headers.has(\"x-store-id\")) {\n headers.set(\"X-Store-Id\", runtimeStoreId);\n }\n\n if (options?.xStoreDomain) {\n headers.set(\"X-Store-Domain\", options.xStoreDomain);\n }\n if (options?.xCartId) {\n headers.set(\"X-Cart-Token\", options.xCartId);\n }\n\n const bearer =\n typeof options?.bearerToken === \"string\" && options.bearerToken.trim().length > 0\n ? options.bearerToken.trim()\n : undefined;\n if (bearer) {\n headers.set(\n \"Authorization\",\n bearer.toLowerCase().startsWith(\"bearer \") ? bearer : `Bearer ${bearer}`\n );\n }\n\n const isServer = typeof window === \"undefined\";\n\n const res = await fetch(url, {\n ...init,\n headers,\n credentials: isServer ? \"same-origin\" : \"include\",\n ...(options?.noStore ? { cache: \"no-store\" as RequestCache } : {}),\n ...((options?.cacheKey && isServer && !options?.noStore) ? {\n next: {\n revalidate: 60,\n tags: [options.cacheKey],\n },\n } : {}),\n });\n if (!res.ok) {\n let body: unknown;\n try {\n const errorText = await res.text();\n body = errorText ? JSON.parse(errorText) : undefined;\n } catch {\n body = undefined;\n }\n const msg =\n typeof body === \"object\" &&\n body !== null &&\n \"title\" in body &&\n typeof (body as { title?: unknown }).title === \"string\"\n ? (body as { title: string }).title\n : res.statusText || \"Store API error\";\n const err = new Error(msg) as Error & {\n status?: number;\n body?: unknown;\n };\n err.status = res.status;\n err.body = body;\n throw err;\n }\n const text = await res.text();\n if (!text) return undefined as T;\n return JSON.parse(text) as T;\n }\n\n get<T>(path: string, options?: StoreApiGetOptions): Promise<T> {\n return this.request<T>(path, { method: \"GET\" }, options);\n }\n\n post<T>(path: string, data?: unknown, options?: StoreApiGetOptions): Promise<T> {\n return this.request<T>(\n path,\n {\n method: \"POST\",\n body: data != null ? JSON.stringify(data) : undefined,\n },\n options\n );\n }\n\n patch<T>(path: string, data?: unknown, options?: StoreApiGetOptions): Promise<T> {\n return this.request<T>(path, {\n method: \"PATCH\",\n body: data != null ? JSON.stringify(data) : undefined,\n }, options);\n }\n\n put<T>(path: string, data?: unknown, options?: StoreApiGetOptions): Promise<T> {\n return this.request<T>(\n path,\n {\n method: \"PUT\",\n body: data != null ? JSON.stringify(data) : undefined,\n },\n options\n );\n }\n\n delete<T>(path: string, options?: StoreApiGetOptions): Promise<T> {\n return this.request<T>(path, { method: \"DELETE\" }, options);\n }\n}\n\n/** Cliente por defecto (base relativa). En server preferir getStoreApiClient(). */\nexport const storeApiClient = new StoreApiClient(STORE_API_PATH);\n","import { z } from 'zod';\n\nexport const ProductVariantSchema = z.object({\n id: z.coerce.string(),\n name: z.string(),\n storeId: z.string(),\n productId: z.coerce.string(),\n basePrice: z.number().positive().optional().nullable(),\n comparePrice: z.number().positive().optional().nullable(), //TODO: remove this field\n originalPrice: z.number().positive().optional().nullable(),\n costPrice: z.number().positive().optional().nullable(),\n isDefault: z.boolean().optional().nullable(),\n reserveStock: z.number().nonnegative().optional().nullable(),\n weight: z.number().nonnegative().optional().nullable().default(0),\n width: z.number().nonnegative().optional().nullable(),\n height: z.number().nonnegative().optional().nullable(),\n unitOfMeasure: z.string().optional().nullable(),\n order: z.number().nonnegative().optional().nullable().default(0),\n sku: z.string().optional().nullable(),\n stock: z.number().nonnegative().optional().nullable(),\n leadTime: z.string().optional().nullable(),\n barCode: z.string().optional().nullable(),\n shippingWeight: z.number().nonnegative().optional().nullable(),\n images: z.array(z.string()).optional().nullable(),\n attributes: z.array(z.string()).optional().nullable(),\n variantStatus: z.string().optional().nullable(),\n status: z.string().optional().nullable(),\n createdOn: z.string().optional().nullable(),\n updatedOn: z.string().optional().nullable(),\n deletedOn: z.string().optional().nullable(),\n});\n\nexport const ProductSchema = z.object({\n id: z.coerce.string(),\n name: z.string(),\n images: z.array(z.object({\n url: z.string().url(),\n name: z.string().optional(),\n isPrimary: z.boolean().optional(),\n })),\n basePrice: z.number().positive().optional(),\n salePrice: z.number().positive().optional(),\n slug: z.string(),\n description: z.string().optional(),\n categories: z.array(z.object({\n id: z.coerce.string(),\n name: z.string(),\n slug: z.string(),\n logo: z.string().optional(),\n icon: z.string().optional(),\n })).optional(),\n tags: z.array(z.string()).optional(),\n inStock: z.boolean().optional(),\n variants: z.array(ProductVariantSchema).optional(),\n});\n\nexport const ProductsResponseSchema = z.object({\n items: z.array(ProductSchema),\n meta: z.object({\n total: z.number().int().positive(),\n page: z.number().int().positive(),\n pageSize: z.number().int().positive(),\n hasNextPage: z.boolean(),\n }),\n});\n\nexport const ProductsFiltersSchema = z.object({\n category: z.string().optional(),\n search: z.string().optional(),\n minPrice: z.number().positive().optional(),\n maxPrice: z.number().positive().optional(),\n inStock: z.boolean().optional(),\n sortBy: z.enum(['name', 'price', 'createdAt']).optional(),\n sortOrder: z.enum(['asc', 'desc']).optional(),\n page: z.number().int().positive().optional(),\n limit: z.number().int().positive().optional(),\n});\n\n// --- Storefront API (v1/storefront/products) ---\n\nexport const StorefrontProductSchema = z.object({\n id: z.coerce.string(),\n name: z.string(),\n slug: z.string(),\n productType: z.string().optional().nullable(),\n imageUrl: z.string().optional().nullable(),\n price: z.number().nonnegative(),\n compareAtPrice: z.number().nonnegative().optional().nullable(),\n variantCount: z.number().int().nonnegative().optional().default(0),\n isAvailable: z.boolean(),\n totalInventory: z.number().int().nonnegative(),\n bundleItemsCount: z.number().int().nonnegative().optional().default(0),\n brand: z.string().optional().nullable(),\n category: z.string().optional().nullable(),\n status: z.string().optional().nullable(),\n tags: z.array(z.string()).optional().nullable(),\n});\n\nexport const StorefrontFacetSchema = z.object({\n value: z.string(),\n count: z.number().int().nonnegative(),\n});\n\nexport const StorefrontProductsResponseSchema = z.object({\n pageIndex: z.number().int().positive(),\n pageSize: z.number().int().positive(),\n totalCount: z.number().int().nonnegative(),\n totalPages: z.number().int().nonnegative(),\n products: z.array(StorefrontProductSchema),\n categories: z.array(StorefrontFacetSchema).optional().default([]),\n brands: z.array(StorefrontFacetSchema).optional().default([]),\n minPrice: z.number().nonnegative().optional().nullable(),\n maxPrice: z.number().nonnegative().optional().nullable(),\n});\n\nexport const StorefrontProductsParamsSchema = z.object({\n page: z.number().int().positive().optional().default(1),\n pageSize: z.number().int().positive().optional().default(20),\n sort: z\n .enum(['price_asc', 'price_desc', 'name_asc', 'name_desc', 'newest'])\n .optional()\n .default('price_asc'),\n sellerId: z.string().optional(),\n search: z.string().optional(),\n collection: z.string().optional(),\n category: z.string().optional(),\n brand: z.string().optional(),\n productType: z.string().optional(),\n inStock: z.boolean().optional(),\n minPrice: z.number().nonnegative().optional(),\n maxPrice: z.number().nonnegative().optional(),\n});\n\n// --- Storefront product by slug (v1/storefront/products/by-slug/:slug) ---\n\nexport const StorefrontVariantOptionSchema = z.object({\n key: z.string(),\n name: z.string(),\n value: z.string(),\n});\n\nexport const StorefrontProductImageSchema = z.object({\n url: z.string(),\n name: z.string().optional().nullable(),\n order: z.number().int().nonnegative().optional(),\n});\n\nexport const StorefrontVariantSchema = z.object({\n id: z.coerce.string().optional().default(''),\n sku: z.string(),\n status: z.string().optional().nullable(),\n price: z.number().nonnegative(),\n compareAtPrice: z.number().nonnegative().optional().nullable(),\n quantity: z.number().int().nonnegative(),\n options: z.array(StorefrontVariantOptionSchema).optional().default([]),\n images: z.array(StorefrontProductImageSchema).optional().default([]),\n});\n\nexport const StorefrontPriceTierSchema = z.object({\n variantId: z.coerce.string(),\n minQuantity: z.number().int().positive(),\n maxQuantity: z.number().int().positive().optional().nullable(),\n unitPrice: z.number().nonnegative(),\n});\n\nexport const StorefrontBundleItemSchema = z.object({\n productId: z.coerce.string(),\n variantId: z.coerce.string(),\n productName: z.string(),\n variantName: z.string().optional().nullable(),\n sku: z.string().optional().nullable(),\n brand: z.string().optional().nullable(),\n imageUrl: z.string().optional().nullable(),\n quantity: z.number().int(),\n availableStock: z.number().int().optional().default(0),\n allowBackorders: z.boolean().optional().default(false),\n requiresShipping: z.boolean().optional().default(true),\n});\n\nexport const StorefrontProductDetailSchema = z.object({\n id: z.coerce.string(),\n name: z.string(),\n slug: z.string(),\n description: z.string().optional().nullable(),\n productType: z.string().optional().nullable(),\n status: z.string().optional().nullable(),\n imageUrl: z.string().optional().nullable(),\n price: z.number().nonnegative(),\n compareAtPrice: z.number().nonnegative().optional().nullable(),\n isAvailable: z.boolean(),\n totalInventory: z.number().int().nonnegative(),\n brand: z.string().optional().nullable(),\n category: z.string().optional().nullable(),\n categoryId: z.coerce.string().optional().nullable(),\n tags: z.array(z.string()).optional().nullable(),\n specifications: z.array(z.record(z.string(), z.unknown())).optional().default([]),\n variants: z.array(StorefrontVariantSchema).optional().default([]),\n images: z.array(StorefrontProductImageSchema).optional().default([]),\n bundleItems: z.array(StorefrontBundleItemSchema).optional().default([]),\n priceTiers: z.array(StorefrontPriceTierSchema).optional().default([]),\n createdAt: z.string().optional().nullable(),\n updatedAt: z.string().optional().nullable(),\n});\n\n// Tipos TypeScript inferidos de los esquemas Zod\nexport type Product = z.infer<typeof ProductSchema>;\nexport type ProductVariant = z.infer<typeof ProductVariantSchema>;\nexport type ProductsResponse = z.infer<typeof ProductsResponseSchema>;\nexport type ProductsFilters = z.infer<typeof ProductsFiltersSchema>;\n\nexport type StorefrontProduct = z.infer<typeof StorefrontProductSchema>;\nexport type StorefrontFacet = z.infer<typeof StorefrontFacetSchema>;\nexport type StorefrontProductsResponse = z.infer<typeof StorefrontProductsResponseSchema>;\nexport type StorefrontProductsParams = z.infer<typeof StorefrontProductsParamsSchema>;\n/** Params de entrada (sort/page/pageSize opcionales con defaults en el schema) */\nexport type StorefrontProductsParamsInput = z.input<typeof StorefrontProductsParamsSchema>;\n\nexport type StorefrontVariantOption = z.infer<typeof StorefrontVariantOptionSchema>;\nexport type StorefrontVariant = z.infer<typeof StorefrontVariantSchema>;\nexport type StorefrontProductImage = z.infer<typeof StorefrontProductImageSchema>;\nexport type StorefrontPriceTier = z.infer<typeof StorefrontPriceTierSchema>;\nexport type StorefrontBundleItem = z.infer<typeof StorefrontBundleItemSchema>;\nexport type StorefrontProductDetail = z.infer<typeof StorefrontProductDetailSchema>; \n","import { getStoreApiClient } from \"./store-api-client\";\nimport type {\n StorefrontProductsParamsInput,\n StorefrontProductsResponse,\n StorefrontProductDetail,\n} from \"../models/product\";\nimport {\n StorefrontProductsParamsSchema,\n StorefrontProductsResponseSchema,\n StorefrontProductDetailSchema,\n} from \"../models/product\";\n\n/**\n * Servicio de productos vía proxy /api/store.\n * El proxy resuelve la tienda por cookie.\n */\nexport async function getStorefrontProducts(\n params?: StorefrontProductsParamsInput,\n cacheKey?: string\n): Promise<StorefrontProductsResponse> {\n const parsed = StorefrontProductsParamsSchema.parse(params ?? {});\n const searchParams = new URLSearchParams();\n searchParams.set(\"page\", String(parsed.page));\n searchParams.set(\"pageSize\", String(parsed.pageSize));\n if (parsed.sort) searchParams.set(\"sort\", parsed.sort);\n if (parsed.sellerId) searchParams.set(\"sellerId\", parsed.sellerId);\n if (parsed.search) searchParams.set(\"search\", parsed.search);\n if (parsed.collection) searchParams.set(\"collection\", parsed.collection);\n if (parsed.category) searchParams.set(\"category\", parsed.category);\n if (parsed.brand) searchParams.set(\"brand\", parsed.brand);\n if (parsed.productType) searchParams.set(\"productType\", parsed.productType);\n if (parsed.inStock != null) searchParams.set(\"inStock\", String(parsed.inStock));\n if (parsed.minPrice != null) searchParams.set(\"minPrice\", String(parsed.minPrice));\n if (parsed.maxPrice != null) searchParams.set(\"maxPrice\", String(parsed.maxPrice));\n\n const path = `products?${searchParams.toString()}`;\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(path, {\n cacheKey,\n });\n return StorefrontProductsResponseSchema.parse(response);\n}\n\nexport async function getStorefrontProductBySlug(\n slug: string\n): Promise<StorefrontProductDetail> {\n const path = `products/${encodeURIComponent(slug)}`;\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(path);\n return StorefrontProductDetailSchema.parse(response);\n}\n","import { z } from \"zod\";\n\nexport const StorefrontCollectionSchema = z.object({\n id: z.coerce.string(),\n slug: z.string(),\n name: z.string(),\n description: z.string().nullable().optional(),\n imageUrl: z.string().nullable().optional(),\n type: z.string(),\n productCount: z.number().int().nonnegative(),\n});\n\nexport const StorefrontCollectionsResponseSchema = z.array(StorefrontCollectionSchema);\nexport const StorefrontCollectionDetailSchema = StorefrontCollectionSchema;\n\nexport type StorefrontCollection = z.infer<typeof StorefrontCollectionSchema>;\nexport type StorefrontCollectionsResponse = z.infer<\n typeof StorefrontCollectionsResponseSchema\n>;\nexport type StorefrontCollectionDetail = z.infer<typeof StorefrontCollectionDetailSchema>;\n","import { getStoreApiClient } from \"./store-api-client\";\nimport type { StorefrontCollection, StorefrontCollectionDetail } from \"../models/collection\";\nimport {\n StorefrontCollectionsResponseSchema,\n StorefrontCollectionDetailSchema,\n} from \"../models/collection\";\n\n/**\n * Servicio de colecciones vía proxy /api/store.\n * GET /v1/collections.\n */\nexport async function getStorefrontCollections(): Promise<StorefrontCollection[]> {\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(\"collections\");\n return StorefrontCollectionsResponseSchema.parse(response);\n}\n\nexport async function getStorefrontCollectionBySlug(\n slug: string\n): Promise<StorefrontCollectionDetail> {\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(\n `collections/by-slug/${encodeURIComponent(slug)}`\n );\n return StorefrontCollectionDetailSchema.parse(response);\n}\n\n","import { z } from \"zod\";\n\n/** Page list item from GET /v1/pages */\nexport const StorefrontPageListItemSchema = z.object({\n id: z.string(),\n name: z.string(),\n slug: z.string(),\n layout: z.string(),\n});\n\nexport type StorefrontPageListItem = z.infer<typeof StorefrontPageListItemSchema>;\n\n/** SEO settings within page settings */\nexport const StorefrontPageSeoSchema = z.object({\n title: z.string().optional(),\n description: z.string().optional(),\n}).optional();\n\n/** Page settings (layout-specific; flexible) */\nexport const StorefrontPageSettingsSchema = z.object({\n seo: StorefrontPageSeoSchema,\n html: z.string().optional(),\n title: z.string().optional(),\n}).catchall(z.unknown());\n\n/** Section block (item, widget, etc.) */\nexport const StorefrontPageBlockSchema = z.object({\n id: z.string(),\n type: z.string(),\n order: z.number(),\n settings: z.record(z.unknown()).optional(),\n});\n\n/** Page section (page-hero, faq, widget-row, etc.) */\nexport const StorefrontPageSectionSchema = z.object({\n id: z.string(),\n type: z.string(),\n order: z.number(),\n settings: z.record(z.unknown()).optional(),\n blocks: z.array(StorefrontPageBlockSchema).optional().default([]),\n});\n\n/** Page detail from GET /v1/pages/{slug}; sections is optional */\nexport const StorefrontPageDetailSchema = z.object({\n id: z.string(),\n name: z.string(),\n slug: z.string(),\n layout: z.string(),\n settings: StorefrontPageSettingsSchema.optional(),\n sections: z.array(StorefrontPageSectionSchema).optional(),\n});\n\nexport type StorefrontPageDetail = z.infer<typeof StorefrontPageDetailSchema>;\nexport type StorefrontPageSection = z.infer<typeof StorefrontPageSectionSchema>;\nexport type StorefrontPageBlock = z.infer<typeof StorefrontPageBlockSchema>;\n","import { getStoreApiClient } from \"./store-api-client\";\nimport type {\n StorefrontPageListItem,\n StorefrontPageDetail,\n} from \"../models/page\";\nimport {\n StorefrontPageListItemSchema,\n StorefrontPageDetailSchema,\n} from \"../models/page\";\nimport { z } from \"zod\";\n\n/**\n * Servicio de páginas vía proxy /api/store.\n * GET /v1/pages y GET /v1/pages/{slug}.\n */\nexport async function getStorefrontPages(): Promise<StorefrontPageListItem[]> {\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(\"pages\");\n return z.array(StorefrontPageListItemSchema).parse(response);\n}\n\nexport async function getStorefrontPageBySlug(\n slug: string\n): Promise<StorefrontPageDetail> {\n const path = `pages/${encodeURIComponent(slug)}`;\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(path);\n return StorefrontPageDetailSchema.parse(response);\n}\n\nexport async function getStorefrontPagePreview(\n slug: string,\n token: string\n): Promise<StorefrontPageDetail> {\n const path = `pages/${encodeURIComponent(slug)}/preview?token=${encodeURIComponent(token)}`;\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(path);\n return StorefrontPageDetailSchema.parse(response);\n}\n","import { z } from \"zod\";\n\nexport const CartBuyerRequestSchema = z.object({\n email: z.string().email(),\n firstName: z.string().min(1),\n lastName: z.string().min(1),\n phone: z.string().min(1),\n});\n\nexport type CartBuyerRequest = z.input<typeof CartBuyerRequestSchema>;\n\nexport const CartCreateRequestSchema = z.object({\n currencyCode: z.string(),\n salesChannelId: z.string(),\n email: z.string().email(),\n});\n\nexport type CartCreateRequest = z.input<typeof CartCreateRequestSchema>;\n\nexport const CartAddressSchema = z.object({\n name: z.string().min(1),\n address1: z.string().min(1),\n city: z.string().min(1),\n countryCode: z.string().min(2),\n company: z.string().nullable().optional(),\n address2: z.string().nullable().optional(),\n province: z.string().nullable().optional(),\n postalCode: z.string().nullable().optional(),\n district: z.string().nullable().optional(),\n phone: z.string().nullable().optional(),\n latitude: z.number().nullable().optional(),\n longitude: z.number().nullable().optional(),\n geo: z\n .object({\n departmentCode: z.string().nullable().optional(),\n provinceCode: z.string().nullable().optional(),\n districtCode: z.string().nullable().optional(),\n })\n .nullable()\n .optional(),\n});\n\nexport const CartAddressesRequestSchema = z.object({\n shippingAddress: CartAddressSchema,\n billingAddress: CartAddressSchema,\n});\n\nexport type CartAddressesRequest = z.input<typeof CartAddressesRequestSchema>;\n\n// --- Cart items ---\n\nexport const CartItemModifierRequestSchema = z.object({\n modifierGroupId: z.coerce.string().min(1),\n optionIds: z.array(z.coerce.string().min(1)).optional().default([]),\n});\n\nexport type CartItemModifierRequest = {\n modifierGroupId: string;\n optionIds?: string[];\n};\n\nexport const CartItemRequestSchema = z.object({\n variantId: z.coerce.string().min(1),\n quantity: z.number().int().positive(),\n modifiers: z.array(CartItemModifierRequestSchema).optional(),\n});\n\nexport type CartItemRequest = {\n variantId: string;\n quantity: number;\n modifiers?: CartItemModifierRequest[];\n};\n\nexport const CartCouponRequestSchema = z.object({\n code: z.string().min(1),\n});\n\nexport type CartCouponRequest = z.input<typeof CartCouponRequestSchema>;\n\nexport const CartTotalsSchema = z.object({\n subtotal: z.number(),\n discount: z.number(),\n tax: z.number(),\n warranty: z.number().optional().default(0),\n total: z.number(),\n});\n\nexport const CartResponseAddressSchema = z.object({\n name: z.string().nullable().optional(),\n address1: z.string(),\n city: z.string(),\n countryCode: z.string(),\n company: z.string().nullable().optional(),\n address2: z.string().nullable().optional(),\n province: z.string().nullable().optional(),\n postalCode: z.string().nullable().optional(),\n district: z.string().nullable().optional(),\n phone: z.string().nullable().optional(),\n latitude: z.number().nullable().optional(),\n longitude: z.number().nullable().optional(),\n geo: z\n .object({\n departmentCode: z.string().nullable().optional(),\n provinceCode: z.string().nullable().optional(),\n districtCode: z.string().nullable().optional(),\n })\n .nullable()\n .optional(),\n});\n\nexport const CartResponseBundleItemSchema = z.object({\n productId: z.coerce.string(),\n variantId: z.coerce.string(),\n productName: z.string(),\n variantName: z.string().nullable().optional(),\n sku: z.string().nullable().optional(),\n brand: z.string().nullable().optional(),\n imageUrl: z.string().nullable().optional(),\n quantity: z.number().int(),\n});\n\nexport const CartResponseItemSchema = z.object({\n id: z.string(),\n title: z.string(),\n variantLabel: z.string().nullable().optional(),\n thumbnail: z.string().nullable().optional(),\n quantity: z.number().int(),\n variantId: z.coerce.string(),\n variantSku: z.string().nullable().optional(),\n unitPrice: z.number(),\n bundleItems: z.array(CartResponseBundleItemSchema).optional().default([]),\n});\n\nexport const CartResponseShippingMethodSchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().nullable().optional(),\n total: z.number(),\n estimatedDays: z.number().int().nullable().optional(),\n pickupPointId: z.string().nullable().optional(),\n scheduledDate: z.string().nullable().optional(),\n scheduledTime: z.string().nullable().optional(),\n});\n\nexport const CartResponseSchema = z.object({\n id: z.string(),\n regionId: z.string().nullable().optional(),\n salesChannelId: z.string().nullable().optional(),\n email: z.string().email().nullable().optional(),\n phone: z.string().nullable().optional(),\n firstName: z.string().nullable().optional(),\n lastName: z.string().nullable().optional(),\n currencyCode: z.string(),\n completedAt: z.string().nullable().optional(),\n shippingAddress: z.unknown().nullable().optional(),\n billingAddress: z.unknown().nullable().optional(),\n metadata: z.record(z.string(), z.unknown()).optional().default({}),\n promotionCodes: z.array(z.string()).optional().default([]),\n items: z.array(CartResponseItemSchema).optional().default([]),\n shippingMethods: z.array(z.unknown()).optional().default([]),\n totals: z.object({\n discountTotal: z.number(),\n shippingTotal: z.number(),\n subtotal: z.number(),\n taxTotal: z.number(),\n total: z.number(),\n warrantyTotal: z.number(),\n }),\n});\n\nexport type CartResponse = z.infer<typeof CartResponseSchema>;\n\nexport const CartCheckoutRequestSchema = z.object({\n paymentMethodCode: z.string().min(1),\n externalRef: z.string().min(1),\n receiptUrl: z.string().min(1).optional(),\n});\n\nexport type CartCheckoutRequest = z.input<typeof CartCheckoutRequestSchema>;\n\n/** Acción concreta del proveedor (redirect, embedded, QR, etc.) */\nexport const CartCheckoutPaymentActionSchema = z\n .object({\n publicConfiguration: z\n .object({\n publishableKey: z.string().nullable().optional(),\n checkoutMode: z.string().nullable().optional(),\n phoneNumber: z.string().nullable().optional(),\n accountHolder: z.string().nullable().optional(),\n qrImageUrl: z.string().nullable().optional(),\n })\n .passthrough()\n .nullable()\n .optional(),\n url: z.string().nullable().optional(),\n html: z.string().nullable().optional(),\n clientSecret: z.string().nullable().optional(),\n qrCode: z.string().nullable().optional(),\n expiresAt: z.string().nullable().optional(),\n })\n .passthrough();\n\nexport type CartCheckoutPaymentAction = z.infer<\n typeof CartCheckoutPaymentActionSchema\n>;\n\n/** Objeto `payment` devuelto por POST checkout / flujo embedded */\nexport const CartCheckoutPaymentSchema = z\n .object({\n transactionId: z.string(),\n paymentMethodCode: z.string(),\n providerId: z.string().nullable().optional(),\n status: z.string(),\n amount: z.number(),\n reference: z.string(),\n actionType: z.string(),\n receiptUrl: z.string().nullable().optional(),\n action: CartCheckoutPaymentActionSchema.nullable().optional(),\n })\n .passthrough();\n\nexport type CartCheckoutPayment = z.infer<typeof CartCheckoutPaymentSchema>;\n\nexport const CartCheckoutResponseSchema = z\n .object({\n publicKey: z.string().optional(),\n publishableKey: z.string().optional(),\n stripePublicKey: z.string().optional(),\n clientSecret: z.string().optional(),\n intentClientSecret: z.string().optional(),\n orderId: z.coerce.string().optional(),\n orderGroup: z.string().optional(),\n orderIds: z.array(z.coerce.string()).optional(),\n /** Payload de pago (embedded, redirect, etc.) */\n payment: CartCheckoutPaymentSchema.optional(),\n cart: z.unknown().optional(),\n })\n .passthrough();\n\nexport type CartCheckoutResponse = z.infer<typeof CartCheckoutResponseSchema>;\n\nexport const CartPaymentReceiptResponseSchema = z.object({\n id: z.string(),\n url: z.string(),\n});\n\nexport type CartPaymentReceiptResponse = z.infer<\n typeof CartPaymentReceiptResponseSchema\n>;\n\nexport const CartPaymentMethodSchema = z.object({\n code: z.string(),\n name: z.string(),\n description: z.string().nullable().optional(),\n kind: z.string(),\n isActive: z.boolean(),\n isDefault: z.boolean(),\n isManual: z.boolean(),\n sortOrder: z.number(),\n phoneNumber: z.string().nullable().optional(),\n accountHolder: z.string().nullable().optional(),\n qrImageUrl: z.string().nullable().optional(),\n});\n\nexport type CartPaymentMethod = z.infer<typeof CartPaymentMethodSchema>;\n\nexport const CartPaymentMethodsResponseSchema = z.object({\n methods: z.array(CartPaymentMethodSchema),\n});\n\nexport type CartPaymentMethodsResponse = z.infer<\n typeof CartPaymentMethodsResponseSchema\n>;\n\n/**\n * GET /carts/{cartId}/checkout — devuelve carrito + métodos de pago en una sola respuesta.\n */\nexport const CartCheckoutReadResponseSchema = z.object({\n cart: CartResponseSchema,\n paymentMethods: CartPaymentMethodsResponseSchema,\n});\n\nexport type CartCheckoutReadResponse = z.infer<\n typeof CartCheckoutReadResponseSchema\n>;\n\n/** GET /carts/{cartId}/shipping-options?postalCode= */\nexport const ShippingRateSchema = z\n .object({\n shippingMethodId: z.string(),\n name: z.string(),\n displayName: z.string().optional(),\n type: z.string().optional(),\n price: z.number(),\n currency: z.string().optional(),\n sortOrder: z.number().optional(),\n rateId: z.string(),\n description: z.string().nullable().optional(),\n deliveryLocationId: z.string().nullable().optional(),\n deliveryLocationName: z.string().nullable().optional(),\n estimatedDeliveryDays: z.number().nullable().optional(),\n serviceCode: z.string().nullable().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n })\n .passthrough();\n\nexport type ShippingRate = z.infer<typeof ShippingRateSchema>;\n\nexport const ShippingOptionGroupSchema = z\n .object({\n sellerId: z.string(),\n shippingProfileId: z.string().nullable().optional(),\n orderAmount: z.number().optional(),\n totalWeight: z.number().optional(),\n itemIds: z.array(z.string()).optional(),\n rates: z.array(ShippingRateSchema),\n })\n .passthrough();\n\nexport type ShippingOptionGroup = z.infer<typeof ShippingOptionGroupSchema>;\n\nexport const ShippingOptionsResponseSchema = z.object({\n groups: z.array(ShippingOptionGroupSchema),\n});\n\nexport type ShippingOptionsResponse = z.infer<\n typeof ShippingOptionsResponseSchema\n>;\n\n/** PUT /carts/{cartId}/shipping-method */\nexport const CartShippingMethodPutRequestSchema = z.object({\n rateId: z.string().min(1),\n shippingMethodId: z.string().min(1),\n serviceCode: z.string().nullable().optional(),\n sellerId: z.string().nullable().optional(),\n shippingProfileId: z.string().nullable().optional(),\n locationId: z.string().nullable().optional(),\n pickupPointId: z.string().nullable().optional(),\n scheduledDate: z.string().nullable().optional(),\n scheduledTime: z.string().nullable().optional(),\n});\n\nexport type CartShippingMethodPutRequest = z.input<\n typeof CartShippingMethodPutRequestSchema\n>;\n","import { getStoreApiBaseUrl, getStoreApiClient } from \"./store-api-client\";\nimport type {\n CartBuyerRequest,\n CartAddressesRequest,\n CartCreateRequest,\n CartResponse,\n CartCheckoutRequest,\n CartCheckoutResponse,\n CartCheckoutReadResponse,\n CartPaymentReceiptResponse,\n CartPaymentMethodsResponse,\n CartShippingMethodPutRequest,\n CartCouponRequest,\n CartItemRequest,\n ShippingOptionsResponse,\n} from \"../models/cart\";\nimport {\n CartBuyerRequestSchema,\n CartAddressesRequestSchema,\n CartCreateRequestSchema,\n CartItemRequestSchema,\n CartResponseSchema,\n CartCheckoutRequestSchema,\n CartCheckoutResponseSchema,\n CartCheckoutReadResponseSchema,\n CartPaymentReceiptResponseSchema,\n CartShippingMethodPutRequestSchema,\n CartCouponRequestSchema,\n ShippingOptionsResponseSchema,\n} from \"../models/cart\";\n\n/**\n * Servicio de carrito vía proxy /api/store.\n * El proxy resuelve el carrito/tienda por cookie o contexto.\n */\nexport async function createCart(\n data: CartCreateRequest,\n): Promise<CartResponse> {\n const payload = CartCreateRequestSchema.parse(data);\n const client = await getStoreApiClient();\n const response = await client.post<unknown>(\"carts\", payload);\n return CartResponseSchema.parse(response);\n}\n\nexport async function getCart(cartId?: string): Promise<CartResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(`carts/${cartId}`);\n return CartResponseSchema.parse(response);\n}\n\nexport async function addCartItem(\n data: CartItemRequest,\n cartId?: string,\n): Promise<CartResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const payload = CartItemRequestSchema.parse(data);\n const variantId = Number(payload.variantId);\n if (!Number.isSafeInteger(variantId) || variantId <= 0) {\n throw new Error(\"variantId must be a valid public id\");\n }\n const modifiers = payload.modifiers?.map((modifier) => {\n const modifierGroupId = Number(modifier.modifierGroupId);\n const optionIds = modifier.optionIds.map((optionId) => Number(optionId));\n if (\n !Number.isSafeInteger(modifierGroupId) ||\n modifierGroupId <= 0 ||\n optionIds.some((optionId) => !Number.isSafeInteger(optionId) || optionId <= 0)\n ) {\n throw new Error(\"modifiers must use valid public ids\");\n }\n\n return { modifierGroupId, optionIds };\n });\n const client = await getStoreApiClient();\n const response = await client.post<unknown>(`carts/${cartId}/items`, {\n ...payload,\n variantId,\n ...(modifiers ? { modifiers } : {}),\n });\n return CartResponseSchema.parse(response);\n}\n\nexport async function patchCartBuyer(\n data: CartBuyerRequest,\n cartId?: string,\n): Promise<CartResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const payload = CartBuyerRequestSchema.parse(data);\n const client = await getStoreApiClient();\n const response = await client.patch<unknown>(\n `carts/${cartId}/buyer`,\n payload,\n );\n return CartResponseSchema.parse(response);\n}\n\nexport async function patchCartAddresses(\n data: CartAddressesRequest,\n cartId?: string,\n): Promise<CartResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const payload = CartAddressesRequestSchema.parse(data);\n const client = await getStoreApiClient();\n const response = await client.patch<unknown>(\n `carts/${cartId}/addresses`,\n payload,\n );\n return CartResponseSchema.parse(response);\n}\n\nexport async function addCartCoupon(\n cartId: string,\n data: CartCouponRequest,\n): Promise<CartResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const payload = CartCouponRequestSchema.parse(data);\n const client = await getStoreApiClient();\n const response = await client.post<unknown>(\n `carts/${cartId}/promotion-codes`,\n payload,\n );\n return CartResponseSchema.parse(response);\n}\n\nexport async function removeCartCoupon(\n cartId: string,\n code: string,\n): Promise<CartResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n if (!code.trim()) throw new Error(\"code is required\");\n const client = await getStoreApiClient();\n const response = await client.delete<unknown>(\n `carts/${cartId}/promotion-codes/${encodeURIComponent(code.trim())}`,\n );\n return CartResponseSchema.parse(response);\n}\n\n/**\n * Inicializa checkout de pago (POST /v1/carts/checkout).\n * Body: { paymentMethodCode, externalRef }\n */\nexport async function checkoutCart(\n data: CartCheckoutRequest,\n cartId?: string,\n): Promise<CartCheckoutResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const payload = CartCheckoutRequestSchema.parse(data);\n const client = await getStoreApiClient();\n const response = await client.post<unknown>(\n `carts/${cartId}/checkout`,\n payload,\n );\n return CartCheckoutResponseSchema.parse(response);\n}\n\nexport async function uploadPaymentReceipt(\n cartId: string,\n file: File,\n): Promise<CartPaymentReceiptResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const baseUrl = await getStoreApiBaseUrl();\n const form = new FormData();\n form.set(\"file\", file);\n\n const response = await fetch(\n `${baseUrl.replace(/\\/$/, \"\")}/carts/${encodeURIComponent(cartId)}/payment-receipt`,\n {\n method: \"POST\",\n body: form,\n ...(typeof window === \"undefined\" && { cache: \"no-store\" }),\n },\n );\n\n if (!response.ok) {\n let body: unknown;\n try {\n const errorText = await response.text();\n body = errorText ? JSON.parse(errorText) : undefined;\n } catch {\n body = undefined;\n }\n const message =\n typeof body === \"object\" &&\n body !== null &&\n \"title\" in body &&\n typeof (body as { title?: unknown }).title === \"string\"\n ? (body as { title: string }).title\n : response.statusText || \"Store API error\";\n const error = new Error(message) as Error & {\n status?: number;\n body?: unknown;\n };\n error.status = response.status;\n error.body = body;\n throw error;\n }\n\n return CartPaymentReceiptResponseSchema.parse(await response.json());\n}\n\n/**\n * GET /carts/{cartId}/checkout — carrito + métodos de pago (vista checkout).\n */\nexport async function getCartCheckout(\n cartId: string,\n): Promise<CartCheckoutReadResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(`carts/${cartId}/checkout`);\n return CartCheckoutReadResponseSchema.parse(response);\n}\n\nexport async function getShippingOptions(\n cartId: string,\n postalCode: string,\n): Promise<ShippingOptionsResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n if (!postalCode?.trim()) throw new Error(\"postalCode is required\");\n const client = await getStoreApiClient();\n const q = new URLSearchParams({ postalCode: postalCode.trim() });\n const response = await client.get<unknown>(\n `carts/${cartId}/shipping-options?${q.toString()}`,\n );\n return ShippingOptionsResponseSchema.parse(response);\n}\n\nexport async function putCartShippingMethod(\n cartId: string,\n data: CartShippingMethodPutRequest,\n): Promise<CartResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const payload = CartShippingMethodPutRequestSchema.parse(data);\n const client = await getStoreApiClient();\n const response = await client.put<unknown>(\n `carts/${cartId}/shipping-method`,\n payload,\n );\n return CartResponseSchema.parse(response);\n}\n\n/**\n * Solo métodos de pago (misma respuesta que {@link getCartCheckout}; evita duplicar llamadas si ya tienes el checkout).\n */\nexport async function getCartPaymentMethods(\n cartId?: string,\n): Promise<CartPaymentMethodsResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const { paymentMethods } = await getCartCheckout(cartId);\n return paymentMethods;\n}\n","import { z } from \"zod\";\nimport { getStoreApiClient } from \"./store-api-client\";\n\nexport const CustomerRegisterRequestSchema = z.object({\n email: z.string().email(),\n firstName: z.string().trim().min(1),\n lastName: z.string().trim().min(1),\n countryIsoCode: z.string().trim().length(2),\n password: z.string(),\n phone: z.string().trim().optional(),\n});\n\nexport type CustomerRegisterRequest = z.infer<typeof CustomerRegisterRequestSchema>;\n\n/** GET/POST/PUT cuerpo de dirección (upstream `customer/me/addresses` vía proxy). */\nexport const CustomerAddressSchema = z.object({\n /** Presente en listados cuando el upstream expone el id para PUT/DELETE. */\n id: z.string().optional(),\n addressKey: z.string(),\n countryIsoCode: z.string(),\n addressLine: z.string(),\n addressNumber: z.string(),\n department: z.string(),\n province: z.string(),\n district: z.string(),\n phone: z.string(),\n cellPhone: z.string(),\n postalCode: z.string(),\n reference: z.string(),\n latitude: z.number().nullable(),\n longitude: z.number().nullable(),\n isDefault: z.boolean(),\n});\n\nexport type CustomerAddress = z.infer<typeof CustomerAddressSchema>;\n\nexport const CustomerAddressUpsertSchema = CustomerAddressSchema.omit({ id: true });\n\nexport type CustomerAddressUpsert = z.infer<typeof CustomerAddressUpsertSchema>;\n\n/** GET /v1/customer/me (upstream vía proxy `/api/store/customer/me`). */\nexport const CustomerMeSchema = z.object({\n id: z.string(),\n storeId: z.string(),\n email: z.string().email(),\n firstName: z.string(),\n lastName: z.string(),\n phone: z.string(),\n identificationNumber: z.string().nullable(),\n identificationType: z.string().nullable(),\n entityName: z.string().nullable(),\n dateOfBirth: z.string().nullable(),\n gender: z.string().nullable(),\n countryIsoCode: z.string(),\n role: z.string().nullable(),\n companyName: z.string().nullable(),\n consent: z.boolean(),\n userId: z.string(),\n customerType: z.string(),\n status: z.string(),\n entityIdentificationNumber: z.string().nullable(),\n defaultAddressId: z.string().nullable(),\n metadata: z.unknown().nullable(),\n totalOrders: z.number(),\n avgOrders: z.number(),\n lastOrderId: z.string().nullable(),\n lastOrderDate: z.string().nullable(),\n loyaltyPoints: z.number(),\n addresses: z.array(CustomerAddressSchema),\n createdOn: z.string(),\n updatedOn: z.string().nullable(),\n});\n\nexport type CustomerMe = z.infer<typeof CustomerMeSchema>;\n\n/** PATCH /v1/customer (upstream vía proxy `customer`, respuesta 204). */\nexport const CustomerProfilePatchSchema = z.object({\n firstName: z.string().trim().min(1),\n lastName: z.string().trim().min(1),\n phone: z.string().trim(),\n identificationNumber: z.string().nullable(),\n identificationType: z.string().nullable(),\n entityName: z.string().nullable(),\n entityIdentificationNumber: z.string().nullable(),\n gender: z.string().nullable(),\n role: z.string().nullable(),\n companyName: z.string().nullable(),\n dateOfBirth: z.string().nullable(),\n consent: z.boolean(),\n countryIsoCode: z.string().trim().length(2),\n});\n\nexport type CustomerProfilePatch = z.infer<typeof CustomerProfilePatchSchema>;\n\nexport function customerMeToProfilePatch(me: CustomerMe): CustomerProfilePatch {\n return {\n firstName: me.firstName,\n lastName: me.lastName,\n phone: me.phone ?? \"\",\n identificationNumber: me.identificationNumber,\n identificationType: me.identificationType,\n entityName: me.entityName,\n entityIdentificationNumber: me.entityIdentificationNumber,\n gender: me.gender,\n role: me.role,\n companyName: me.companyName,\n dateOfBirth: me.dateOfBirth,\n consent: me.consent,\n countryIsoCode: me.countryIsoCode || \"PE\",\n };\n}\n\nfunction customerAuthOptions(accessToken?: string) {\n const token =\n typeof accessToken === \"string\" && accessToken.trim().length > 0 ? accessToken.trim() : undefined;\n return token ? { bearerToken: token } : {};\n}\n\n/**\n * Registra un cliente vía proxy /api/store.\n * El proxy agrega X-Store-Id igual que en el resto de endpoints de storefront.\n */\nexport async function registerCustomer(data: CustomerRegisterRequest): Promise<unknown> {\n const payload = CustomerRegisterRequestSchema.parse(data);\n const client = await getStoreApiClient();\n return client.post<unknown>(\"customer/register\", payload);\n}\n\n/**\n * Direcciones del cliente autenticado (Ecomiq upstream: rutas privadas con `Authorization: Bearer` solamente).\n *\n * - Con `accessToken`, el cliente lo manda al proxy y este lo reenvía tal cual a upstream.\n * - Sin token, el proxy usa la cookie HttpOnly de storefront (mismo Bearer hacia Ecomiq).\n */\nexport async function getCustomerAddresses(accessToken?: string): Promise<CustomerAddress[]> {\n const client = await getStoreApiClient();\n const token =\n typeof accessToken === \"string\" && accessToken.trim().length > 0 ? accessToken.trim() : undefined;\n const response = await client.get<unknown>(\"customer/addresses\", {\n ...(token ? { bearerToken: token } : {}),\n });\n return z.array(CustomerAddressSchema).parse(response);\n}\n\nexport async function createCustomerAddress(\n data: CustomerAddressUpsert,\n accessToken?: string\n): Promise<unknown> {\n const client = await getStoreApiClient();\n const token =\n typeof accessToken === \"string\" && accessToken.trim().length > 0 ? accessToken.trim() : undefined;\n const payload = CustomerAddressUpsertSchema.parse(data);\n return client.post<unknown>(\"customer/addresses\", payload, {\n ...(token ? { bearerToken: token } : {}),\n });\n}\n\nexport async function updateCustomerAddress(\n addressId: string,\n data: CustomerAddressUpsert,\n accessToken?: string\n): Promise<unknown> {\n const client = await getStoreApiClient();\n const token =\n typeof accessToken === \"string\" && accessToken.trim().length > 0 ? accessToken.trim() : undefined;\n const payload = CustomerAddressUpsertSchema.parse(data);\n const id = addressId.trim();\n if (!id) throw new Error(\"addressId requerido\");\n return client.put<unknown>(`customer/addresses/${encodeURIComponent(id)}`, payload, {\n ...(token ? { bearerToken: token } : {}),\n });\n}\n\nexport async function deleteCustomerAddress(\n addressId: string,\n accessToken?: string\n): Promise<unknown> {\n const client = await getStoreApiClient();\n const token =\n typeof accessToken === \"string\" && accessToken.trim().length > 0 ? accessToken.trim() : undefined;\n const id = addressId.trim();\n if (!id) throw new Error(\"addressId requerido\");\n return client.delete<unknown>(`customer/addresses/${encodeURIComponent(id)}`, {\n ...(token ? { bearerToken: token } : {}),\n });\n}\n\n/**\n * Perfil del cliente autenticado (`GET /v1/customer/me`).\n * Autenticación igual que `getCustomerAddresses`: Bearer opcional o cookie HttpOnly en el proxy.\n */\nexport async function getCustomerMe(accessToken?: string): Promise<CustomerMe> {\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(\"customer\", customerAuthOptions(accessToken));\n return CustomerMeSchema.parse(response);\n}\n\n/** Actualiza el perfil del cliente autenticado (`PATCH /v1/customer`). */\nexport async function patchCustomer(\n data: CustomerProfilePatch,\n accessToken?: string\n): Promise<void> {\n const client = await getStoreApiClient();\n const payload = CustomerProfilePatchSchema.parse(data);\n await client.patch<unknown>(\"customer\", payload, customerAuthOptions(accessToken));\n}\n","import { z } from \"zod\";\nimport { getStoreApiClient } from \"./store-api-client\";\n\nconst CustomerOrderShippingAddressSchema = z\n .object({\n name: z.string().nullable().optional(),\n company: z.string().nullable().optional(),\n address1: z.string(),\n address2: z.string().nullable().optional(),\n city: z.string().nullable().optional(),\n countryCode: z.string(),\n province: z.string().nullable().optional(),\n postalCode: z.string().nullable().optional(),\n district: z.string().nullable().optional(),\n phone: z.string().nullable().optional(),\n latitude: z.number().nullable().optional(),\n longitude: z.number().nullable().optional(),\n metadata: z.record(z.unknown()).nullable().optional(),\n })\n .passthrough();\n\nconst CustomerOrderLineItemSchema = z.object({\n id: z.string(),\n orderId: z.coerce.string(),\n productId: z.coerce.string().nullable(),\n variantId: z.coerce.string().nullable(),\n title: z.string(),\n subtitle: z.string().nullable().optional(),\n thumbnail: z.string().nullable().optional(),\n variantTitle: z.string().nullable().optional(),\n productHandle: z.string().nullable().optional(),\n quantity: z.number(),\n unitPrice: z.number(),\n total: z.number(),\n status: z.string(),\n});\n\n/** GET /v1/customer/orders (listado agrupado vía proxy `customer/orders`). */\nexport const CustomerOrderListItemSchema = z.object({\n orderId: z.coerce.string(),\n orderNumber: z.string(),\n orderGroup: z.string(),\n orderIds: z.array(z.coerce.string()),\n status: z.string(),\n total: z.number(),\n totalPaid: z.number(),\n currencyCode: z.string(),\n orderDate: z.string(),\n createdOn: z.string(),\n updatedOn: z.string().nullable().optional(),\n paymentAt: z.string().nullable().optional(),\n shippingAddress: CustomerOrderShippingAddressSchema.nullable().optional(),\n shippingAddressSummary: z.string().nullable().optional(),\n items: z.array(CustomerOrderLineItemSchema),\n});\n\nexport type CustomerOrderListItemDto = z.infer<typeof CustomerOrderListItemSchema>;\n\nconst CustomerOrderPaymentSchema = z.object({\n id: z.string(),\n paymentMethod: z.string(),\n paymentCode: z.string(),\n amount: z.number(),\n paymentStatus: z.string(),\n receiptUrl: z.string().nullable().optional(),\n createdOn: z.string(),\n});\n\nconst CustomerOrderStatusTimelineSchema = z.object({\n key: z.string(),\n label: z.string(),\n occurredAt: z.string(),\n description: z.string().nullable().optional(),\n status: z.string(),\n source: z.string(),\n});\n\n/** GET /v1/customer/orders/{orderId} (detalle vía proxy). */\nexport const CustomerOrderDetailSchema = z.object({\n id: z.coerce.string(),\n orderNumber: z.string(),\n orderGroup: z.string(),\n status: z.string(),\n total: z.number(),\n totalPaid: z.number(),\n currencyCode: z.string(),\n orderDate: z.string(),\n createdOn: z.string(),\n updatedOn: z.string().nullable().optional(),\n paymentAt: z.string().nullable().optional(),\n subTotal: z.number(),\n discount: z.number(),\n shipping: z.number(),\n tax: z.number(),\n email: z.string(),\n phone: z.string(),\n firstName: z.string(),\n lastName: z.string(),\n shippingAddress: CustomerOrderShippingAddressSchema.nullable().optional(),\n shippingAddressSummary: z.string().nullable().optional(),\n billingAddress: CustomerOrderShippingAddressSchema.nullable().optional(),\n items: z.array(CustomerOrderLineItemSchema),\n payments: z.array(CustomerOrderPaymentSchema),\n statusTimeline: z.array(CustomerOrderStatusTimelineSchema),\n});\n\nexport type CustomerOrderDetailDto = z.infer<typeof CustomerOrderDetailSchema>;\n\nfunction authOptions(accessToken?: string) {\n const token =\n typeof accessToken === \"string\" && accessToken.trim().length > 0\n ? accessToken.trim()\n : undefined;\n return token ? { bearerToken: token } : {};\n}\n\nexport async function getCustomerOrders(\n accessToken?: string\n): Promise<CustomerOrderListItemDto[]> {\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(\"customer/orders\", authOptions(accessToken));\n return z.array(CustomerOrderListItemSchema).parse(response);\n}\n\nexport async function getCustomerOrder(\n orderId: string,\n accessToken?: string\n): Promise<CustomerOrderDetailDto> {\n const client = await getStoreApiClient();\n const id = orderId.trim();\n if (!id) throw new Error(\"orderId requerido\");\n const response = await client.get<unknown>(\n `customer/orders/${encodeURIComponent(id)}`,\n authOptions(accessToken)\n );\n return CustomerOrderDetailSchema.parse(response);\n}\n","import { z } from \"zod\";\n\n/** Dirección mínima para validar borradores de pedido en el storefront (sin depender de `@ecomiq/core`). */\nexport const StorefrontOrderAddressSchema = z\n .object({\n address1: z.string().optional(),\n address2: z.string().optional(),\n city: z.string().optional(),\n province: z.string().optional(),\n country: z.string().optional(),\n zip: z.string().optional(),\n phone: z.string().optional(),\n firstName: z.string().optional(),\n lastName: z.string().optional(),\n })\n .passthrough();\n\nexport const OrderDraftItemSchema = z.object({\n id: z.string(),\n productId: z.coerce.string().nullable().optional(),\n sellerId: z.string().nullable().optional(),\n shippingProfileId: z.string().nullable().optional(),\n variantId: z.coerce.string().nullable().optional(),\n title: z.string(),\n subtitle: z.string().nullable().optional(),\n thumbnail: z.string().nullable().optional(),\n quantity: z.number().optional().default(1),\n unitPrice: z.number().optional().default(0),\n subTotal: z.number().optional().default(0),\n discount: z.number().optional().default(0),\n shipping: z.number().optional().default(0),\n tax: z.number().optional().default(0),\n warranty: z.number().optional().default(0),\n total: z.number().optional().default(0),\n requiresShipping: z.boolean().optional().default(true),\n isTaxInclusive: z.boolean().optional().default(true),\n metadata: z.record(z.unknown()).optional().default({}),\n});\n\nexport const OrderDraftShippingMethodSchema = z.object({\n id: z.string(),\n name: z.string().optional().default(\"\"),\n description: z.string().nullable().optional(),\n subtotal: z.number().optional().default(0),\n discountTotal: z.number().optional().default(0),\n taxTotal: z.number().optional().default(0),\n total: z.number().optional().default(0),\n isTaxInclusive: z.boolean().optional().default(true),\n sellerId: z.string().nullable().optional(),\n shippingProfileId: z.string().nullable().optional(),\n shippingMethodId: z.string().nullable().optional(),\n connectionId: z.string().nullable().optional(),\n providerName: z.string().nullable().optional(),\n trackingCode: z.string().nullable().optional(),\n estimatedDays: z.number().nullable().optional(),\n zoneCode: z.string().nullable().optional(),\n locationId: z.string().nullable().optional(),\n pickupPointId: z.string().nullable().optional(),\n scheduledDate: z.string().nullable().optional(),\n scheduledTime: z.string().nullable().optional(),\n data: z.record(z.unknown()).optional().default({}),\n});\n\nexport const OrderDraftSchema = z.object({\n id: z.string(),\n storeId: z.string().optional(),\n customerId: z.coerce.string().nullable().optional(),\n cartId: z.string().nullable().optional(),\n draftNumber: z.string(),\n currencyCode: z.string().optional().default(\"PEN\"),\n source: z.string().nullable().optional(),\n notes: z.string().nullable().optional(),\n email: z.string().nullable().optional(),\n phone: z.string().nullable().optional(),\n firstName: z.string().nullable().optional(),\n lastName: z.string().nullable().optional(),\n identificationType: z.string().nullable().optional(),\n identificationNumber: z.string().nullable().optional(),\n entityTaxId: z.string().nullable().optional(),\n entityName: z.string().nullable().optional(),\n status: z.string(),\n draftDate: z.string().nullable().optional(),\n sentAt: z.string().nullable().optional(),\n viewedAt: z.string().nullable().optional(),\n acceptedAt: z.string().nullable().optional(),\n rejectedAt: z.string().nullable().optional(),\n expiredAt: z.string().nullable().optional(),\n cancelledAt: z.string().nullable().optional(),\n convertedAt: z.string().nullable().optional(),\n shareToken: z.string().nullable().optional(),\n shareExpiresAt: z.string().nullable().optional(),\n allowAnonymousShareAccess: z.boolean().optional().default(false),\n sharedAt: z.string().nullable().optional(),\n billingAddress: StorefrontOrderAddressSchema.optional().nullable(),\n shippingAddress: StorefrontOrderAddressSchema.optional().nullable(),\n metadata: z.record(z.unknown()).optional().default({}),\n subTotal: z.number().optional().default(0),\n discount: z.number().optional().default(0),\n shipping: z.number().optional().default(0),\n tax: z.number().optional().default(0),\n warranty: z.number().optional().default(0),\n total: z.number().optional().default(0),\n paymentMethod: z.string().optional().default(\"\"),\n paymentCode: z.string().optional().default(\"\"),\n items: z.array(OrderDraftItemSchema).optional().default([]),\n shippingMethods: z.array(OrderDraftShippingMethodSchema).optional().default([]),\n createdOn: z.string().optional(),\n updatedOn: z.string().nullable().optional(),\n});\n\nexport type OrderDraft = z.infer<typeof OrderDraftSchema>;\n","import { OrderDraftSchema, type OrderDraft } from \"../models/order-draft\";\nimport { getStoreApiClient } from \"./store-api-client\";\n\nexport async function getSharedOrderDraft(\n shareToken: string,\n): Promise<OrderDraft> {\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(\n `order-drafts/share/${encodeURIComponent(shareToken)}`,\n { noStore: true },\n );\n return OrderDraftSchema.parse(response);\n}\n","\"use client\";\n\nimport {\n QueryClient,\n QueryClientProvider,\n hydrate,\n type DehydratedState,\n} from \"@tanstack/react-query\";\nimport { useRef, useEffect, type ReactNode } from \"react\";\n\nconst defaultOptions = {\n queries: {\n staleTime: 60 * 1000,\n },\n};\n\nexport interface QueryProviderProps {\n children: ReactNode;\n dehydratedState?: DehydratedState;\n}\n\nexport function QueryProvider({ children, dehydratedState }: QueryProviderProps) {\n const queryClientRef = useRef<QueryClient | null>(null);\n const hydratedRef = useRef(false);\n\n if (queryClientRef.current === null) {\n queryClientRef.current = new QueryClient({ defaultOptions });\n }\n\n const queryClient = queryClientRef.current;\n\n useEffect(() => {\n if (dehydratedState && !hydratedRef.current) {\n hydrate(queryClient, dehydratedState);\n hydratedRef.current = true;\n }\n }, [queryClient, dehydratedState]);\n\n return (\n <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>\n );\n}\n","\"use client\";\n\nimport React, { createContext, useContext } from \"react\";\nimport { createAuthClient } from \"better-auth/react\";\n\n/** Instancia de `createAuthClient` (better-auth/react) con los plugins de la app. */\nexport type StorefrontAuthClientInstance = ReturnType<typeof createAuthClient>;\n\nconst StorefrontAuthContext = createContext<StorefrontAuthClientInstance | null>(null);\n\nexport function StorefrontAuthProvider({\n authClient,\n children,\n}: {\n authClient: StorefrontAuthClientInstance;\n children: React.ReactNode;\n}) {\n return (\n <StorefrontAuthContext.Provider value={authClient}>{children}</StorefrontAuthContext.Provider>\n );\n}\n\nexport function useStorefrontAuthClient(): StorefrontAuthClientInstance {\n const client = useContext(StorefrontAuthContext);\n if (!client) {\n throw new Error(\n \"useStorefrontAuthClient debe usarse dentro de StorefrontAuthProvider (o EcomiqProvider con authClient).\",\n );\n }\n return client;\n}\n\nexport type StorefrontSessionUser = {\n id: string;\n email: string;\n firstName: string;\n lastName: string;\n name?: string;\n phone?: string;\n};\n\n/** Caducidad alineada con OAuth/`expires_in` (skew en ms). El bearer ya no viene en JSON de sesión. */\nexport function storefrontSessionEndsSoon(expiresAt: Date | undefined, skewMs = 120_000): boolean {\n if (!expiresAt) return false;\n return Date.now() + skewMs >= expiresAt.getTime();\n}\n\n/** @deprecated Usar `storefrontSessionEndsSoon` */\nexport const storefrontAccessTokenNeedsRefresh = storefrontSessionEndsSoon;\n\nfunction parseStorefrontSessionExpires(at: unknown): Date | undefined {\n if (!at) return undefined;\n if (at instanceof Date) return Number.isNaN(at.getTime()) ? undefined : at;\n if (typeof at === \"string\") {\n const d = new Date(at);\n return Number.isNaN(d.getTime()) ? undefined : d;\n }\n return undefined;\n}\n\nfunction mapSessionUser(raw: unknown): StorefrontSessionUser | null {\n if (!raw || typeof raw !== \"object\") return null;\n const u = raw as Record<string, unknown>;\n const explicitFirst =\n typeof u.firstName === \"string\" ? u.firstName : typeof u.given_name === \"string\" ? u.given_name : \"\";\n const explicitLast =\n typeof u.lastName === \"string\" ? u.lastName : typeof u.family_name === \"string\" ? u.family_name : \"\";\n if (explicitFirst || explicitLast) {\n return {\n id: String(u.id ?? \"\"),\n email: String(u.email ?? \"\"),\n firstName: explicitFirst,\n lastName: explicitLast,\n name: typeof u.name === \"string\" ? u.name : undefined,\n phone: typeof u.phone === \"string\" ? u.phone : undefined,\n };\n }\n const emailLocal = String(u.email ?? \"\").split(\"@\")[0] ?? \"\";\n const full = typeof u.name === \"string\" ? u.name.trim() : emailLocal.trim();\n const parts = full ? full.split(/\\s+/) : [];\n return {\n id: String(u.id ?? \"\"),\n email: String(u.email ?? \"\"),\n firstName: parts[0] ?? \"\",\n lastName: parts.slice(1).join(\" \"),\n name: typeof u.name === \"string\" ? u.name : undefined,\n phone: typeof u.phone === \"string\" ? u.phone : undefined,\n };\n}\n\n/**\n * Sesión Better Auth + usuario mapeado para UI (headers, drawer).\n */\nexport function useStorefrontSession() {\n const authClient = useStorefrontAuthClient();\n const session = authClient.useSession();\n const user = mapSessionUser(session.data?.user);\n\n const storefrontSession = session.data?.session as { expiresAt?: unknown } | undefined;\n\n /** Misma fecha que OAuth cuando el login fijó `expires_in` en la sesión Better Auth. */\n const sessionExpiresAt = parseStorefrontSessionExpires(storefrontSession?.expiresAt);\n\n return {\n session,\n user,\n sessionExpiresAt,\n isAuthenticated: Boolean(session.data?.user),\n isPending: session.isPending,\n error: session.error,\n refetch: session.refetch,\n signOut: () => authClient.signOut(),\n };\n}\n","\"use client\";\n\nimport { useQuery, useInfiniteQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport {\n getStorefrontProducts,\n getStorefrontProductBySlug,\n} from \"../../../core/client/store-api-product.service\";\nimport type {\n StorefrontProductsParamsInput,\n StorefrontProductsResponse,\n} from \"../../../core/models/product\";\n\n/**\n * Hooks de productos que usan el proxy /api/store (cookie store_id).\n * No requiere storeId: el proxy lo resuelve por cookie.\n */\nexport function useStoreProducts() {\n const useStorefrontProductsList = (params?: StorefrontProductsParamsInput) => {\n return useQuery({\n queryKey: [\"storefront\", \"products\", params],\n queryFn: () => getStorefrontProducts(params),\n });\n };\n\n const useStorefrontInfiniteProducts = (\n params?: Omit<StorefrontProductsParamsInput, \"page\">\n ) => {\n return useInfiniteQuery({\n queryKey: [\"storefront\", \"products\", \"infinite\", params],\n queryFn: ({ pageParam = 1 }) =>\n getStorefrontProducts({ ...params, page: pageParam }),\n getNextPageParam: (lastPage: StorefrontProductsResponse) =>\n lastPage.pageIndex < lastPage.totalPages ? lastPage.pageIndex + 1 : undefined,\n initialPageParam: 1,\n });\n };\n\n const useProductBySlug = (slug: string) => {\n return useQuery({\n queryKey: [\"storefront\", \"product\", \"slug\", slug],\n queryFn: () => getStorefrontProductBySlug(slug),\n enabled: !!slug,\n });\n };\n\n const useRefreshStorefrontProducts = () => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (params?: StorefrontProductsParamsInput) =>\n getStorefrontProducts(params),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"storefront\", \"products\"] });\n },\n });\n };\n\n return {\n useStorefrontProductsList,\n useStorefrontInfiniteProducts,\n useProductBySlug,\n useRefreshStorefrontProducts,\n };\n}\n","\"use client\";\n\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport {\n getStorefrontCollections,\n getStorefrontCollectionBySlug,\n} from \"../../../core/client/store-api-collection.service\";\n\n/**\n * Hooks de colecciones que usan el proxy /api/store.\n */\nexport function useStoreCollections() {\n const useStorefrontCollectionsList = () => {\n return useQuery({\n queryKey: [\"storefront\", \"collections\"],\n queryFn: () => getStorefrontCollections(),\n });\n };\n\n const useCollectionBySlug = (slug: string) => {\n return useQuery({\n queryKey: [\"storefront\", \"collection\", \"slug\", slug],\n queryFn: () => getStorefrontCollectionBySlug(slug),\n enabled: !!slug,\n });\n };\n\n const useRefreshStorefrontCollections = () => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: () => getStorefrontCollections(),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"storefront\", \"collections\"] });\n },\n });\n };\n\n return {\n useStorefrontCollectionsList,\n useCollectionBySlug,\n useRefreshStorefrontCollections,\n };\n}\n\n","\"use client\";\n\nimport { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport {\n getStorefrontPages,\n getStorefrontPageBySlug,\n} from \"../../../core/client/store-api-pages.service\";\n\n/**\n * Hooks de páginas que usan el proxy /api/store.\n */\nexport function useStorePages() {\n const useStorefrontPagesList = () => {\n return useQuery({\n queryKey: [\"storefront\", \"pages\"],\n queryFn: () => getStorefrontPages(),\n });\n };\n\n const usePageBySlug = (slug: string) => {\n return useQuery({\n queryKey: [\"storefront\", \"page\", \"slug\", slug],\n queryFn: () => getStorefrontPageBySlug(slug),\n enabled: !!slug,\n });\n };\n\n const useRefreshStorefrontPages = () => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: () => getStorefrontPages(),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"storefront\", \"pages\"] });\n },\n });\n };\n\n return {\n useStorefrontPagesList,\n usePageBySlug,\n useRefreshStorefrontPages,\n };\n}\n","\"use client\";\n\nimport { create } from 'zustand';\nimport { persist } from 'zustand/middleware';\n\nexport type CartItemVariant = {\n /** Identifier of the selected variant (if any) */\n variantId?: string;\n /** Optional SKU of the variant */\n variantSku?: string;\n /** Human readable label for the variant (e.g. \"Color: Black • Size: M\") */\n variantLabel?: string;\n};\n\nexport type CartItem = CartItemVariant & {\n id: string;\n title: string;\n image: string;\n /** Backwards‑compatible size field; usually covered by variantLabel */\n size: string;\n price: number;\n quantity: number;\n};\n\nexport type CheckoutStep =\n | 'customer'\n | 'shipping'\n | 'shippingOptions'\n | 'payment';\n\nexport type CheckoutCustomerLocal = {\n email: string;\n firstName: string;\n lastName: string;\n phone: string;\n};\n\ntype CartState = {\n count: number;\n cart: CartItem[];\n /** Token/id del carrito en backend (ownerId) */\n cartTokenId: string | null;\n setCartTokenId: (token: string | null) => void;\n checkoutStep: CheckoutStep | null;\n setCheckoutStep: (step: CheckoutStep | null) => void;\n /**\n * Customer guardado localmente para poder recrear el carrito si el backend\n * devuelve 404 por token inválido.\n */\n checkoutCustomerLocal: { cartTokenId: string; customer: CheckoutCustomerLocal } | null;\n setCheckoutCustomerLocal: (customer: CheckoutCustomerLocal) => void;\n clearCheckoutCustomerLocal: () => void;\n addCart: (item: CartItem) => void;\n removeCart: (id: string) => void;\n /** Carrito/token inválido en servidor (ej. eliminado): limpia estado local y checkout. */\n clearCartSession: () => void;\n};\n\nexport const useCart = create<CartState>()(\n persist(\n (set) => ({\n count: 0,\n cart: [],\n cartTokenId: null,\n setCartTokenId: (token) => set((state) => ({ ...state, cartTokenId: token })),\n checkoutStep: null,\n setCheckoutStep: (step) => set((state) => ({ ...state, checkoutStep: step })),\n checkoutCustomerLocal: null,\n setCheckoutCustomerLocal: (customer) =>\n set((state) => {\n if (!state.cartTokenId) return state;\n return {\n checkoutCustomerLocal: {\n cartTokenId: state.cartTokenId,\n customer,\n },\n };\n }),\n clearCheckoutCustomerLocal: () => set(() => ({ checkoutCustomerLocal: null })),\n addCart: (item) =>\n set((state) => {\n const existingItem = state.cart.find(\n (cartItem) => cartItem.id === item.id\n );\n if (existingItem) {\n const newQuantity = Math.max(0, existingItem.quantity) + 1;\n const cart = state.cart.map((cartItem) =>\n cartItem.id === item.id\n ? { ...cartItem, quantity: newQuantity }\n : cartItem\n );\n const count = cart.reduce((sum, i) => sum + Math.max(0, i.quantity), 0);\n return { count, cart };\n }\n const newItem: CartItem = {\n ...item,\n quantity: Math.max(1, Math.max(0, item.quantity ?? 1)),\n };\n const cart = [...state.cart, newItem];\n const count = cart.reduce((sum, i) => sum + Math.max(0, i.quantity), 0);\n return { count, cart };\n }),\n removeCart: (id) =>\n set((state) => {\n const existingItem = state.cart.find((item) => item.id === id);\n if (!existingItem) return state;\n if (existingItem.quantity > 1) {\n const newQuantity = Math.max(0, existingItem.quantity - 1);\n const cart = state.cart.map((cartItem) =>\n cartItem.id === id\n ? { ...cartItem, quantity: newQuantity }\n : cartItem\n );\n const count = cart.reduce((sum, i) => sum + Math.max(0, i.quantity), 0);\n return { count, cart };\n }\n const cart = state.cart.filter((item) => item.id !== id);\n const count = Math.max(0, cart.reduce((sum, i) => sum + Math.max(0, i.quantity), 0));\n return { count, cart };\n }),\n clearCartSession: () =>\n set(() => ({\n count: 0,\n cart: [],\n cartTokenId: null,\n checkoutStep: null,\n checkoutCustomerLocal: null,\n })),\n }),\n { name: 'cart-storage' }\n )\n);\n","\"use client\";\n\nimport { useMutation, useQuery } from \"@tanstack/react-query\";\nimport { useEffect, useRef } from \"react\";\nimport { toast } from \"sonner\";\nimport { useCart } from \"../../stores/use-cart\";\nimport { isCartNotActiveApiError } from \"../../../core/client/store-api-errors\";\nimport {\n getCart,\n createCart,\n patchCartBuyer,\n patchCartAddresses,\n addCartItem,\n checkoutCart,\n uploadPaymentReceipt,\n getCartCheckout,\n getCartPaymentMethods,\n getShippingOptions,\n putCartShippingMethod,\n addCartCoupon,\n removeCartCoupon,\n} from \"../../../core/client/store-api-cart.service\";\nimport type {\n CartBuyerRequest,\n CartAddressesRequest,\n CartCreateRequest,\n CartResponse,\n CartCheckoutRequest,\n CartCheckoutResponse,\n CartCheckoutReadResponse,\n CartPaymentReceiptResponse,\n CartPaymentMethodsResponse,\n CartShippingMethodPutRequest,\n CartCouponRequest,\n CartItemRequest,\n ShippingOptionsResponse,\n} from \"../../../core/models/cart\";\n\n/**\n * Hooks de carrito que usan el proxy /api/store (`X-Store-Id` vía provider / server setters).\n */\nexport function useStoreCart() {\n const useGetCart = (cartId?: string | null) =>\n useQuery<CartResponse, Error>({\n queryKey: [\"storefront\", \"cart\", cartId ?? null],\n queryFn: () => getCart(cartId ?? undefined),\n // Si devuelve 404 no reintentar; para otros errores solo un intento adicional como máximo.\n retry: (failureCount, error) => {\n const status = (error as Error & { status?: number }).status;\n if (status === 404) return false;\n return failureCount < 1;\n },\n // Evitar refetch automático al enfocar la ventana; el carrito se carga una sola vez aquí.\n refetchOnWindowFocus: false,\n enabled: !!cartId,\n });\n\n const useCreateCart = () =>\n useMutation<CartResponse, Error, CartCreateRequest>({\n mutationFn: (data) => createCart(data),\n });\n\n const useUpdateCartBuyer = () =>\n useMutation<\n CartResponse,\n Error,\n { data: CartBuyerRequest; cartId: string }\n >({\n mutationFn: ({ data, cartId }) => patchCartBuyer(data, cartId),\n });\n\n const useUpdateCartAddresses = () =>\n useMutation<\n CartResponse,\n Error,\n { data: CartAddressesRequest; cartId: string }\n >({\n mutationFn: ({ data, cartId }) => patchCartAddresses(data, cartId),\n });\n\n const useAddCartItem = () =>\n useMutation<\n CartResponse,\n Error,\n CartItemRequest & { cartId: string }\n >({\n mutationFn: ({ cartId, ...data }) => addCartItem(data, cartId),\n });\n\n const useCheckoutCart = () =>\n useMutation<\n CartCheckoutResponse,\n Error,\n { data: CartCheckoutRequest; cartId: string }\n >({\n mutationFn: ({ data, cartId }) => checkoutCart(data, cartId),\n });\n\n const useUploadPaymentReceipt = () =>\n useMutation<\n CartPaymentReceiptResponse,\n Error,\n { cartId: string; file: File }\n >({\n mutationFn: ({ cartId, file }) => uploadPaymentReceipt(cartId, file),\n });\n\n const useGetCartCheckout = (cartId?: string | null) => {\n const inactiveHandledRef = useRef<string | null>(null);\n\n const query = useQuery<CartCheckoutReadResponse, Error>({\n queryKey: [\"storefront\", \"cart\", cartId ?? null, \"checkout\"],\n queryFn: () => getCartCheckout(cartId!),\n retry: (failureCount, error) => {\n const status = (error as Error & { status?: number }).status;\n if (status === 404) return false;\n if (status === 400 && isCartNotActiveApiError(error)) return false;\n return failureCount < 1;\n },\n /** Evita GET repetidos al cambiar de paso / re-render; `refetch()` sigue forzando actualización tras mutaciones. */\n staleTime: 60_000,\n refetchOnMount: false,\n refetchOnReconnect: false,\n refetchOnWindowFocus: false,\n enabled: !!cartId,\n });\n\n useEffect(() => {\n inactiveHandledRef.current = null;\n }, [cartId]);\n\n useEffect(() => {\n if (!cartId) return;\n if (!query.isError || !query.error) return;\n if (!isCartNotActiveApiError(query.error)) return;\n if (inactiveHandledRef.current === cartId) return;\n inactiveHandledRef.current = cartId;\n toast.error(\n \"Este carrito ya no está disponible. Se ha vaciado tu bolsa para que puedas empezar de nuevo.\",\n );\n useCart.getState().clearCartSession();\n }, [cartId, query.isError, query.error]);\n\n return query;\n };\n\n const useGetCartPaymentMethods = (cartId?: string | null) =>\n useQuery<CartPaymentMethodsResponse, Error>({\n queryKey: [\"storefront\", \"cart\", cartId ?? null, \"payment-methods\"],\n queryFn: () => getCartPaymentMethods(cartId ?? undefined),\n retry: (failureCount, error) => {\n const status = (error as Error & { status?: number }).status;\n if (status === 404) return false;\n return failureCount < 1;\n },\n refetchOnWindowFocus: false,\n enabled: !!cartId,\n });\n\n const useGetShippingOptions = (\n cartId: string | null | undefined,\n postalCode: string | undefined,\n enabled: boolean,\n ) =>\n useQuery<ShippingOptionsResponse, Error>({\n queryKey: [\n \"storefront\",\n \"cart\",\n cartId ?? null,\n \"shipping-options\",\n postalCode ?? \"\",\n ],\n queryFn: () => getShippingOptions(cartId!, postalCode!),\n retry: (failureCount, error) => {\n const status = (error as Error & { status?: number }).status;\n if (status === 404) return false;\n return failureCount < 1;\n },\n refetchOnWindowFocus: false,\n enabled: !!cartId && !!postalCode?.trim() && enabled,\n });\n\n const usePutCartShippingMethod = () =>\n useMutation<\n CartResponse,\n Error,\n { cartId: string; data: CartShippingMethodPutRequest }\n >({\n mutationFn: ({ cartId, data }) => putCartShippingMethod(cartId, data),\n });\n\n const useAddCartCoupon = () =>\n useMutation<\n CartResponse,\n Error,\n { cartId: string; data: CartCouponRequest }\n >({\n mutationFn: ({ cartId, data }) => addCartCoupon(cartId, data),\n });\n\n const useRemoveCartCoupon = () =>\n useMutation<CartResponse, Error, { cartId: string; code: string }>({\n mutationFn: ({ cartId, code }) => removeCartCoupon(cartId, code),\n });\n\n return {\n useCreateCart,\n useGetCart,\n useGetCartCheckout,\n useUpdateCartBuyer,\n useUpdateCartAddresses,\n useAddCartItem,\n useCheckoutCart,\n useUploadPaymentReceipt,\n useGetCartPaymentMethods,\n useGetShippingOptions,\n usePutCartShippingMethod,\n useAddCartCoupon,\n useRemoveCartCoupon,\n };\n}\n","\"use client\";\n\nimport { create } from 'zustand';\nimport { StorefrontSettings } from '../../core/models/store';\n\ntype Drawers = {\n cart: boolean;\n search: boolean;\n menu: boolean;\n filter: boolean;\n [key: string]: boolean;\n};\ntype Modals = {\n login: boolean;\n signup: boolean;\n [key: string]: boolean;\n};\n\ntype StoreState = {\n data: StorefrontSettings | null;\n drawers: Drawers;\n modals: Modals;\n openDrawer: (drawer: keyof Drawers) => void;\n closeDrawer: (drawer: keyof Drawers) => void;\n toggleDrawer: (drawer: keyof Drawers) => void;\n closeAllDrawers: () => void;\n openModal: (modal: keyof Modals) => void;\n closeModal: (modal: keyof Modals) => void;\n toggleModal: (modal: keyof Modals) => void;\n closeAllModals: () => void;\n};\n\nexport const useStore = create<StoreState>()(\n (set) => ({\n data: null,\n drawers: {\n cart: false,\n search: false,\n menu: false,\n filter: false,\n },\n openDrawer: (drawer) =>\n set((state) => ({\n drawers: {\n ...state.drawers,\n [drawer]: true,\n },\n })),\n closeDrawer: (drawer) =>\n set((state) => ({\n drawers: {\n ...state.drawers,\n [drawer]: false,\n },\n })),\n toggleDrawer: (drawer) =>\n set((state) => ({\n drawers: {\n ...state.drawers,\n [drawer]: !state.drawers[drawer],\n },\n })),\n closeAllDrawers: () =>\n set((state) => ({\n drawers: Object.keys(state.drawers).reduce(\n (acc, key) => ({ ...acc, [key]: false }),\n {} as Drawers\n ),\n })),\n modals: {\n login: false,\n signup: false,\n },\n openModal: (modal) =>\n set((state) => ({\n modals: {\n ...state.modals,\n login: false,\n signup: false,\n [modal]: true,\n },\n })),\n closeModal: (modal) =>\n set((state) => ({\n modals: {\n ...state.modals,\n login: false,\n signup: false,\n [modal]: false,\n },\n })),\n toggleModal: (modal) =>\n set((state) => ({\n modals: {\n ...state.modals,\n [modal]: !state.modals[modal],\n },\n })),\n closeAllModals: () =>\n set((state) => ({\n modals: Object.keys(state.modals).reduce(\n (acc, key) => ({ ...acc, [key]: false }),\n {} as Modals\n ),\n })),\n }),\n);\n","\"use client\";\n\nimport React, { useEffect, useState } from \"react\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport {\n StorefrontAuthProvider,\n type StorefrontAuthClientInstance,\n} from \"../../providers/storefront-auth-context\";\nimport type { StorefrontSettings } from \"../../../core/models/store\";\nimport { useStore } from \"../../stores/use-store\";\nimport { setClientStoreId } from \"../../../core/client/store-api-client\";\n\nexport type EcomiqProviderProps = {\n store: StorefrontSettings | null;\n /** Si lo omites, catálogo y carrito funcionan; login requiere configurar Better Auth (ver README). */\n authClient?: StorefrontAuthClientInstance;\n children: React.ReactNode;\n /**\n * Modales de login/registro y toasts del shell Ecomiq (requiere `@ecomiq/ui` en el monorepo).\n * En npm / tiendas custom deja `false` y monta tu propia UI.\n */\n withShellUi?: boolean;\n};\n\nexport function EcomiqProvider({\n store,\n authClient,\n children,\n withShellUi = false,\n}: EcomiqProviderProps) {\n useStore.setState({ data: store ?? null });\n\n useEffect(() => {\n setClientStoreId(store?.store.id ?? null);\n return () => setClientStoreId(null);\n }, [store]);\n\n const [queryClient] = useState(() => new QueryClient());\n\n const tree = (\n <QueryClientProvider client={queryClient}>\n {children}\n {withShellUi ? <EcomiqShellUi /> : null}\n </QueryClientProvider>\n );\n\n if (!authClient) return tree;\n\n return (\n <StorefrontAuthProvider authClient={authClient}>{tree}</StorefrontAuthProvider>\n );\n}\n\nfunction EcomiqShellUi() {\n const [ui, setUi] = useState<React.ComponentType | null>(null);\n\n useEffect(() => {\n void import(\"./ecomiq-shell-ui\").then((mod) => setUi(() => mod.EcomiqShellUi));\n }, []);\n\n return ui ? React.createElement(ui) : null;\n}\n","/** Id del plugin servidor/cliente Better Auth (debe coincidir en ambos lados). */\nexport const PLUGIN_ID = \"ecomiq-oauth-password\";\nexport const ECOMIQ_OAUTH_TOKEN_URL = \"https://auth.ecomiq.pe/connect/token\";\nexport const ECOMIQ_OAUTH_USERINFO_URL = \"https://auth.ecomiq.pe/connect/userinfo\";\n","import type { BetterAuthClientPlugin } from \"better-auth/client\";\nimport { PLUGIN_ID } from \"./ecomiq-oauth-password-constants\";\n\n/**\n * Cliente Better Auth para el plugin `ecomiqOAuthPassword`.\n * Tras añadirlo a `createAuthClient`, refresca la sesión al llamar al sign-in.\n *\n * Ejemplo:\n * `authClient.$fetch(\"/ecomiq-oauth/sign-in\", { method: \"POST\", headers, body: { email, password } })`\n */\nexport function ecomiqOAuthPasswordClient(): BetterAuthClientPlugin {\n return {\n id: PLUGIN_ID,\n pathMethods: {\n \"/ecomiq-oauth/sign-in\": \"POST\",\n },\n atomListeners: [\n {\n matcher: (path) => path === \"/ecomiq-oauth/sign-in\",\n signal: \"$sessionSignal\",\n },\n ],\n };\n}\n","import { z } from \"zod\";\n\nexport const StorefrontCheckoutSettingsSchema = z.object({\n allowGuestCheckout: z.boolean().optional(),\n identityScope: z.enum([\"store\", \"tenant\", \"global\"]).optional(),\n signInMethods: z.array(z.string()).optional(),\n});\n\nexport type StorefrontCheckoutSettings = z.infer<typeof StorefrontCheckoutSettingsSchema>;\n\nconst looseRecord = z.record(z.string(), z.unknown());\n\nexport const StorefrontThemeConfigSchema = z\n .object({\n name: z.string().nullable().optional(),\n mode: z.string().nullable().optional(),\n colors: looseRecord.optional(),\n fonts: looseRecord.optional(),\n assets: looseRecord.optional(),\n })\n .passthrough();\n\nexport const StorefrontFeaturesEnabledSchema = z\n .object({\n flags: looseRecord.optional(),\n })\n .passthrough();\n\nexport const StorefrontCmsBrandingSchema = z.object({\n logoUrl: z.string().nullable().optional(),\n logoDarkUrl: z.string().nullable().optional(),\n faviconUrl: z.string().nullable().optional(),\n socialImageUrl: z.string().nullable().optional(),\n});\n\nexport const StorefrontCmsSeoSchema = z.object({\n siteName: z.string().nullable().optional(),\n metaTitle: z.string().nullable().optional(),\n metaDescription: z.string().nullable().optional(),\n titleTemplate: z.string().nullable().optional(),\n robotsIndex: z.boolean().optional(),\n});\n\nexport const StorefrontCmsSocialLinksSchema = z.object({\n instagram: z.string().nullable().optional(),\n facebook: z.string().nullable().optional(),\n tiktok: z.string().nullable().optional(),\n youtube: z.string().nullable().optional(),\n x: z.string().nullable().optional(),\n});\n\nexport const StorefrontCmsContactSchema = z.object({\n supportEmail: z.string().nullable().optional(),\n phone: z.string().nullable().optional(),\n whatsapp: z.string().nullable().optional(),\n address: z.string().nullable().optional(),\n socialLinks: StorefrontCmsSocialLinksSchema.optional(),\n});\n\nexport const StorefrontCmsTrackingSchema = z.object({\n googleAnalyticsMeasurementId: z.string().nullable().optional(),\n metaPixelId: z.string().nullable().optional(),\n googleTagManagerContainerId: z.string().nullable().optional(),\n});\n\nexport const StorefrontCmsCustomScriptsSchema = z.object({\n enabled: z.boolean().optional(),\n head: z.string().nullable().optional(),\n bodyEnd: z.string().nullable().optional(),\n});\n\nexport const StorefrontCmsSettingsSchema = z.object({\n themeKey: z.string().optional(),\n branding: StorefrontCmsBrandingSchema.optional(),\n seo: StorefrontCmsSeoSchema.optional(),\n contact: StorefrontCmsContactSchema.optional(),\n tracking: StorefrontCmsTrackingSchema.optional(),\n customScripts: StorefrontCmsCustomScriptsSchema.optional(),\n updatedOn: z.string().nullable().optional(),\n});\n\nexport const StorefrontCmsPageSchema = z\n .object({\n id: z.string(),\n name: z.string(),\n slug: z.string(),\n layout: z.string().optional(),\n version: z.number().optional(),\n settings: z.record(z.string(), z.unknown()).optional().nullable(),\n sections: z.array(z.unknown()).optional(),\n status: z.string().optional(),\n hasPublishedVersion: z.boolean().optional(),\n publishedOn: z.string().nullable().optional(),\n publishedBy: z.string().nullable().optional(),\n createdOn: z.string().nullable().optional(),\n updatedOn: z.string().nullable().optional(),\n createdBy: z.string().nullable().optional(),\n updatedBy: z.string().nullable().optional(),\n lastModifiedBy: z.string().nullable().optional(),\n })\n .passthrough();\n\n/** Respuesta antigua GET /settings (objeto plano sin `store` / `cms`). */\nexport const StorefrontSettingsLegacyFlatSchema = z\n .object({\n id: z.coerce.string(),\n tenantId: z.string().nullable().optional(),\n name: z.string(),\n slug: z.coerce.string().optional(),\n description: z.string().nullable().optional(),\n visibility: z.string().nullable().optional(),\n logo: z.string().nullable().optional(),\n favicon: z.string().nullable().optional(),\n icon: z.string().nullable().optional(),\n currency: z.string().nullable().optional(),\n language: z.string().nullable().optional(),\n themeConfig: z.unknown().optional().nullable(),\n featuresEnabled: z.unknown().optional().nullable(),\n checkoutSettings: StorefrontCheckoutSettingsSchema.optional().nullable(),\n })\n .passthrough();\n\nexport type StorefrontSettingsLegacyFlat = z.infer<typeof StorefrontSettingsLegacyFlatSchema>;\n\nfunction unwrapSettingsResponseBody(v: unknown): unknown {\n if (!v || typeof v !== \"object\" || Array.isArray(v)) return v;\n const o = v as Record<string, unknown>;\n if (\n \"data\" in o &&\n o.data != null &&\n typeof o.data === \"object\" &&\n !Array.isArray(o.data)\n ) {\n return o.data;\n }\n return v;\n}\n\nfunction isLegacyFlatSettingsPayload(v: unknown): v is Record<string, unknown> {\n if (!v || typeof v !== \"object\" || Array.isArray(v)) return false;\n const o = v as Record<string, unknown>;\n if (\"store\" in o || \"schemaVersion\" in o || \"cms\" in o) return false;\n return (\n (typeof o.id === \"string\" || typeof o.id === \"number\") &&\n typeof o.name === \"string\"\n );\n}\n\n/** Convierte el JSON plano legacy al sobre actual (misma forma que el API nuevo). */\nexport function normalizeStorefrontSettingsPayload(v: unknown): unknown {\n const body = unwrapSettingsResponseBody(v);\n if (!isLegacyFlatSettingsPayload(body)) return body;\n const raw = body;\n const parsed = StorefrontSettingsLegacyFlatSchema.safeParse(raw);\n if (!parsed.success) return body;\n\n const l = parsed.data;\n const currency = l.currency?.trim() ? l.currency : \"PEN\";\n const language = l.language?.trim() ? l.language : \"es\";\n const slug = l.slug?.trim() ? l.slug : l.id;\n\n return {\n schemaVersion: 0,\n generatedAt: new Date(0).toISOString(),\n store: {\n id: l.id,\n tenantId: l.tenantId ?? undefined,\n name: l.name,\n slug,\n description: l.description ?? null,\n logo: l.logo ?? null,\n icon: l.icon ?? null,\n visibility: l.visibility ?? undefined,\n currency,\n language,\n themeConfig: l.themeConfig ?? undefined,\n featuresEnabled: l.featuresEnabled ?? undefined,\n checkoutSettings: l.checkoutSettings ?? undefined,\n },\n cms: {\n settings: {\n branding: {\n faviconUrl: l.favicon ?? null,\n logoUrl: l.logo ?? null,\n logoDarkUrl: null,\n socialImageUrl: null,\n },\n },\n pages: [],\n },\n };\n}\n\nexport const StorefrontStoreSchema = z\n .object({\n id: z.string(),\n tenantId: z.string().optional(),\n sellerId: z.string().optional(),\n plan: z.string().optional(),\n storageLimitBytes: z.number().optional(),\n monthlyTransferLimitBytes: z.number().optional(),\n maxUploadSizeBytes: z.number().optional(),\n maxStores: z.number().optional(),\n maxMembers: z.number().optional(),\n maxProducts: z.number().optional(),\n maxCategories: z.number().optional(),\n maxBrands: z.number().optional(),\n maxAttributes: z.number().optional(),\n maxCollections: z.number().optional(),\n enableApi: z.boolean().optional(),\n isActive: z.boolean().optional(),\n name: z.string(),\n description: z.string().nullable().optional(),\n avatarUrl: z.string().nullable().optional(),\n logo: z.string().nullable().optional(),\n icon: z.string().nullable().optional(),\n slug: z.string(),\n domain: z.string().nullable().optional(),\n domains: z.array(z.string()).optional(),\n timeZone: z.string().nullable().optional(),\n currency: z.string(),\n language: z.string(),\n visibility: z.string().optional(),\n privateAccessHash: z.string().nullable().optional(),\n privateAccessVersion: z.number().optional(),\n themeConfig: StorefrontThemeConfigSchema.optional(),\n featuresEnabled: StorefrontFeaturesEnabledSchema.optional(),\n checkoutSettings: StorefrontCheckoutSettingsSchema.optional().nullable(),\n })\n .passthrough();\n\nconst StorefrontSettingsEnvelopeSchema = z\n .object({\n schemaVersion: z.number(),\n generatedAt: z.string(),\n store: StorefrontStoreSchema,\n cms: z.object({\n settings: StorefrontCmsSettingsSchema,\n pages: z.array(StorefrontCmsPageSchema),\n }),\n })\n .passthrough();\n\n/** Acepta sobre nuevo o JSON plano legacy; siempre valida contra el sobre normalizado. */\nexport const StorefrontSettingsSchema = z.preprocess(\n normalizeStorefrontSettingsPayload,\n StorefrontSettingsEnvelopeSchema\n);\n\nexport type StorefrontSettings = z.infer<typeof StorefrontSettingsSchema>;\nexport type StorefrontStore = z.infer<typeof StorefrontStoreSchema>;\nexport type StorefrontCmsSettings = z.infer<typeof StorefrontCmsSettingsSchema>;\nexport type StorefrontCmsPage = z.infer<typeof StorefrontCmsPageSchema>;\n\n/** Nodo `store` del payload público (cookies, auth, moneda). */\nexport function storefrontStoreRecord(\n settings: StorefrontSettings | null | undefined\n): StorefrontStore | null {\n return settings?.store ?? null;\n}\n\n/** Favicon: CMS branding, luego logo/icono de tienda. */\nexport function storefrontFaviconUrl(\n settings: StorefrontSettings | null | undefined\n): string | null {\n const b = settings?.cms?.settings?.branding;\n return (\n b?.faviconUrl ??\n settings?.store?.logo ??\n settings?.store?.icon ??\n null\n );\n}\n\n/** Imagen social / OG: branding, luego logo de tienda. */\nexport function storefrontOgImageUrl(\n settings: StorefrontSettings | null | undefined\n): string | null {\n const b = settings?.cms?.settings?.branding;\n return b?.socialImageUrl ?? settings?.store?.logo ?? null;\n}\n","import {\n storefrontStoreRecord,\n type StorefrontSettings,\n} from \"../models/store\";\n\n/** Headers que el plugin OAuth de Ecomiq espera en el sign-in. */\nexport type EcomiqOAuthIdentityHeaders = Record<string, string>;\n\nexport function buildEcomiqOAuthIdentityHeaders(\n settings: StorefrontSettings | null | undefined,\n): EcomiqOAuthIdentityHeaders {\n const record = storefrontStoreRecord(settings);\n if (!record?.id) {\n throw new Error(\"Tienda no disponible para iniciar sesión\");\n }\n\n const checkout = record.checkoutSettings;\n const identityScope = checkout?.identityScope === \"tenant\" ? \"tenant\" : \"store\";\n const headers: EcomiqOAuthIdentityHeaders = {\n \"x-Identity-Scope\": identityScope,\n \"x-Store-Id\": record.id,\n };\n if (record.tenantId) headers[\"x-Tenant-Id\"] = record.tenantId;\n return headers;\n}\n","import { buildEcomiqOAuthIdentityHeaders } from \"../../core/lib/ecomiq-oauth-identity\";\nimport type { StorefrontSettings } from \"../../core/models/store\";\nimport type { StorefrontAuthClientInstance } from \"../providers/storefront-auth-context\";\n\nexport type EcomiqSignInCredentials = {\n email: string;\n password: string;\n};\n\n/**\n * Inicia sesión con email/contraseña vía plugin `ecomiqOAuthPassword` (Better Auth).\n * Usa la tienda de `settings` (p. ej. `useStore().data`) para los headers de identidad.\n */\nexport async function signInWithEcomiqCredentials(\n authClient: StorefrontAuthClientInstance,\n settings: StorefrontSettings | null | undefined,\n credentials: EcomiqSignInCredentials,\n) {\n const response = await authClient.$fetch(\"/ecomiq-oauth/sign-in\", {\n method: \"POST\",\n headers: buildEcomiqOAuthIdentityHeaders(settings),\n body: credentials,\n });\n\n if (response.error) {\n throw new Error(response.error.message ?? \"Error al iniciar sesión\");\n }\n\n return response;\n}\n","export const countryCurrency = {\n \"PEN\": \"es-PE\",\n \"USD\": \"en-US\",\n \"COP\": \"es-CO\",\n \"MXN\": \"es-MX\",\n}\n","import { countryCurrency } from \"../constants/currency\";\n\n/**\n * Formats a number as currency using the store's locale for the given currency code.\n * Uses countryCurrency to pick the right locale (e.g. PEN → es-PE, USD → en-US).\n */\nexport function formatCurrency(\n amount: number,\n currency: string = \"USD\"\n): string {\n const locale =\n countryCurrency[currency as keyof typeof countryCurrency] ?? \"en-US\";\n return new Intl.NumberFormat(locale, {\n style: \"currency\",\n currency,\n }).format(amount);\n}\n","\"use client\";\n\nimport { useMemo, useState, useCallback, useEffect } from \"react\";\nimport { formatCurrency } from \"../../../../core/utils/format-currency\";\nimport type { StorefrontProductDetail, StorefrontVariant } from \"../../../../core/models/product\";\nimport type { OptionGroup, SelectedOptions } from \"./types\";\n\nfunction buildOptionGroups(variants: StorefrontVariant[]): OptionGroup[] {\n const map = new Map<string, Map<string, string>>();\n for (const v of variants) {\n for (const opt of v.options ?? []) {\n const key = opt.key;\n const name = opt.name ?? key;\n if (!map.has(key)) map.set(key, new Map());\n map.get(key)!.set(opt.value, name);\n }\n }\n return Array.from(map.entries()).map(([key, valueMap]) => ({\n key,\n name: Array.from(valueMap.values())[0] ?? key,\n values: Array.from(valueMap.keys()),\n }));\n}\n\nfunction findVariant(\n variants: StorefrontVariant[],\n selected: SelectedOptions,\n hasConfigurableOptions: boolean\n): StorefrontVariant | null {\n // Producto con variante(s) pero sin opciones (p. ej. options: []): una sola variante implícita\n if (!hasConfigurableOptions && variants.length > 0) {\n return variants[0] ?? null;\n }\n if (Object.keys(selected).length === 0) return null;\n for (const v of variants) {\n const opts = v.options ?? [];\n const match =\n opts.length > 0 &&\n opts.every((o: { key: string; value: string }) => selected[o.key] === o.value);\n if (match) return v;\n }\n return null;\n}\n\nfunction getInitialOptions(\n variants: StorefrontVariant[],\n optionGroups: OptionGroup[]\n): SelectedOptions {\n const first = variants[0];\n if (!first) return {};\n const opts = first.options ?? [];\n const selected: SelectedOptions = {};\n for (const g of optionGroups) {\n const o = opts.find((x: { key: string; value: string }) => x.key === g.key);\n if (o) selected[g.key] = o.value;\n }\n return selected;\n}\n\nexport type ProductVariantSelectorProps = {\n product: StorefrontProductDetail;\n currency?: string;\n features?: string[];\n onVariantChange?: (variant: StorefrontVariant | null, price: number) => void;\n children?: (props: {\n product: StorefrontProductDetail;\n selectedVariant: StorefrontVariant | null;\n displayPrice: number;\n compareAtPrice: number | null | undefined;\n isAvailable: boolean;\n selectedOptions: SelectedOptions;\n }) => React.ReactNode;\n};\n\nexport function ProductVariantSelector({\n product,\n currency = \"USD\",\n features = [],\n onVariantChange,\n children,\n}: ProductVariantSelectorProps) {\n const variants = useMemo(() => product.variants ?? [], [product.variants]);\n const optionGroups = useMemo(() => buildOptionGroups(variants), [variants]);\n const hasConfigurableOptions = optionGroups.length > 0;\n\n const [selectedOptions, setSelectedOptions] = useState<SelectedOptions>(() =>\n getInitialOptions(variants, optionGroups)\n );\n\n const selectedVariant = useMemo(\n () => findVariant(variants, selectedOptions, hasConfigurableOptions),\n [variants, selectedOptions, hasConfigurableOptions]\n );\n\n const displayPrice = selectedVariant?.price ?? product.price ?? 0;\n const compareAtPrice = selectedVariant?.compareAtPrice ?? product.compareAtPrice;\n const isAvailable =\n (selectedVariant ? (selectedVariant.quantity ?? 0) > 0 : product.isAvailable) ?? true;\n\n useEffect(() => {\n onVariantChange?.(selectedVariant, displayPrice);\n }, [selectedVariant, displayPrice, onVariantChange]);\n\n const setOption = useCallback((key: string, value: string) => {\n setSelectedOptions((prev) => ({ ...prev, [key]: value }));\n }, []);\n\n const hasVariants = hasConfigurableOptions;\n\n return (\n <div className=\"space-y-5\">\n <div className=\"flex items-baseline gap-2 flex-wrap\">\n <span\n className=\"inline-flex items-center rounded-md bg-primary/10 px-2.5 py-0.5 text-base font-semibold text-primary\"\n data-testid=\"product-display-price\"\n >\n {formatCurrency(displayPrice, currency)}\n </span>\n {compareAtPrice != null && compareAtPrice > displayPrice && (\n <span className=\"text-sm text-muted-foreground line-through\">\n {formatCurrency(compareAtPrice, currency)}\n </span>\n )}\n </div>\n\n {/* Option groups (Color, Size, etc.) */}\n {hasVariants &&\n optionGroups.map((group) => (\n <div key={group.key} className=\"space-y-2\">\n <span className=\"text-xs font-semibold uppercase tracking-wider text-muted-foreground\">\n {group.name}\n </span>\n <div className=\"flex flex-wrap gap-2\">\n {group.values.map((value) => {\n const isSelected = selectedOptions[group.key] === value;\n const isColorLike =\n group.key.toLowerCase().includes(\"color\") ||\n group.key.toLowerCase().includes(\"colour\");\n return (\n <button\n key={value}\n type=\"button\"\n onClick={() => setOption(group.key, value)}\n className={\n isColorLike\n ? `min-w-[72px] rounded-md border-2 px-3 py-2 text-sm font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2 ${\n isSelected\n ? \"border-primary bg-primary text-foreground\"\n : \"border-border bg-muted/30 text-foreground hover:border-muted-foreground/50\"\n }`\n : `rounded-md border px-3 py-2 text-sm font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2 ${\n isSelected\n ? \"border-primary bg-muted ring-1 ring-primary\"\n : \"border-border bg-transparent text-muted-foreground hover:border-muted-foreground/50 hover:text-foreground\"\n }`\n }\n style={\n isColorLike && isSelected && value.toLowerCase() === \"black\"\n ? { backgroundColor: \"#1a1a1a\", borderColor: \"#1a1a1a\", color: \"#fff\" }\n : isColorLike && value.toLowerCase() === \"white\"\n ? { backgroundColor: \"#fafafa\", color: \"#1a1a1a\", borderColor: \"#e5e5e5\" }\n : undefined\n }\n data-testid={`variant-option-${group.key}-${value}`}\n >\n {value}\n </button>\n );\n })}\n </div>\n </div>\n ))}\n\n {features.length > 0 && (\n <ul className=\"list-disc list-inside space-y-1 text-sm text-muted-foreground\">\n {features.map((f, i) => (\n <li key={i}>{f}</li>\n ))}\n </ul>\n )}\n\n {/* Add to cart slot */}\n {children?.({\n product,\n selectedVariant,\n displayPrice,\n compareAtPrice,\n isAvailable,\n selectedOptions,\n })}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/core/client/store-api-errors.ts","../../src/core/client/store-api-client.ts","../../src/core/models/product.ts","../../src/core/client/store-api-product.service.ts","../../src/core/models/collection.ts","../../src/core/client/store-api-collection.service.ts","../../src/core/models/page.ts","../../src/core/client/store-api-pages.service.ts","../../src/core/models/cart.ts","../../src/core/client/store-api-cart.service.ts","../../src/core/client/store-api-customer.service.ts","../../src/core/client/store-api-customer-order.service.ts","../../src/core/models/order-draft.ts","../../src/core/client/store-api-order-draft.service.ts","../../src/react/providers/query-provider.tsx","../../src/react/providers/storefront-auth-context.tsx","../../src/react/shell/hooks/use-store-products.ts","../../src/react/shell/hooks/use-store-collections.ts","../../src/react/shell/hooks/use-store-pages.ts","../../src/react/stores/use-cart.ts","../../src/react/shell/hooks/use-store-cart.ts","../../src/react/stores/use-store.ts","../../src/react/shell/providers/EcomiqProvider.tsx","../../src/react/auth/ecomiq-oauth-password-constants.ts","../../src/react/auth/ecomiq-oauth-password-client.ts","../../src/core/models/store.ts","../../src/core/lib/ecomiq-oauth-identity.ts","../../src/react/auth/ecomiq-storefront-sign-in.ts","../../src/core/constants/currency.ts","../../src/core/utils/format-currency.ts","../../src/react/pages/checkout-page/lib/checkout-form-schema.ts","../../src/react/pages/checkout-page/hooks/use-checkout-form-validation.ts","../../src/core/lib/storefront-geo-inei.ts","../../src/react/pages/checkout-page/hooks/use-checkout-delivery-form.ts","../../src/react/pages/checkout-page/components/checkout-form-controls.tsx","../../src/react/pages/checkout-page/components/checkout-delivery-form.tsx","../../src/react/components/checkout/payment-providers/checkout-payment-helpers.ts","../../src/react/components/checkout/payment-providers/provider-shared.tsx","../../src/react/components/checkout/payment-providers/payment-submission-context.tsx","../../src/react/components/checkout/payment-providers/payment-submit-by-provider.ts","../../src/react/components/checkout/payment-providers/culqi-payment-provider.tsx","../../src/react/components/checkout/payment-providers/generic-payment-provider.tsx","../../src/react/components/checkout/payment-providers/mercadopago-payment-provider.tsx","../../src/react/components/checkout/payment-providers/pagoefectivo-payment-provider.tsx","../../src/react/components/checkout/payment-providers/paypal-payment-provider.tsx","../../src/react/components/checkout/payment-providers/stripe-payment-provider.tsx","../../src/react/components/checkout/payment-providers/yape-payment-provider.tsx","../../src/react/components/checkout/payment-providers/payment-provider-router.tsx","../../src/react/pages/checkout-page/lib/checkout-payment-method.ts","../../src/react/pages/checkout-page/hooks/use-checkout-payment.ts","../../src/react/pages/checkout-page/components/checkout-payment-section.tsx","../../src/react/pages/checkout-page/components/checkout-main-form.tsx","../../src/react/pages/checkout-page/components/checkout-order-summary.tsx","../../src/react/pages/checkout-page/components/checkout-page-skeleton.tsx","../../src/react/pages/checkout-page/lib/cart-mappers.ts","../../src/react/pages/checkout-page/lib/cart-sync.ts","../../src/react/pages/checkout-page/hooks/use-cart-listener.ts","../../src/react/pages/checkout-page/hooks/use-checkout-session.ts","../../src/react/pages/checkout-page/checkout-page.tsx","../../src/react/shell/components/product-variant-selector/ProductVariantSelector.tsx"],"names":["z","jsx","useQuery","useQueryClient","useMutation","cart","count","useRef","useEffect","create","QueryClient","QueryClientProvider","React","useState","useCallback","useMemo","jsxs","createContext","useContext","CheckoutPaymentSection","toast"],"mappings":";;;;;;;;;;AAGO,SAAS,wBAAwB,KAAA,EAAyB;AAC/D,EAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,UAAU,OAAO,KAAA;AAChD,EAAA,MAAM,CAAA,GAAI,KAAA;AACV,EAAA,IAAI,CAAA,CAAE,MAAA,KAAW,GAAA,EAAK,OAAO,KAAA;AAC7B,EAAA,MAAM,OAAO,CAAA,CAAE,IAAA;AACf,EAAA,MAAM,IAAA,GAAO,MAAM,MAAA,GAAS,MAAA,CAAO,KAAK,IAAA,CAAK,MAAM,IAAI,EAAC;AACxD,EAAA,OAAO,IAAA,CAAK,SAAS,iBAAiB,CAAA;AACxC;;;ACAA,IAAM,cAAA,GAAiB,YAAA;AAGvB,IAAI,yBAAA,GAA2C,IAAA;AAG/C,IAAI,mBAAA,GAAqC,IAAA;AAGzC,IAAI,mBAAA,GAAqC,IAAA;AAMlC,SAAS,uBAAuB,MAAA,EAA6B;AAClE,EAAA,yBAAA,GAA4B,MAAA;AAC9B;AAGO,SAAS,iBAAiB,OAAA,EAA8B;AAC7D,EAAA,mBAAA,GAAsB,OAAA,EAAS,MAAK,IAAK,IAAA;AAC3C;AAGO,SAAS,iBAAiB,OAAA,EAA8B;AAC7D,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACnC,EAAA,mBAAA,GAAsB,OAAA,EAAS,MAAK,IAAK,IAAA;AAC3C;AAMA,eAAsB,kBAAA,GAAsC;AAC1D,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,IAAA,OAAO,cAAA;AAAA,EACT;AACA,EAAA,IAAI,yBAAA,EAA2B;AAC7B,IAAA,OAAO,CAAA,EAAG,yBAAA,CAA0B,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAC,CAAA,CAAA,EAAI,cAAA,CAAe,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAC,CAAA,CAAA;AAAA,EAC7F;AACA,EAAA,OAAO,cAAA;AACT;AAMO,SAAS,qBAAqB,OAAA,EAAiC;AACpE,EAAA,OAAO,IAAI,eAAe,OAAO,CAAA;AACnC;AAMA,eAAsB,iBAAA,GAA6C;AACjE,EAAA,MAAM,OAAA,GAAU,MAAM,kBAAA,EAAmB;AACzC,EAAA,OAAO,IAAI,eAAe,OAAO,CAAA;AACnC;AAwBO,IAAM,iBAAN,MAAqB;AAAA,EACT,OAAA;AAAA,EAEjB,WAAA,CAAY,UAAkB,cAAA,EAAgB;AAC5C,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAAA,EAC1C;AAAA,EAEA,MAAc,OAAA,CACZ,IAAA,EACA,IAAA,EACA,OAAA,EACY;AACZ,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA;AACxC,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,GAC9B,OACA,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA;AAE/B,IAAA,MAAM,UAAU,IAAI,OAAA,CAAQ,IAAA,CAAK,OAAA,IAAW,EAAE,CAAA;AAC9C,IAAA,MAAM,UAAA,GACJ,OAAO,QAAA,KAAa,WAAA,IAAe,KAAK,IAAA,YAAgB,QAAA;AAC1D,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,OAAA,CAAQ,GAAA,CAAI,gBAAgB,kBAAkB,CAAA;AAAA,IAChD;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI,mBAAmB,UAAU,CAAA;AAEzC,IAAA,MAAM,eAAA,GAAkB,OAAA,EAAS,QAAA,EAAU,IAAA,EAAK;AAChD,IAAA,MAAM,cAAA,GACJ,eAAA,KACC,OAAO,MAAA,KAAW,cAAc,mBAAA,GAAsB,mBAAA,CAAA;AACzD,IAAA,IAAI,cAAA,IAAkB,CAAC,OAAA,CAAQ,GAAA,CAAI,YAAY,CAAA,EAAG;AAChD,MAAA,OAAA,CAAQ,GAAA,CAAI,cAAc,cAAc,CAAA;AAAA,IAC1C;AAEA,IAAA,IAAI,SAAS,YAAA,EAAc;AACzB,MAAA,OAAA,CAAQ,GAAA,CAAI,gBAAA,EAAkB,OAAA,CAAQ,YAAY,CAAA;AAAA,IACpD;AACA,IAAA,IAAI,SAAS,OAAA,EAAS;AACpB,MAAA,OAAA,CAAQ,GAAA,CAAI,cAAA,EAAgB,OAAA,CAAQ,OAAO,CAAA;AAAA,IAC7C;AAEA,IAAA,MAAM,MAAA,GACJ,OAAO,OAAA,EAAS,WAAA,KAAgB,YAAY,OAAA,CAAQ,WAAA,CAAY,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,GAC5E,OAAA,CAAQ,WAAA,CAAY,MAAK,GACzB,MAAA;AACN,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,eAAA;AAAA,QACA,MAAA,CAAO,aAAY,CAAE,UAAA,CAAW,SAAS,CAAA,GAAI,MAAA,GAAS,UAAU,MAAM,CAAA;AAAA,OACxE;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,OAAO,MAAA,KAAW,WAAA;AAEnC,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,MAC3B,GAAG,IAAA;AAAA,MACH,OAAA;AAAA,MACA,WAAA,EAAa,WAAW,aAAA,GAAgB,SAAA;AAAA,MACxC,GAAI,OAAA,EAAS,OAAA,GAAU,EAAE,KAAA,EAAO,UAAA,KAA+B,EAAC;AAAA,MAChE,GAAK,OAAA,EAAS,QAAA,IAAY,QAAA,IAAY,CAAC,SAAS,OAAA,GAAW;AAAA,QACzD,IAAA,EAAM;AAAA,UACJ,UAAA,EAAY,EAAA;AAAA,UACZ,IAAA,EAAM,CAAC,OAAA,CAAQ,QAAQ;AAAA;AACzB,UACE;AAAC,KACN,CAAA;AACD,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,MAAA,IAAI,IAAA;AACJ,MAAA,IAAI;AACF,QAAA,MAAM,SAAA,GAAY,MAAM,GAAA,CAAI,IAAA,EAAK;AACjC,QAAA,IAAA,GAAO,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA,GAAI,KAAA,CAAA;AAAA,MAC7C,CAAA,CAAA,MAAQ;AACN,QAAA,IAAA,GAAO,MAAA;AAAA,MACT;AACA,MAAA,MAAM,GAAA,GACJ,OAAO,IAAA,KAAS,QAAA,IAChB,SAAS,IAAA,IACT,OAAA,IAAW,IAAA,IACX,OAAQ,KAA6B,KAAA,KAAU,QAAA,GAC1C,IAAA,CAA2B,KAAA,GAC5B,IAAI,UAAA,IAAc,iBAAA;AACxB,MAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAM,GAAG,CAAA;AAIzB,MAAA,GAAA,CAAI,SAAS,GAAA,CAAI,MAAA;AACjB,MAAA,GAAA,CAAI,IAAA,GAAO,IAAA;AACX,MAAA,MAAM,GAAA;AAAA,IACR;AACA,IAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,IAAA,IAAI,CAAC,MAAM,OAAO,MAAA;AAClB,IAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,EACxB;AAAA,EAEA,GAAA,CAAO,MAAc,OAAA,EAA0C;AAC7D,IAAA,OAAO,KAAK,OAAA,CAAW,IAAA,EAAM,EAAE,MAAA,EAAQ,KAAA,IAAS,OAAO,CAAA;AAAA,EACzD;AAAA,EAEA,IAAA,CAAQ,IAAA,EAAc,IAAA,EAAgB,OAAA,EAA0C;AAC9E,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,IAAA;AAAA,MACA;AAAA,QACE,MAAA,EAAQ,MAAA;AAAA,QACR,MAAM,IAAA,IAAQ,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,GAAI;AAAA,OAC9C;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA;AAAA,EAGA,QAAA,CACE,IAAA,EACA,IAAA,EACA,OAAA,EACY;AACZ,IAAA,OAAO,IAAA,CAAK,QAAW,IAAA,EAAM,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,IAAA,EAAK,EAAG,OAAO,CAAA;AAAA,EACtE;AAAA,EAEA,KAAA,CAAS,IAAA,EAAc,IAAA,EAAgB,OAAA,EAA0C;AAC/E,IAAA,OAAO,IAAA,CAAK,QAAW,IAAA,EAAM;AAAA,MAC3B,MAAA,EAAQ,OAAA;AAAA,MACR,MAAM,IAAA,IAAQ,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,GAAI;AAAA,OAC3C,OAAO,CAAA;AAAA,EACZ;AAAA,EAEA,GAAA,CAAO,IAAA,EAAc,IAAA,EAAgB,OAAA,EAA0C;AAC7E,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,IAAA;AAAA,MACA;AAAA,QACE,MAAA,EAAQ,KAAA;AAAA,QACR,MAAM,IAAA,IAAQ,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,GAAI;AAAA,OAC9C;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAA,CAAU,MAAc,OAAA,EAA0C;AAChE,IAAA,OAAO,KAAK,OAAA,CAAW,IAAA,EAAM,EAAE,MAAA,EAAQ,QAAA,IAAY,OAAO,CAAA;AAAA,EAC5D;AACF;AAGO,IAAM,cAAA,GAAiB,IAAI,cAAA,CAAe,cAAc;ACxOxD,IAAM,oBAAA,GAAuB,EAAE,MAAA,CAAO;AAAA,EAC3C,EAAA,EAAI,CAAA,CAAE,MAAA,CAAO,MAAA,EAAO;AAAA,EACpB,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,EACf,OAAA,EAAS,EAAE,MAAA,EAAO;AAAA,EAClB,SAAA,EAAW,CAAA,CAAE,MAAA,CAAO,MAAA,EAAO;AAAA,EAC3B,SAAA,EAAW,EAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACrD,YAAA,EAAc,EAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA;AAAA,EACxD,aAAA,EAAe,EAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzD,SAAA,EAAW,EAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACrD,WAAW,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC3C,YAAA,EAAc,EAAE,MAAA,EAAO,CAAE,aAAY,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC3D,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,WAAA,EAAY,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,CAAC,CAAA;AAAA,EAChE,KAAA,EAAO,EAAE,MAAA,EAAO,CAAE,aAAY,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACpD,MAAA,EAAQ,EAAE,MAAA,EAAO,CAAE,aAAY,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACrD,eAAe,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC9C,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,WAAA,EAAY,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,CAAC,CAAA;AAAA,EAC/D,KAAK,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACpC,KAAA,EAAO,EAAE,MAAA,EAAO,CAAE,aAAY,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACpD,UAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,SAAS,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACxC,cAAA,EAAgB,EAAE,MAAA,EAAO,CAAE,aAAY,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC7D,MAAA,EAAQ,EAAE,KAAA,CAAM,CAAA,CAAE,QAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,EAChD,UAAA,EAAY,EAAE,KAAA,CAAM,CAAA,CAAE,QAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,EACpD,eAAe,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC9C,QAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACvC,WAAW,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,WAAW,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,WAAW,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AACnC,CAAC,CAAA;AAEM,IAAM,aAAA,GAAgB,EAAE,MAAA,CAAO;AAAA,EACpC,EAAA,EAAI,CAAA,CAAE,MAAA,CAAO,MAAA,EAAO;AAAA,EACpB,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,EACf,MAAA,EAAQ,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,MAAA,CAAO;AAAA,IACvB,GAAA,EAAK,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI;AAAA,IACpB,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAC1B,SAAA,EAAW,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AAAS,GACjC,CAAC,CAAA;AAAA,EACF,WAAW,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,WAAW,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,EACf,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,UAAA,EAAY,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,MAAA,CAAO;AAAA,IAC3B,EAAA,EAAI,CAAA,CAAE,MAAA,CAAO,MAAA,EAAO;AAAA,IACpB,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,IACf,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,IACf,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAC1B,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,GAC3B,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EACb,MAAM,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACnC,OAAA,EAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC9B,QAAA,EAAU,CAAA,CAAE,KAAA,CAAM,oBAAoB,EAAE,QAAA;AAC1C,CAAC,CAAA;AAEqC,EAAE,MAAA,CAAO;AAAA,EAC7C,KAAA,EAAO,CAAA,CAAE,KAAA,CAAM,aAAa,CAAA;AAAA,EAC5B,IAAA,EAAM,EAAE,MAAA,CAAO;AAAA,IACb,OAAO,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,IACjC,MAAM,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,IAChC,UAAU,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,IACpC,WAAA,EAAa,EAAE,OAAA;AAAQ,GACxB;AACH,CAAC;AAEoC,EAAE,MAAA,CAAO;AAAA,EAC5C,QAAA,EAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,UAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,UAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,OAAA,EAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC9B,MAAA,EAAQ,EAAE,IAAA,CAAK,CAAC,QAAQ,OAAA,EAAS,WAAW,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EACxD,SAAA,EAAW,EAAE,IAAA,CAAK,CAAC,OAAO,MAAM,CAAC,EAAE,QAAA,EAAS;AAAA,EAC5C,IAAA,EAAM,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC3C,KAAA,EAAO,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,GAAW,QAAA;AACrC,CAAC;AAIM,IAAM,uBAAA,GAA0B,EAAE,MAAA,CAAO;AAAA,EAC9C,EAAA,EAAI,CAAA,CAAE,MAAA,CAAO,MAAA,EAAO;AAAA,EACpB,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,EACf,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,EACf,aAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,UAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,WAAA,EAAY;AAAA,EAC9B,cAAA,EAAgB,EAAE,MAAA,EAAO,CAAE,aAAY,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC7D,YAAA,EAAc,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,WAAA,EAAY,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,CAAC,CAAA;AAAA,EACjE,WAAA,EAAa,EAAE,OAAA,EAAQ;AAAA,EACvB,gBAAgB,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,WAAA,EAAY;AAAA,EAC7C,gBAAA,EAAkB,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,WAAA,EAAY,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,CAAC,CAAA;AAAA,EACrE,OAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACtC,UAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,QAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACvC,IAAA,EAAM,EAAE,KAAA,CAAM,CAAA,CAAE,QAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA;AACvC,CAAC,CAAA;AAEM,IAAM,qBAAA,GAAwB,EAAE,MAAA,CAAO;AAAA,EAC5C,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA,EAChB,OAAO,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,WAAA;AAC1B,CAAC,CAAA;AAEM,IAAM,gCAAA,GAAmC,EAAE,MAAA,CAAO;AAAA,EACvD,WAAW,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,EACrC,UAAU,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,EACpC,YAAY,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,WAAA,EAAY;AAAA,EACzC,YAAY,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,WAAA,EAAY;AAAA,EACzC,QAAA,EAAU,CAAA,CAAE,KAAA,CAAM,uBAAuB,CAAA;AAAA,EACzC,UAAA,EAAY,EAAE,KAAA,CAAM,qBAAqB,EAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EAChE,MAAA,EAAQ,EAAE,KAAA,CAAM,qBAAqB,EAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EAC5D,QAAA,EAAU,EAAE,MAAA,EAAO,CAAE,aAAY,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACvD,QAAA,EAAU,EAAE,MAAA,EAAO,CAAE,aAAY,CAAE,QAAA,GAAW,QAAA;AAChD,CAAC,CAAA;AAEM,IAAM,8BAAA,GAAiC,EAAE,MAAA,CAAO;AAAA,EACrD,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,CAAC,CAAA;AAAA,EACtD,QAAA,EAAU,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EAC3D,IAAA,EAAM,CAAA,CACH,IAAA,CAAK,CAAC,aAAa,YAAA,EAAc,UAAA,EAAY,WAAA,EAAa,QAAQ,CAAC,CAAA,CACnE,QAAA,EAAS,CACT,QAAQ,WAAW,CAAA;AAAA,EACtB,QAAA,EAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,UAAA,EAAY,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,QAAA,EAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,OAAA,EAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC9B,UAAU,CAAA,CAAE,MAAA,EAAO,CAAE,WAAA,GAAc,QAAA,EAAS;AAAA,EAC5C,UAAU,CAAA,CAAE,MAAA,EAAO,CAAE,WAAA,GAAc,QAAA;AACrC,CAAC,CAAA;AAIM,IAAM,6BAAA,GAAgC,EAAE,MAAA,CAAO;AAAA,EACpD,GAAA,EAAK,EAAE,MAAA,EAAO;AAAA,EACd,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,EACf,KAAA,EAAO,EAAE,MAAA;AACX,CAAC,CAAA;AAEM,IAAM,4BAAA,GAA+B,EAAE,MAAA,CAAO;AAAA,EACnD,GAAA,EAAK,EAAE,MAAA,EAAO;AAAA,EACd,MAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACrC,KAAA,EAAO,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,GAAc,QAAA;AACxC,CAAC,CAAA;AAEM,IAAM,uBAAA,GAA0B,EAAE,MAAA,CAAO;AAAA,EAC9C,EAAA,EAAI,EAAE,MAAA,CAAO,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,EAAE,CAAA;AAAA,EAC3C,GAAA,EAAK,EAAE,MAAA,EAAO;AAAA,EACd,QAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACvC,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,WAAA,EAAY;AAAA,EAC9B,cAAA,EAAgB,EAAE,MAAA,EAAO,CAAE,aAAY,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC7D,UAAU,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,WAAA,EAAY;AAAA,EACvC,OAAA,EAAS,EAAE,KAAA,CAAM,6BAA6B,EAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EACrE,MAAA,EAAQ,EAAE,KAAA,CAAM,4BAA4B,EAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,EAAE;AACrE,CAAC,CAAA;AAEM,IAAM,yBAAA,GAA4B,EAAE,MAAA,CAAO;AAAA,EAChD,SAAA,EAAW,CAAA,CAAE,MAAA,CAAO,MAAA,EAAO;AAAA,EAC3B,aAAa,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,EACvC,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,EAC7D,SAAA,EAAW,CAAA,CAAE,MAAA,EAAO,CAAE,WAAA;AACxB,CAAC,CAAA;AAEM,IAAM,0BAAA,GAA6B,EAAE,MAAA,CAAO;AAAA,EACjD,SAAA,EAAW,CAAA,CAAE,MAAA,CAAO,MAAA,EAAO;AAAA,EAC3B,SAAA,EAAW,CAAA,CAAE,MAAA,CAAO,MAAA,EAAO;AAAA,EAC3B,WAAA,EAAa,EAAE,MAAA,EAAO;AAAA,EACtB,aAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,KAAK,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACpC,OAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACtC,UAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,QAAA,EAAU,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI;AAAA,EACzB,cAAA,EAAgB,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,CAAC,CAAA;AAAA,EACrD,iBAAiB,CAAA,CAAE,OAAA,GAAU,QAAA,EAAS,CAAE,QAAQ,KAAK,CAAA;AAAA,EACrD,kBAAkB,CAAA,CAAE,OAAA,GAAU,QAAA,EAAS,CAAE,QAAQ,IAAI;AACvD,CAAC,CAAA;AAEM,IAAM,6BAAA,GAAgC,EAAE,MAAA,CAAO;AAAA,EACpD,EAAA,EAAI,CAAA,CAAE,MAAA,CAAO,MAAA,EAAO;AAAA,EACpB,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,EACf,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,EACf,aAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,aAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,QAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACvC,UAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,WAAA,EAAY;AAAA,EAC9B,cAAA,EAAgB,EAAE,MAAA,EAAO,CAAE,aAAY,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC7D,WAAA,EAAa,EAAE,OAAA,EAAQ;AAAA,EACvB,gBAAgB,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,WAAA,EAAY;AAAA,EAC7C,OAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACtC,UAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,YAAY,CAAA,CAAE,MAAA,CAAO,QAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAClD,IAAA,EAAM,EAAE,KAAA,CAAM,CAAA,CAAE,QAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,EAC9C,gBAAgB,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,MAAA,CAAO,EAAE,MAAA,EAAO,EAAG,CAAA,CAAE,OAAA,EAAS,CAAC,CAAA,CAAE,UAAS,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EAChF,QAAA,EAAU,EAAE,KAAA,CAAM,uBAAuB,EAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EAChE,MAAA,EAAQ,EAAE,KAAA,CAAM,4BAA4B,EAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EACnE,WAAA,EAAa,EAAE,KAAA,CAAM,0BAA0B,EAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EACtE,UAAA,EAAY,EAAE,KAAA,CAAM,yBAAyB,EAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EACpE,WAAW,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,WAAW,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AACnC,CAAC,CAAA;;;AC1LD,eAAsB,qBAAA,CACpB,QACA,QAAA,EACqC;AACrC,EAAA,MAAM,MAAA,GAAS,8BAAA,CAA+B,KAAA,CAAM,MAAA,IAAU,EAAE,CAAA;AAChE,EAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,EAAA,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,IAAI,CAAC,CAAA;AAC5C,EAAA,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAC,CAAA;AACpD,EAAA,IAAI,OAAO,IAAA,EAAM,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,OAAO,IAAI,CAAA;AACrD,EAAA,IAAI,OAAO,QAAA,EAAU,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,OAAO,QAAQ,CAAA;AACjE,EAAA,IAAI,OAAO,MAAA,EAAQ,YAAA,CAAa,GAAA,CAAI,QAAA,EAAU,OAAO,MAAM,CAAA;AAC3D,EAAA,IAAI,OAAO,UAAA,EAAY,YAAA,CAAa,GAAA,CAAI,YAAA,EAAc,OAAO,UAAU,CAAA;AACvE,EAAA,IAAI,OAAO,QAAA,EAAU,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,OAAO,QAAQ,CAAA;AACjE,EAAA,IAAI,OAAO,KAAA,EAAO,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,OAAO,KAAK,CAAA;AACxD,EAAA,IAAI,OAAO,WAAA,EAAa,YAAA,CAAa,GAAA,CAAI,aAAA,EAAe,OAAO,WAAW,CAAA;AAC1E,EAAA,IAAI,MAAA,CAAO,WAAW,IAAA,EAAM,YAAA,CAAa,IAAI,SAAA,EAAW,MAAA,CAAO,MAAA,CAAO,OAAO,CAAC,CAAA;AAC9E,EAAA,IAAI,MAAA,CAAO,YAAY,IAAA,EAAM,YAAA,CAAa,IAAI,UAAA,EAAY,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAC,CAAA;AACjF,EAAA,IAAI,MAAA,CAAO,YAAY,IAAA,EAAM,YAAA,CAAa,IAAI,UAAA,EAAY,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAC,CAAA;AAEjF,EAAA,MAAM,IAAA,GAAO,CAAA,SAAA,EAAY,YAAA,CAAa,QAAA,EAAU,CAAA,CAAA;AAChD,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,GAAA,CAAa,IAAA,EAAM;AAAA,IAC/C;AAAA,GACD,CAAA;AACD,EAAA,OAAO,gCAAA,CAAiC,MAAM,QAAQ,CAAA;AACxD;AAEA,eAAsB,2BACpB,IAAA,EACkC;AAClC,EAAA,MAAM,IAAA,GAAO,CAAA,SAAA,EAAY,kBAAA,CAAmB,IAAI,CAAC,CAAA,CAAA;AACjD,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,GAAA,CAAa,IAAI,CAAA;AAC/C,EAAA,OAAO,6BAAA,CAA8B,MAAM,QAAQ,CAAA;AACrD;AChDO,IAAM,0BAAA,GAA6BA,EAAE,MAAA,CAAO;AAAA,EACjD,EAAA,EAAIA,CAAAA,CAAE,MAAA,CAAO,MAAA,EAAO;AAAA,EACpB,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,aAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,cAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,WAAA;AACjC,CAAC,CAAA;AAEM,IAAM,mCAAA,GAAsCA,CAAAA,CAAE,KAAA,CAAM,0BAA0B,CAAA;AAC9E,IAAM,gCAAA,GAAmC,0BAAA;;;ACFhD,eAAsB,wBAAA,GAA4D;AAChF,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,GAAA,CAAa,aAAa,CAAA;AACxD,EAAA,OAAO,mCAAA,CAAoC,MAAM,QAAQ,CAAA;AAC3D;AAEA,eAAsB,8BACpB,IAAA,EACqC;AACrC,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,GAAA;AAAA,IAC5B,CAAA,oBAAA,EAAuB,kBAAA,CAAmB,IAAI,CAAC,CAAA;AAAA,GACjD;AACA,EAAA,OAAO,gCAAA,CAAiC,MAAM,QAAQ,CAAA;AACxD;ACtBO,IAAM,4BAAA,GAA+BA,EAAE,MAAA,CAAO;AAAA,EACnD,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,MAAA,EAAQA,EAAE,MAAA;AACZ,CAAC,CAAA;AAKM,IAAM,uBAAA,GAA0BA,EAAE,MAAA,CAAO;AAAA,EAC9C,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAC1B,CAAC,EAAE,QAAA,EAAS;AAGL,IAAM,4BAAA,GAA+BA,EAAE,MAAA,CAAO;AAAA,EACnD,GAAA,EAAK,uBAAA;AAAA,EACL,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1B,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACpB,CAAC,CAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,OAAA,EAAS,CAAA;AAGhB,IAAM,yBAAA,GAA4BA,EAAE,MAAA,CAAO;AAAA,EAChD,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,UAAUA,CAAAA,CAAE,MAAA,CAAOA,EAAE,OAAA,EAAS,EAAE,QAAA;AAClC,CAAC,CAAA;AAGM,IAAM,2BAAA,GAA8BA,EAAE,MAAA,CAAO;AAAA,EAClD,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,UAAUA,CAAAA,CAAE,MAAA,CAAOA,EAAE,OAAA,EAAS,EAAE,QAAA,EAAS;AAAA,EACzC,MAAA,EAAQA,EAAE,KAAA,CAAM,yBAAyB,EAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,EAAE;AAClE,CAAC,CAAA;AAGM,IAAM,0BAAA,GAA6BA,EAAE,MAAA,CAAO;AAAA,EACjD,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA,EACjB,QAAA,EAAU,6BAA6B,QAAA,EAAS;AAAA,EAChD,QAAA,EAAUA,CAAAA,CAAE,KAAA,CAAM,2BAA2B,EAAE,QAAA;AACjD,CAAC,CAAA;ACnCD,eAAsB,kBAAA,GAAwD;AAC5E,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,GAAA,CAAa,OAAO,CAAA;AAClD,EAAA,OAAOA,CAAAA,CAAE,KAAA,CAAM,4BAA4B,CAAA,CAAE,MAAM,QAAQ,CAAA;AAC7D;AAEA,eAAsB,wBACpB,IAAA,EAC+B;AAC/B,EAAA,MAAM,IAAA,GAAO,CAAA,MAAA,EAAS,kBAAA,CAAmB,IAAI,CAAC,CAAA,CAAA;AAC9C,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,GAAA,CAAa,IAAI,CAAA;AAC/C,EAAA,OAAO,0BAAA,CAA2B,MAAM,QAAQ,CAAA;AAClD;AAEA,eAAsB,wBAAA,CACpB,MACA,KAAA,EAC+B;AAC/B,EAAA,MAAM,IAAA,GAAO,SAAS,kBAAA,CAAmB,IAAI,CAAC,CAAA,eAAA,EAAkB,kBAAA,CAAmB,KAAK,CAAC,CAAA,CAAA;AACzF,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,GAAA,CAAa,IAAI,CAAA;AAC/C,EAAA,OAAO,0BAAA,CAA2B,MAAM,QAAQ,CAAA;AAClD;ACpCO,IAAM,sBAAA,GAAyBA,EAAE,MAAA,CAAO;AAAA,EAC7C,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,KAAA,EAAM;AAAA,EACxB,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC3B,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC1B,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC;AACzB,CAAC,CAAA;AAIM,IAAM,uBAAA,GAA0BA,EAAE,MAAA,CAAO;AAAA,EAC9C,YAAA,EAAcA,EAAE,MAAA,EAAO;AAAA,EACvB,cAAA,EAAgBA,EAAE,MAAA,EAAO;AAAA,EACzB,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,KAAA;AACpB,CAAC,CAAA;AAIM,IAAM,iBAAA,GAAoBA,EAAE,MAAA,CAAO;AAAA,EACxC,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACtB,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC1B,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACtB,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC7B,SAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACxC,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,YAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC3C,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,OAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACtC,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,WAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,GAAA,EAAKA,EACF,MAAA,CAAO;AAAA,IACN,gBAAgBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IAC/C,cAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IAC7C,cAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AAAS,GAC9C,CAAA,CACA,QAAA,EAAS,CACT,QAAA;AACL,CAAC,CAAA;AAEM,IAAM,0BAAA,GAA6BA,EAAE,MAAA,CAAO;AAAA,EACjD,eAAA,EAAiB,iBAAA;AAAA,EACjB,cAAA,EAAgB;AAClB,CAAC,CAAA;AAMM,IAAM,6BAAA,GAAgCA,EAAE,MAAA,CAAO;AAAA,EACpD,iBAAiBA,CAAAA,CAAE,MAAA,CAAO,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACxC,SAAA,EAAWA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,OAAO,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,EAAE;AACpE,CAAC,CAAA;AAOM,IAAM,qBAAA,GAAwBA,EAAE,MAAA,CAAO;AAAA,EAC5C,WAAWA,CAAAA,CAAE,MAAA,CAAO,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAClC,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,EACpC,SAAA,EAAWA,CAAAA,CAAE,KAAA,CAAM,6BAA6B,EAAE,QAAA;AACpD,CAAC,CAAA;AAQM,IAAM,2BAAA,GAA8BA,EAAE,MAAA,CAAO;AAAA,EAClD,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA;AAC7B,CAAC,CAAA;AAIM,IAAM,uBAAA,GAA0BA,EAAE,MAAA,CAAO;AAAA,EAC9C,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC;AACxB,CAAC,CAAA;AAI+BA,EAAE,MAAA,CAAO;AAAA,EACvC,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA,EACnB,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA,EACnB,GAAA,EAAKA,EAAE,MAAA,EAAO;AAAA,EACd,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,CAAC,CAAA;AAAA,EACzC,KAAA,EAAOA,EAAE,MAAA;AACX,CAAC;AAEwCA,EAAE,MAAA,CAAO;AAAA,EAChD,MAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACrC,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA,EACnB,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA,EACtB,SAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACxC,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,YAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC3C,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,OAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACtC,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,WAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,GAAA,EAAKA,EACF,MAAA,CAAO;AAAA,IACN,gBAAgBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IAC/C,cAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IAC7C,cAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AAAS,GAC9C,CAAA,CACA,QAAA,EAAS,CACT,QAAA;AACL,CAAC;AAEM,IAAM,4BAAA,GAA+BA,EAAE,MAAA,CAAO;AAAA,EACnD,SAAA,EAAWA,CAAAA,CAAE,MAAA,CAAO,MAAA,EAAO;AAAA,EAC3B,SAAA,EAAWA,CAAAA,CAAE,MAAA,CAAO,MAAA,EAAO;AAAA,EAC3B,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA,EACtB,aAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,KAAKA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACpC,OAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACtC,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA;AACvB,CAAC,CAAA;AAEM,IAAM,sBAAA,GAAyBA,EAAE,MAAA,CAAO;AAAA,EAC7C,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,cAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC7C,WAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI;AAAA,EACzB,SAAA,EAAWA,CAAAA,CAAE,MAAA,CAAO,MAAA,EAAO;AAAA,EAC3B,YAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC3C,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,WAAA,EAAaA,EAAE,KAAA,CAAM,4BAA4B,EAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,EAAE;AAC1E,CAAC,CAAA;AAE+CA,EAAE,MAAA,CAAO;AAAA,EACvD,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,aAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,aAAA,EAAeA,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACpD,eAAeA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC9C,eAAeA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC9C,eAAeA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AACvC,CAAC;AAEM,IAAM,kBAAA,GAAqBA,EAAE,MAAA,CAAO;AAAA,EACzC,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,gBAAgBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC/C,KAAA,EAAOA,EAAE,MAAA,EAAO,CAAE,OAAM,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC9C,OAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACtC,WAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,YAAA,EAAcA,EAAE,MAAA,EAAO;AAAA;AAAA,EAEvB,QAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACvC,aAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,iBAAiBA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACjD,gBAAgBA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAChD,QAAA,EAAUA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,QAAO,EAAGA,CAAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EACjE,cAAA,EAAgBA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EACzD,KAAA,EAAOA,EAAE,KAAA,CAAM,sBAAsB,EAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EAC5D,eAAA,EAAiBA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EAC3D,MAAA,EAAQA,EAAE,MAAA,CAAO;AAAA,IACf,aAAA,EAAeA,EAAE,MAAA,EAAO;AAAA,IACxB,aAAA,EAAeA,EAAE,MAAA,EAAO;AAAA,IACxB,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA,IACnB,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA,IACnB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,IAChB,aAAA,EAAeA,EAAE,MAAA;AAAO,GACzB;AACH,CAAC,CAAA;AAIM,IAAM,yBAAA,GAA4BA,EAAE,MAAA,CAAO;AAAA,EAChD,iBAAA,EAAmBA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACnC,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC7B,YAAYA,CAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA;AAChC,CAAC,CAAA;AAKM,IAAM,+BAAA,GAAkCA,EAC5C,MAAA,CAAO;AAAA,EACN,mBAAA,EAAqBA,EAClB,MAAA,CAAO;AAAA,IACN,gBAAgBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IAC/C,cAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IAC7C,aAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IAC5C,eAAeA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IAC9C,YAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AAAS,GAC5C,CAAA,CACA,WAAA,EAAY,CACZ,QAAA,GACA,QAAA,EAAS;AAAA,EACZ,KAAKA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACpC,MAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACrC,cAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC7C,QAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACvC,WAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AACnC,CAAC,EACA,WAAA,EAAY;AAOR,IAAM,yBAAA,GAA4BA,EACtC,MAAA,CAAO;AAAA,EACN,aAAA,EAAeA,EAAE,MAAA,EAAO;AAAA,EACxB,iBAAA,EAAmBA,EAAE,MAAA,EAAO;AAAA,EAC5B,YAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC3C,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA,EACjB,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA,EACjB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,UAAA,EAAYA,EAAE,MAAA,EAAO;AAAA,EACrB,YAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC3C,MAAA,EAAQ,+BAAA,CAAgC,QAAA,EAAS,CAAE,QAAA;AACrD,CAAC,EACA,WAAA,EAAY;AAIR,IAAM,0BAAA,GAA6BA,EACvC,MAAA,CAAO;AAAA,EACN,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC/B,cAAA,EAAgBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACpC,eAAA,EAAiBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACrC,YAAA,EAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAClC,kBAAA,EAAoBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACxC,OAAA,EAASA,CAAAA,CAAE,MAAA,CAAO,MAAA,GAAS,QAAA,EAAS;AAAA,EACpC,UAAA,EAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,QAAA,EAAUA,EAAE,KAAA,CAAMA,CAAAA,CAAE,OAAO,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA;AAAA,EAE9C,OAAA,EAAS,0BAA0B,QAAA,EAAS;AAAA,EAC5C,IAAA,EAAMA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AACpB,CAAC,EACA,WAAA,EAAY;AAIR,IAAM,gCAAA,GAAmCA,EAAE,MAAA,CAAO;AAAA,EACvD,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,GAAA,EAAKA,EAAE,MAAA;AACT,CAAC,CAAA;AAMM,IAAM,uBAAA,GAA0BA,EAAE,MAAA,CAAO;AAAA,EAC9C,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,aAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,QAAA,EAAUA,EAAE,OAAA,EAAQ;AAAA,EACpB,SAAA,EAAWA,EAAE,OAAA,EAAQ;AAAA,EACrB,QAAA,EAAUA,EAAE,OAAA,EAAQ;AAAA,EACpB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,aAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,eAAeA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC9C,YAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AACpC,CAAC,CAAA;AAIM,IAAM,gCAAA,GAAmCA,EAAE,MAAA,CAAO;AAAA,EACvD,OAAA,EAASA,CAAAA,CAAE,KAAA,CAAM,uBAAuB;AAC1C,CAAC,CAAA;AASM,IAAM,8BAAA,GAAiCA,EAAE,MAAA,CAAO;AAAA,EACrD,IAAA,EAAM,kBAAA;AAAA,EACN,cAAA,EAAgB;AAClB,CAAC,CAAA;AAOM,IAAM,kBAAA,GAAqBA,EAC/B,MAAA,CAAO;AAAA,EACN,gBAAA,EAAkBA,EAAE,MAAA,EAAO;AAAA,EAC3B,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1B,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC/B,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA,EACjB,aAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,oBAAoBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACnD,sBAAsBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACrD,uBAAuBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACtD,aAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,QAAA,EAAUA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,IAAUA,CAAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA;AAC9C,CAAC,EACA,WAAA,EAAY;AAIR,IAAM,yBAAA,GAA4BA,EACtC,MAAA,CAAO;AAAA,EACN,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA,EACnB,mBAAmBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAClD,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,SAASA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACtC,KAAA,EAAOA,CAAAA,CAAE,KAAA,CAAM,kBAAkB;AACnC,CAAC,EACA,WAAA,EAAY;AAIR,IAAM,6BAAA,GAAgCA,EAAE,MAAA,CAAO;AAAA,EACpD,MAAA,EAAQA,CAAAA,CAAE,KAAA,CAAM,yBAAyB;AAC3C,CAAC,CAAA;AAOM,IAAM,kCAAA,GAAqCA,EAAE,MAAA,CAAO;AAAA,EACzD,MAAA,EAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACxB,gBAAA,EAAkBA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAClC,aAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,mBAAmBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAClD,YAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC3C,eAAeA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC9C,eAAeA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC9C,eAAeA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AACvC,CAAC,CAAA;;;ACvTD,eAAsB,WACpB,IAAA,EACuB;AACvB,EAAA,MAAM,OAAA,GAAU,uBAAA,CAAwB,KAAA,CAAM,IAAI,CAAA;AAClD,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,IAAA,CAAc,SAAS,OAAO,CAAA;AAC5D,EAAA,OAAO,kBAAA,CAAmB,MAAM,QAAQ,CAAA;AAC1C;AAEA,eAAsB,QAAQ,MAAA,EAAwC;AACpE,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,MAAM,oBAAoB,CAAA;AACjD,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,WAAW,MAAM,MAAA,CAAO,GAAA,CAAa,CAAA,MAAA,EAAS,MAAM,CAAA,CAAE,CAAA;AAC5D,EAAA,OAAO,kBAAA,CAAmB,MAAM,QAAQ,CAAA;AAC1C;AAEA,eAAsB,WAAA,CACpB,MACA,MAAA,EACuB;AACvB,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,MAAM,oBAAoB,CAAA;AACjD,EAAA,MAAM,OAAA,GAAU,qBAAA,CAAsB,KAAA,CAAM,IAAI,CAAA;AAChD,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA;AAC1C,EAAA,IAAI,CAAC,MAAA,CAAO,aAAA,CAAc,SAAS,CAAA,IAAK,aAAa,CAAA,EAAG;AACtD,IAAA,MAAM,IAAI,MAAM,qCAAqC,CAAA;AAAA,EACvD;AACA,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,SAAA,EAAW,GAAA,CAAI,CAAC,QAAA,KAAa;AACrD,IAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,QAAA,CAAS,eAAe,CAAA;AACvD,IAAA,MAAM,SAAA,GAAY,SAAS,SAAA,CAAU,GAAA,CAAI,CAAC,QAAA,KAAa,MAAA,CAAO,QAAQ,CAAC,CAAA;AACvE,IAAA,IACE,CAAC,MAAA,CAAO,aAAA,CAAc,eAAe,CAAA,IACrC,eAAA,IAAmB,KACnB,SAAA,CAAU,IAAA,CAAK,CAAC,QAAA,KAAa,CAAC,MAAA,CAAO,aAAA,CAAc,QAAQ,CAAA,IAAK,QAAA,IAAY,CAAC,CAAA,EAC7E;AACA,MAAA,MAAM,IAAI,MAAM,qCAAqC,CAAA;AAAA,IACvD;AAEA,IAAA,OAAO,EAAE,iBAAiB,SAAA,EAAU;AAAA,EACtC,CAAC,CAAA;AACD,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,WAAW,MAAM,MAAA,CAAO,IAAA,CAAc,CAAA,MAAA,EAAS,MAAM,CAAA,MAAA,CAAA,EAAU;AAAA,IACnE,GAAG,OAAA;AAAA,IACH,SAAA;AAAA,IACA,GAAI,SAAA,GAAY,EAAE,SAAA,KAAc;AAAC,GAClC,CAAA;AACD,EAAA,OAAO,kBAAA,CAAmB,MAAM,QAAQ,CAAA;AAC1C;AAEA,eAAsB,cAAA,CACpB,MAAA,EACA,MAAA,EACA,IAAA,EACuB;AACvB,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,MAAM,oBAAoB,CAAA;AACjD,EAAA,IAAI,CAAC,MAAA,CAAO,IAAA,IAAQ,MAAM,IAAI,MAAM,oBAAoB,CAAA;AACxD,EAAA,MAAM,OAAA,GAAU,2BAAA,CAA4B,KAAA,CAAM,IAAI,CAAA;AACtD,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,KAAA;AAAA,IAC5B,SAAS,MAAM,CAAA,OAAA,EAAU,mBAAmB,MAAA,CAAO,IAAA,EAAM,CAAC,CAAA,CAAA;AAAA,IAC1D;AAAA,GACF;AACA,EAAA,OAAO,kBAAA,CAAmB,MAAM,QAAQ,CAAA;AAC1C;AAEA,eAAsB,cAAA,CACpB,QACA,MAAA,EACuB;AACvB,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,MAAM,oBAAoB,CAAA;AACjD,EAAA,IAAI,CAAC,MAAA,CAAO,IAAA,IAAQ,MAAM,IAAI,MAAM,oBAAoB,CAAA;AACxD,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,MAAA;AAAA,IAC5B,SAAS,MAAM,CAAA,OAAA,EAAU,mBAAmB,MAAA,CAAO,IAAA,EAAM,CAAC,CAAA;AAAA,GAC5D;AACA,EAAA,OAAO,kBAAA,CAAmB,MAAM,QAAQ,CAAA;AAC1C;AAEA,eAAsB,cAAA,CACpB,MACA,MAAA,EACuB;AACvB,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,MAAM,oBAAoB,CAAA;AACjD,EAAA,MAAM,OAAA,GAAU,sBAAA,CAAuB,KAAA,CAAM,IAAI,CAAA;AACjD,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,KAAA;AAAA,IAC5B,SAAS,MAAM,CAAA,MAAA,CAAA;AAAA,IACf;AAAA,GACF;AACA,EAAA,OAAO,kBAAA,CAAmB,MAAM,QAAQ,CAAA;AAC1C;AAEA,eAAsB,kBAAA,CACpB,MACA,MAAA,EACuB;AACvB,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,MAAM,oBAAoB,CAAA;AACjD,EAAA,MAAM,OAAA,GAAU,0BAAA,CAA2B,KAAA,CAAM,IAAI,CAAA;AACrD,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,KAAA;AAAA,IAC5B,SAAS,MAAM,CAAA,UAAA,CAAA;AAAA,IACf;AAAA,GACF;AACA,EAAA,OAAO,kBAAA,CAAmB,MAAM,QAAQ,CAAA;AAC1C;AAEA,eAAsB,aAAA,CACpB,QACA,IAAA,EACuB;AACvB,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,MAAM,oBAAoB,CAAA;AACjD,EAAA,MAAM,OAAA,GAAU,uBAAA,CAAwB,KAAA,CAAM,IAAI,CAAA;AAClD,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,IAAA;AAAA,IAC5B,SAAS,MAAM,CAAA,gBAAA,CAAA;AAAA,IACf;AAAA,GACF;AACA,EAAA,OAAO,kBAAA,CAAmB,MAAM,QAAQ,CAAA;AAC1C;AAEA,eAAsB,gBAAA,CACpB,QACA,IAAA,EACuB;AACvB,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,MAAM,oBAAoB,CAAA;AACjD,EAAA,IAAI,CAAC,IAAA,CAAK,IAAA,IAAQ,MAAM,IAAI,MAAM,kBAAkB,CAAA;AACpD,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,MAAA;AAAA,IAC5B,SAAS,MAAM,CAAA,iBAAA,EAAoB,mBAAmB,IAAA,CAAK,IAAA,EAAM,CAAC,CAAA;AAAA,GACpE;AACA,EAAA,OAAO,kBAAA,CAAmB,MAAM,QAAQ,CAAA;AAC1C;AAMA,eAAsB,YAAA,CACpB,MACA,MAAA,EAC+B;AAC/B,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,MAAM,oBAAoB,CAAA;AACjD,EAAA,MAAM,OAAA,GAAU,yBAAA,CAA0B,KAAA,CAAM,IAAI,CAAA;AACpD,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,IAAA;AAAA,IAC5B,SAAS,MAAM,CAAA,SAAA,CAAA;AAAA,IACf;AAAA,GACF;AACA,EAAA,OAAO,0BAAA,CAA2B,MAAM,QAAQ,CAAA;AAClD;AAEA,eAAsB,oBAAA,CACpB,QACA,IAAA,EACqC;AACrC,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,MAAM,oBAAoB,CAAA;AACjD,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,IAAA,GAAO,IAAI,QAAA,EAAS;AAC1B,EAAA,IAAA,CAAK,GAAA,CAAI,QAAQ,IAAI,CAAA;AACrB,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,QAAA;AAAA,IAC5B,SAAS,MAAM,CAAA,gBAAA,CAAA;AAAA,IACf,IAAA;AAAA,IACA,OAAO,MAAA,KAAW,WAAA,GAAc,EAAE,OAAA,EAAS,MAAK,GAAI;AAAA,GACtD;AACA,EAAA,OAAO,gCAAA,CAAiC,MAAM,QAAQ,CAAA;AACxD;AAKA,eAAsB,gBACpB,MAAA,EACmC;AACnC,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,MAAM,oBAAoB,CAAA;AACjD,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,WAAW,MAAM,MAAA,CAAO,GAAA,CAAa,CAAA,MAAA,EAAS,MAAM,CAAA,SAAA,CAAW,CAAA;AACrE,EAAA,OAAO,8BAAA,CAA+B,MAAM,QAAQ,CAAA;AACtD;AAEA,eAAsB,kBAAA,CACpB,QACA,UAAA,EACkC;AAClC,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,MAAM,oBAAoB,CAAA;AACjD,EAAA,IAAI,CAAC,UAAA,EAAY,IAAA,IAAQ,MAAM,IAAI,MAAM,wBAAwB,CAAA;AACjE,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,CAAA,GAAI,IAAI,eAAA,CAAgB,EAAE,YAAY,UAAA,CAAW,IAAA,IAAQ,CAAA;AAC/D,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,GAAA;AAAA,IAC5B,CAAA,MAAA,EAAS,MAAM,CAAA,kBAAA,EAAqB,CAAA,CAAE,UAAU,CAAA;AAAA,GAClD;AACA,EAAA,OAAO,6BAAA,CAA8B,MAAM,QAAQ,CAAA;AACrD;AAEA,eAAsB,qBAAA,CACpB,QACA,IAAA,EACuB;AACvB,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,MAAM,oBAAoB,CAAA;AACjD,EAAA,MAAM,OAAA,GAAU,kCAAA,CAAmC,KAAA,CAAM,IAAI,CAAA;AAC7D,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,GAAA;AAAA,IAC5B,SAAS,MAAM,CAAA,gBAAA,CAAA;AAAA,IACf;AAAA,GACF;AACA,EAAA,OAAO,kBAAA,CAAmB,MAAM,QAAQ,CAAA;AAC1C;AAKA,eAAsB,sBACpB,MAAA,EACqC;AACrC,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,MAAM,oBAAoB,CAAA;AACjD,EAAA,MAAM,EAAE,cAAA,EAAe,GAAI,MAAM,gBAAgB,MAAM,CAAA;AACvD,EAAA,OAAO,cAAA;AACT;ACzPO,IAAM,6BAAA,GAAgCA,EAAE,MAAA,CAAO;AAAA,EACpD,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,KAAA,EAAM;AAAA,EACxB,WAAWA,CAAAA,CAAE,MAAA,GAAS,IAAA,EAAK,CAAE,IAAI,CAAC,CAAA;AAAA,EAClC,UAAUA,CAAAA,CAAE,MAAA,GAAS,IAAA,EAAK,CAAE,IAAI,CAAC,CAAA;AAAA,EACjC,gBAAgBA,CAAAA,CAAE,MAAA,GAAS,IAAA,EAAK,CAAE,OAAO,CAAC,CAAA;AAAA,EAC1C,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA,EACnB,OAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAA,GAAO,QAAA;AAC3B,CAAC;AAKM,IAAM,qBAAA,GAAwBA,EAAE,MAAA,CAAO;AAAA;AAAA,EAE5C,EAAA,EAAIA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACxB,UAAA,EAAYA,EAAE,MAAA,EAAO;AAAA,EACrB,cAAA,EAAgBA,EAAE,MAAA,EAAO;AAAA,EACzB,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA,EACtB,aAAA,EAAeA,EAAE,MAAA,EAAO;AAAA,EACxB,UAAA,EAAYA,EAAE,MAAA,EAAO;AAAA,EACrB,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA,EACnB,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA,EACnB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,UAAA,EAAYA,EAAE,MAAA,EAAO;AAAA,EACrB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC/B,SAAA,EAAWA,EAAE,OAAA;AACf,CAAC;AAIM,IAAM,8BAA8B,qBAAA,CAAsB,IAAA,CAAK,EAAE,EAAA,EAAI,MAAM;AAK3E,IAAM,gBAAA,GAAmBA,EAAE,MAAA,CAAO;AAAA,EACvC,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA,EAClB,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,KAAA,EAAM;AAAA,EACxB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA,EACnB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,oBAAA,EAAsBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1C,kBAAA,EAAoBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACxC,UAAA,EAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,MAAA,EAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,cAAA,EAAgBA,EAAE,MAAA,EAAO;AAAA,EACzB,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1B,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,OAAA,EAASA,EAAE,OAAA,EAAQ;AAAA,EACnB,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA,EACjB,YAAA,EAAcA,EAAE,MAAA,EAAO;AAAA,EACvB,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA,EACjB,0BAAA,EAA4BA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChD,gBAAA,EAAkBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACtC,QAAA,EAAUA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC/B,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA,EACtB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,aAAA,EAAeA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACnC,aAAA,EAAeA,EAAE,MAAA,EAAO;AAAA,EACxB,SAAA,EAAWA,CAAAA,CAAE,KAAA,CAAM,qBAAqB,CAAA;AAAA,EACxC,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACxB,CAAC;AAKM,IAAM,0BAAA,GAA6BA,EAAE,MAAA,CAAO;AAAA,EACjD,WAAWA,CAAAA,CAAE,MAAA,GAAS,IAAA,EAAK,CAAE,IAAI,CAAC,CAAA;AAAA,EAClC,UAAUA,CAAAA,CAAE,MAAA,GAAS,IAAA,EAAK,CAAE,IAAI,CAAC,CAAA;AAAA,EACjC,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAA,EAAK;AAAA,EACvB,oBAAA,EAAsBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1C,kBAAA,EAAoBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACxC,UAAA,EAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,0BAAA,EAA4BA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChD,MAAA,EAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1B,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,OAAA,EAASA,EAAE,OAAA,EAAQ;AAAA,EACnB,gBAAgBA,CAAAA,CAAE,MAAA,GAAS,IAAA,EAAK,CAAE,OAAO,CAAC;AAC5C,CAAC;AAIM,SAAS,yBAAyB,EAAA,EAAsC;AAC7E,EAAA,OAAO;AAAA,IACL,WAAW,EAAA,CAAG,SAAA;AAAA,IACd,UAAU,EAAA,CAAG,QAAA;AAAA,IACb,KAAA,EAAO,GAAG,KAAA,IAAS,EAAA;AAAA,IACnB,sBAAsB,EAAA,CAAG,oBAAA;AAAA,IACzB,oBAAoB,EAAA,CAAG,kBAAA;AAAA,IACvB,YAAY,EAAA,CAAG,UAAA;AAAA,IACf,4BAA4B,EAAA,CAAG,0BAAA;AAAA,IAC/B,QAAQ,EAAA,CAAG,MAAA;AAAA,IACX,MAAM,EAAA,CAAG,IAAA;AAAA,IACT,aAAa,EAAA,CAAG,WAAA;AAAA,IAChB,aAAa,EAAA,CAAG,WAAA;AAAA,IAChB,SAAS,EAAA,CAAG,OAAA;AAAA,IACZ,cAAA,EAAgB,GAAG,cAAA,IAAkB;AAAA,GACvC;AACF;AAEA,SAAS,oBAAoB,WAAA,EAAsB;AACjD,EAAA,MAAM,KAAA,GACJ,OAAO,WAAA,KAAgB,QAAA,IAAY,WAAA,CAAY,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,GAAI,WAAA,CAAY,IAAA,EAAK,GAAI,MAAA;AAC1F,EAAA,OAAO,KAAA,GAAQ,EAAE,WAAA,EAAa,KAAA,KAAU,EAAC;AAC3C;AAMA,eAAsB,iBAAiB,IAAA,EAAiD;AACtF,EAAA,MAAM,OAAA,GAAU,6BAAA,CAA8B,KAAA,CAAM,IAAI,CAAA;AACxD,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,OAAO,MAAA,CAAO,IAAA,CAAc,mBAAA,EAAqB,OAAO,CAAA;AAC1D;AAQA,eAAsB,qBAAqB,WAAA,EAAkD;AAC3F,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,KAAA,GACJ,OAAO,WAAA,KAAgB,QAAA,IAAY,WAAA,CAAY,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,GAAI,WAAA,CAAY,IAAA,EAAK,GAAI,MAAA;AAC1F,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,GAAA,CAAa,oBAAA,EAAsB;AAAA,IAC/D,GAAI,KAAA,GAAQ,EAAE,WAAA,EAAa,KAAA,KAAU;AAAC,GACvC,CAAA;AACD,EAAA,OAAOA,CAAAA,CAAE,KAAA,CAAM,qBAAqB,CAAA,CAAE,MAAM,QAAQ,CAAA;AACtD;AAEA,eAAsB,qBAAA,CACpB,MACA,WAAA,EACkB;AAClB,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,KAAA,GACJ,OAAO,WAAA,KAAgB,QAAA,IAAY,WAAA,CAAY,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,GAAI,WAAA,CAAY,IAAA,EAAK,GAAI,MAAA;AAC1F,EAAA,MAAM,OAAA,GAAU,2BAAA,CAA4B,KAAA,CAAM,IAAI,CAAA;AACtD,EAAA,OAAO,MAAA,CAAO,IAAA,CAAc,oBAAA,EAAsB,OAAA,EAAS;AAAA,IACzD,GAAI,KAAA,GAAQ,EAAE,WAAA,EAAa,KAAA,KAAU;AAAC,GACvC,CAAA;AACH;AAEA,eAAsB,qBAAA,CACpB,SAAA,EACA,IAAA,EACA,WAAA,EACkB;AAClB,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,KAAA,GACJ,OAAO,WAAA,KAAgB,QAAA,IAAY,WAAA,CAAY,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,GAAI,WAAA,CAAY,IAAA,EAAK,GAAI,MAAA;AAC1F,EAAA,MAAM,OAAA,GAAU,2BAAA,CAA4B,KAAA,CAAM,IAAI,CAAA;AACtD,EAAA,MAAM,EAAA,GAAK,UAAU,IAAA,EAAK;AAC1B,EAAA,IAAI,CAAC,EAAA,EAAI,MAAM,IAAI,MAAM,qBAAqB,CAAA;AAC9C,EAAA,OAAO,OAAO,GAAA,CAAa,CAAA,mBAAA,EAAsB,mBAAmB,EAAE,CAAC,IAAI,OAAA,EAAS;AAAA,IAClF,GAAI,KAAA,GAAQ,EAAE,WAAA,EAAa,KAAA,KAAU;AAAC,GACvC,CAAA;AACH;AAEA,eAAsB,qBAAA,CACpB,WACA,WAAA,EACkB;AAClB,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,KAAA,GACJ,OAAO,WAAA,KAAgB,QAAA,IAAY,WAAA,CAAY,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,GAAI,WAAA,CAAY,IAAA,EAAK,GAAI,MAAA;AAC1F,EAAA,MAAM,EAAA,GAAK,UAAU,IAAA,EAAK;AAC1B,EAAA,IAAI,CAAC,EAAA,EAAI,MAAM,IAAI,MAAM,qBAAqB,CAAA;AAC9C,EAAA,OAAO,OAAO,MAAA,CAAgB,CAAA,mBAAA,EAAsB,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA,EAAI;AAAA,IAC5E,GAAI,KAAA,GAAQ,EAAE,WAAA,EAAa,KAAA,KAAU;AAAC,GACvC,CAAA;AACH;AAMA,eAAsB,cAAc,WAAA,EAA2C;AAC7E,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,WAAW,MAAM,MAAA,CAAO,IAAa,UAAA,EAAY,mBAAA,CAAoB,WAAW,CAAC,CAAA;AACvF,EAAA,OAAO,gBAAA,CAAiB,MAAM,QAAQ,CAAA;AACxC;AAGA,eAAsB,aAAA,CACpB,MACA,WAAA,EACe;AACf,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,OAAA,GAAU,0BAAA,CAA2B,KAAA,CAAM,IAAI,CAAA;AACrD,EAAA,MAAM,OAAO,KAAA,CAAe,UAAA,EAAY,OAAA,EAAS,mBAAA,CAAoB,WAAW,CAAC,CAAA;AACnF;AC1MA,IAAM,kCAAA,GAAqCA,EACxC,MAAA,CAAO;AAAA,EACN,MAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACrC,SAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACxC,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA,EACnB,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,MAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACrC,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA,EACtB,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,YAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC3C,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,OAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACtC,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,WAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,QAAA,EAAUA,EAAE,MAAA,CAAOA,CAAAA,CAAE,SAAS,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA;AAC7C,CAAC,EACA,WAAA,EAAY;AAEf,IAAM,2BAAA,GAA8BA,EAAE,MAAA,CAAO;AAAA,EAC3C,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,OAAA,EAASA,CAAAA,CAAE,MAAA,CAAO,MAAA,EAAO;AAAA,EACzB,SAAA,EAAWA,CAAAA,CAAE,MAAA,CAAO,MAAA,GAAS,QAAA,EAAS;AAAA,EACtC,SAAA,EAAWA,CAAAA,CAAE,MAAA,CAAO,MAAA,GAAS,QAAA,EAAS;AAAA,EACtC,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,WAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,cAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC7C,eAAeA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC9C,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA,EACnB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,MAAA,EAAQA,EAAE,MAAA;AACZ,CAAC,CAAA;AAGM,IAAM,2BAAA,GAA8BA,EAAE,MAAA,CAAO;AAAA,EAClD,OAAA,EAASA,CAAAA,CAAE,MAAA,CAAO,MAAA,EAAO;AAAA,EACzB,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA,EACtB,UAAA,EAAYA,EAAE,MAAA,EAAO;AAAA,EACrB,UAAUA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,CAAO,QAAQ,CAAA;AAAA,EACnC,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA,EACjB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,YAAA,EAAcA,EAAE,MAAA,EAAO;AAAA,EACvB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,WAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,WAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,eAAA,EAAiB,kCAAA,CAAmC,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,EACxE,wBAAwBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACvD,KAAA,EAAOA,CAAAA,CAAE,KAAA,CAAM,2BAA2B;AAC5C,CAAC;AAID,IAAM,0BAAA,GAA6BA,EAAE,MAAA,CAAO;AAAA,EAC1C,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,aAAA,EAAeA,EAAE,MAAA,EAAO;AAAA,EACxB,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA,EACtB,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA,EACjB,aAAA,EAAeA,EAAE,MAAA,EAAO;AAAA,EACxB,YAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC3C,SAAA,EAAWA,EAAE,MAAA;AACf,CAAC,CAAA;AAED,IAAM,iCAAA,GAAoCA,EAAE,MAAA,CAAO;AAAA,EACjD,GAAA,EAAKA,EAAE,MAAA,EAAO;AAAA,EACd,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,UAAA,EAAYA,EAAE,MAAA,EAAO;AAAA,EACrB,aAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA,EACjB,MAAA,EAAQA,EAAE,MAAA;AACZ,CAAC,CAAA;AAGM,IAAM,yBAAA,GAA4BA,EAAE,MAAA,CAAO;AAAA,EAChD,EAAA,EAAIA,CAAAA,CAAE,MAAA,CAAO,MAAA,EAAO;AAAA,EACpB,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA,EACtB,UAAA,EAAYA,EAAE,MAAA,EAAO;AAAA,EACrB,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA,EACjB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,YAAA,EAAcA,EAAE,MAAA,EAAO;AAAA,EACvB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,WAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,WAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA,EACnB,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA,EACnB,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA,EACnB,GAAA,EAAKA,EAAE,MAAA,EAAO;AAAA,EACd,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA,EACnB,eAAA,EAAiB,kCAAA,CAAmC,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,EACxE,wBAAwBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACvD,cAAA,EAAgB,kCAAA,CAAmC,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,EACvE,KAAA,EAAOA,CAAAA,CAAE,KAAA,CAAM,2BAA2B,CAAA;AAAA,EAC1C,QAAA,EAAUA,CAAAA,CAAE,KAAA,CAAM,0BAA0B,CAAA;AAAA,EAC5C,cAAA,EAAgBA,CAAAA,CAAE,KAAA,CAAM,iCAAiC;AAC3D,CAAC;AAID,SAAS,YAAY,WAAA,EAAsB;AACzC,EAAA,MAAM,KAAA,GACJ,OAAO,WAAA,KAAgB,QAAA,IAAY,WAAA,CAAY,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,GAC3D,WAAA,CAAY,IAAA,EAAK,GACjB,MAAA;AACN,EAAA,OAAO,KAAA,GAAQ,EAAE,WAAA,EAAa,KAAA,KAAU,EAAC;AAC3C;AAEA,eAAsB,kBACpB,WAAA,EACqC;AACrC,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,WAAW,MAAM,MAAA,CAAO,IAAa,iBAAA,EAAmB,WAAA,CAAY,WAAW,CAAC,CAAA;AACtF,EAAA,OAAOA,CAAAA,CAAE,KAAA,CAAM,2BAA2B,CAAA,CAAE,MAAM,QAAQ,CAAA;AAC5D;AAEA,eAAsB,gBAAA,CACpB,SACA,WAAA,EACiC;AACjC,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,EAAA,GAAK,QAAQ,IAAA,EAAK;AACxB,EAAA,IAAI,CAAC,EAAA,EAAI,MAAM,IAAI,MAAM,mBAAmB,CAAA;AAC5C,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,GAAA;AAAA,IAC5B,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA;AAAA,IACzC,YAAY,WAAW;AAAA,GACzB;AACA,EAAA,OAAO,yBAAA,CAA0B,MAAM,QAAQ,CAAA;AACjD;ACrIO,IAAM,4BAAA,GAA+BA,EACzC,MAAA,CAAO;AAAA,EACN,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1B,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,OAAA,EAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,GAAA,EAAKA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACzB,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC/B,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACvB,CAAC,EACA,WAAA,EAAY;AAER,IAAM,oBAAA,GAAuBA,EAAE,MAAA,CAAO;AAAA,EAC3C,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,WAAWA,CAAAA,CAAE,MAAA,CAAO,QAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACjD,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,mBAAmBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAClD,WAAWA,CAAAA,CAAE,MAAA,CAAO,QAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACjD,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,WAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,CAAC,CAAA;AAAA,EACzC,WAAWA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,CAAC,CAAA;AAAA,EAC1C,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,CAAC,CAAA;AAAA,EACzC,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,CAAC,CAAA;AAAA,EACzC,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,CAAC,CAAA;AAAA,EACzC,KAAKA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,CAAC,CAAA;AAAA,EACpC,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,CAAC,CAAA;AAAA,EACzC,OAAOA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,CAAC,CAAA;AAAA,EACtC,kBAAkBA,CAAAA,CAAE,OAAA,GAAU,QAAA,EAAS,CAAE,QAAQ,IAAI,CAAA;AAAA,EACrD,gBAAgBA,CAAAA,CAAE,OAAA,GAAU,QAAA,EAAS,CAAE,QAAQ,IAAI,CAAA;AAAA,EACnD,QAAA,EAAUA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,EAAE;AACvD,CAAC,CAAA;AAEM,IAAM,8BAAA,GAAiCA,EAAE,MAAA,CAAO;AAAA,EACrD,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,MAAMA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,EAAE,CAAA;AAAA,EACtC,aAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,CAAC,CAAA;AAAA,EACzC,eAAeA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,CAAC,CAAA;AAAA,EAC9C,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,CAAC,CAAA;AAAA,EACzC,OAAOA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,CAAC,CAAA;AAAA,EACtC,gBAAgBA,CAAAA,CAAE,OAAA,GAAU,QAAA,EAAS,CAAE,QAAQ,IAAI,CAAA;AAAA,EACnD,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,mBAAmBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAClD,kBAAkBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACjD,cAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC7C,cAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC7C,cAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC7C,eAAeA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC9C,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,YAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC3C,eAAeA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC9C,eAAeA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC9C,eAAeA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC9C,IAAA,EAAMA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,EAAE;AACnD,CAAC,CAAA;AAEM,IAAM,gBAAA,GAAmBA,EAAE,MAAA,CAAO;AAAA,EACvC,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,OAAA,EAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,YAAYA,CAAAA,CAAE,MAAA,CAAO,QAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAClD,QAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACvC,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA,EACtB,cAAcA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,KAAK,CAAA;AAAA,EACjD,QAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACvC,OAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACtC,OAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACtC,OAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACtC,WAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,oBAAoBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACnD,sBAAsBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACrD,aAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,YAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC3C,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA,EACjB,WAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,QAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACvC,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,YAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC3C,YAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC3C,WAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,aAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,aAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,YAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC3C,gBAAgBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC/C,2BAA2BA,CAAAA,CAAE,OAAA,GAAU,QAAA,EAAS,CAAE,QAAQ,KAAK,CAAA;AAAA,EAC/D,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,cAAA,EAAgB,4BAAA,CAA6B,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,EACjE,eAAA,EAAiB,4BAAA,CAA6B,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,EAClE,QAAA,EAAUA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EACrD,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,CAAC,CAAA;AAAA,EACzC,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,CAAC,CAAA;AAAA,EACzC,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,CAAC,CAAA;AAAA,EACzC,KAAKA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,CAAC,CAAA;AAAA,EACpC,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,CAAC,CAAA;AAAA,EACzC,OAAOA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,CAAC,CAAA;AAAA,EACtC,eAAeA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,EAAE,CAAA;AAAA,EAC/C,aAAaA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,EAAE,CAAA;AAAA,EAC7C,KAAA,EAAOA,EAAE,KAAA,CAAM,oBAAoB,EAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EAC1D,eAAA,EAAiBA,EAAE,KAAA,CAAM,8BAA8B,EAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EAC9E,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC/B,WAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AACnC,CAAC,CAAA;;;ACzGD,eAAsB,oBACpB,UAAA,EACqB;AACrB,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,GAAA;AAAA,IAC5B,CAAA,mBAAA,EAAsB,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA;AAAA,IACpD,EAAE,SAAS,IAAA;AAAK,GAClB;AACA,EAAA,OAAO,gBAAA,CAAiB,MAAM,QAAQ,CAAA;AACxC;ACFA,IAAM,cAAA,GAAiB;AAAA,EACrB,OAAA,EAAS;AAAA,IACP,WAAW,EAAA,GAAK;AAAA;AAEpB,CAAA;AAOO,SAAS,aAAA,CAAc,EAAE,QAAA,EAAU,eAAA,EAAgB,EAAuB;AAC/E,EAAA,MAAM,cAAA,GAAiB,OAA2B,IAAI,CAAA;AACtD,EAAA,MAAM,WAAA,GAAc,OAAO,KAAK,CAAA;AAEhC,EAAA,IAAI,cAAA,CAAe,YAAY,IAAA,EAAM;AACnC,IAAA,cAAA,CAAe,OAAA,GAAU,IAAI,WAAA,CAAY,EAAE,gBAAgB,CAAA;AAAA,EAC7D;AAEA,EAAA,MAAM,cAAc,cAAA,CAAe,OAAA;AAEnC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,eAAA,IAAmB,CAAC,WAAA,CAAY,OAAA,EAAS;AAC3C,MAAA,OAAA,CAAQ,aAAa,eAAe,CAAA;AACpC,MAAA,WAAA,CAAY,OAAA,GAAU,IAAA;AAAA,IACxB;AAAA,EACF,CAAA,EAAG,CAAC,WAAA,EAAa,eAAe,CAAC,CAAA;AAEjC,EAAA,uBACE,GAAA,CAAC,mBAAA,EAAA,EAAoB,MAAA,EAAQ,WAAA,EAAc,QAAA,EAAS,CAAA;AAExD;ACjCA,IAAM,qBAAA,GAAwB,cAAmD,IAAI,CAAA;AAE9E,SAAS,sBAAA,CAAuB;AAAA,EACrC,UAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,uBACEC,GAAAA,CAAC,qBAAA,CAAsB,UAAtB,EAA+B,KAAA,EAAO,YAAa,QAAA,EAAS,CAAA;AAEjE;AAEO,SAAS,uBAAA,GAAwD;AACtE,EAAA,MAAM,MAAA,GAAS,WAAW,qBAAqB,CAAA;AAC/C,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAYO,SAAS,yBAAA,CAA0B,SAAA,EAA6B,MAAA,GAAS,IAAA,EAAkB;AAChG,EAAA,IAAI,CAAC,WAAW,OAAO,KAAA;AACvB,EAAA,OAAO,IAAA,CAAK,GAAA,EAAI,GAAI,MAAA,IAAU,UAAU,OAAA,EAAQ;AAClD;AAGO,IAAM,iCAAA,GAAoC;AAEjD,SAAS,8BAA8B,EAAA,EAA+B;AACpE,EAAA,IAAI,CAAC,IAAI,OAAO,MAAA;AAChB,EAAA,IAAI,EAAA,YAAc,MAAM,OAAO,MAAA,CAAO,MAAM,EAAA,CAAG,OAAA,EAAS,CAAA,GAAI,MAAA,GAAY,EAAA;AACxE,EAAA,IAAI,OAAO,OAAO,QAAA,EAAU;AAC1B,IAAA,MAAM,CAAA,GAAI,IAAI,IAAA,CAAK,EAAE,CAAA;AACrB,IAAA,OAAO,OAAO,KAAA,CAAM,CAAA,CAAE,OAAA,EAAS,IAAI,MAAA,GAAY,CAAA;AAAA,EACjD;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,eAAe,GAAA,EAA4C;AAClE,EAAA,IAAI,CAAC,GAAA,IAAO,OAAO,GAAA,KAAQ,UAAU,OAAO,IAAA;AAC5C,EAAA,MAAM,CAAA,GAAI,GAAA;AACV,EAAA,MAAM,aAAA,GACJ,OAAO,CAAA,CAAE,SAAA,KAAc,QAAA,GAAW,CAAA,CAAE,SAAA,GAAY,OAAO,CAAA,CAAE,UAAA,KAAe,QAAA,GAAW,CAAA,CAAE,UAAA,GAAa,EAAA;AACpG,EAAA,MAAM,YAAA,GACJ,OAAO,CAAA,CAAE,QAAA,KAAa,QAAA,GAAW,CAAA,CAAE,QAAA,GAAW,OAAO,CAAA,CAAE,WAAA,KAAgB,QAAA,GAAW,CAAA,CAAE,WAAA,GAAc,EAAA;AACpG,EAAA,IAAI,iBAAiB,YAAA,EAAc;AACjC,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,MAAA,CAAO,CAAA,CAAE,EAAA,IAAM,EAAE,CAAA;AAAA,MACrB,KAAA,EAAO,MAAA,CAAO,CAAA,CAAE,KAAA,IAAS,EAAE,CAAA;AAAA,MAC3B,SAAA,EAAW,aAAA;AAAA,MACX,QAAA,EAAU,YAAA;AAAA,MACV,MAAM,OAAO,CAAA,CAAE,IAAA,KAAS,QAAA,GAAW,EAAE,IAAA,GAAO,MAAA;AAAA,MAC5C,OAAO,OAAO,CAAA,CAAE,KAAA,KAAU,QAAA,GAAW,EAAE,KAAA,GAAQ;AAAA,KACjD;AAAA,EACF;AACA,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,CAAA,CAAE,KAAA,IAAS,EAAE,EAAE,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,IAAK,EAAA;AAC1D,EAAA,MAAM,IAAA,GAAO,OAAO,CAAA,CAAE,IAAA,KAAS,QAAA,GAAW,EAAE,IAAA,CAAK,IAAA,EAAK,GAAI,UAAA,CAAW,IAAA,EAAK;AAC1E,EAAA,MAAM,QAAQ,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,KAAK,IAAI,EAAC;AAC1C,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,MAAA,CAAO,CAAA,CAAE,EAAA,IAAM,EAAE,CAAA;AAAA,IACrB,KAAA,EAAO,MAAA,CAAO,CAAA,CAAE,KAAA,IAAS,EAAE,CAAA;AAAA,IAC3B,SAAA,EAAW,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA;AAAA,IACvB,UAAU,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,IACjC,MAAM,OAAO,CAAA,CAAE,IAAA,KAAS,QAAA,GAAW,EAAE,IAAA,GAAO,MAAA;AAAA,IAC5C,OAAO,OAAO,CAAA,CAAE,KAAA,KAAU,QAAA,GAAW,EAAE,KAAA,GAAQ;AAAA,GACjD;AACF;AAKO,SAAS,oBAAA,GAAuB;AACrC,EAAA,MAAM,aAAa,uBAAA,EAAwB;AAC3C,EAAA,MAAM,OAAA,GAAU,WAAW,UAAA,EAAW;AACtC,EAAA,MAAM,IAAA,GAAO,cAAA,CAAe,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAA;AAE9C,EAAA,MAAM,iBAAA,GAAoB,QAAQ,IAAA,EAAM,OAAA;AAGxC,EAAA,MAAM,gBAAA,GAAmB,6BAAA,CAA8B,iBAAA,EAAmB,SAAS,CAAA;AAEnF,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,IAAA;AAAA,IACA,gBAAA;AAAA,IACA,eAAA,EAAiB,OAAA,CAAQ,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAA;AAAA,IAC3C,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,SAAS,OAAA,CAAQ,OAAA;AAAA,IACjB,OAAA,EAAS,MAAM,UAAA,CAAW,OAAA;AAAQ,GACpC;AACF;ACjGO,SAAS,gBAAA,GAAmB;AACjC,EAAA,MAAM,yBAAA,GAA4B,CAAC,MAAA,KAA2C;AAC5E,IAAA,OAAO,QAAA,CAAS;AAAA,MACd,QAAA,EAAU,CAAC,YAAA,EAAc,UAAA,EAAY,MAAM,CAAA;AAAA,MAC3C,OAAA,EAAS,MAAM,qBAAA,CAAsB,MAAM;AAAA,KAC5C,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,6BAAA,GAAgC,CACpC,MAAA,KACG;AACH,IAAA,OAAO,gBAAA,CAAiB;AAAA,MACtB,QAAA,EAAU,CAAC,YAAA,EAAc,UAAA,EAAY,YAAY,MAAM,CAAA;AAAA,MACvD,OAAA,EAAS,CAAC,EAAE,SAAA,GAAY,CAAA,EAAE,KACxB,qBAAA,CAAsB,EAAE,GAAG,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAW,CAAA;AAAA,MACtD,gBAAA,EAAkB,CAAC,QAAA,KACjB,QAAA,CAAS,YAAY,QAAA,CAAS,UAAA,GAAa,QAAA,CAAS,SAAA,GAAY,CAAA,GAAI,MAAA;AAAA,MACtE,gBAAA,EAAkB;AAAA,KACnB,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,IAAA,KAAiB;AACzC,IAAA,OAAO,QAAA,CAAS;AAAA,MACd,QAAA,EAAU,CAAC,YAAA,EAAc,SAAA,EAAW,QAAQ,IAAI,CAAA;AAAA,MAChD,OAAA,EAAS,MAAM,0BAAA,CAA2B,IAAI,CAAA;AAAA,MAC9C,OAAA,EAAS,CAAC,CAAC;AAAA,KACZ,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,+BAA+B,MAAM;AACzC,IAAA,MAAM,cAAc,cAAA,EAAe;AACnC,IAAA,OAAO,WAAA,CAAY;AAAA,MACjB,UAAA,EAAY,CAAC,MAAA,KACX,qBAAA,CAAsB,MAAM,CAAA;AAAA,MAC9B,WAAW,MAAM;AACf,QAAA,WAAA,CAAY,kBAAkB,EAAE,QAAA,EAAU,CAAC,YAAA,EAAc,UAAU,GAAG,CAAA;AAAA,MACxE;AAAA,KACD,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,yBAAA;AAAA,IACA,6BAAA;AAAA,IACA,gBAAA;AAAA,IACA;AAAA,GACF;AACF;ACnDO,SAAS,mBAAA,GAAsB;AACpC,EAAA,MAAM,+BAA+B,MAAM;AACzC,IAAA,OAAOC,QAAAA,CAAS;AAAA,MACd,QAAA,EAAU,CAAC,YAAA,EAAc,aAAa,CAAA;AAAA,MACtC,OAAA,EAAS,MAAM,wBAAA;AAAyB,KACzC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,mBAAA,GAAsB,CAAC,IAAA,KAAiB;AAC5C,IAAA,OAAOA,QAAAA,CAAS;AAAA,MACd,QAAA,EAAU,CAAC,YAAA,EAAc,YAAA,EAAc,QAAQ,IAAI,CAAA;AAAA,MACnD,OAAA,EAAS,MAAM,6BAAA,CAA8B,IAAI,CAAA;AAAA,MACjD,OAAA,EAAS,CAAC,CAAC;AAAA,KACZ,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,kCAAkC,MAAM;AAC5C,IAAA,MAAM,cAAcC,cAAAA,EAAe;AACnC,IAAA,OAAOC,WAAAA,CAAY;AAAA,MACjB,UAAA,EAAY,MAAM,wBAAA,EAAyB;AAAA,MAC3C,WAAW,MAAM;AACf,QAAA,WAAA,CAAY,kBAAkB,EAAE,QAAA,EAAU,CAAC,YAAA,EAAc,aAAa,GAAG,CAAA;AAAA,MAC3E;AAAA,KACD,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,4BAAA;AAAA,IACA,mBAAA;AAAA,IACA;AAAA,GACF;AACF;AC/BO,SAAS,aAAA,GAAgB;AAC9B,EAAA,MAAM,yBAAyB,MAAM;AACnC,IAAA,OAAOF,QAAAA,CAAS;AAAA,MACd,QAAA,EAAU,CAAC,YAAA,EAAc,OAAO,CAAA;AAAA,MAChC,OAAA,EAAS,MAAM,kBAAA;AAAmB,KACnC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,IAAA,KAAiB;AACtC,IAAA,OAAOA,QAAAA,CAAS;AAAA,MACd,QAAA,EAAU,CAAC,YAAA,EAAc,MAAA,EAAQ,QAAQ,IAAI,CAAA;AAAA,MAC7C,OAAA,EAAS,MAAM,uBAAA,CAAwB,IAAI,CAAA;AAAA,MAC3C,OAAA,EAAS,CAAC,CAAC;AAAA,KACZ,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,4BAA4B,MAAM;AACtC,IAAA,MAAM,cAAcC,cAAAA,EAAe;AACnC,IAAA,OAAOC,WAAAA,CAAY;AAAA,MACjB,UAAA,EAAY,MAAM,kBAAA,EAAmB;AAAA,MACrC,WAAW,MAAM;AACf,QAAA,WAAA,CAAY,kBAAkB,EAAE,QAAA,EAAU,CAAC,YAAA,EAAc,OAAO,GAAG,CAAA;AAAA,MACrE;AAAA,KACD,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,sBAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF;AACF;ACkBO,IAAM,gBAAA,GAAmB,cAAA;AAEzB,IAAM,UAAU,MAAA,EAAkB;AAAA,EACvC,OAAA;AAAA,IACE,CAAC,GAAA,MAAS;AAAA,MACR,KAAA,EAAO,CAAA;AAAA,MACP,MAAM,EAAC;AAAA,MACP,WAAA,EAAa,IAAA;AAAA,MACb,cAAA,EAAgB,CAAC,KAAA,KAAU,GAAA,CAAI,CAAC,KAAA,MAAW,EAAE,GAAG,KAAA,EAAO,WAAA,EAAa,KAAA,EAAM,CAAE,CAAA;AAAA,MAC5E,YAAA,EAAc,IAAA;AAAA,MACd,eAAA,EAAiB,CAAC,IAAA,KAAS,GAAA,CAAI,CAAC,KAAA,MAAW,EAAE,GAAG,KAAA,EAAO,YAAA,EAAc,IAAA,EAAK,CAAE,CAAA;AAAA,MAC5E,qBAAA,EAAuB,IAAA;AAAA,MACvB,wBAAA,EAA0B,CAAC,QAAA,KACzB,GAAA,CAAI,CAAC,KAAA,KAAU;AACb,QAAA,IAAI,CAAC,KAAA,CAAM,WAAA,EAAa,OAAO,KAAA;AAC/B,QAAA,OAAO;AAAA,UACL,qBAAA,EAAuB;AAAA,YACrB,aAAa,KAAA,CAAM,WAAA;AAAA,YACnB;AAAA;AACF,SACF;AAAA,MACF,CAAC,CAAA;AAAA,MACH,4BAA4B,MAAM,GAAA,CAAI,OAAO,EAAE,qBAAA,EAAuB,MAAK,CAAE,CAAA;AAAA,MAC7E,OAAA,EAAS,CAAC,IAAA,KACR,GAAA,CAAI,CAAC,KAAA,KAAU;AACb,QAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,IAAA;AAAA,UAC9B,CAAC,QAAA,KAAa,QAAA,CAAS,EAAA,KAAO,IAAA,CAAK;AAAA,SACrC;AACA,QAAA,IAAI,YAAA,EAAc;AAChB,UAAA,MAAM,cAAc,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,YAAA,CAAa,QAAQ,CAAA,GAAI,CAAA;AACzD,UAAA,MAAMC,KAAAA,GAAO,MAAM,IAAA,CAAK,GAAA;AAAA,YAAI,CAAC,QAAA,KAC3B,QAAA,CAAS,EAAA,KAAO,IAAA,CAAK,EAAA,GACjB,EAAE,GAAG,QAAA,EAAU,QAAA,EAAU,WAAA,EAAY,GACrC;AAAA,WACN;AACA,UAAA,MAAMC,MAAAA,GAAQD,KAAAA,CAAK,MAAA,CAAO,CAAC,GAAA,EAAK,CAAA,KAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAA,CAAE,QAAQ,GAAG,CAAC,CAAA;AACtE,UAAA,OAAO,EAAE,KAAA,EAAAC,MAAAA,EAAO,IAAA,EAAAD,KAAAA,EAAK;AAAA,QACvB;AACA,QAAA,MAAM,OAAA,GAAoB;AAAA,UACxB,GAAG,IAAA;AAAA,UACH,QAAA,EAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,QAAA,IAAY,CAAC,CAAC;AAAA,SACvD;AACA,QAAA,MAAM,IAAA,GAAO,CAAC,GAAG,KAAA,CAAM,MAAM,OAAO,CAAA;AACpC,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,CAAC,GAAA,EAAK,CAAA,KAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAA,CAAE,QAAQ,GAAG,CAAC,CAAA;AACtE,QAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,MACvB,CAAC,CAAA;AAAA,MACH,UAAA,EAAY,CAAC,EAAA,KACX,GAAA,CAAI,CAAC,KAAA,KAAU;AACb,QAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,OAAO,EAAE,CAAA;AAC7D,QAAA,IAAI,CAAC,cAAc,OAAO,KAAA;AAC1B,QAAA,IAAI,YAAA,CAAa,WAAW,CAAA,EAAG;AAC7B,UAAA,MAAM,cAAc,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,YAAA,CAAa,WAAW,CAAC,CAAA;AACzD,UAAA,MAAMA,KAAAA,GAAO,MAAM,IAAA,CAAK,GAAA;AAAA,YAAI,CAAC,QAAA,KAC3B,QAAA,CAAS,EAAA,KAAO,EAAA,GACZ,EAAE,GAAG,QAAA,EAAU,QAAA,EAAU,WAAA,EAAY,GACrC;AAAA,WACN;AACA,UAAA,MAAMC,MAAAA,GAAQD,KAAAA,CAAK,MAAA,CAAO,CAAC,GAAA,EAAK,CAAA,KAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAA,CAAE,QAAQ,GAAG,CAAC,CAAA;AACtE,UAAA,OAAO,EAAE,KAAA,EAAAC,MAAAA,EAAO,IAAA,EAAAD,KAAAA,EAAK;AAAA,QACvB;AACA,QAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,OAAO,EAAE,CAAA;AACvD,QAAA,MAAM,QAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,OAAO,CAAC,GAAA,EAAK,CAAA,KAAM,GAAA,GAAM,KAAK,GAAA,CAAI,CAAA,EAAG,EAAE,QAAQ,CAAA,EAAG,CAAC,CAAC,CAAA;AACnF,QAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,MACvB,CAAC,CAAA;AAAA,MACH,gBAAA,EAAkB,CAAC,KAAA,KACjB,GAAA,CAAI,MAAM;AACR,QAAA,MAAM,IAAA,GAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,UAChC,GAAG,IAAA;AAAA,UACH,QAAA,EAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,QAAQ;AAAA,SACrC,CAAE,CAAA;AACF,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,CAAC,GAAA,EAAK,CAAA,KAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAA,CAAE,QAAQ,GAAG,CAAC,CAAA;AACtE,QAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,MACvB,CAAC,CAAA;AAAA,MACH,gBAAA,EAAkB,MAChB,GAAA,CAAI,OAAO;AAAA,QACT,KAAA,EAAO,CAAA;AAAA,QACP,MAAM,EAAC;AAAA,QACP,WAAA,EAAa,IAAA;AAAA,QACb,YAAA,EAAc,IAAA;AAAA,QACd,qBAAA,EAAuB;AAAA,OACzB,CAAE;AAAA,KACN,CAAA;AAAA,IACA,EAAE,MAAM,gBAAA;AAAiB;AAE7B;AAGA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,EAAA,MAAA,CAAO,gBAAA,CAAiB,SAAA,EAAW,CAAC,KAAA,KAAU;AAC5C,IAAA,IAAI,KAAA,CAAM,QAAQ,gBAAA,EAAkB;AACpC,IAAA,KAAK,OAAA,CAAQ,QAAQ,SAAA,EAAU;AAAA,EACjC,CAAC,CAAA;AACH;;;AC5GO,SAAS,YAAA,GAAe;AAC7B,EAAA,MAAM,UAAA,GAAa,CAAC,MAAA,KAClBH,QAAAA,CAA8B;AAAA,IAC5B,QAAA,EAAU,CAAC,YAAA,EAAc,MAAA,EAAQ,UAAU,IAAI,CAAA;AAAA,IAC/C,OAAA,EAAS,MAAM,OAAA,CAAQ,MAAA,IAAU,MAAS,CAAA;AAAA;AAAA,IAE1C,KAAA,EAAO,CAAC,YAAA,EAAc,KAAA,KAAU;AAC9B,MAAA,MAAM,SAAU,KAAA,CAAsC,MAAA;AACtD,MAAA,IAAI,MAAA,KAAW,KAAK,OAAO,KAAA;AAC3B,MAAA,OAAO,YAAA,GAAe,CAAA;AAAA,IACxB,CAAA;AAAA;AAAA,IAEA,oBAAA,EAAsB,KAAA;AAAA,IACtB,OAAA,EAAS,CAAC,CAAC;AAAA,GACZ,CAAA;AAEH,EAAA,MAAM,aAAA,GAAgB,MACpBE,WAAAA,CAAoD;AAAA,IAClD,UAAA,EAAY,CAAC,IAAA,KAAS,UAAA,CAAW,IAAI;AAAA,GACtC,CAAA;AAEH,EAAA,MAAM,kBAAA,GAAqB,MACzBA,WAAAA,CAIE;AAAA,IACA,UAAA,EAAY,CAAC,EAAE,IAAA,EAAM,QAAO,KAAM,cAAA,CAAe,MAAM,MAAM;AAAA,GAC9D,CAAA;AAEH,EAAA,MAAM,sBAAA,GAAyB,MAC7BA,WAAAA,CAIE;AAAA,IACA,UAAA,EAAY,CAAC,EAAE,IAAA,EAAM,QAAO,KAAM,kBAAA,CAAmB,MAAM,MAAM;AAAA,GAClE,CAAA;AAEH,EAAA,MAAM,cAAA,GAAiB,MACrBA,WAAAA,CAIE;AAAA,IACA,UAAA,EAAY,CAAC,EAAE,MAAA,EAAQ,GAAG,IAAA,EAAK,KAAM,WAAA,CAAY,IAAA,EAAM,MAAM;AAAA,GAC9D,CAAA;AAEH,EAAA,MAAM,iBAAA,GAAoB,MACxBA,WAAAA,CAIE;AAAA,IACA,UAAA,EAAY,CAAC,EAAE,MAAA,EAAQ,MAAA,EAAQ,MAAK,KAClC,cAAA,CAAe,MAAA,EAAQ,MAAA,EAAQ,IAAI;AAAA,GACtC,CAAA;AAEH,EAAA,MAAM,iBAAA,GAAoB,MACxBA,WAAAA,CAIE;AAAA,IACA,UAAA,EAAY,CAAC,EAAE,MAAA,EAAQ,QAAO,KAAM,cAAA,CAAe,QAAQ,MAAM;AAAA,GAClE,CAAA;AAEH,EAAA,MAAM,eAAA,GAAkB,MACtBA,WAAAA,CAIE;AAAA,IACA,UAAA,EAAY,CAAC,EAAE,IAAA,EAAM,QAAO,KAAM,YAAA,CAAa,MAAM,MAAM;AAAA,GAC5D,CAAA;AAEH,EAAA,MAAM,uBAAA,GAA0B,MAC9BA,WAAAA,CAIE;AAAA,IACA,UAAA,EAAY,CAAC,EAAE,MAAA,EAAQ,MAAK,KAAM,oBAAA,CAAqB,QAAQ,IAAI;AAAA,GACpE,CAAA;AAEH,EAAA,MAAM,kBAAA,GAAqB,CAAC,MAAA,KAA2B;AACrD,IAAA,MAAM,kBAAA,GAAqBG,OAAsB,IAAI,CAAA;AAErD,IAAA,MAAM,QAAQL,QAAAA,CAA0C;AAAA,MACtD,UAAU,CAAC,YAAA,EAAc,MAAA,EAAQ,MAAA,IAAU,MAAM,UAAU,CAAA;AAAA,MAC3D,OAAA,EAAS,MAAM,eAAA,CAAgB,MAAO,CAAA;AAAA,MACtC,KAAA,EAAO,CAAC,YAAA,EAAc,KAAA,KAAU;AAC9B,QAAA,MAAM,SAAU,KAAA,CAAsC,MAAA;AACtD,QAAA,IAAI,MAAA,KAAW,KAAK,OAAO,KAAA;AAC3B,QAAA,IAAI,MAAA,KAAW,GAAA,IAAO,uBAAA,CAAwB,KAAK,GAAG,OAAO,KAAA;AAC7D,QAAA,OAAO,YAAA,GAAe,CAAA;AAAA,MACxB,CAAA;AAAA;AAAA,MAEA,SAAA,EAAW,GAAA;AAAA,MACX,cAAA,EAAgB,KAAA;AAAA,MAChB,kBAAA,EAAoB,KAAA;AAAA,MACpB,oBAAA,EAAsB,KAAA;AAAA,MACtB,OAAA,EAAS,CAAC,CAAC;AAAA,KACZ,CAAA;AAED,IAAAM,UAAU,MAAM;AACd,MAAA,kBAAA,CAAmB,OAAA,GAAU,IAAA;AAAA,IAC/B,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,IAAAA,UAAU,MAAM;AACd,MAAA,IAAI,CAAC,MAAA,EAAQ;AACb,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,IAAW,CAAC,MAAM,KAAA,EAAO;AACpC,MAAA,IAAI,CAAC,uBAAA,CAAwB,KAAA,CAAM,KAAK,CAAA,EAAG;AAC3C,MAAA,IAAI,kBAAA,CAAmB,YAAY,MAAA,EAAQ;AAC3C,MAAA,kBAAA,CAAmB,OAAA,GAAU,MAAA;AAC7B,MAAA,KAAA,CAAM,KAAA;AAAA,QACJ;AAAA,OACF;AACA,MAAA,OAAA,CAAQ,QAAA,GAAW,gBAAA,EAAiB;AAAA,IACtC,GAAG,CAAC,MAAA,EAAQ,MAAM,OAAA,EAAS,KAAA,CAAM,KAAK,CAAC,CAAA;AAEvC,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,wBAAA,GAA2B,CAAC,MAAA,KAChCN,QAAAA,CAA4C;AAAA,IAC1C,UAAU,CAAC,YAAA,EAAc,MAAA,EAAQ,MAAA,IAAU,MAAM,iBAAiB,CAAA;AAAA,IAClE,OAAA,EAAS,MAAM,qBAAA,CAAsB,MAAA,IAAU,MAAS,CAAA;AAAA,IACxD,KAAA,EAAO,CAAC,YAAA,EAAc,KAAA,KAAU;AAC9B,MAAA,MAAM,SAAU,KAAA,CAAsC,MAAA;AACtD,MAAA,IAAI,MAAA,KAAW,KAAK,OAAO,KAAA;AAC3B,MAAA,OAAO,YAAA,GAAe,CAAA;AAAA,IACxB,CAAA;AAAA,IACA,oBAAA,EAAsB,KAAA;AAAA,IACtB,OAAA,EAAS,CAAC,CAAC;AAAA,GACZ,CAAA;AAEH,EAAA,MAAM,qBAAA,GAAwB,CAC5B,MAAA,EACA,UAAA,EACA,YAEAA,QAAAA,CAAyC;AAAA,IACvC,QAAA,EAAU;AAAA,MACR,YAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA,IAAU,IAAA;AAAA,MACV,kBAAA;AAAA,MACA,UAAA,IAAc;AAAA,KAChB;AAAA,IACA,OAAA,EAAS,MAAM,kBAAA,CAAmB,MAAA,EAAS,UAAW,CAAA;AAAA,IACtD,KAAA,EAAO,CAAC,YAAA,EAAc,KAAA,KAAU;AAC9B,MAAA,MAAM,SAAU,KAAA,CAAsC,MAAA;AACtD,MAAA,IAAI,MAAA,KAAW,KAAK,OAAO,KAAA;AAC3B,MAAA,OAAO,YAAA,GAAe,CAAA;AAAA,IACxB,CAAA;AAAA,IACA,oBAAA,EAAsB,KAAA;AAAA,IACtB,OAAA,EAAS,CAAC,CAAC,MAAA,IAAU,CAAC,CAAC,UAAA,EAAY,MAAK,IAAK;AAAA,GAC9C,CAAA;AAEH,EAAA,MAAM,wBAAA,GAA2B,MAC/BE,WAAAA,CAIE;AAAA,IACA,UAAA,EAAY,CAAC,EAAE,MAAA,EAAQ,MAAK,KAAM,qBAAA,CAAsB,QAAQ,IAAI;AAAA,GACrE,CAAA;AAEH,EAAA,MAAM,gBAAA,GAAmB,MACvBA,WAAAA,CAIE;AAAA,IACA,UAAA,EAAY,CAAC,EAAE,MAAA,EAAQ,MAAK,KAAM,aAAA,CAAc,QAAQ,IAAI;AAAA,GAC7D,CAAA;AAEH,EAAA,MAAM,mBAAA,GAAsB,MAC1BA,WAAAA,CAAmE;AAAA,IACjE,UAAA,EAAY,CAAC,EAAE,MAAA,EAAQ,MAAK,KAAM,gBAAA,CAAiB,QAAQ,IAAI;AAAA,GAChE,CAAA;AAEH,EAAA,OAAO;AAAA,IACL,aAAA;AAAA,IACA,UAAA;AAAA,IACA,kBAAA;AAAA,IACA,kBAAA;AAAA,IACA,sBAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAA;AAAA,IACA,iBAAA;AAAA,IACA,eAAA;AAAA,IACA,uBAAA;AAAA,IACA,wBAAA;AAAA,IACA,qBAAA;AAAA,IACA,wBAAA;AAAA,IACA,gBAAA;AAAA,IACA;AAAA,GACF;AACF;ACpNO,IAAM,WAAWK,MAAAA,EAAmB;AAAA,EACzC,CAAC,GAAA,MAAS;AAAA,IACR,IAAA,EAAM,IAAA;AAAA,IACN,OAAA,EAAS;AAAA,MACP,IAAA,EAAM,KAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,KAAA;AAAA,MACN,MAAA,EAAQ;AAAA,KACV;AAAA,IACA,UAAA,EAAY,CAAC,MAAA,KACX,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,MACd,OAAA,EAAS;AAAA,QACP,GAAG,KAAA,CAAM,OAAA;AAAA,QACT,CAAC,MAAM,GAAG;AAAA;AACZ,KACF,CAAE,CAAA;AAAA,IACJ,WAAA,EAAa,CAAC,MAAA,KACZ,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,MACd,OAAA,EAAS;AAAA,QACP,GAAG,KAAA,CAAM,OAAA;AAAA,QACT,CAAC,MAAM,GAAG;AAAA;AACZ,KACF,CAAE,CAAA;AAAA,IACJ,YAAA,EAAc,CAAC,MAAA,KACb,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,MACd,OAAA,EAAS;AAAA,QACP,GAAG,KAAA,CAAM,OAAA;AAAA,QACT,CAAC,MAAM,GAAG,CAAC,KAAA,CAAM,QAAQ,MAAM;AAAA;AACjC,KACF,CAAE,CAAA;AAAA,IACJ,eAAA,EAAiB,MACf,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,MACd,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA,CAAE,MAAA;AAAA,QAClC,CAAC,KAAK,GAAA,MAAS,EAAE,GAAG,GAAA,EAAK,CAAC,GAAG,GAAG,KAAA,EAAM,CAAA;AAAA,QACtC;AAAC;AACH,KACF,CAAE,CAAA;AAAA,IACJ,MAAA,EAAQ;AAAA,MACN,KAAA,EAAO,KAAA;AAAA,MACP,MAAA,EAAQ;AAAA,KACV;AAAA,IACA,SAAA,EAAW,CAAC,KAAA,KACV,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,MACd,MAAA,EAAQ;AAAA,QACN,GAAG,KAAA,CAAM,MAAA;AAAA,QACT,KAAA,EAAO,KAAA;AAAA,QACP,MAAA,EAAQ,KAAA;AAAA,QACR,CAAC,KAAK,GAAG;AAAA;AACX,KACF,CAAE,CAAA;AAAA,IACJ,UAAA,EAAY,CAAC,KAAA,KACX,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,MACd,MAAA,EAAQ;AAAA,QACN,GAAG,KAAA,CAAM,MAAA;AAAA,QACT,KAAA,EAAO,KAAA;AAAA,QACP,MAAA,EAAQ,KAAA;AAAA,QACR,CAAC,KAAK,GAAG;AAAA;AACX,KACF,CAAE,CAAA;AAAA,IACJ,WAAA,EAAa,CAAC,KAAA,KACZ,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,MACd,MAAA,EAAQ;AAAA,QACN,GAAG,KAAA,CAAM,MAAA;AAAA,QACT,CAAC,KAAK,GAAG,CAAC,KAAA,CAAM,OAAO,KAAK;AAAA;AAC9B,KACF,CAAE,CAAA;AAAA,IACJ,cAAA,EAAgB,MACd,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,MACd,MAAA,EAAQ,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA,CAAE,MAAA;AAAA,QAChC,CAAC,KAAK,GAAA,MAAS,EAAE,GAAG,GAAA,EAAK,CAAC,GAAG,GAAG,KAAA,EAAM,CAAA;AAAA,QACtC;AAAC;AACH,KACF,CAAE;AAAA,GACN;AACF;AClFO,SAAS,cAAA,CAAe;AAAA,EAC7B,KAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc;AAChB,CAAA,EAAwB;AACtB,EAAA,QAAA,CAAS,QAAA,CAAS,EAAE,IAAA,EAAM,KAAA,IAAS,MAAM,CAAA;AAEzC,EAAAD,UAAU,MAAM;AACd,IAAA,gBAAA,CAAiB,KAAA,EAAO,KAAA,CAAM,EAAA,IAAM,IAAI,CAAA;AACxC,IAAA,OAAO,MAAM,iBAAiB,IAAI,CAAA;AAAA,EACpC,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,CAAC,WAAW,CAAA,GAAI,SAAS,MAAM,IAAIE,aAAa,CAAA;AAEtD,EAAA,MAAM,IAAA,mBACJ,IAAA,CAACC,mBAAAA,EAAA,EAAoB,QAAQ,WAAA,EAC1B,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,IACA,WAAA,mBAAcV,GAAAA,CAAC,aAAA,EAAA,EAAc,CAAA,GAAK;AAAA,GAAA,EACrC,CAAA;AAGF,EAAA,IAAI,CAAC,YAAY,OAAO,IAAA;AAExB,EAAA,uBACEA,GAAAA,CAAC,sBAAA,EAAA,EAAuB,UAAA,EAAyB,QAAA,EAAA,IAAA,EAAK,CAAA;AAE1D;AAEA,SAAS,aAAA,GAAgB;AACvB,EAAA,MAAM,CAAC,EAAA,EAAI,KAAK,CAAA,GAAI,SAAqC,IAAI,CAAA;AAE7D,EAAAO,UAAU,MAAM;AACd,IAAA,KAAK,OAAO,gCAAmB,CAAA,CAAE,IAAA,CAAK,CAAC,QAAQ,KAAA,CAAM,MAAM,GAAA,CAAI,aAAa,CAAC,CAAA;AAAA,EAC/E,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,EAAA,GAAKI,MAAAA,CAAM,aAAA,CAAc,EAAE,CAAA,GAAI,IAAA;AACxC;;;AC5DO,IAAM,SAAA,GAAY,uBAAA;;;ACSlB,SAAS,yBAAA,GAAoD;AAClE,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,SAAA;AAAA,IACJ,WAAA,EAAa;AAAA,MACX,uBAAA,EAAyB;AAAA,KAC3B;AAAA,IACA,aAAA,EAAe;AAAA,MACb;AAAA,QACE,OAAA,EAAS,CAAC,IAAA,KAAS,IAAA,KAAS,uBAAA;AAAA,QAC5B,MAAA,EAAQ;AAAA;AACV;AACF,GACF;AACF;ACrBO,IAAM,gCAAA,GAAmCZ,EAAE,MAAA,CAAO;AAAA,EACvD,kBAAA,EAAoBA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACzC,aAAA,EAAeA,EAAE,IAAA,CAAK,CAAC,SAAS,QAAA,EAAU,QAAQ,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EAC9D,eAAeA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA;AACrC,CAAC,CAAA;AAID,IAAM,WAAA,GAAcA,EAAE,MAAA,CAAOA,CAAAA,CAAE,QAAO,EAAGA,CAAAA,CAAE,SAAS,CAAA;AAE7C,IAAM,2BAAA,GAA8BA,EACxC,MAAA,CAAO;AAAA,EACN,MAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACrC,MAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACrC,MAAA,EAAQ,YAAY,QAAA,EAAS;AAAA,EAC7B,KAAA,EAAO,YAAY,QAAA,EAAS;AAAA,EAC5B,MAAA,EAAQ,YAAY,QAAA;AACtB,CAAC,EACA,WAAA,EAAY;AAER,IAAM,+BAAA,GAAkCA,EAC5C,MAAA,CAAO;AAAA,EACN,KAAA,EAAO,YAAY,QAAA;AACrB,CAAC,EACA,WAAA,EAAY;AAER,IAAM,2BAAA,GAA8BA,EAAE,MAAA,CAAO;AAAA,EAClD,SAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACxC,aAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,YAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC3C,gBAAgBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AACxC,CAAC,CAAA;AAEM,IAAM,sBAAA,GAAyBA,EAAE,MAAA,CAAO;AAAA,EAC7C,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,WAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,iBAAiBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAChD,eAAeA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC9C,WAAA,EAAaA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AAC3B,CAAC,CAAA;AAEM,IAAM,8BAAA,GAAiCA,EAAE,MAAA,CAAO;AAAA,EACrD,WAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,QAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACvC,SAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACxC,GAAGA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AAC3B,CAAC,CAAA;AAEM,IAAM,0BAAA,GAA6BA,EAAE,MAAA,CAAO;AAAA,EACjD,cAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC7C,OAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACtC,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,SAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACxC,WAAA,EAAa,+BAA+B,QAAA;AAC9C,CAAC,CAAA;AAEM,IAAM,2BAAA,GAA8BA,EAAE,MAAA,CAAO;AAAA,EAClD,8BAA8BA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC7D,aAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,6BAA6BA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AACrD,CAAC,CAAA;AAEM,IAAM,gCAAA,GAAmCA,EAAE,MAAA,CAAO;AAAA,EACvD,OAAA,EAASA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC9B,MAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACrC,SAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AACjC,CAAC,CAAA;AAEM,IAAM,2BAAA,GAA8BA,EAAE,MAAA,CAAO;AAAA,EAClD,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,QAAA,EAAU,4BAA4B,QAAA,EAAS;AAAA,EAC/C,GAAA,EAAK,uBAAuB,QAAA,EAAS;AAAA,EACrC,OAAA,EAAS,2BAA2B,QAAA,EAAS;AAAA,EAC7C,QAAA,EAAU,4BAA4B,QAAA,EAAS;AAAA,EAC/C,aAAA,EAAe,iCAAiC,QAAA,EAAS;AAAA,EACzD,WAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AACnC,CAAC,CAAA;AAEM,IAAM,uBAAA,GAA0BA,EACpC,MAAA,CAAO;AAAA,EACN,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,MAAA,EAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,OAAA,EAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,QAAA,EAAUA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,EAAO,EAAGA,CAAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,EAChE,UAAUA,CAAAA,CAAE,KAAA,CAAMA,EAAE,OAAA,EAAS,EAAE,QAAA,EAAS;AAAA,EACxC,MAAA,EAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,mBAAA,EAAqBA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC1C,aAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,aAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,WAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,WAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,WAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,WAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,gBAAgBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AACxC,CAAC,EACA,WAAA,EAAY;AAGR,IAAM,kCAAA,GAAqCA,EAC/C,MAAA,CAAO;AAAA,EACN,EAAA,EAAIA,CAAAA,CAAE,MAAA,CAAO,MAAA,EAAO;AAAA,EACpB,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,CAAO,MAAA,GAAS,QAAA,EAAS;AAAA,EACjC,aAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,YAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC3C,MAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACrC,SAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACxC,MAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACrC,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,aAAaA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC7C,iBAAiBA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACjD,gBAAA,EAAkB,gCAAA,CAAiC,QAAA,EAAS,CAAE,QAAA;AAChE,CAAC,EACA,WAAA,EAAY;AAIf,SAAS,2BAA2B,CAAA,EAAqB;AACvD,EAAA,IAAI,CAAC,KAAK,OAAO,CAAA,KAAM,YAAY,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG,OAAO,CAAA;AAC5D,EAAA,MAAM,CAAA,GAAI,CAAA;AACV,EAAA,IACE,MAAA,IAAU,CAAA,IACV,CAAA,CAAE,IAAA,IAAQ,QACV,OAAO,CAAA,CAAE,IAAA,KAAS,QAAA,IAClB,CAAC,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,IAAI,CAAA,EACrB;AACA,IAAA,OAAO,CAAA,CAAE,IAAA;AAAA,EACX;AACA,EAAA,OAAO,CAAA;AACT;AAEA,SAAS,4BAA4B,CAAA,EAA0C;AAC7E,EAAA,IAAI,CAAC,KAAK,OAAO,CAAA,KAAM,YAAY,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG,OAAO,KAAA;AAC5D,EAAA,MAAM,CAAA,GAAI,CAAA;AACV,EAAA,IAAI,WAAW,CAAA,IAAK,eAAA,IAAmB,CAAA,IAAK,KAAA,IAAS,GAAG,OAAO,KAAA;AAC/D,EAAA,OAAA,CACG,OAAO,CAAA,CAAE,EAAA,KAAO,QAAA,IAAY,OAAO,EAAE,EAAA,KAAO,QAAA,KAC7C,OAAO,CAAA,CAAE,IAAA,KAAS,QAAA;AAEtB;AAGO,SAAS,mCAAmC,CAAA,EAAqB;AACtE,EAAA,MAAM,IAAA,GAAO,2BAA2B,CAAC,CAAA;AACzC,EAAA,IAAI,CAAC,2BAAA,CAA4B,IAAI,CAAA,EAAG,OAAO,IAAA;AAC/C,EAAA,MAAM,GAAA,GAAM,IAAA;AACZ,EAAA,MAAM,MAAA,GAAS,kCAAA,CAAmC,SAAA,CAAU,GAAG,CAAA;AAC/D,EAAA,IAAI,CAAC,MAAA,CAAO,OAAA,EAAS,OAAO,IAAA;AAE5B,EAAA,MAAM,IAAI,MAAA,CAAO,IAAA;AACjB,EAAA,MAAM,WAAW,CAAA,CAAE,QAAA,EAAU,IAAA,EAAK,GAAI,EAAE,QAAA,GAAW,KAAA;AACnD,EAAA,MAAM,WAAW,CAAA,CAAE,QAAA,EAAU,IAAA,EAAK,GAAI,EAAE,QAAA,GAAW,IAAA;AACnD,EAAA,MAAM,OAAO,CAAA,CAAE,IAAA,EAAM,MAAK,GAAI,CAAA,CAAE,OAAO,CAAA,CAAE,EAAA;AAEzC,EAAA,OAAO;AAAA,IACL,aAAA,EAAe,CAAA;AAAA,IACf,WAAA,EAAA,iBAAa,IAAI,IAAA,CAAK,CAAC,GAAE,WAAA,EAAY;AAAA,IACrC,KAAA,EAAO;AAAA,MACL,IAAI,CAAA,CAAE,EAAA;AAAA,MACN,QAAA,EAAU,EAAE,QAAA,IAAY,MAAA;AAAA,MACxB,MAAM,CAAA,CAAE,IAAA;AAAA,MACR,IAAA;AAAA,MACA,WAAA,EAAa,EAAE,WAAA,IAAe,IAAA;AAAA,MAC9B,IAAA,EAAM,EAAE,IAAA,IAAQ,IAAA;AAAA,MAChB,IAAA,EAAM,EAAE,IAAA,IAAQ,IAAA;AAAA,MAChB,UAAA,EAAY,EAAE,UAAA,IAAc,MAAA;AAAA,MAC5B,QAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA,EAAa,EAAE,WAAA,IAAe,MAAA;AAAA,MAC9B,eAAA,EAAiB,EAAE,eAAA,IAAmB,MAAA;AAAA,MACtC,gBAAA,EAAkB,EAAE,gBAAA,IAAoB;AAAA,KAC1C;AAAA,IACA,GAAA,EAAK;AAAA,MACH,QAAA,EAAU;AAAA,QACR,QAAA,EAAU;AAAA,UACR,UAAA,EAAY,EAAE,OAAA,IAAW,IAAA;AAAA,UACzB,OAAA,EAAS,EAAE,IAAA,IAAQ,IAAA;AAAA,UACnB,WAAA,EAAa,IAAA;AAAA,UACb,cAAA,EAAgB;AAAA;AAClB,OACF;AAAA,MACA,OAAO;AAAC;AACV,GACF;AACF;AAEO,IAAM,qBAAA,GAAwBA,EAClC,MAAA,CAAO;AAAA,EACN,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1B,iBAAA,EAAmBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACvC,yBAAA,EAA2BA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC/C,kBAAA,EAAoBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACxC,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC/B,UAAA,EAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,aAAA,EAAeA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACnC,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC/B,aAAA,EAAeA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACnC,cAAA,EAAgBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACpC,SAAA,EAAWA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAChC,QAAA,EAAUA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC/B,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,aAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,WAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,MAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACrC,MAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACrC,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,QAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACvC,SAASA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACtC,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA,EACnB,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA,EACnB,UAAA,EAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,mBAAmBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAClD,oBAAA,EAAsBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1C,WAAA,EAAa,4BAA4B,QAAA,EAAS;AAAA,EAClD,eAAA,EAAiB,gCAAgC,QAAA,EAAS;AAAA,EAC1D,gBAAA,EAAkB,gCAAA,CAAiC,QAAA,EAAS,CAAE,QAAA;AAChE,CAAC,EACA,WAAA,EAAY;AAEf,IAAM,gCAAA,GAAmCA,EACtC,MAAA,CAAO;AAAA,EACN,aAAA,EAAeA,EAAE,MAAA,EAAO;AAAA,EACxB,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA,EACtB,KAAA,EAAO,qBAAA;AAAA,EACP,GAAA,EAAKA,EAAE,MAAA,CAAO;AAAA,IACZ,QAAA,EAAU,2BAAA;AAAA,IACV,KAAA,EAAOA,CAAAA,CAAE,KAAA,CAAM,uBAAuB;AAAA,GACvC;AACH,CAAC,EACA,WAAA,EAAY;AAGyBA,CAAAA,CAAE,UAAA;AAAA,EACxC,kCAAA;AAAA,EACA;AACF;AAQO,SAAS,sBACd,QAAA,EACwB;AACxB,EAAA,OAAO,UAAU,KAAA,IAAS,IAAA;AAC5B;;;AC3PO,SAAS,gCACd,QAAA,EAC4B;AAC5B,EAAA,MAAM,MAAA,GAAS,sBAAsB,QAAQ,CAAA;AAC7C,EAAA,IAAI,CAAC,QAAQ,EAAA,EAAI;AACf,IAAA,MAAM,IAAI,MAAM,6CAA0C,CAAA;AAAA,EAC5D;AAEA,EAAA,MAAM,WAAW,MAAA,CAAO,gBAAA;AACxB,EAAA,MAAM,aAAA,GAAgB,QAAA,EAAU,aAAA,KAAkB,QAAA,GAAW,QAAA,GAAW,OAAA;AACxE,EAAA,MAAM,OAAA,GAAsC;AAAA,IAC1C,kBAAA,EAAoB,aAAA;AAAA,IACpB,cAAc,MAAA,CAAO;AAAA,GACvB;AACA,EAAA,IAAI,MAAA,CAAO,QAAA,EAAU,OAAA,CAAQ,aAAa,IAAI,MAAA,CAAO,QAAA;AACrD,EAAA,OAAO,OAAA;AACT;;;ACXA,eAAsB,2BAAA,CACpB,UAAA,EACA,QAAA,EACA,WAAA,EACA;AACA,EAAA,MAAM,QAAA,GAAW,MAAM,UAAA,CAAW,MAAA,CAAO,uBAAA,EAAyB;AAAA,IAChE,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS,gCAAgC,QAAQ,CAAA;AAAA,IACjD,IAAA,EAAM;AAAA,GACP,CAAA;AAED,EAAA,IAAI,SAAS,KAAA,EAAO;AAClB,IAAA,MAAM,IAAI,KAAA,CAAM,QAAA,CAAS,KAAA,CAAM,WAAW,4BAAyB,CAAA;AAAA,EACrE;AAEA,EAAA,OAAO,QAAA;AACT;;;AC7BO,IAAM,eAAA,GAAkB;AAAA,EAC7B,KAAA,EAAO,OAAA;AAAA,EACP,KAAA,EAAO,OAAA;AAAA,EACP,KAAA,EAAO,OAAA;AAAA,EACP,KAAA,EAAO;AACT,CAAA;;;ACCO,SAAS,cAAA,CACd,MAAA,EACA,QAAA,GAAmB,KAAA,EACX;AACR,EAAA,MAAM,MAAA,GACJ,eAAA,CAAgB,QAAwC,CAAA,IAAK,OAAA;AAC/D,EAAA,OAAO,IAAI,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ;AAAA,IACnC,KAAA,EAAO,UAAA;AAAA,IACP;AAAA,GACD,CAAA,CAAE,MAAA,CAAO,MAAM,CAAA;AAClB;ACOO,IAAM,0BAAA,GAAgD;AAAA,EAC3D,OAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,iBAAA;AAAA,EACA,OAAA;AAAA,EACA,0BAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,gBAAA,GAAoD;AAAA,EACxD,KAAA,EAAO,OAAA;AAAA,EACP,SAAA,EAAW,WAAA;AAAA,EACX,QAAA,EAAU,UAAA;AAAA,EACV,WAAA,EAAa,aAAA;AAAA,EACb,OAAA,EAAS,SAAA;AAAA,EACT,KAAA,EAAO,OAAA;AAAA,EACP,cAAA,EAAgB,YAAA;AAAA,EAChB,YAAA,EAAc,cAAA;AAAA,EACd,YAAA,EAAc,UAAA;AAAA,EACd,IAAA,EAAM,MAAA;AAAA,EACN,QAAA,EAAU,iBAAA;AAAA,EACV,mBAAA,EAAqB,0BAAA;AAAA,EACrB,mBAAA,EAAqB;AACvB,CAAA;AAUO,SAAS,kCAAkC,QAAA,EAAkB;AAClE,EAAA,MAAM,WAAA,GAAc,QAAA,KAAa,KAAA,GAAQ,CAAA,GAAI,EAAA;AAE7C,EAAA,OAAOA,EACJ,MAAA,CAAO;AAAA,IACN,KAAA,EAAOA,CAAAA,CACJ,MAAA,EAAO,CACP,IAAA,EAAK,CACL,GAAA,CAAI,CAAA,EAAG,uBAAuB,CAAA,CAC9B,KAAA,CAAM,4BAAyB,CAAA;AAAA,IAClC,SAAA,EAAWA,CAAAA,CACR,MAAA,EAAO,CACP,IAAA,EAAK,CACL,GAAA,CAAI,CAAA,EAAG,wBAAwB,CAAA,CAC/B,GAAA,CAAI,CAAA,EAAG,4CAA4C,CAAA;AAAA,IACtD,QAAA,EAAUA,CAAAA,CACP,MAAA,EAAO,CACP,IAAA,EAAK,CACL,GAAA,CAAI,CAAA,EAAG,0BAA0B,CAAA,CACjC,GAAA,CAAI,CAAA,EAAG,8CAA8C,CAAA;AAAA,IACxD,WAAA,EAAaA,EAAE,MAAA,EAAO,CAAE,MAAK,CAAE,GAAA,CAAI,GAAG,uBAAoB,CAAA;AAAA,IAC1D,OAAA,EAASA,CAAAA,CACN,MAAA,EAAO,CACP,IAAA,EAAK,CACL,GAAA,CAAI,CAAA,EAAG,8BAA2B,CAAA,CAClC,GAAA,CAAI,CAAA,EAAG,kDAA+C,CAAA;AAAA,IACzD,KAAA,EAAOA,CAAAA,CACJ,MAAA,EAAO,CACP,IAAA,EAAK,CACL,GAAA,CAAI,CAAA,EAAG,6BAA0B,CAAA,CACjC,KAAA,CAAM,OAAA,EAAS,8CAAwC,CAAA,CACvD,MAAA;AAAA,MACC,WAAA;AAAA,MACA,6BAA0B,WAAW,CAAA,WAAA;AAAA,KACvC;AAAA,IACF,cAAA,EAAgBA,EAAE,MAAA,EAAO;AAAA,IACzB,YAAA,EAAcA,EAAE,MAAA,EAAO;AAAA,IACvB,YAAA,EAAcA,EAAE,MAAA,EAAO;AAAA,IACvB,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,IACf,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA,IACnB,mBAAA,EAAqBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IACzC,sBAAsBA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,WAAA,EAAY;AAAA,IACnD,mBAAA,EAAqBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IACzC,qBAAqBA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,WAAA;AAAY,GACnD,CAAA,CACA,WAAA,CAAY,CAAC,MAAM,GAAA,KAAQ;AAC1B,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,WAAA,EAAY;AAE7C,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,IAAI,CAAC,IAAA,CAAK,cAAA,CAAe,IAAA,EAAK,EAAG;AAC/B,QAAA,GAAA,CAAI,QAAA,CAAS;AAAA,UACX,IAAA,EAAMA,EAAE,YAAA,CAAa,MAAA;AAAA,UACrB,IAAA,EAAM,CAAC,gBAAgB,CAAA;AAAA,UACvB,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH;AACA,MAAA,IAAI,CAAC,IAAA,CAAK,YAAA,CAAa,IAAA,EAAK,EAAG;AAC7B,QAAA,GAAA,CAAI,QAAA,CAAS;AAAA,UACX,IAAA,EAAMA,EAAE,YAAA,CAAa,MAAA;AAAA,UACrB,IAAA,EAAM,CAAC,cAAc,CAAA;AAAA,UACrB,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH;AACA,MAAA,IAAI,CAAC,IAAA,CAAK,YAAA,CAAa,IAAA,EAAK,EAAG;AAC7B,QAAA,GAAA,CAAI,QAAA,CAAS;AAAA,UACX,IAAA,EAAMA,EAAE,YAAA,CAAa,MAAA;AAAA,UACrB,IAAA,EAAM,CAAC,cAAc,CAAA;AAAA,UACrB,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAI,CAAC,IAAA,CAAK,IAAA,CAAK,IAAA,EAAK,EAAG;AACrB,QAAA,GAAA,CAAI,QAAA,CAAS;AAAA,UACX,IAAA,EAAMA,EAAE,YAAA,CAAa,MAAA;AAAA,UACrB,IAAA,EAAM,CAAC,MAAM,CAAA;AAAA,UACb,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH;AACA,MAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,IAAA,EAAK,EAAG;AACzB,QAAA,GAAA,CAAI,QAAA,CAAS;AAAA,UACX,IAAA,EAAMA,EAAE,YAAA,CAAa,MAAA;AAAA,UACrB,IAAA,EAAM,CAAC,UAAU,CAAA;AAAA,UACjB,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,IAAI,KAAK,oBAAA,GAAuB,CAAA,IAAK,CAAC,IAAA,CAAK,mBAAA,EAAqB,MAAK,EAAG;AACtE,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAMA,EAAE,YAAA,CAAa,MAAA;AAAA,QACrB,IAAA,EAAM,CAAC,qBAAqB,CAAA;AAAA,QAC5B,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,KAAK,mBAAA,GAAsB,CAAA,IAAK,CAAC,IAAA,CAAK,mBAAA,EAAqB,MAAK,EAAG;AACrE,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAMA,EAAE,YAAA,CAAa,MAAA;AAAA,QACrB,IAAA,EAAM,CAAC,qBAAqB,CAAA;AAAA,QAC5B,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH;AAAA,EACF,CAAC,CAAA;AACL;AAEO,SAAS,mCACd,GAAA,EACA;AACA,EAAA,MAAM,EAAE,SAAQ,GAAI,GAAA;AACpB,EAAA,OAAO;AAAA,IACL,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,aAAa,OAAA,CAAQ,WAAA;AAAA,IACrB,SAAS,OAAA,CAAQ,OAAA;AAAA,IACjB,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,gBAAgB,OAAA,CAAQ,cAAA;AAAA,IACxB,cAAc,OAAA,CAAQ,YAAA;AAAA,IACtB,cAAc,OAAA,CAAQ,YAAA;AAAA,IACtB,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,qBAAqB,GAAA,CAAI,mBAAA;AAAA,IACzB,sBAAsB,GAAA,CAAI,oBAAA;AAAA,IAC1B,qBAAqB,GAAA,CAAI,mBAAA;AAAA,IACzB,qBAAqB,GAAA,CAAI;AAAA,GAC3B;AACF;AAEO,SAAS,0BACd,KAAA,EAC0C;AAC1C,EAAA,MAAM,MAAgD,EAAC;AAEvD,EAAA,KAAA,MAAW,KAAA,IAAS,MAAM,MAAA,EAAQ;AAChC,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA;AACxB,IAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC7B,IAAA,MAAM,OAAA,GAAU,iBAAiB,GAAG,CAAA;AACpC,IAAA,IAAI,CAAC,OAAA,IAAW,GAAA,CAAI,OAAO,CAAA,EAAG;AAC9B,IAAA,GAAA,CAAI,OAAO,IAAI,KAAA,CAAM,OAAA;AAAA,EACvB;AAEA,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,oBACd,MAAA,EACwB;AACxB,EAAA,KAAA,MAAW,MAAM,0BAAA,EAA4B;AAC3C,IAAA,IAAI,MAAA,CAAO,EAAE,CAAA,EAAG,OAAO,EAAA;AAAA,EACzB;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,mBAAmB,OAAA,EAAgC;AACjE,EAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AAErC,EAAA,MAAM,EAAA,GAAK,QAAA,CAAS,cAAA,CAAe,OAAO,CAAA;AAC1C,EAAA,IAAI,EAAA,EAAI;AACN,IAAA,EAAA,CAAG,KAAA,CAAM,EAAE,aAAA,EAAe,KAAA,EAAO,CAAA;AACjC,IAAA,EAAA,CAAG,eAAe,EAAE,QAAA,EAAU,QAAA,EAAU,KAAA,EAAO,UAAU,CAAA;AACzD,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,YAAY,0BAAA,EAA4B;AAC1C,IAAA,MAAM,QAAQ,QAAA,CAAS,aAAA;AAAA,MACrB;AAAA,KACF;AACA,IAAA,KAAA,EAAO,KAAA,EAAM;AACb,IAAA,KAAA,EAAO,eAAe,EAAE,QAAA,EAAU,QAAA,EAAU,KAAA,EAAO,UAAU,CAAA;AAC7D,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,YAAY,yBAAA,EAA2B;AACzC,IAAA,MAAM,QAAQ,QAAA,CAAS,aAAA;AAAA,MACrB;AAAA,KACF;AACA,IAAA,KAAA,EAAO,KAAA,EAAM;AACb,IAAA,KAAA,EAAO,eAAe,EAAE,QAAA,EAAU,QAAA,EAAU,KAAA,EAAO,UAAU,CAAA;AAAA,EAC/D;AACF;;;ACrOO,SAAS,yBAAA,CAA0B,WAAW,KAAA,EAAO;AAC1D,EAAA,MAAM,MAAA,GAAS,OAAA;AAAA,IACb,MAAM,kCAAkC,QAAQ,CAAA;AAAA,IAChD,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIa,QAAAA,CAEpC,EAAE,CAAA;AACJ,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAE1E,EAAA,MAAM,eAAA,GAAkB,WAAA,CAAY,CAAC,OAAA,KAA6B;AAChE,IAAA,cAAA,CAAe,CAAC,IAAA,KAAS;AACvB,MAAA,IAAI,CAAC,IAAA,CAAK,OAAO,CAAA,EAAG,OAAO,IAAA;AAC3B,MAAA,MAAM,IAAA,GAAO,EAAE,GAAG,IAAA,EAAK;AACvB,MAAA,OAAO,KAAK,OAAO,CAAA;AACnB,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AACD,IAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,EACzB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,aAAA,GAAgB,WAAA;AAAA,IACpB,CAAC,OAAA,KAA6B,WAAA,CAAY,OAAO,CAAA;AAAA,IACjD,CAAC,WAAW;AAAA,GACd;AAEA,EAAA,MAAM,oBAAA,GAAuB,WAAA;AAAA,IAC3B,CAAC,OAAA,KAAoD;AACnD,MAAA,MAAM,SAAS,MAAA,CAAO,SAAA;AAAA,QACpB,mCAAmC,OAAO;AAAA,OAC5C;AAEA,MAAA,IAAI,OAAO,OAAA,EAAS;AAClB,QAAA,cAAA,CAAe,EAAE,CAAA;AACjB,QAAA,kBAAA,CAAmB,IAAI,CAAA;AACvB,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,MAAM,MAAA,GAAS,yBAAA,CAA0B,MAAA,CAAO,KAAK,CAAA;AACrD,MAAA,cAAA,CAAe,MAAM,CAAA;AAErB,MAAA,MAAM,OAAA,GAAU,oBAAoB,MAAM,CAAA;AAC1C,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,kBAAA,CAAmB,OAAO,CAAA;AAC1B,QAAA,kBAAA,CAAmB,MAAA,CAAO,OAAO,CAAA,IAAK,IAAI,CAAA;AAAA,MAC5C,CAAA,MAAO;AACL,QAAA,kBAAA,CAAmB,iCAAiC,CAAA;AAAA,MACtD;AAEA,MAAA,OAAO,KAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,OAAO;AAAA,IACL,WAAA;AAAA,IACA,eAAA;AAAA,IACA,kBAAA;AAAA,IACA,oBAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACF;AACF;;;ACrEO,SAAS,WAAW,IAAA,EAA0B;AACnD,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,SAAU,EAAC;AAClC,EAAA,OAAO,IAAA,CACJ,GAAA,CAAI,CAAC,GAAA,KAAQ;AACZ,IAAA,IAAI,CAAC,GAAA,IAAO,OAAO,GAAA,KAAQ,UAAU,OAAO,IAAA;AAC5C,IAAA,MAAM,IAAA,GAAO,GAAA;AACb,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,IAAA,IAAQ,EAAE,CAAA;AAAA,MAC5B,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,IAAA,IAAQ,EAAE;AAAA,KAC9B;AAAA,EACF,CAAC,CAAA,CACA,MAAA,CAAO,CAAC,MAAoB,CAAC,CAAC,CAAA,IAAK,CAAC,CAAC,CAAA,CAAE,IAAA,IAAQ,CAAC,CAAC,EAAE,IAAI,CAAA;AAC5D;AAEA,IAAI,gBAAA,GAAqC,IAAA;AACzC,IAAI,kBAAA,GAAgD,IAAA;AAE7C,SAAS,6BAA6B,OAAA,EAAqD;AAChG,EAAA,IAAI,gBAAA,EAAkB,OAAO,OAAA,CAAQ,OAAA,CAAQ,gBAAgB,CAAA;AAC7D,EAAA,IAAI,oBAAoB,OAAO,kBAAA;AAE/B,EAAA,kBAAA,GAAqB,KAAA;AAAA,IACnB,CAAA,+DAAA,CAAA;AAAA,IACA,EAAE,KAAA,EAAO,UAAA,EAAY,OAAA;AAAQ,GAC/B,CACG,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,MAAM,CAAA,CACpB,IAAA,CAAK,CAAC,IAAA,KAAS;AACd,IAAA,MAAM,KAAA,GAAQ,WAAW,IAAI,CAAA;AAC7B,IAAA,gBAAA,GAAmB,KAAA;AACnB,IAAA,OAAO,KAAA;AAAA,EACT,CAAC,CAAA,CACA,KAAA,CAAM,MAAM;AACX,IAAA,gBAAA,GAAmB,EAAC;AACpB,IAAA,OAAO,EAAC;AAAA,EACV,CAAC,CAAA,CACA,OAAA,CAAQ,MAAM;AACb,IAAA,kBAAA,GAAqB,IAAA;AAAA,EACvB,CAAC,CAAA;AAEH,EAAA,OAAO,kBAAA;AACT;AAEA,eAAsB,2BAAA,CACpB,OAAA,EACA,WAAA,EACA,cAAA,EACoB;AACpB,EAAA,MAAM,MAAM,MAAM,KAAA;AAAA,IAChB,CAAA,qCAAA,EAAwC,kBAAA;AAAA,MACtC;AAAA,KACD,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,cAAc,CAAC,CAAA,sBAAA,CAAA;AAAA,IACtD,EAAE,OAAA;AAAQ,GACZ;AACA,EAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,EAAA,OAAO,WAAW,IAAI,CAAA;AACxB;AAEA,eAAsB,2BAAA,CACpB,OAAA,EACA,WAAA,EACA,YAAA,EACoB;AACpB,EAAA,MAAM,MAAM,MAAM,KAAA;AAAA,IAChB,CAAA,qCAAA,EAAwC,kBAAA;AAAA,MACtC;AAAA,KACD,CAAA,cAAA,EAAiB,kBAAA,CAAmB,YAAY,CAAC,CAAA,YAAA,CAAA;AAAA,IAClD,EAAE,OAAA;AAAQ,GACZ;AACA,EAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,EAAA,OAAO,WAAW,IAAI,CAAA;AACxB;AAKA,eAAsB,0BAAA,CACpB,OAAA,EACA,MAAA,EACA,WAAA,GAAc,IAAA,EAC0E;AACxF,EAAA,MAAM,EAAA,GAAK,QAAQ,IAAA,EAAK;AACxB,EAAA,IAAI,CAAC,IAAI,OAAO,IAAA;AAChB,EAAA,MAAM,OAAA,GAAU,EAAE,YAAA,EAAc,EAAA,EAAG;AACnC,EAAA,MAAM,WAAA,GAAc,MAAM,4BAAA,CAA6B,OAAO,CAAA;AAC9D,EAAA,MAAM,IAAA,GAAO,WAAA,CAAY,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,IAAA,EAAK,KAAM,MAAA,CAAO,UAAA,CAAW,IAAA,EAAM,CAAA;AAC/E,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,MAAM,YAAY,MAAM,2BAAA,CAA4B,OAAA,EAAS,WAAA,EAAa,KAAK,IAAI,CAAA;AACnF,EAAA,MAAM,IAAA,GAAO,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,IAAA,EAAK,KAAM,MAAA,CAAO,QAAA,CAAS,IAAA,EAAM,CAAA;AAC3E,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,EAAE,cAAA,EAAgB,IAAA,CAAK,MAAM,YAAA,EAAc,EAAA,EAAI,cAAc,EAAA,EAAG;AAAA,EACzE;AACA,EAAA,MAAM,YAAY,MAAM,2BAAA,CAA4B,OAAA,EAAS,WAAA,EAAa,KAAK,IAAI,CAAA;AACnF,EAAA,MAAM,IAAA,GAAO,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,IAAA,EAAK,KAAM,MAAA,CAAO,QAAA,CAAS,IAAA,EAAM,CAAA;AAC3E,EAAA,OAAO;AAAA,IACL,gBAAgB,IAAA,CAAK,IAAA;AAAA,IACrB,cAAc,IAAA,CAAK,IAAA;AAAA,IACnB,YAAA,EAAc,MAAM,IAAA,IAAQ;AAAA,GAC9B;AACF;;;ACtFO,SAAS,uBAAA,CAAwB;AAAA,EACtC,OAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAA8B;AAC5B,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,QAAAA,CAAoB,EAAE,CAAA;AAC5D,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,QAAAA,CAAoB,EAAE,CAAA;AACxD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,QAAAA,CAAoB,EAAE,CAAA;AACxD,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAIA,SAAS,KAAK,CAAA;AAClE,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC9D,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,SAAS,KAAK,CAAA;AAE9D,EAAA,MAAM,kBAAA,GAAqBN,OAA2B,MAAS,CAAA;AAC/D,EAAA,MAAM,gBAAA,GAAmBA,OAA2B,MAAS,CAAA;AAC7D,EAAA,MAAM,iBAAA,GAAoBA,OAAO,KAAK,CAAA;AAEtC,EAAA,MAAM,WAAA,GAAcA,OAAO,eAAe,CAAA;AAC1C,EAAA,WAAA,CAAY,OAAA,GAAU,eAAA;AAEtB,EAAA,MAAM,YAAA,GAAeO,WAAAA,CAAY,CAAC,KAAA,KAAwC;AACxE,IAAA,WAAA,CAAY,QAAQ,KAAK,CAAA;AAAA,EAC3B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,WAAA,GAAA,CAAe,OAAA,CAAQ,WAAA,IAAe,IAAA,EAAM,WAAA,EAAY;AAC9D,EAAA,MAAM,SAAS,WAAA,KAAgB,IAAA;AAE/B,EAAA,MAAM,mBAAA,GAAsBC,QAAQ,MAAM;AACxC,IAAA,MAAM,EAAA,GAAK,QAAQ,IAAA,EAAK;AACxB,IAAA,IAAI,CAAC,IAAI,OAAO,IAAA;AAChB,IAAA,OAAO,EAAE,cAAc,EAAA,EAAG;AAAA,EAC5B,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAAP,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,mBAAA,EAAqB;AACnC,MAAA,cAAA,CAAe,EAAE,CAAA;AACjB,MAAA,qBAAA,CAAsB,KAAK,CAAA;AAC3B,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,GAAS,IAAA;AACb,IAAA,qBAAA,CAAsB,IAAI,CAAA;AAC1B,IAAA,4BAAA,CAA6B,mBAAmB,CAAA,CAC7C,IAAA,CAAK,CAAC,KAAA,KAAU;AACf,MAAA,IAAI,MAAA,iBAAuB,KAAK,CAAA;AAAA,IAClC,CAAC,CAAA,CACA,OAAA,CAAQ,MAAM;AACb,MAAA,IAAI,MAAA,wBAA8B,KAAK,CAAA;AAAA,IACzC,CAAC,CAAA;AAEH,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,GAAS,KAAA;AAAA,IACX,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,mBAAmB,CAAC,CAAA;AAEhC,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,OAAA,CAAQ,MAAK,EAAG;AAChC,IAAA,IAAI,QAAQ,cAAA,EAAgB;AAC5B,IAAA,IAAI,kBAAkB,OAAA,EAAS;AAC/B,IAAA,IAAI,CAAC,OAAA,CAAQ,cAAA,CAAe,IAAA,EAAK,EAAG;AACpC,IAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,IAAY,CAAC,QAAQ,IAAA,EAAM;AAExC,IAAA,iBAAA,CAAkB,OAAA,GAAU,IAAA;AAC5B,IAAA,IAAI,SAAA,GAAY,KAAA;AAEhB,IAAA,KAAK,2BAA2B,OAAA,EAAS;AAAA,MACvC,YAAY,OAAA,CAAQ,cAAA;AAAA,MACpB,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,UAAU,OAAA,CAAQ;AAAA,KACnB,CAAA,CAAE,IAAA,CAAK,CAAC,KAAA,KAAU;AACjB,MAAA,IAAI,SAAA,IAAa,CAAC,KAAA,EAAO;AACzB,MAAA,YAAA,CAAa;AAAA,QACX,gBAAgB,KAAA,CAAM,cAAA;AAAA,QACtB,cAAc,KAAA,CAAM,YAAA;AAAA,QACpB,cAAc,KAAA,CAAM;AAAA,OACrB,CAAA;AAAA,IACH,CAAC,CAAA;AAED,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AAAA,IACd,CAAA;AAAA,EACF,CAAA,EAAG;AAAA,IACD,OAAA,CAAQ,IAAA;AAAA,IACR,OAAA,CAAQ,cAAA;AAAA,IACR,OAAA,CAAQ,cAAA;AAAA,IACR,OAAA,CAAQ,QAAA;AAAA,IACR,MAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAAA,UAAU,MAAM;AACd,IAAA,MAAM,OAAO,OAAA,CAAQ,cAAA;AACrB,IAAA,MAAM,OAAO,kBAAA,CAAmB,OAAA;AAChC,IAAA,MAAM,iBAAA,GAAoB,IAAA,KAAS,MAAA,IAAa,IAAA,KAAS,IAAA;AACzD,IAAA,kBAAA,CAAmB,OAAA,GAAU,IAAA;AAE7B,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,mBAAA,EAAqB;AACnC,MAAA,YAAA,CAAa,EAAE,CAAA;AACf,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,YAAA,CAAa,EAAE,CAAA;AACf,QAAA,gBAAA,CAAiB,OAAA,GAAU,EAAA;AAAA,MAC7B;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,YAAA,CAAa,EAAE,CAAA;AACf,MAAA,YAAA,CAAa,EAAE,CAAA;AACf,MAAA,gBAAA,CAAiB,OAAA,GAAU,EAAA;AAC3B,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,iBAAA,EAAmB;AACrB,MAAA,YAAA,CAAa;AAAA,QACX,YAAA,EAAc,EAAA;AAAA,QACd,YAAA,EAAc,EAAA;AAAA,QACd,YAAA,EAAc,EAAA;AAAA,QACd,YAAA,EAAc,EAAA;AAAA,QACd,QAAA,EAAU,EAAA;AAAA,QACV,IAAA,EAAM,EAAA;AAAA,QACN,UAAA,EAAY;AAAA,OACb,CAAA;AACD,MAAA,YAAA,CAAa,EAAE,CAAA;AACf,MAAA,gBAAA,CAAiB,OAAA,GAAU,EAAA;AAAA,IAC7B;AAEA,IAAA,MAAM,QAAA,GAAW,YAAY,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,IAAI,CAAA,EAAG,IAAA,IAAQ,EAAA;AACnE,IAAA,IAAI,QAAA,IAAY,QAAA,KAAa,OAAA,CAAQ,cAAA,EAAgB;AACnD,MAAA,YAAA,CAAa,EAAE,cAAA,EAAgB,QAAA,EAAU,CAAA;AAAA,IAC3C;AAEA,IAAA,IAAI,MAAA,GAAS,IAAA;AACb,IAAA,mBAAA,CAAoB,IAAI,CAAA;AACxB,IAAA,2BAAA,CAA4B,qBAAqB,WAAA,EAAa,IAAI,CAAA,CAC/D,IAAA,CAAK,CAAC,KAAA,KAAU;AACf,MAAA,IAAI,MAAA,eAAqB,KAAK,CAAA;AAAA,IAChC,CAAC,CAAA,CACA,KAAA,CAAM,MAAM;AACX,MAAA,IAAI,MAAA,EAAQ,YAAA,CAAa,EAAE,CAAA;AAAA,IAC7B,CAAC,CAAA,CACA,OAAA,CAAQ,MAAM;AACb,MAAA,IAAI,MAAA,sBAA4B,KAAK,CAAA;AAAA,IACvC,CAAC,CAAA;AAEH,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,GAAS,KAAA;AAAA,IACX,CAAA;AAAA,EACF,CAAA,EAAG;AAAA,IACD,OAAA,CAAQ,cAAA;AAAA,IACR,OAAA,CAAQ,cAAA;AAAA,IACR,WAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAAA,UAAU,MAAM;AACd,IAAA,MAAM,OAAO,OAAA,CAAQ,YAAA;AACrB,IAAA,MAAM,OAAO,gBAAA,CAAiB,OAAA;AAC9B,IAAA,MAAM,eAAA,GAAkB,IAAA,KAAS,MAAA,IAAa,IAAA,KAAS,IAAA;AACvD,IAAA,gBAAA,CAAiB,OAAA,GAAU,IAAA;AAE3B,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,mBAAA,EAAqB;AACnC,MAAA,YAAA,CAAa,EAAE,CAAA;AACf,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,YAAA,CAAa,EAAE,CAAA;AACf,MAAA,gBAAA,CAAiB,OAAA,GAAU,EAAA;AAC3B,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,YAAA,CAAa;AAAA,QACX,YAAA,EAAc,EAAA;AAAA,QACd,YAAA,EAAc,EAAA;AAAA,QACd,IAAA,EAAM,EAAA;AAAA,QACN,UAAA,EAAY;AAAA,OACb,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,QAAA,GAAW,UAAU,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,IAAI,CAAA,EAAG,IAAA,IAAQ,EAAA;AACjE,IAAA,IAAI,QAAA,IAAY,QAAA,KAAa,OAAA,CAAQ,YAAA,EAAc;AACjD,MAAA,YAAA,CAAa,EAAE,YAAA,EAAc,QAAA,EAAU,QAAA,EAAU,UAAU,CAAA;AAAA,IAC7D;AAEA,IAAA,IAAI,MAAA,GAAS,IAAA;AACb,IAAA,mBAAA,CAAoB,IAAI,CAAA;AACxB,IAAA,2BAAA,CAA4B,qBAAqB,WAAA,EAAa,IAAI,CAAA,CAC/D,IAAA,CAAK,CAAC,KAAA,KAAU;AACf,MAAA,IAAI,MAAA,eAAqB,KAAK,CAAA;AAAA,IAChC,CAAC,CAAA,CACA,KAAA,CAAM,MAAM;AACX,MAAA,IAAI,MAAA,EAAQ,YAAA,CAAa,EAAE,CAAA;AAAA,IAC7B,CAAC,CAAA,CACA,OAAA,CAAQ,MAAM;AACb,MAAA,IAAI,MAAA,sBAA4B,KAAK,CAAA;AAAA,IACvC,CAAC,CAAA;AAEH,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,GAAS,KAAA;AAAA,IACX,CAAA;AAAA,EACF,CAAA,EAAG;AAAA,IACD,OAAA,CAAQ,YAAA;AAAA,IACR,OAAA,CAAQ,YAAA;AAAA,IACR,WAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,QAAQ,YAAA,EAAc;AAC3B,IAAA,MAAM,QAAA,GAAW,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,IAAA,KAAS,OAAA,CAAQ,YAAY,CAAA,EAAG,IAAA,IAAQ,EAAA;AACjF,IAAA,MAAM,QAAsC,EAAC;AAC7C,IAAA,IAAI,QAAA,IAAY,QAAA,KAAa,OAAA,CAAQ,YAAA,EAAc;AACjD,MAAA,KAAA,CAAM,YAAA,GAAe,QAAA;AACrB,MAAA,KAAA,CAAM,IAAA,GAAO,QAAA;AAAA,IACf;AACA,IAAA,IAAI,OAAA,CAAQ,UAAA,KAAe,OAAA,CAAQ,YAAA,EAAc;AAC/C,MAAA,KAAA,CAAM,aAAa,OAAA,CAAQ,YAAA;AAAA,IAC7B;AACA,IAAA,IAAI,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,CAAA,eAAgB,KAAK,CAAA;AAAA,EACvD,CAAA,EAAG;AAAA,IACD,OAAA,CAAQ,YAAA;AAAA,IACR,OAAA,CAAQ,YAAA;AAAA,IACR,OAAA,CAAQ,UAAA;AAAA,IACR,SAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,sBAAA,GAAyBM,WAAAA;AAAA,IAC7B,CAAC,IAAA,KAAiB;AAChB,MAAA,MAAM,IAAA,GAAO,YAAY,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,IAAI,CAAA,EAAG,IAAA,IAAQ,EAAA;AAC/D,MAAA,kBAAA,CAAmB,OAAA,GAAU,IAAA;AAC7B,MAAA,gBAAA,CAAiB,OAAA,GAAU,EAAA;AAC3B,MAAA,YAAA,CAAa;AAAA,QACX,cAAA,EAAgB,IAAA;AAAA,QAChB,cAAA,EAAgB,IAAA;AAAA,QAChB,YAAA,EAAc,EAAA;AAAA,QACd,YAAA,EAAc,EAAA;AAAA,QACd,YAAA,EAAc,EAAA;AAAA,QACd,YAAA,EAAc,EAAA;AAAA,QACd,QAAA,EAAU,EAAA;AAAA,QACV,IAAA,EAAM,EAAA;AAAA,QACN,UAAA,EAAY;AAAA,OACb,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,aAAa,YAAY;AAAA,GAC5B;AAEA,EAAA,MAAM,oBAAA,GAAuBA,WAAAA;AAAA,IAC3B,CAAC,IAAA,KAAiB;AAChB,MAAA,MAAM,IAAA,GAAO,UAAU,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,IAAI,CAAA,EAAG,IAAA,IAAQ,EAAA;AAC7D,MAAA,gBAAA,CAAiB,OAAA,GAAU,IAAA;AAC3B,MAAA,YAAA,CAAa;AAAA,QACX,YAAA,EAAc,IAAA;AAAA,QACd,YAAA,EAAc,IAAA;AAAA,QACd,QAAA,EAAU,IAAA;AAAA,QACV,YAAA,EAAc,EAAA;AAAA,QACd,YAAA,EAAc,EAAA;AAAA,QACd,IAAA,EAAM,EAAA;AAAA,QACN,UAAA,EAAY;AAAA,OACb,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,cAAc,SAAS;AAAA,GAC1B;AAEA,EAAA,MAAM,oBAAA,GAAuBA,WAAAA;AAAA,IAC3B,CAAC,IAAA,KAAiB;AAChB,MAAA,MAAM,IAAA,GAAO,UAAU,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,IAAI,CAAA,EAAG,IAAA,IAAQ,EAAA;AAC7D,MAAA,YAAA,CAAa;AAAA,QACX,YAAA,EAAc,IAAA;AAAA,QACd,YAAA,EAAc,IAAA;AAAA,QACd,IAAA,EAAM,IAAA;AAAA,QACN,UAAA,EAAY;AAAA,OACb,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,WAAW,YAAY;AAAA,GAC1B;AAEA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,kBAAA;AAAA,IACA,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,sBAAA;AAAA,IACA,oBAAA;AAAA,IACA;AAAA,GACF;AACF;ACzSO,SAAS,iBAAA,CAAkB;AAAA,EAChC,EAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA,GAAO,MAAA;AAAA,EACP,QAAA;AAAA,EACA;AACF,CAAA,EAA2B;AACzB,EAAA,uBACEE,IAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,CAAA,2BAAA,EAA8B,IAAA,GAAO,oCAAA,GAAuC,EAAE,CAAA,CAAA;AAAA,MAEzF,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,6BAAA,EACb,QAAA,EAAA;AAAA,UAAA,KAAA;AAAA,UACA,WAAW,aAAA,GAAgB;AAAA,SAAA,EAC9B,CAAA;AAAA,wBACAf,GAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,EAAA;AAAA,YACA,IAAA;AAAA,YACA,SAAA,EAAW,CAAA,2BAAA,EAA8B,KAAA,GAAQ,qCAAA,GAAwC,EAAE,CAAA,CAAA;AAAA,YAC3F,KAAA;AAAA,YACA,cAAA,EAAc,QAAQ,IAAA,GAAO,MAAA;AAAA,YAC7B,kBAAA,EAAkB,KAAA,GAAQ,CAAA,EAAG,EAAE,CAAA,MAAA,CAAA,GAAW,MAAA;AAAA,YAC1C,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,cAAA,YAAA,IAAe;AACf,cAAA,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YACzB;AAAA;AAAA,SACF;AAAA,QACC,KAAA,mBACCA,GAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAI,CAAA,EAAG,EAAE,CAAA,MAAA,CAAA,EAAU,SAAA,EAAU,0CAAA,EAA2C,IAAA,EAAK,OAAA,EAChF,iBACH,CAAA,GACE;AAAA;AAAA;AAAA,GACN;AAEJ;AAaO,SAAS,mBAAA,CAAoB;AAAA,EAClC,EAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAA6B;AAC3B,EAAA,uBACEe,IAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,6BAAA,EACf,QAAA,EAAA;AAAA,oBAAAf,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,6BAAA,EAA+B,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBACrDA,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,EAAA;AAAA,QACA,SAAA,EAAW,CAAA,2BAAA,EAA8B,KAAA,GAAQ,qCAAA,GAAwC,EAAE,CAAA,CAAA;AAAA,QAC3F,KAAA;AAAA,QACA,QAAA;AAAA,QACA,cAAA,EAAc,QAAQ,IAAA,GAAO,MAAA;AAAA,QAC7B,kBAAA,EAAkB,KAAA,GAAQ,CAAA,EAAG,EAAE,CAAA,MAAA,CAAA,GAAW,MAAA;AAAA,QAC1C,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,UAAA,YAAA,IAAe;AACf,UAAA,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,QACzB,CAAA;AAAA,QAEC;AAAA;AAAA,KACH;AAAA,IACC,KAAA,mBACCA,GAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAI,CAAA,EAAG,EAAE,CAAA,MAAA,CAAA,EAAU,SAAA,EAAU,0CAAA,EAA2C,IAAA,EAAK,OAAA,EAChF,iBACH,CAAA,GACE;AAAA,GAAA,EACN,CAAA;AAEJ;ACvFA,SAAS,SAAA,CACP,IACA,KAAA,EACA,KAAA,EACA,aACA,QAAA,EACA,OAAA,EACA,QAAA,EACA,KAAA,EACA,YAAA,EACA;AACA,EAAA,uBACEe,IAAAA;AAAA,IAAC,mBAAA;AAAA,IAAA;AAAA,MACC,EAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAA;AAAA,MACA,YAAA;AAAA,MACA,QAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAf,GAAAA,CAAC,QAAA,EAAA,EAAO,KAAA,EAAM,EAAA,EAAI,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,QAC7B,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAA,qBACZA,GAAAA,CAAC,QAAA,EAAA,EAAuB,KAAA,EAAO,IAAA,CAAK,IAAA,EACjC,QAAA,EAAA,IAAA,CAAK,IAAA,EAAA,EADK,IAAA,CAAK,IAElB,CACD;AAAA;AAAA;AAAA,GACH;AAEJ;AAEO,SAAS,oBAAA,CAAqB;AAAA,EACnC,OAAA;AAAA,EACA,OAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,EAA8B;AAC5B,EAAA,MAAM;AAAA,IACJ,MAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,kBAAA;AAAA,IACA,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,sBAAA;AAAA,IACA,oBAAA;AAAA,IACA;AAAA,MACE,uBAAA,CAAwB,EAAE,OAAA,EAAS,OAAA,EAAS,iBAAiB,CAAA;AAEjE,EAAA,uBACEe,IAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,+BAAA,EACjB,QAAA,EAAA;AAAA,oBAAAf,GAAAA,CAAC,QAAG,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,oBACZe,IAAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAG,aAAA;AAAA,QACH,KAAA,EAAM,gBAAA;AAAA,QACN,OAAO,OAAA,CAAQ,WAAA;AAAA,QACf,KAAA,EAAO,cAAc,aAAa,CAAA;AAAA,QAClC,YAAA,EAAc,MAAM,eAAA,CAAgB,aAAa,CAAA;AAAA,QACjD,UAAU,CAAC,CAAA,KAAM,gBAAgB,EAAE,WAAA,EAAa,GAAG,CAAA;AAAA,QAEnD,QAAA,EAAA;AAAA,0BAAAf,GAAAA,CAAC,QAAA,EAAA,EAAO,KAAA,EAAM,IAAA,EAAK,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,0BACvBA,GAAAA,CAAC,QAAA,EAAA,EAAO,KAAA,EAAM,MAAK,QAAA,EAAA,eAAA,EAAa,CAAA;AAAA,0BAChCA,GAAAA,CAAC,QAAA,EAAA,EAAO,KAAA,EAAM,MAAK,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,0BACzBA,GAAAA,CAAC,QAAA,EAAA,EAAO,KAAA,EAAM,MAAK,QAAA,EAAA,UAAA,EAAQ;AAAA;AAAA;AAAA,KAC7B;AAAA,oBACAe,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EACb,QAAA,EAAA;AAAA,sBAAAf,GAAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAG,WAAA;AAAA,UACH,KAAA,EAAM,YAAA;AAAA,UACN,IAAA,EAAI,IAAA;AAAA,UACJ,OAAO,OAAA,CAAQ,SAAA;AAAA,UACf,KAAA,EAAO,cAAc,WAAW,CAAA;AAAA,UAChC,YAAA,EAAc,MAAM,eAAA,CAAgB,WAAW,CAAA;AAAA,UAC/C,UAAU,CAAC,CAAA,KAAM,gBAAgB,EAAE,SAAA,EAAW,GAAG;AAAA;AAAA,OACnD;AAAA,sBACAA,GAAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAG,UAAA;AAAA,UACH,KAAA,EAAM,WAAA;AAAA,UACN,IAAA,EAAI,IAAA;AAAA,UACJ,OAAO,OAAA,CAAQ,QAAA;AAAA,UACf,KAAA,EAAO,cAAc,UAAU,CAAA;AAAA,UAC/B,YAAA,EAAc,MAAM,eAAA,CAAgB,UAAU,CAAA;AAAA,UAC9C,UAAU,CAAC,CAAA,KAAM,gBAAgB,EAAE,QAAA,EAAU,GAAG;AAAA;AAAA;AAClD,KAAA,EACF,CAAA;AAAA,oBACAA,GAAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAG,SAAA;AAAA,QACH,KAAA,EAAM,SAAA;AAAA,QACN,OAAO,OAAA,CAAQ,OAAA;AAAA,QACf,KAAA,EAAO,cAAc,SAAS,CAAA;AAAA,QAC9B,YAAA,EAAc,MAAM,eAAA,CAAgB,SAAS,CAAA;AAAA,QAC7C,UAAU,CAAC,CAAA,KAAM,gBAAgB,EAAE,OAAA,EAAS,GAAG;AAAA;AAAA,KACjD;AAAA,IAEC,MAAA,mBACCe,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wDAAA,EACZ,QAAA,EAAA;AAAA,MAAA,SAAA;AAAA,QACC,YAAA;AAAA,QACA,cAAA;AAAA,QACA,OAAA,CAAQ,cAAA;AAAA,QACR,qBAAqB,gBAAA,GAAc,YAAA;AAAA,QACnC,kBAAA,IAAsB,YAAY,MAAA,KAAW,CAAA;AAAA,QAC7C,WAAA;AAAA,QACA,sBAAA;AAAA,QACA,cAAc,YAAY,CAAA;AAAA,QAC1B,MAAM,gBAAgB,YAAY;AAAA,OACpC;AAAA,MACC,SAAA;AAAA,QACC,cAAA;AAAA,QACA,WAAA;AAAA,QACA,OAAA,CAAQ,YAAA;AAAA,QACR,CAAC,OAAA,CAAQ,cAAA,GACL,mBAAA,GACA,mBACE,gBAAA,GACA,YAAA;AAAA,QACN,CAAC,OAAA,CAAQ,cAAA,IAAkB,gBAAA,IAAoB,UAAU,MAAA,KAAW,CAAA;AAAA,QACpE,SAAA;AAAA,QACA,oBAAA;AAAA,QACA,cAAc,cAAc,CAAA;AAAA,QAC5B,MAAM,gBAAgB,cAAc;AAAA,OACtC;AAAA,MACC,SAAA;AAAA,QACC,UAAA;AAAA,QACA,UAAA;AAAA,QACA,OAAA,CAAQ,YAAA;AAAA,QACR,CAAC,OAAA,CAAQ,YAAA,GACL,kBAAA,GACA,mBACE,gBAAA,GACA,YAAA;AAAA,QACN,CAAC,OAAA,CAAQ,YAAA,IAAgB,gBAAA,IAAoB,UAAU,MAAA,KAAW,CAAA;AAAA,QAClE,SAAA;AAAA,QACA,oBAAA;AAAA,QACA,cAAc,UAAU,CAAA;AAAA,QACxB,MAAM,gBAAgB,UAAU;AAAA;AAClC,KAAA,EACF,CAAA,mBAEAA,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wDAAA,EACb,QAAA,EAAA;AAAA,sBAAAf,GAAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAG,MAAA;AAAA,UACH,KAAA,EAAM,MAAA;AAAA,UACN,OAAO,OAAA,CAAQ,IAAA;AAAA,UACf,KAAA,EAAO,cAAc,MAAM,CAAA;AAAA,UAC3B,YAAA,EAAc,MAAM,eAAA,CAAgB,MAAM,CAAA;AAAA,UAC1C,UAAU,CAAC,CAAA,KAAM,gBAAgB,EAAE,IAAA,EAAM,GAAG;AAAA;AAAA,OAC9C;AAAA,sBACAA,GAAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAG,iBAAA;AAAA,UACH,KAAA,EAAM,QAAA;AAAA,UACN,OAAO,OAAA,CAAQ,QAAA;AAAA,UACf,KAAA,EAAO,cAAc,iBAAiB,CAAA;AAAA,UACtC,YAAA,EAAc,MAAM,eAAA,CAAgB,iBAAiB,CAAA;AAAA,UACrD,UAAU,CAAC,CAAA,KAAM,gBAAgB,EAAE,QAAA,EAAU,GAAG;AAAA;AAAA;AAClD,KAAA,EACF,CAAA;AAAA,oBAGFA,GAAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAG,YAAA;AAAA,QACH,KAAA,EAAM,aAAA;AAAA,QACN,QAAA,EAAQ,IAAA;AAAA,QACR,OAAO,OAAA,CAAQ,UAAA;AAAA,QACf,UAAU,CAAC,CAAA,KAAM,gBAAgB,EAAE,UAAA,EAAY,GAAG;AAAA;AAAA,KACpD;AAAA,oBACAA,GAAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAG,OAAA;AAAA,QACH,KAAA,EAAM,OAAA;AAAA,QACN,IAAA,EAAK,KAAA;AAAA,QACL,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,KAAA,EAAO,cAAc,OAAO,CAAA;AAAA,QAC5B,YAAA,EAAc,MAAM,eAAA,CAAgB,OAAO,CAAA;AAAA,QAC3C,UAAU,CAAC,CAAA,KAAM,gBAAgB,EAAE,KAAA,EAAO,GAAG;AAAA;AAAA;AAC/C,GAAA,EACF,CAAA;AAEJ;;;AChMO,SAAS,uBACd,QAAA,EAC4B;AAC5B,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,EAAA,MAAM,MAAM,QAAA,CAAS,OAAA;AACrB,EAAA,IAAI,CAAC,GAAA,IAAO,OAAO,GAAA,KAAQ,UAAU,OAAO,IAAA;AAC5C,EAAA,OAAO,GAAA;AACT;AAMO,SAAS,2BACd,QAAA,EACoD;AACpD,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,EAAA,MAAM,OAAA,GAAU,uBAAuB,QAAQ,CAAA;AAC/C,EAAA,MAAM,QAAA,GAAW,OAAA,EAAS,MAAA,EAAQ,mBAAA,EAAqB,cAAA;AACvD,EAAA,MAAM,YAAA,GAAe,SAAS,MAAA,EAAQ,YAAA;AAEtC,EAAA,MAAM,SAAA,GAAA,CACH,OAAO,QAAA,KAAa,QAAA,GAAW,QAAA,GAAW,MAAA,KAC3C,QAAA,CAAS,eAAA,IACT,QAAA,CAAS,cAAA,IACT,QAAA,CAAS,SAAA,IACT,MAAA;AACF,EAAA,MAAM,YAAA,GAAA,CACH,OAAO,YAAA,KAAiB,QAAA,GAAW,eAAe,MAAA,KACnD,QAAA,CAAS,YAAA,IACT,QAAA,CAAS,kBAAA,IACT,MAAA;AAEF,EAAA,IAAI,CAAC,SAAA,IAAa,CAAC,YAAA,EAAc,OAAO,IAAA;AACxC,EAAA,OAAO,EAAE,WAAW,YAAA,EAAa;AACnC;AAEO,SAAS,oBAAoB,GAAA,EAAwC;AAC1E,EAAA,OAAA,CAAQ,GAAA,IAAO,EAAA,EAAI,IAAA,EAAK,CAAE,WAAA,EAAY;AACxC;AAEO,SAAS,sBAAA,GAAiC;AAC/C,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,EAAA;AAC1C,EAAA,OAAO,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,0BAAA,CAAA;AAClC;ACzCO,SAAS,qBAAA,CAAsB;AAAA,EACpC,GAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,uBACEA,GAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAM,GAAA;AAAA,MACN,SAAA,EAAU,mCAAA;AAAA,MACV,MAAA,EAAO,QAAA;AAAA,MACP,GAAA,EAAI,qBAAA;AAAA,MAEH,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ;AAEO,SAAS,YAAA,CAAa,EAAE,QAAA,EAAS,EAA4B;AAClE,EAAA,uBAAOA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAkC,QAAA,EAAS,CAAA;AACnE;AAEO,SAAS,aAAA,CAAc,EAAE,SAAA,EAAU,EAA6C;AACrF,EAAA,IAAI,CAAC,WAAW,OAAO,IAAA;AACvB,EAAA,uBACEe,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iEAAA,EAAkE,QAAA,EAAA;AAAA,IAAA,SAAA;AAAA,oBACtEf,GAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAU,WAAY,QAAA,EAAA,SAAA,EAAU;AAAA,GAAA,EAC/C,CAAA;AAEJ;ACXA,IAAM,wBAAA,GAA2BgB,cAAoD,IAAI,CAAA;AAElF,SAAS,yBAAA,CAA0B,EAAE,QAAA,EAAS,EAA4B;AAC/E,EAAA,MAAM,SAAA,GAAYV,OAA+B,IAAI,CAAA;AACrD,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIM,SAAS,KAAK,CAAA;AAE9D,EAAA,MAAM,cAAA,GAAiBC,WAAAA,CAAY,CAAC,EAAA,KAA+B;AACjE,IAAA,SAAA,CAAU,OAAA,GAAU,EAAA;AACpB,IAAA,mBAAA,CAAoB,MAAM,IAAI,CAAA;AAAA,EAChC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,aAAA,GAAgBA,YAAY,YAA8C;AAC9E,IAAA,MAAM,KAAK,SAAA,CAAU,OAAA;AACrB,IAAA,IAAI,CAAC,EAAA,EAAI;AACP,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,OAAA;AAAA,QACN,IAAA,EAAM,YAAA;AAAA,QACN,OAAA,EAAS,0FAAA;AAAA,QACT,QAAA,EAAU;AAAA,OACZ;AAAA,IACF;AACA,IAAA,OAAO,EAAA,EAAG;AAAA,EACZ,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,KAAA,GAAQC,OAAAA;AAAA,IACZ,OAAO,EAAE,cAAA,EAAgB,aAAA,EAAe,gBAAA,EAAiB,CAAA;AAAA,IACzD,CAAC,cAAA,EAAgB,aAAA,EAAe,gBAAgB;AAAA,GAClD;AAEA,EAAA,uBACEd,GAAAA,CAAC,wBAAA,CAAyB,QAAA,EAAzB,EAAkC,OAAe,QAAA,EAAS,CAAA;AAE/D;AAEO,SAAS,oBAAA,GAAsD;AACpE,EAAA,MAAM,GAAA,GAAMiB,WAAW,wBAAwB,CAAA;AAC/C,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,MAAM,oEAAoE,CAAA;AAAA,EACtF;AACA,EAAA,OAAO,GAAA;AACT;AAQO,SAAS,qBAAqB,MAAA,EAAyB;AAC5D,EAAA,MAAM,EAAE,cAAA,EAAe,GAAI,oBAAA,EAAqB;AAChD,EAAAV,UAAU,MAAM;AACd,IAAA,cAAA,CAAe,MAAM,CAAA;AACrB,IAAA,OAAO,MAAM,eAAe,IAAI,CAAA;AAAA,EAClC,CAAA,EAAG,CAAC,cAAA,EAAgB,MAAM,CAAC,CAAA;AAC7B;;;AC1EA,eAAsB,yBACpB,OAAA,EACkC;AAClC,EAAA,MAAM,GAAA,GAAM,QAAQ,MAAA,EAAQ,GAAA;AAC5B,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,CAAI,SAAS,CAAA,EAAG;AAC7C,IAAA,OAAO,EAAE,IAAA,EAAM,UAAA,EAAY,GAAA,EAAK,UAAU,aAAA,EAAc;AAAA,EAC1D;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,IAAA,EAAM,iBAAA;AAAA,IACN,OAAA,EAAS,mEAAA;AAAA,IACT,QAAA,EAAU;AAAA,GACZ;AACF;AAEA,eAAsB,oBACpB,OAAA,EACkC;AAClC,EAAA,MAAM,GAAA,GAAM,QAAQ,MAAA,EAAQ,GAAA;AAC5B,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,CAAI,SAAS,CAAA,EAAG;AAC7C,IAAA,OAAO,EAAE,IAAA,EAAM,UAAA,EAAY,GAAA,EAAK,UAAU,QAAA,EAAS;AAAA,EACrD;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,IAAA,EAAM,iBAAA;AAAA,IACN,OAAA,EAAS,oCAAA;AAAA,IACT,QAAA,EAAU;AAAA,GACZ;AACF;AAEA,eAAsB,mBACpB,OAAA,EACkC;AAClC,EAAA,MAAM,GAAA,GAAM,QAAQ,MAAA,EAAQ,GAAA;AAC5B,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,CAAI,SAAS,CAAA,EAAG;AAC7C,IAAA,OAAO,EAAE,IAAA,EAAM,UAAA,EAAY,GAAA,EAAK,UAAU,OAAA,EAAQ;AAAA,EACpD;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,IAAA,EAAM,gBAAA;AAAA,IACN,OAAA,EACE,0IAAA;AAAA,IACF,QAAA,EAAU;AAAA,GACZ;AACF;AAEA,eAAsB,kBACpB,OAAA,EACkC;AAClC,EAAA,MAAM,EAAA,GAAK,QAAQ,MAAA,EAAQ,MAAA;AAC3B,EAAA,IAAI,OAAO,EAAA,KAAO,QAAA,IAAY,EAAA,CAAG,SAAS,CAAA,EAAG;AAC3C,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,OAAA;AAAA,MACN,IAAA,EAAM,WAAA;AAAA,MACN,OAAA,EACE,4GAAA;AAAA,MACF,QAAA,EAAU;AAAA,KACZ;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,IAAA,EAAM,OAAA;AAAA,IACN,OAAA,EAAS,8BAAA;AAAA,IACT,QAAA,EAAU;AAAA,GACZ;AACF;AAEA,eAAsB,0BACpB,OAAA,EACkC;AAClC,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,SAAA,IAAa,OAAA,CAAQ,aAAA;AACzC,EAAA,IAAI,GAAA,EAAK;AACP,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,OAAA;AAAA,MACN,IAAA,EAAM,kBAAA;AAAA,MACN,OAAA,EACE,mHAAA;AAAA,MACF,QAAA,EAAU;AAAA,KACZ;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,IAAA,EAAM,cAAA;AAAA,IACN,OAAA,EAAS,kDAAA;AAAA,IACT,QAAA,EAAU;AAAA,GACZ;AACF;AAEA,eAAsB,qBACpB,OAAA,EACkC;AAClC,EAAA,MAAM,GAAA,GAAM,QAAQ,MAAA,EAAQ,GAAA;AAC5B,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,CAAI,SAAS,CAAA,EAAG;AAC7C,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,UAAA;AAAA,MACN,GAAA;AAAA,MACA,QAAA,EAAU,WAAA,CAAY,OAAA,CAAQ,UAAU,CAAA,IAAK;AAAA,KAC/C;AAAA,EACF;AAEA,EAAA,IAAI,OAAA,CAAQ,eAAe,QAAA,EAAU;AACnC,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,UAAA;AAAA,MACN,KAAK,sBAAA,EAAuB;AAAA,MAC5B,QAAA,EAAU,WAAA,CAAY,OAAA,CAAQ,UAAU,CAAA,IAAK;AAAA,KAC/C;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACJ,IAAA,EAAM,uBAAA;AAAA,IACN,OAAA,EACE,+FAAA;AAAA,IACF,QAAA,EAAU,WAAA,CAAY,OAAA,CAAQ,UAAU,CAAA,IAAK;AAAA,GAC/C;AACJ;AAEA,SAAS,YAAY,EAAA,EAAuC;AAC1D,EAAA,OAAA,CAAQ,EAAA,IAAM,EAAA,EAAI,IAAA,EAAK,CAAE,WAAA,EAAY;AACvC;AChHO,SAAS,oBAAA,CAAqB,EAAE,OAAA,EAAQ,EAAiC;AAC9E,EAAA,MAAM,MAAA,GAASM,YAAY,MAAM,kBAAA,CAAmB,OAAO,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AACvE,EAAA,oBAAA,CAAqB,MAAM,CAAA;AAE3B,EAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,MAAA,EAAQ,mBAAA,EAAqB,cAAA;AAChD,EAAA,MAAM,GAAA,GAAM,QAAQ,MAAA,EAAQ,GAAA;AAE5B,EAAA,uBACEE,KAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAf,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qBAAA,EAAsB,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,IACvC,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,CAAI,MAAA,GAAS,CAAA,mBACvCA,GAAAA,CAAC,qBAAA,EAAA,EAAsB,GAAA,EAAU,KAAA,EAAM,iBAAA,EAAkB,CAAA,GACvD,qBACFA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA,wFAAA,EAE7C,CAAA,mBAEAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA,uCAAA,EAAkC;AAAA,GAAA,EAEnF,CAAA;AAEJ;ACjBO,SAAS,sBAAA,CAAuB,EAAE,OAAA,EAAQ,EAAiC;AAChF,EAAA,MAAM,MAAA,GAASa,YAAY,MAAM,oBAAA,CAAqB,OAAO,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AACzE,EAAA,oBAAA,CAAqB,MAAM,CAAA;AAE3B,EAAA,MAAM,GAAA,GAAM,QAAQ,MAAA,EAAQ,GAAA;AAC5B,EAAA,MAAM,EAAA,GAAK,QAAQ,MAAA,EAAQ,MAAA;AAE3B,EAAA,uBACEE,KAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,gCAAA,EAAiC,QAAA,EAAA;AAAA,MAAA,OAAA;AAAA,MACtC,OAAA,CAAQ,UAAA,GAAa,CAAA,CAAA,EAAI,OAAA,CAAQ,UAAU,CAAA,CAAA,CAAA,GAAM;AAAA,KAAA,EACzD,CAAA;AAAA,IACC,QAAQ,MAAA,mBACPA,IAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,iEAAA,EAAkE,QAAA,EAAA;AAAA,MAAA,UAAA;AAAA,MACpE,OAAA,CAAQ;AAAA,KAAA,EACnB,CAAA,GACE,IAAA;AAAA,IACH,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,CAAI,MAAA,GAAS,CAAA,mBACvCf,GAAAA,CAAC,qBAAA,EAAA,EAAsB,GAAA,EAAU,KAAA,EAAM,yBAAA,EAAuB,CAAA,GAC5D,IAAA;AAAA,IACH,OAAO,OAAO,QAAA,IAAY,EAAA,CAAG,SAAS,CAAA,mBACrCA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCACb,QAAA,kBAAAA,GAAAA,CAAC,SAAI,GAAA,EAAK,EAAA,EAAI,KAAI,cAAA,EAAY,SAAA,EAAU,6BAAA,EAA8B,CAAA,EACxE,CAAA,GACE,IAAA;AAAA,IACH,OAAA,CAAQ,4BACPA,GAAAA,CAAC,OAAE,SAAA,EAAU,+FAAA,EACV,QAAA,EAAA,OAAA,CAAQ,SAAA,EACX,CAAA,GACE,IAAA;AAAA,oBACJA,GAAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAW,OAAA,CAAQ,QAAQ,SAAA,EAAW,CAAA;AAAA,oBAErDe,IAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,kCAAA,EACjB,QAAA,EAAA;AAAA,sBAAAf,GAAAA,CAAC,aAAQ,QAAA,EAAA,oBAAA,EAAe,CAAA;AAAA,sBACxBA,IAAC,KAAA,EAAA,EAAK,QAAA,EAAA,IAAA,CAAK,UAAU,OAAA,EAAS,IAAA,EAAM,CAAC,CAAA,EAAE;AAAA,KAAA,EACzC;AAAA,GAAA,EACF,CAAA;AAEJ;AC1CO,SAAS,0BAAA,CAA2B,EAAE,OAAA,EAAQ,EAAiC;AACpF,EAAA,MAAM,MAAA,GAASa,YAAY,MAAM,wBAAA,CAAyB,OAAO,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAC7E,EAAA,oBAAA,CAAqB,MAAM,CAAA;AAE3B,EAAA,MAAM,GAAA,GAAM,QAAQ,MAAA,EAAQ,GAAA;AAC5B,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,MAAA,EAAQ,mBAAA,EAAqB,YAAA;AAElD,EAAA,uBACEE,KAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAf,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,gCAAA,EAAiC,QAAA,EAAA,cAAA,EAAY,CAAA;AAAA,IACzD,IAAA,mBACCe,IAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,iEAAA,EAAkE,QAAA,EAAA;AAAA,MAAA,QAAA;AAAA,MACtE;AAAA,KAAA,EACT,CAAA,GACE,IAAA;AAAA,IACH,OAAO,GAAA,KAAQ,QAAA,IAAY,IAAI,MAAA,GAAS,CAAA,mBACvCf,GAAAA,CAAC,qBAAA,EAAA,EAAsB,GAAA,EAAU,KAAA,EAAM,0BAAyB,CAAA,mBAEhEA,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAgC,QAAA,EAAA,iEAAA,EAE7C,CAAA;AAAA,IAED,QAAQ,SAAA,mBACPe,IAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,+FAAA,EAAgG,QAAA,EAAA;AAAA,MAAA,QAAA;AAAA,MACpG,OAAA,CAAQ;AAAA,KAAA,EACjB,CAAA,GACE;AAAA,GAAA,EACN,CAAA;AAEJ;AC/BO,SAAS,2BAAA,CAA4B,EAAE,OAAA,EAAQ,EAAiC;AACrF,EAAA,MAAM,MAAA,GAASF,YAAY,MAAM,yBAAA,CAA0B,OAAO,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAC9E,EAAA,oBAAA,CAAqB,MAAM,CAAA;AAE3B,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,SAAA,IAAa,OAAA,CAAQ,aAAA;AAE/C,EAAA,uBACEE,KAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAf,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qBAAA,EAAsB,QAAA,EAAA,kBAAA,EAAgB,CAAA;AAAA,oBACnDA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAgC,QAAA,EAAA,8EAAA,EAE7C,CAAA;AAAA,IACC,4BACCA,GAAAA,CAAC,SAAI,SAAA,EAAU,2DAAA,EAA6D,qBAAU,CAAA,GACpF,IAAA;AAAA,IACH,QAAQ,MAAA,IAAU,IAAA,mBACjBe,IAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,SAAA,EAAU,QAAA,EAAA;AAAA,MAAA,iBAAA;AAAA,sBACNf,GAAAA,CAAC,QAAA,EAAA,EAAQ,QAAA,EAAA,OAAA,CAAQ,MAAA,EAAO;AAAA,KAAA,EACzC,CAAA,GACE,IAAA;AAAA,oBACJA,GAAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAW,OAAA,CAAQ,QAAQ,SAAA,EAAW;AAAA,GAAA,EACvD,CAAA;AAEJ;ACxBO,SAAS,qBAAA,CAAsB,EAAE,OAAA,EAAQ,EAAiC;AAC/E,EAAA,MAAM,MAAA,GAASa,YAAY,MAAM,mBAAA,CAAoB,OAAO,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AACxE,EAAA,oBAAA,CAAqB,MAAM,CAAA;AAE3B,EAAA,MAAM,GAAA,GAAM,QAAQ,MAAA,EAAQ,GAAA;AAE5B,EAAA,uBACEE,KAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAf,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qBAAA,EAAsB,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,IACxC,OAAO,GAAA,KAAQ,QAAA,IAAY,IAAI,MAAA,GAAS,CAAA,mBACvCA,GAAAA,CAAC,qBAAA,EAAA,EAAsB,GAAA,EAAU,KAAA,EAAM,sBAAqB,CAAA,mBAE5DA,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAgC,QAAA,EAAA,6DAAA,EAE7C;AAAA,GAAA,EAEJ,CAAA;AAEJ;ACEA,eAAe,iCAAiC,MAAA,EAIX;AACnC,EAAA,MAAM,EAAE,MAAA,EAAQ,QAAA,EAAU,SAAA,EAAU,GAAI,MAAA;AAExC,EAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,cAAA,CAAe;AAAA,IACzC,QAAA;AAAA,IACA,aAAA,EAAe;AAAA,MACb,UAAA,EAAY,SAAA;AAAA,MACZ,qBAAqB;AAAC,KACxB;AAAA,IACA,QAAA,EAAU;AAAA,GACX,CAAA;AAED,EAAA,IAAI,OAAO,KAAA,EAAO;AAChB,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,OAAA;AAAA,MACN,IAAA,EAAM,MAAA,CAAO,KAAA,CAAM,IAAA,IAAQ,cAAA;AAAA,MAC3B,OAAA,EAAS,MAAA,CAAO,KAAA,CAAM,OAAA,IAAW,2BAAA;AAAA,MACjC,QAAA,EAAU,QAAA;AAAA,MACV,KAAK,MAAA,CAAO;AAAA,KACd;AAAA,EACF;AAEA,EAAA,MAAM,gBAAgB,MAAA,CAAO,aAAA;AAC7B,EAAA,IAAI,aAAA,EAAe,WAAW,WAAA,EAAa;AACzC,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,SAAA;AAAA,MACN,eAAe,aAAA,CAAc,EAAA;AAAA,MAC7B,QAAA,EAAU,QAAA;AAAA,MACV,GAAA,EAAK;AAAA,KACP;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,OAAA,EAAS,4BAAA;AAAA,IACT,QAAA,EAAU,QAAA;AAAA,IACV,GAAA,EAAK;AAAA,GACP;AACF;AAGO,SAAS,qBAAA,CAAsB,EAAE,QAAA,EAAS,EAAiC;AAChF,EAAA,MAAM,cAAA,GAAiBM,OAA8B,IAAI,CAAA;AACzD,EAAA,MAAM,uBAAA,GAA0BA,OAAuC,IAAI,CAAA;AAC3E,EAAA,MAAM,SAAA,GAAYA,OAA8B,IAAI,CAAA;AACpD,EAAA,MAAM,WAAA,GAAcA,OAAgB,IAAI,CAAA;AAExC,EAAA,MAAM,EAAE,cAAA,EAAe,GAAI,oBAAA,EAAqB;AAChD,EAAA,MAAM,YAAA,GAAe,2BAA2B,QAAQ,CAAA;AAExD,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,uBAAA,CAAwB,SAAS,OAAA,IAAU;AAC3C,MAAA,uBAAA,CAAwB,OAAA,GAAU,IAAA;AAClC,MAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AACpB,MAAA,WAAA,CAAY,OAAA,GAAU,IAAA;AACtB,MAAA,cAAA,CAAe,IAAI,CAAA;AACnB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAA,GAAY,KAAA;AAEhB,IAAA,MAAM,qBAAqB,MACzB,IAAI,OAAA,CAAc,CAAC,SAAS,MAAA,KAAW;AACrC,MAAA,MAAM,cAAe,UAAA,CAA+C,MAAA;AACpE,MAAA,IAAI,WAAA,SAAoB,OAAA,EAAQ;AAChC,MAAA,MAAM,QAAA,GAAW,QAAA,CAAS,aAAA,CAAc,yCAAyC,CAAA;AACjF,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,QAAA,CAAS,gBAAA,CAAiB,QAAQ,MAAM,OAAA,IAAW,EAAE,IAAA,EAAM,MAAM,CAAA;AACjE,QAAA,QAAA,CAAS,gBAAA;AAAA,UACP,OAAA;AAAA,UACA,MAAM,MAAA,CAAO,IAAI,KAAA,CAAM,8BAA8B,CAAC,CAAA;AAAA,UACtD,EAAE,MAAM,IAAA;AAAK,SACf;AACA,QAAA;AAAA,MACF;AACA,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC9C,MAAA,MAAA,CAAO,GAAA,GAAM,2BAAA;AACb,MAAA,MAAA,CAAO,KAAA,GAAQ,IAAA;AACf,MAAA,MAAA,CAAO,gBAAA,CAAiB,QAAQ,MAAM,OAAA,IAAW,EAAE,IAAA,EAAM,MAAM,CAAA;AAC/D,MAAA,MAAA,CAAO,gBAAA;AAAA,QACL,OAAA;AAAA,QACA,MAAM,MAAA,CAAO,IAAI,KAAA,CAAM,8BAA8B,CAAC,CAAA;AAAA,QACtD,EAAE,MAAM,IAAA;AAAK,OACf;AACA,MAAA,QAAA,CAAS,IAAA,CAAK,YAAY,MAAM,CAAA;AAAA,IAClC,CAAC,CAAA;AAEH,IAAA,MAAM,4BAA4B,YAAY;AAC5C,MAAA,MAAM,kBAAA,EAAmB;AACzB,MAAA,IAAI,SAAA,EAAW;AAEf,MAAA,MAAM,aAAc,UAAA,CAA6D,MAAA;AACjF,MAAA,IAAI,CAAC,UAAA,EAAY,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAC1D,MAAA,MAAM,QAAA,GAAW,UAAA,CAAW,YAAA,CAAa,SAAS,CAAA;AAKlD,MAAA,SAAA,CAAU,OAAA,GAAU,QAAA;AACpB,MAAA,MAAM,WAAW,QAAA,CAAS,QAAA,CAAS,EAAE,YAAA,EAAc,YAAA,CAAa,cAAc,CAAA;AAE9E,MAAA,uBAAA,CAAwB,SAAS,OAAA,IAAU;AAC3C,MAAA,uBAAA,CAAwB,OAAA,GAAU,IAAA;AAElC,MAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,MAAA,CAAO,SAAS,CAAA;AAChD,MAAA,MAAM,YAAY,cAAA,CAAe,OAAA;AACjC,MAAA,IAAI,CAAC,SAAA,EAAW;AAChB,MAAA,cAAA,CAAe,MAAM,SAAS,CAAA;AAC9B,MAAA,uBAAA,CAAwB,OAAA,GAAU,cAAA;AAElC,MAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AAEtB,MAAA,cAAA,CAAe,YAAY;AACzB,QAAA,MAAM,IAAI,SAAA,CAAU,OAAA;AACpB,QAAA,MAAM,KAAK,WAAA,CAAY,OAAA;AACvB,QAAA,IAAI,CAAC,CAAA,IAAK,CAAC,EAAA,EAAI;AACb,UAAA,OAAO;AAAA,YACL,IAAA,EAAM,OAAA;AAAA,YACN,IAAA,EAAM,kBAAA;AAAA,YACN,OAAA,EAAS,qEAAA;AAAA,YACT,QAAA,EAAU;AAAA,WACZ;AAAA,QACF;AACA,QAAA,MAAM,YAAY,sBAAA,EAAuB;AACzC,QAAA,OAAO,gCAAA,CAAiC;AAAA,UACtC,MAAA,EAAQ,CAAA;AAAA,UACR,QAAA,EAAU,EAAA;AAAA,UACV;AAAA,SACD,CAAA;AAAA,MACH,CAAC,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,yBAAA,EAA0B,CAAE,MAAM,MAAM;AACtC,MAAA,cAAA,CAAe,IAAI,CAAA;AAAA,IACrB,CAAC,CAAA;AAED,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AACZ,MAAA,uBAAA,CAAwB,SAAS,OAAA,IAAU;AAC3C,MAAA,uBAAA,CAAwB,OAAA,GAAU,IAAA;AAClC,MAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AACpB,MAAA,WAAA,CAAY,OAAA,GAAU,IAAA;AACtB,MAAA,cAAA,CAAe,IAAI,CAAA;AAAA,IACrB,CAAA;AAAA,EACF,GAAG,CAAC,YAAA,EAAc,WAAW,YAAA,EAAc,YAAA,EAAc,cAAc,CAAC,CAAA;AAExE,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,uBACEP,IAAC,YAAA,EAAA,EACC,QAAA,kBAAAA,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA,mFAAA,EAE7C,CAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEA,IAAC,YAAA,EAAA,EACC,QAAA,kBAAAA,IAAC,KAAA,EAAA,EAAI,GAAA,EAAK,gBAAgB,CAAA,EAC5B,CAAA;AAEJ;AC3LO,SAAS,mBAAA,CAAoB,EAAE,OAAA,EAAQ,EAAiC;AAC7E,EAAA,MAAM,MAAA,GAASa,YAAY,MAAM,iBAAA,CAAkB,OAAO,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AACtE,EAAA,oBAAA,CAAqB,MAAM,CAAA;AAE3B,EAAA,MAAM,EAAA,GAAK,QAAQ,MAAA,EAAQ,MAAA;AAE3B,EAAA,uBACEE,KAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAf,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qBAAA,EAAsB,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,oBACvCA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAgC,QAAA,EAAA,iEAAA,EAE7C,CAAA;AAAA,IACC,OAAO,EAAA,KAAO,QAAA,IAAY,EAAA,CAAG,MAAA,GAAS,CAAA,mBACrCA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EACb,QAAA,kBAAAA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,EAAA;AAAA,QACL,GAAA,EAAI,mBAAA;AAAA,QACJ,SAAA,EAAU;AAAA;AAAA,OAEd,CAAA,mBAEAA,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,4BAA2B,QAAA,EAAA,sCAAA,EAAiC,CAAA;AAAA,IAE1E,QAAQ,MAAA,IAAU,IAAA,mBACjBe,IAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,SAAA,EAAU,QAAA,EAAA;AAAA,MAAA,SAAA;AAAA,sBACdf,GAAAA,CAAC,QAAA,EAAA,EAAQ,QAAA,EAAA,OAAA,CAAQ,MAAA,EAAO;AAAA,KAAA,EACjC,CAAA,GACE,IAAA;AAAA,oBACJA,GAAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAW,OAAA,CAAQ,QAAQ,SAAA,EAAW;AAAA,GAAA,EACvD,CAAA;AAEJ;ACvBA,IAAM,QAAA,GAA8C;AAAA,EAClD,MAAA,EAAQ,qBAAA;AAAA,EACR,WAAA,EAAa,0BAAA;AAAA,EACb,YAAA,EAAc,0BAAA;AAAA,EACd,MAAA,EAAQ,qBAAA;AAAA,EACR,KAAA,EAAO,oBAAA;AAAA,EACP,IAAA,EAAM,mBAAA;AAAA,EACN,YAAA,EAAc,2BAAA;AAAA,EACd,aAAA,EAAe;AACjB,CAAA;AAMO,SAAS,qBAAA,CAAsB,EAAE,QAAA,EAAS,EAA+B;AAC9E,EAAA,MAAM,OAAA,GAAUc,QAAQ,MAAM,sBAAA,CAAuB,QAAQ,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAE1E,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,GAAA,GAAM,mBAAA,CAAoB,OAAA,CAAQ,UAAU,CAAA;AAClD,EAAA,MAAM,QAAA,GAAW,GAAA,GAAM,QAAA,CAAS,GAAG,CAAA,GAAI,MAAA;AAEvC,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,uBAAOd,GAAAA,CAAC,QAAA,EAAA,EAAS,OAAA,EAAkB,QAAA,EAAoB,CAAA;AAAA,EACzD;AAEA,EAAA,uBAAOA,GAAAA,CAAC,sBAAA,EAAA,EAAuB,OAAA,EAAkB,QAAA,EAAoB,CAAA;AACvE;;;AC5CA,IAAM,uCAAuB,IAAI,GAAA,CAAI,CAAC,QAAA,EAAU,aAAA,EAAe,cAAc,CAAC,CAAA;AAE9E,SAAS,qBAAqB,GAAA,EAAqB;AACjD,EAAA,OAAO,IAAI,IAAA,EAAK,CAAE,aAAY,CAAE,OAAA,CAAQ,WAAW,GAAG,CAAA;AACxD;AAGO,SAAS,6BAA6B,MAAA,EAAqC;AAChF,EAAA,IAAI,MAAA,CAAO,UAAU,OAAO,KAAA;AAE5B,EAAA,MAAM,IAAA,GAAO,CAAC,MAAA,CAAO,kBAAA,EAAoB,OAAO,IAAA,EAAM,MAAA,CAAO,IAAI,CAAA,CAAE,MAAA;AAAA,IACjE;AAAA,GACF;AAEA,EAAA,OAAO,IAAA,CAAK,IAAA,CAAK,CAAC,GAAA,KAAQ;AACxB,IAAA,MAAM,UAAA,GAAa,qBAAqB,GAAG,CAAA;AAC3C,IAAA,OACE,oBAAA,CAAqB,GAAA,CAAI,UAAU,CAAA,IACnC,UAAA,CAAW,SAAS,QAAQ,CAAA,IAC5B,UAAA,CAAW,QAAA,CAAS,SAAS,CAAA;AAAA,EAEjC,CAAC,CAAA;AACH;;;ACaO,SAAS,kBAAA,CAAmB;AAAA,EACjC,cAAA;AAAA,EACA,mBAAA;AAAA,EACA,mBAAA;AAAA,EACA,wBAAA;AAAA,EACA,2BAAA;AAAA,EACA,gBAAA;AAAA,EACA,kBAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA,yBAAA;AAAA,EACA,uBAAA;AAAA,EACA;AACF,CAAA,EAA2B;AACzB,EAAA,MAAM,EAAE,aAAA,EAAe,gBAAA,EAAiB,GAAI,oBAAA,EAAqB;AAEjE,EAAA,MAAM,aAAA,GAAgBc,OAAAA;AAAA,IACpB,MACE,cAAA,CACG,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,CAAA,CACxB,KAAA,GACA,IAAA,CAAK,CAAC,GAAG,CAAA,KAAA,CAAO,CAAA,CAAE,aAAa,CAAA,KAAM,CAAA,CAAE,aAAa,CAAA,CAAE,CAAA;AAAA,IAC3D,CAAC,cAAc;AAAA,GACjB;AAEA,EAAA,MAAM,cAAA,GAAiBA,OAAAA;AAAA,IACrB,MAAM,cAAc,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,mBAAmB,CAAA,IAAK,IAAA;AAAA,IACnE,CAAC,eAAe,mBAAmB;AAAA,GACrC;AAEA,EAAA,MAAM,kBAAA,GAAqB,OAAA;AAAA,IACzB,cAAA,IAAkB,6BAA6B,cAAc;AAAA,GAC/D;AAEA,EAAA,MAAM,oBACJ,kBAAA,IAAsB,kBAAA,KAAuB,cAAA,EAAgB,IAAA,GACxD,oBAAoB,IAAA,GACrB,IAAA;AAEN,EAAA,MAAM,wBACJ,CAAC,CAAC,kBAAA,IACF,kBAAA,KAAuB,gBAAgB,IAAA,IACvC,eAAA;AAEF,EAAA,MAAM,mBAAA,GACJ,kBAAA,IAAsB,kBAAA,KAAuB,cAAA,EAAgB,OACzD,aAAA,GACA,IAAA;AAEN,EAAA,MAAM,oBAAA,GAAuBA,QAAQ,MAAM;AACzC,IAAA,IAAI,CAAC,cAAA,EAAgB,QAAA,EAAU,OAAO,IAAA;AAEtC,IAAA,MAAM,MAAA,GAAS,sBAAA,CAAuB,iBAAiB,CAAA,EAAG,MAAA,IAAU,IAAA;AACpE,IAAA,MAAM,mBAAA,GAAsB,MAAA,EAAQ,mBAAA,IAAuB,EAAC;AAC5D,IAAA,MAAM,WAAA,GACJ,cAAA,CAAe,WAAA,IAAe,mBAAA,CAAoB,WAAA,IAAe,IAAA;AACnE,IAAA,MAAM,aAAA,GACJ,cAAA,CAAe,aAAA,IAAiB,mBAAA,CAAoB,aAAA,IAAiB,IAAA;AACvE,IAAA,MAAM,aACJ,MAAA,EAAQ,MAAA,IACR,cAAA,CAAe,UAAA,IACf,oBAAoB,UAAA,IACpB,IAAA;AAEF,IAAA,IAAI,CAAC,WAAA,IAAe,CAAC,aAAA,IAAiB,CAAC,YAAY,OAAO,IAAA;AAE1D,IAAA,OAAO,EAAE,WAAA,EAAa,aAAA,EAAe,UAAA,EAAW;AAAA,EAClD,CAAA,EAAG,CAAC,cAAA,EAAgB,iBAAiB,CAAC,CAAA;AAEtC,EAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,cAAA,EAAgB,QAAA,IAAY,oBAAoB,CAAA;AAE7E,EAAA,MAAM,iBAAA,GACJ,kBAAA,IACA,CAAC,CAAC,cAAA,IACF,CAAC,CAAC,iBAAA,IACF,CAAC,qBAAA,IACD,CAAC,mBAAA;AAEH,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIF,SAAsB,IAAI,CAAA;AAChE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAChE,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAAwB,IAAI,CAAA;AACpE,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAIA,SAAS,KAAK,CAAA;AAElE,EAAA,MAAM,iBAAA,GAAoBE,OAAAA;AAAA,IACxB,MAAO,WAAA,GAAc,GAAA,CAAI,eAAA,CAAgB,WAAW,CAAA,GAAI,IAAA;AAAA,IACxD,CAAC,WAAW;AAAA,GACd;AAEA,EAAAP,UAAU,MAAM;AACd,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,iBAAA,EAAmB,GAAA,CAAI,eAAA,CAAgB,iBAAiB,CAAA;AAAA,IAC9D,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,iBAAiB,CAAC,CAAA;AAEtB,EAAAA,UAAU,MAAM;AACd,IAAA,cAAA,CAAe,IAAI,CAAA;AACnB,IAAA,aAAA,CAAc,IAAI,CAAA;AAClB,IAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,EACtB,CAAA,EAAG,CAAC,cAAA,EAAgB,IAAI,CAAC,CAAA;AAEzB,EAAA,MAAM,aAAA,GAAgBM,WAAAA;AAAA,IACpB,CAAC,IAAA,KAAiB;AAChB,MAAA,eAAA,GAAkB,yBAAyB,CAAA;AAC3C,MAAA,mBAAA,CAAoB,IAAI,CAAA;AAAA,IAC1B,CAAA;AAAA,IACA,CAAC,iBAAiB,mBAAmB;AAAA,GACvC;AAEA,EAAA,MAAM,mBAAA,GAAsBA,WAAAA,CAAY,CAAC,KAAA,KAAyC;AAChF,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA,IAAK,IAAA;AACxC,IAAA,aAAA,CAAc,IAAI,CAAA;AAClB,IAAA,eAAA,CAAgB,IAAI,CAAA;AAEpB,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,cAAA,CAAe,IAAI,CAAA;AACnB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG;AACnC,MAAA,cAAA,CAAe,IAAI,CAAA;AACnB,MAAA,eAAA,CAAgB,qCAAqC,CAAA;AACrD,MAAA;AAAA,IACF;AAEA,IAAA,cAAA,CAAe,IAAI,CAAA;AAAA,EACrB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,sBAAA,GAAyBA,YAAY,YAAY;AACrD,IAAA,IAAI,CAAC,iBAAA,EAAmB;AAExB,IAAA,qBAAA,CAAsB,IAAI,CAAA;AAC1B,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,aAAA,EAAc;AAEnC,MAAA,IAAI,MAAA,CAAO,SAAS,UAAA,EAAY;AAC9B,QAAA,yBAAA,GAA4B,MAAM,CAAA;AAClC,QAAA;AAAA,MACF;AACA,MAAA,IAAI,MAAA,CAAO,SAAS,SAAA,EAAW;AAC7B,QAAA,2BAAA,CAA4B,IAAI,CAAA;AAChC,QAAA;AAAA,MACF;AACA,MAAA,yBAAA,GAA4B,MAAM,CAAA;AAAA,IACpC,CAAA,CAAA,MAAQ;AACN,MAAA,eAAA,CAAgB,sDAAmD,CAAA;AAAA,IACrE,CAAA,SAAE;AACA,MAAA,qBAAA,CAAsB,KAAK,CAAA;AAAA,IAC7B;AAAA,EACF,CAAA,EAAG;AAAA,IACD,yBAAA;AAAA,IACA,2BAAA;AAAA,IACA,iBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,mBAAA,GAAsBA,YAAY,YAA+C;AACrF,IAAA,IAAI,CAAC,cAAA,EAAgB,OAAO,EAAE,IAAI,KAAA,EAAM;AAExC,IAAA,eAAA,CAAgB,IAAI,CAAA;AAEpB,IAAA,IAAI;AACF,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,IAAI,cAAA,GAAiB,UAAA;AAErB,QAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,UAAA,IAAI,CAAC,WAAA,EAAa;AAChB,YAAA,eAAA,CAAgB,iDAAiD,CAAA;AACjE,YAAA,OAAO,EAAE,IAAI,KAAA,EAAM;AAAA,UACrB;AACA,UAAA,MAAM,QAAA,GAAW,MAAM,eAAA,CAAgB,WAAW,CAAA;AAClD,UAAA,cAAA,GAAiB,QAAA,CAAS,GAAA;AAC1B,UAAA,aAAA,CAAc,cAAc,CAAA;AAAA,QAC9B;AAEA,QAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,UAAA,EAAY,kBAAkB,KAAA,CAAA,EAAU;AAAA,MAC7D;AAEA,MAAA,IAAI,kBAAA,EAAoB;AACtB,QAAA,IAAI,CAAC,wBAAA,EAA0B;AAC7B,UAAA,eAAA;AAAA,YACE;AAAA,WACF;AACA,UAAA,OAAO,EAAE,IAAI,KAAA,EAAM;AAAA,QACrB;AACA,QAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,YAAA,EAAc,IAAA,EAAK;AAAA,MACxC;AAEA,MAAA,OAAO,EAAE,IAAI,IAAA,EAAK;AAAA,IACpB,CAAA,CAAA,MAAQ;AACN,MAAA,eAAA,CAAgB,sDAAmD,CAAA;AACnE,MAAA,OAAO,EAAE,IAAI,KAAA,EAAM;AAAA,IACrB;AAAA,EACF,CAAA,EAAG;AAAA,IACD,YAAA;AAAA,IACA,eAAA;AAAA,IACA,wBAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,eAAA,GAAkBC,QAAQ,MAAM;AACpC,IAAA,IAAI,CAAC,gBAAgB,OAAO,KAAA;AAC5B,IAAA,IAAI,qBAAA,IAAyB,qBAAqB,OAAO,KAAA;AAEzD,IAAA,IAAI,kBAAA,EAAoB;AACtB,MAAA,OAAO,wBAAA;AAAA,IACT;AAEA,IAAA,OAAA,CACG,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,CAAC,UAAA,MACpC,CAAC,iBAAA,IAAqB,gBAAA,CAAA;AAAA,EAE3B,CAAA,EAAG;AAAA,IACD,mBAAA;AAAA,IACA,qBAAA;AAAA,IACA,gBAAA;AAAA,IACA,YAAA;AAAA,IACA,wBAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,kBAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAAP,UAAU,MAAM;AACd,IAAA,uBAAA,GAA0B,eAAe,CAAA;AAAA,EAC3C,CAAA,EAAG,CAAC,eAAA,EAAiB,uBAAuB,CAAC,CAAA;AAE7C,EAAA,MAAM,oBAAA,GAAuBO,QAAQ,MAAM;AACzC,IAAA,IAAI,CAAC,gBAAgB,OAAO,gBAAA;AAC5B,IAAA,MAAM,GAAA,GAAA,CACJ,cAAA,CAAe,kBAAA,IACf,cAAA,CAAe,IAAA,IACf,IAEC,WAAA,EAAY,CACZ,OAAA,CAAQ,SAAA,EAAW,GAAG,CAAA;AACzB,IAAA,IAAI,GAAA,CAAI,QAAA,CAAS,SAAS,CAAA,EAAG,OAAO,mBAAA;AACpC,IAAA,IAAI,GAAA,CAAI,QAAA,CAAS,QAAQ,CAAA,EAAG,OAAO,4BAAA;AACnC,IAAA,OAAO,gBAAA;AAAA,EACT,CAAA,EAAG,CAAC,cAAc,CAAC,CAAA;AAEnB,EAAA,OAAO;AAAA,IACL,aAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAA;AAAA,IACA,qBAAA;AAAA,IACA,mBAAA;AAAA,IACA,oBAAA;AAAA,IACA,YAAA;AAAA,IACA,kBAAA;AAAA,IACA,iBAAA;AAAA,IACA,wBAAA;AAAA,IACA,kBAAA;AAAA,IACA,oBAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,iBAAA;AAAA,IACA,aAAA;AAAA,IACA,mBAAA;AAAA,IACA,sBAAA;AAAA,IACA,mBAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACF;AACF;AC3QA,SAAS,2BAAA,CAA4B;AAAA,EACnC,UAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAe;AACb,EAAA,MAAM,UAAU,kBAAA,CAAmB;AAAA,IACjC,GAAG,WAAA;AAAA,IACH;AAAA,GACD,CAAA;AAED,EAAA,mBAAA;AAAA,IACE,UAAA;AAAA,IACA,OAAO;AAAA,MACL,qBAAqB,OAAA,CAAQ,mBAAA;AAAA,MAC7B,iBAAiB,OAAA,CAAQ;AAAA,KAC3B,CAAA;AAAA,IACA,CAAC,OAAA,CAAQ,eAAA,EAAiB,OAAA,CAAQ,mBAAmB;AAAA,GACvD;AAEA,EAAA,MAAM,iBAAA,GAAoB,gBAAgB,yBAAyB,CAAA;AAEnE,EAAA,uBACEC,IAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,+BAAA;AAAA,MACV,EAAA,EAAG,yBAAA;AAAA,MAEH,QAAA,EAAA;AAAA,wBAAAf,GAAAA,CAAC,QAAG,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,wBACXA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,8BAA6B,QAAA,EAAA,4CAAA,EAE1C,CAAA;AAAA,QACC,iBAAA,mBACCA,GAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,0CAAA,EAA2C,IAAA,EAAK,OAAA,EAC1D,QAAA,EAAA,iBAAA,EACH,CAAA,GACE,IAAA;AAAA,wBACJA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,CAAA,6BAAA,EAAgC,iBAAA,GAAoB,uCAAA,GAA0C,EAAE,CAAA,CAAA;AAAA,YAE1G,kBAAQ,aAAA,CAAc,MAAA,KAAW,CAAA,mBAChCA,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,4BAAA,EAA6B,QAAA,EAAA,+BAAA,EAA6B,IAEvE,OAAA,CAAQ,aAAA,CAAc,GAAA,CAAI,CAAC,2BACzBe,IAAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBAEC,WAAW,CAAA,4BAAA,EAA+B,WAAA,CAAY,wBAAwB,MAAA,CAAO,IAAA,GAAO,iBAAiB,EAAE,CAAA,CAAA;AAAA,gBAE/G,QAAA,EAAA;AAAA,kCAAAf,GAAAA;AAAA,oBAAC,OAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,OAAA;AAAA,sBACL,IAAA,EAAK,SAAA;AAAA,sBACL,OAAA,EAAS,WAAA,CAAY,mBAAA,KAAwB,MAAA,CAAO,IAAA;AAAA,sBACpD,QAAA,EAAU,MAAM,OAAA,CAAQ,aAAA,CAAc,OAAO,IAAI;AAAA;AAAA,mBACnD;AAAA,kCACAe,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mCAAA,EACd,QAAA,EAAA;AAAA,oCAAAf,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAA,EAAsC,iBAAO,IAAA,EAAK,CAAA;AAAA,oBACjE,MAAA,CAAO,8BACNA,GAAAA,CAAC,UAAK,SAAA,EAAU,kCAAA,EACb,QAAA,EAAA,MAAA,CAAO,WAAA,EACV,CAAA,GACE;AAAA,mBAAA,EACN;AAAA;AAAA,eAAA;AAAA,cAhBK,MAAA,CAAO;AAAA,aAkBf;AAAA;AAAA,SAEL;AAAA,QAEC,OAAA,CAAQ,wCACPA,GAAAA,CAAC,OAAE,SAAA,EAAU,4BAAA,EAA6B,mEAA0C,CAAA,GAClF,IAAA;AAAA,QACH,OAAA,CAAQ,mBAAA,mBACPA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,mCAAA,EAAoC,IAAA,EAAK,OAAA,EACnD,QAAA,EAAA,OAAA,CAAQ,mBAAA,EACX,CAAA,GACE,IAAA;AAAA,QAEH,OAAA,CAAQ,cAAA,IAAkB,OAAA,CAAQ,oBAAA,mBACjCA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sCAAA,EACb,QAAA,kBAAAe,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,2CAAA,EACZ,QAAA,EAAA;AAAA,UAAA,OAAA,CAAQ,qBAAqB,UAAA,mBAC5Bf,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CACb,QAAA,kBAAAA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,QAAQ,oBAAA,CAAqB,UAAA;AAAA,cAClC,GAAA,EAAK,CAAA,EAAG,OAAA,CAAQ,cAAA,CAAe,IAAI,CAAA,GAAA;AAAA;AAAA,aAEvC,CAAA,GACE,IAAA;AAAA,0BACJe,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,4CAAA,EAA6C,QAAA,EAAA;AAAA,cAAA,WAAA;AAAA,cAC9C,QAAQ,cAAA,CAAe;AAAA,aAAA,EACnC,CAAA;AAAA,4BACAf,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,8BAA6B,QAAA,EAAA,2FAAA,EAG1C,CAAA;AAAA,YACC,QAAQ,oBAAA,CAAqB,WAAA,mBAC5Be,IAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,0CAAA,EACX,QAAA,EAAA;AAAA,8BAAAf,GAAAA,CAAC,UAAK,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,8BAChBA,GAAAA,CAAC,QAAA,EAAA,EAAQ,QAAA,EAAA,OAAA,CAAQ,qBAAqB,WAAA,EAAY;AAAA,aAAA,EACpD,CAAA,GACE,IAAA;AAAA,YACH,QAAQ,oBAAA,CAAqB,aAAA,mBAC5Be,IAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,0CAAA,EACX,QAAA,EAAA;AAAA,8BAAAf,GAAAA,CAAC,UAAK,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,8BACZA,GAAAA,CAAC,QAAA,EAAA,EAAQ,QAAA,EAAA,OAAA,CAAQ,qBAAqB,aAAA,EAAc;AAAA,aAAA,EACtD,CAAA,GACE,IAAA;AAAA,4BACJe,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sCAAA,EACb,QAAA,EAAA;AAAA,8BAAAf,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,6BAAA,EAA8B,QAAA,EAAA,iBAAA,EAAe,CAAA;AAAA,8BAC7De,IAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,qCAAA,EACf,QAAA,EAAA;AAAA,gCAAAf,GAAAA;AAAA,kBAAC,OAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,MAAA;AAAA,oBACL,MAAA,EAAO,SAAA;AAAA,oBACP,SAAA,EAAU,qCAAA;AAAA,oBACV,UAAU,OAAA,CAAQ;AAAA;AAAA,iBACpB;AAAA,gCACAA,IAAC,MAAA,EAAA,EACE,QAAA,EAAA,OAAA,CAAQ,aAAa,IAAA,KACnB,OAAA,CAAQ,UAAA,GAAa,kBAAA,GAAqB,gBAAA,CAAA,EAC/C;AAAA,eAAA,EACF,CAAA;AAAA,cACC,OAAA,CAAQ,oCACPA,GAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,KAAK,OAAA,CAAQ,iBAAA;AAAA,kBACb,GAAA,EAAI,iBAAA;AAAA,kBACJ,SAAA,EAAU;AAAA;AAAA,eACZ,GACE,IAAA;AAAA,cACH,OAAA,CAAQ,YAAA,mBACPA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0CAAA,EAA2C,IAAA,EAAK,OAAA,EAC1D,QAAA,EAAA,OAAA,CAAQ,YAAA,EACX,CAAA,GACE;AAAA,aAAA,EACN;AAAA,WAAA,EACF;AAAA,SAAA,EACF,GACF,CAAA,GACE,IAAA;AAAA,QAEH,OAAA,CAAQ,qBAAqB,OAAA,CAAQ,iBAAA,mBACpCe,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wCAAA,EACb,QAAA,EAAA;AAAA,0BAAAf,GAAAA,CAAC,qBAAA,EAAA,EAAsB,QAAA,EAAU,OAAA,CAAQ,iBAAA,EAAmB,CAAA;AAAA,UAC3D,CAAC,OAAA,CAAQ,wBAAA,mBACRA,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,SAAA,EAAU,wCAAA;AAAA,cACV,QAAA,EAAU,OAAA,CAAQ,kBAAA,IAAsB,CAAC,OAAA,CAAQ,gBAAA;AAAA,cACjD,OAAA,EAAS,MAAM,KAAK,OAAA,CAAQ,sBAAA,EAAuB;AAAA,cAElD,QAAA,EAAA,OAAA,CAAQ,kBAAA,GACL,uBAAA,GACA,OAAA,CAAQ;AAAA;AAAA,WACd,mBAEAA,GAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,4BAAA,EAA6B,IAAA,EAAK,UAAS,QAAA,EAAA,0DAAA,EAExD;AAAA,SAAA,EAEJ,CAAA,GACE,IAAA;AAAA,QACH,QAAQ,kBAAA,IACT,CAAC,OAAA,CAAQ,iBAAA,IACT,CAAC,OAAA,CAAQ,qBAAA,IACT,CAAC,OAAA,CAAQ,sCACPA,GAAAA,CAAC,OAAE,SAAA,EAAU,4BAAA,EAA6B,4EAE1C,CAAA,GACE;AAAA;AAAA;AAAA,GACN;AAEJ;AAEO,IAAM,sBAAA,GAAyB,UAAA,CAGpC,SAASkB,uBAAAA,CAAuB,OAAO,GAAA,EAAK;AAC5C,EAAA,uBACElB,GAAAA,CAAC,yBAAA,EAAA,EACC,QAAA,kBAAAA,GAAAA,CAAC,+BAA4B,UAAA,EAAY,GAAA,EAAM,GAAG,KAAA,EAAO,CAAA,EAC3D,CAAA;AAEJ,CAAC,CAAA;ACtKM,SAAS,gBAAA,CAAiB;AAAA,EAC/B,OAAA;AAAA,EACA,OAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,mBAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,mBAAA;AAAA,EACA,mBAAA;AAAA,EACA,wBAAA;AAAA,EACA,2BAAA;AAAA,EACA,uBAAA;AAAA,EACA,yBAAA;AAAA,EACA,sBAAA;AAAA,EACA,oBAAA;AAAA,EACA,eAAA;AAAA,EACA,yBAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,UAAA,GAAaM,OAA8B,IAAI,CAAA;AACrD,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIM,SAAS,KAAK,CAAA;AAE5D,EAAA,MAAM;AAAA,IACJ,eAAA;AAAA,IACA,oBAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACF,GAAI,0BAA0B,QAAQ,CAAA;AAEtC,EAAA,MAAM,eAAe,eAAA,IAAmB,SAAA;AAExC,EAAA,MAAM,iBAAiB,YAAY;AACjC,IAAA,MAAM,QAAQ,oBAAA,CAAqB;AAAA,MACjC,OAAA;AAAA,MACA,mBAAA;AAAA,MACA,sBAAsB,eAAA,CAAgB,MAAA;AAAA,MACtC,mBAAA;AAAA,MACA,qBAAqB,cAAA,CAAe;AAAA,KACrC,CAAA;AACD,IAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,IAAA,MAAM,IAAA,GAAO,MAAM,UAAA,CAAW,OAAA,EAAS,mBAAA,EAAoB;AAC3D,IAAA,IAAI,CAAC,MAAM,EAAA,EAAI;AACf,IAAA,MAAM,QAAA,CAAS,EAAE,UAAA,EAAY,IAAA,CAAK,YAAY,CAAA;AAAA,EAChD,CAAA;AAEA,EAAA,uBACEG,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,+BAAA,EACjB,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EACb,QAAA,EAAA;AAAA,wBAAAf,GAAAA,CAAC,QAAG,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,QACV,UAAA,mBACCA,GAAAA,CAAC,IAAA,EAAA,EAAK,MAAM,UAAA,EAAY,SAAA,EAAU,4BAAA,EAA6B,QAAA,EAAA,SAAA,EAE/D,CAAA,GACE;AAAA,OAAA,EACN,CAAA;AAAA,sBACAA,GAAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAG,OAAA;AAAA,UACH,KAAA,EAAM,OAAA;AAAA,UACN,IAAA,EAAK,OAAA;AAAA,UACL,OAAO,OAAA,CAAQ,KAAA;AAAA,UACf,KAAA,EAAO,cAAc,OAAO,CAAA;AAAA,UAC5B,YAAA,EAAc,MAAM,eAAA,CAAgB,OAAO,CAAA;AAAA,UAC3C,UAAU,CAAC,CAAA,KAAM,gBAAgB,EAAE,KAAA,EAAO,GAAG;AAAA;AAAA,OAC/C;AAAA,sBACAe,IAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,gCAAA,EACf,QAAA,EAAA;AAAA,wBAAAf,GAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,UAAA;AAAA,YACL,SAAS,OAAA,CAAQ,cAAA;AAAA,YACjB,QAAA,EAAU,CAAC,CAAA,KAAM,eAAA,CAAgB,EAAE,cAAA,EAAgB,CAAA,CAAE,MAAA,CAAO,OAAA,EAAS;AAAA;AAAA,SACvE;AAAA,wBACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,+BAAA,EAA6B;AAAA,OAAA,EACrC;AAAA,KAAA,EACF,CAAA;AAAA,oBAEAA,GAAAA;AAAA,MAAC,oBAAA;AAAA,MAAA;AAAA,QACC,OAAA;AAAA,QACA,OAAA;AAAA,QACA,eAAA;AAAA,QACA,aAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,oBAEAe,IAAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,+BAAA;AAAA,QACV,EAAA,EAAG,0BAAA;AAAA,QAEH,QAAA,EAAA;AAAA,0BAAAf,GAAAA,CAAC,QAAG,QAAA,EAAA,iBAAA,EAAe,CAAA;AAAA,UAClB,aAAA,CAAc,0BAA0B,CAAA,mBACvCA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0CAAA,EAA2C,IAAA,EAAK,OAAA,EAC1D,QAAA,EAAA,aAAA,CAAc,0BAA0B,GAC3C,CAAA,GACE,IAAA;AAAA,UACH,eAAA,mBACCA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,4BAAA,EAA6B,QAAA,EAAA,gCAAA,EAAyB,CAAA,GACjE,aAAA,mBACFA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qCAAqC,QAAA,EAAA,aAAA,EAAc,CAAA,GAC9D,eAAA,CAAgB,MAAA,KAAW,CAAA,mBAC7BA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,4BAAA,EAA6B,QAAA,EAAA,+CAAA,EAE1C,CAAA,mBAEAA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,WAAW,CAAA,6BAAA,EAAgC,aAAA,CAAc,0BAA0B,CAAA,GAAI,0CAA0C,EAAE,CAAA,CAAA;AAAA,cAElI,QAAA,EAAA,eAAA,CAAgB,GAAA,CAAI,CAAC,GAAA,qBACpBe,IAAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBAEC,WAAW,CAAA,4BAAA,EAA+B,mBAAA,KAAwB,GAAA,CAAI,GAAA,GAAM,iBAAiB,EAAE,CAAA,CAAA;AAAA,kBAE/F,QAAA,EAAA;AAAA,oCAAAf,GAAAA;AAAA,sBAAC,OAAA;AAAA,sBAAA;AAAA,wBACC,IAAA,EAAK,OAAA;AAAA,wBACL,IAAA,EAAK,UAAA;AAAA,wBACL,OAAA,EAAS,wBAAwB,GAAA,CAAI,GAAA;AAAA,wBACrC,UAAU,MAAM;AACd,0BAAA,eAAA,CAAgB,0BAA0B,CAAA;AAC1C,0BAAA,gBAAA,CAAiB,IAAI,GAAG,CAAA;AAAA,wBAC1B;AAAA;AAAA,qBACF;AAAA,oCACAe,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mCAAA,EACd,QAAA,EAAA;AAAA,sCAAAf,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAA,EAAsC,cAAI,KAAA,EAAM,CAAA;AAAA,sCAChEA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAA,EAAoC,cAAI,QAAA,EAAS;AAAA,qBAAA,EACnE,CAAA;AAAA,oCACAA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sCACb,QAAA,EAAA,cAAA,CAAe,GAAA,CAAI,KAAA,EAAO,QAAQ,CAAA,EACrC;AAAA;AAAA,iBAAA;AAAA,gBAlBK,GAAA,CAAI;AAAA,eAoBZ;AAAA;AAAA;AACH;AAAA;AAAA,KAEJ;AAAA,oBAEAA,GAAAA;AAAA,MAAC,sBAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,UAAA;AAAA,QACL,cAAA;AAAA,QACA,mBAAA;AAAA,QACA,mBAAA;AAAA,QACA,wBAAA;AAAA,QACA,2BAAA;AAAA,QACA,gBAAA,EAAkB,uBAAA;AAAA,QAClB,uBAAA,EAAyB,kBAAA;AAAA,QACzB,kBAAA,EAAoB,yBAAA;AAAA,QACpB,eAAA,EAAiB,sBAAA;AAAA,QACjB,aAAA,EAAe,oBAAA;AAAA,QACf,eAAA;AAAA,QACA,yBAAA;AAAA,QACA,aAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,oBAEAe,IAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,+BAAA,EACjB,QAAA,EAAA;AAAA,sBAAAf,GAAAA,CAAC,QAAG,QAAA,EAAA,iBAAA,EAAe,CAAA;AAAA,sBACnBe,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,IAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,CAAA,4BAAA,EAA+B,aAAA,KAAkB,kBAAA,GAAqB,iBAAiB,EAAE,CAAA,CAAA;AAAA,YAEpG,QAAA,EAAA;AAAA,8BAAAf,GAAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,OAAA;AAAA,kBACL,IAAA,EAAK,SAAA;AAAA,kBACL,SAAS,aAAA,KAAkB,kBAAA;AAAA,kBAC3B,QAAA,EAAU,MAAM,eAAA,CAAgB,kBAAkB;AAAA;AAAA,eACpD;AAAA,8BACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mCAAA,EACd,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAA,EAAqC,QAAA,EAAA,0BAAA,EAAwB,CAAA,EAC/E;AAAA;AAAA;AAAA,SACF;AAAA,wBACAe,IAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,CAAA,4BAAA,EAA+B,aAAA,KAAkB,WAAA,GAAc,iBAAiB,EAAE,CAAA,CAAA;AAAA,YAE7F,QAAA,EAAA;AAAA,8BAAAf,GAAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,OAAA;AAAA,kBACL,IAAA,EAAK,SAAA;AAAA,kBACL,SAAS,aAAA,KAAkB,WAAA;AAAA,kBAC3B,QAAA,EAAU,MAAM,eAAA,CAAgB,WAAW;AAAA;AAAA,eAC7C;AAAA,8BACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mCAAA,EACd,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAA,EAAqC,QAAA,EAAA,iCAAA,EAErD,CAAA,EACF;AAAA;AAAA;AAAA;AACF,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,IAEC,YAAA,mBACCA,GAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,mCAAA,EAAoC,IAAA,EAAK,OAAA,EACnD,QAAA,EAAA,YAAA,EACH,CAAA,GACE,IAAA;AAAA,oBAEJA,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAU,2BAAA;AAAA,QACV,QAAA,EAAU,YAAY,CAAC,eAAA;AAAA,QACvB,OAAA,EAAS,MAAM,KAAK,cAAA,EAAe;AAAA,QAElC,qBAAW,kBAAA,GAAgB;AAAA;AAAA,KAC9B;AAAA,oBAEAe,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gCAAA,EAAiC,cAAW,UAAA,EACzD,QAAA,EAAA;AAAA,sBAAAf,GAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAK,GAAA,EAAI,QAAA,EAAA,eAAA,EAAa,CAAA;AAAA,sBACzBA,GAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAK,KAAI,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,sBACpBA,GAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAK,KAAI,QAAA,EAAA,gBAAA,EAAc,CAAA;AAAA,sBAC1BA,GAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAK,KAAI,QAAA,EAAA,kBAAA,EAAgB;AAAA,KAAA,EAC9B;AAAA,GAAA,EACF,CAAA;AAEJ;ACzPO,SAAS,oBAAA,CAAqB;AAAA,EACnC,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,kBAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,EAA8B;AAC5B,EAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,KAAiB;AACvC,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,aAAA,EAAc;AAAA,EAChB,CAAA;AAEA,EAAA,uBACEe,IAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,+BAAA,EACf,QAAA,EAAA;AAAA,oBAAAf,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qCAAA,EACX,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACVe,IAAAA,CAAC,IAAA,EAAA,EAAiB,SAAA,EAAU,oCAAA,EAC1B,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACb,QAAA,EAAA;AAAA,wBAAAf,GAAAA,CAAC,SAAI,SAAA,EAAU,2CAAA,EACZ,eAAK,KAAA,mBACJA,IAAC,KAAA,EAAA,EAAI,GAAA,EAAK,KAAK,KAAA,EAAO,GAAA,EAAI,IAAG,CAAA,mBAE7BA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0CAAyC,CAAA,EAE7D,CAAA;AAAA,wBACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mCAAA,EAAqC,eAAK,QAAA,EAAS;AAAA,OAAA,EACrE,CAAA;AAAA,sBACAe,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EACb,QAAA,EAAA;AAAA,wBAAAf,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0CAAA,EAA4C,eAAK,KAAA,EAAM,CAAA;AAAA,QAAA,CAClE,IAAA,CAAK,YAAA,IAAgB,IAAA,CAAK,IAAA,qBAC1BA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,yCAAA,EACV,QAAA,EAAA,IAAA,CAAK,YAAA,IAAgB,IAAA,CAAK,IAAA,EAC7B;AAAA,OAAA,EAEJ,CAAA;AAAA,sBACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0CAAA,EACV,QAAA,EAAA,cAAA,CAAe,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,QAAA,EAAU,QAAQ,CAAA,EACtD;AAAA,KAAA,EAAA,EArBO,IAAA,CAAK,EAsBd,CACD,CAAA,EACH,CAAA;AAAA,oBAEAe,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gCAAA,EAAiC,UAAU,cAAA,EACzD,QAAA,EAAA;AAAA,sBAAAf,GAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,MAAA;AAAA,UACL,SAAA,EAAU,6BAAA;AAAA,UACV,WAAA,EAAY,4BAAA;AAAA,UACZ,KAAA,EAAO,UAAA;AAAA,UACP,UAAU,CAAC,CAAA,KAAM,kBAAA,CAAmB,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,UAClD,YAAA,EAAW;AAAA;AAAA,OACb;AAAA,sBACAA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAU,sCAAA;AAAA,UACV,QAAA,EAAU,CAAC,UAAA,CAAW,IAAA,EAAK,IAAK,UAAA;AAAA,UACjC,QAAA,EAAA;AAAA;AAAA;AAED,KAAA,EACF,CAAA;AAAA,IACC,8BACCA,GAAAA,CAAC,OAAE,SAAA,EAAU,mCAAA,EAAqC,uBAAY,CAAA,GAC5D,IAAA;AAAA,IACH,WAAA,CAAY,MAAA,GAAS,CAAA,mBACpBA,IAAC,IAAA,EAAA,EAAG,SAAA,EAAU,mCAAA,EACX,QAAA,EAAA,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,qBAChBe,KAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAf,GAAAA,CAAC,UAAM,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,sBACZA,GAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,UAAS,OAAA,EAAS,MAAM,cAAA,CAAe,IAAI,CAAA,EAAG,YAAA,EAAY,CAAA,OAAA,EAAU,IAAI,IAAI,QAAA,EAAA,MAAA,EAEzF;AAAA,KAAA,EAAA,EAJO,IAKT,CACD,CAAA,EACH,CAAA,GACE,IAAA;AAAA,oBAEJe,IAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,8BAAA,EACZ,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACb,QAAA,EAAA;AAAA,wBAAAf,GAAAA,CAAC,QAAG,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,wBACZA,GAAAA,CAAC,IAAA,EAAA,EAAI,QAAA,EAAA,cAAA,CAAe,QAAA,EAAU,QAAQ,CAAA,EAAE;AAAA,OAAA,EAC1C,CAAA;AAAA,sBACAe,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACb,QAAA,EAAA;AAAA,wBAAAf,GAAAA,CAAC,QAAG,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,wBACZA,GAAAA,CAAC,IAAA,EAAA,EAAI,QAAA,EAAA,QAAA,GAAW,CAAA,GAAI,cAAA,CAAe,QAAA,EAAU,QAAQ,CAAA,GAAI,QAAA,KAAa,CAAA,GAAI,MAAA,GAAS,QAAA,EAAI;AAAA,OAAA,EACzF,CAAA;AAAA,MACC,WAAW,CAAA,mBACVe,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kCAAA,EACb,QAAA,EAAA;AAAA,wBAAAf,GAAAA,CAAC,QAAG,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,wBACZe,KAAC,IAAA,EAAA,EAAG,QAAA,EAAA;AAAA,UAAA,GAAA;AAAA,UAAE,cAAA,CAAe,UAAU,QAAQ;AAAA,SAAA,EAAE;AAAA,OAAA,EAC3C,CAAA,GACE,IAAA;AAAA,sBACJA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACb,QAAA,EAAA;AAAA,wBAAAf,GAAAA,CAAC,QAAG,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,wBACTA,IAAC,IAAA,EAAA,EAAI,QAAA,EAAA,GAAA,GAAM,IAAI,cAAA,CAAe,GAAA,EAAK,QAAQ,CAAA,GAAI,QAAA,EAAI;AAAA,OAAA,EACrD,CAAA;AAAA,sBACAe,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0EAAA,EACb,QAAA,EAAA;AAAA,wBAAAf,GAAAA,CAAC,QAAG,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,wBACTe,KAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAf,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sCAAA,EAAwC,QAAA,EAAA,QAAA,EAAS,CAAA;AAAA,UAChE,cAAA,CAAe,OAAO,QAAQ;AAAA,SAAA,EACjC;AAAA,OAAA,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AChIA,SAAS,KAAA,CAAM;AAAA,EACb,SAAA,GAAY,EAAA;AAAA,EACZ;AACF,CAAA,EAGG;AACD,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAW,CAAA,oCAAA,EAAuC,SAAA,GAAY,CAAA,CAAA,EAAI,SAAS,KAAK,EAAE,CAAA,CAAA;AAAA,MAClF,KAAA;AAAA,MACA,aAAA,EAAW;AAAA;AAAA,GACb;AAEJ;AAEO,SAAS,oBAAA,CAAqB,EAAE,MAAA,EAAO,EAA8B;AAC1E,EAAA,uBACEe,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,qDAAA;AAAA,MACV,WAAA,EAAU,MAAA;AAAA,MACV,YAAA,EAAW,kBAAA;AAAA,MAEV,QAAA,EAAA;AAAA,QAAA,MAAA;AAAA,wBAEDA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,IAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,+BAAA,EACjB,QAAA,EAAA;AAAA,8BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EACb,QAAA,EAAA;AAAA,gCAAAf,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,sCAAA,EAAuC,CAAA;AAAA,gCACxDA,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,qCAAA,EAAsC;AAAA,eAAA,EACzD,CAAA;AAAA,8BACAA,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,sCAAA,EAAuC,CAAA;AAAA,8BACxDA,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,yCAAA,EAA0C;AAAA,aAAA,EAC7D,CAAA;AAAA,4BAEAe,IAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,+BAAA,EACjB,QAAA,EAAA;AAAA,8BAAAf,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,sCAAA,EAAuC,CAAA;AAAA,8BACxDA,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,sCAAA,EAAuC,CAAA;AAAA,8BACxDe,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EACb,QAAA,EAAA;AAAA,gCAAAf,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,iFAAA,EAAkF,CAAA;AAAA,gCACnGA,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,iFAAA,EAAkF;AAAA,eAAA,EACrG,CAAA;AAAA,8BACAA,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,sCAAA,EAAuC,CAAA;AAAA,8BACxDA,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,sCAAA,EAAuC,CAAA;AAAA,8BACxDA,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,sCAAA,EAAuC,CAAA;AAAA,8BACxDe,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EACb,QAAA,EAAA;AAAA,gCAAAf,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,kFAAA,EAAmF,CAAA;AAAA,gCACpGA,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,kFAAA,EAAmF,CAAA;AAAA,gCACpGA,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,kFAAA,EAAmF;AAAA,eAAA,EACtG,CAAA;AAAA,8BACAA,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,sCAAA,EAAuC;AAAA,aAAA,EAC1D,CAAA;AAAA,4BAEAe,IAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,+BAAA,EACjB,QAAA,EAAA;AAAA,8BAAAf,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,sCAAA,EAAuC,CAAA;AAAA,8BACxDA,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,uCAAA,EAAwC,CAAA;AAAA,8BACzDA,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,uCAAA,EAAwC;AAAA,aAAA,EAC3D,CAAA;AAAA,4BAEAe,IAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,+BAAA,EACjB,QAAA,EAAA;AAAA,8BAAAf,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,sCAAA,EAAuC,CAAA;AAAA,8BACxDA,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,uCAAA,EAAwC,CAAA;AAAA,8BACzDA,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,uCAAA,EAAwC;AAAA,aAAA,EAC3D,CAAA;AAAA,4BAEAA,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,uCAAA,EAAwC;AAAA,WAAA,EAC3D,CAAA;AAAA,0BAEAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sCACb,QAAA,kBAAAe,IAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,+BAAA,EACf,QAAA,EAAA;AAAA,4BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACb,QAAA,EAAA;AAAA,8BAAAf,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,sCAAA,EAAuC,CAAA;AAAA,8BACxDe,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACb,QAAA,EAAA;AAAA,gCAAAf,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,qCAAA,EAAsC,CAAA;AAAA,gCACvDA,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,gFAAA,EAAiF;AAAA,eAAA,EACpG,CAAA;AAAA,8BACAA,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,sCAAA,EAAuC;AAAA,aAAA,EAC1D,CAAA;AAAA,4BAEAe,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCAAA,EACb,QAAA,EAAA;AAAA,8BAAAf,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,6CAAA,EAA8C,CAAA;AAAA,8BAC/DA,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,2CAAA,EAA4C;AAAA,aAAA,EAC/D,CAAA;AAAA,4BAEAe,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCAAA,EACZ,QAAA,EAAA;AAAA,cAAA,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,CAAA,EAAG,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBACjCA,IAAAA,CAAC,KAAA,EAAA,EAAY,WAAU,0CAAA,EACrB,QAAA,EAAA;AAAA,gCAAAf,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,gFAAA,EAAiF,CAAA;AAAA,gCAClGA,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,6EAAA,EAA8E;AAAA,eAAA,EAAA,EAFvF,CAGV,CACD,CAAA;AAAA,8BACDe,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0FAAA,EACb,QAAA,EAAA;AAAA,gCAAAf,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,qCAAA,EAAsC,CAAA;AAAA,gCACvDA,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,gFAAA,EAAiF;AAAA,eAAA,EACpG;AAAA,aAAA,EACF;AAAA,WAAA,EACF,CAAA,EACF;AAAA,SAAA,EACF;AAAA;AAAA;AAAA,GACF;AAEJ;;;AC1GO,SAAS,uBAAuB,KAAA,EAA0C;AAC/E,EAAA,IAAI,CAAC,KAAA,EAAO,MAAA,EAAQ,OAAO,EAAC;AAC5B,EAAA,OAAO,KAAA,CACJ,GAAA,CAAI,CAAC,GAAA,KAAQ;AACZ,IAAA,MAAM,IAAA,GAAO,GAAA;AAUb,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA;AACnC,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA;AACrC,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,SAAA,IAAa,EAAE,CAAA;AAC7C,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,IAAK,CAAC,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,IAAK,CAAC,SAAA,EAAW,OAAO,IAAA;AAChF,IAAA,OAAO;AAAA,MACL,IAAI,IAAA,CAAK,EAAA;AAAA,MACT,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,SAAA,IAAa,EAAE,CAAA;AAAA,MAClC,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,YAAA,IAAgB,QAAG,CAAA;AAAA,MACrC,KAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA,EAAY,KAAK,UAAA,IAAc,MAAA;AAAA,MAC/B,YAAA,EAAc,KAAK,YAAA,IAAgB;AAAA,KACrC;AAAA,EACF,CAAC,CAAA,CACA,MAAA,CAAO,OAAO,CAAA;AACnB;AAEO,SAAS,8BACd,QAAA,EACgC;AAChC,EAAA,MAAM,OAAO,QAAA,CAAS,eAAA;AAatB,EAAA,IAAI,CAAC,MAAM,OAAO,MAAA;AAClB,EAAA,MAAM,MAAM,IAAA,CAAK,GAAA;AACjB,EAAA,OAAO;AAAA,IACL,SAAS,IAAA,CAAK,QAAA;AAAA,IACd,OAAA,EAAS,KAAK,UAAA,IAAc,EAAA;AAAA,IAC5B,WAAA,EAAa,KAAK,WAAA,IAAe,IAAA;AAAA,IACjC,cAAA,EAAgB,KAAK,cAAA,IAAkB,EAAA;AAAA,IACvC,cAAA,EAAgB,EAAA;AAAA,IAChB,YAAA,EAAc,KAAK,YAAA,IAAgB,EAAA;AAAA,IACnC,YAAA,EAAc,KAAK,QAAA,IAAY,EAAA;AAAA,IAC/B,YAAA,EAAc,KAAK,YAAA,IAAgB,EAAA;AAAA,IACnC,YAAA,EAAc,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,IAAA,IAAQ;AAAA,GAC9C;AACF;;;AC1DO,IAAM,uBAAuB,CAAC,MAAA,KACnC,CAAC,YAAA,EAAc,MAAA,EAAQ,QAAQ,UAAU,CAAA;AAYpC,SAAS,mBAAmB,KAAA,EAA2B;AAC5D,EAAA,OAAO,MACJ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,EAAG,EAAE,SAAA,IAAa,CAAA,CAAE,EAAE,CAAA,CAAA,EAAI,EAAE,QAAQ,CAAA,CAAE,EACjD,IAAA,EAAK,CACL,KAAK,GAAG,CAAA;AACb;AAEO,SAAS,yBACd,IAAA,EACY;AACZ,EAAA,OAAO,sBAAA,CAAuB,MAAM,KAA8B,CAAA;AACpE;AAEO,SAAS,6BACd,KAAA,EACqB;AACrB,EAAA,MAAM,GAAA,uBAAU,GAAA,EAAoB;AACpC,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,IAAa,IAAA,CAAK,EAAA;AACzC,IAAA,GAAA,CAAI,GAAA,CAAI,SAAA,EAAA,CAAY,GAAA,CAAI,GAAA,CAAI,SAAS,CAAA,IAAK,CAAA,IAAK,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,QAAQ,CAAC,CAAA;AAAA,EAC3E;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,uBAAuB,KAAA,EAA4C;AAC1E,EAAA,MAAM,GAAA,uBAAU,GAAA,EAAwB;AACxC,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,IAAa,IAAA,CAAK,EAAA;AACzC,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,GAAA,CAAI,SAAS,KAAK,EAAC;AACrC,IAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AACf,IAAA,GAAA,CAAI,GAAA,CAAI,WAAW,KAAK,CAAA;AAAA,EAC1B;AACA,EAAA,OAAO,GAAA;AACT;AAMO,SAAS,6BAAA,CACd,OACA,GAAA,EACuB;AACvB,EAAA,MAAM,UAAiC,EAAC;AACxC,EAAA,MAAM,QAAA,GAAW,6BAA6B,KAAK,CAAA;AACnD,EAAA,MAAM,iBAAA,GAAoB,uBAAuB,GAAG,CAAA;AACpD,EAAA,MAAM,UAAA,uBAAiB,GAAA,CAAI;AAAA,IACzB,GAAG,SAAS,IAAA,EAAK;AAAA,IACjB,GAAG,kBAAkB,IAAA;AAAK,GAC3B,CAAA;AAED,EAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,IAAA,MAAM,SAAA,GAAY,QAAA,CAAS,GAAA,CAAI,SAAS,CAAA,IAAK,CAAA;AAC7C,IAAA,MAAM,QAAA,GAAW,iBAAA,CAAkB,GAAA,CAAI,SAAS,KAAK,EAAC;AACtD,IAAA,MAAM,MAAA,GAAS,SAAS,MAAA,CAAO,CAAC,KAAK,IAAA,KAAS,GAAA,GAAM,IAAA,CAAK,QAAA,EAAU,CAAC,CAAA;AAEpE,IAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,MAAA,EAAQ,KAAA;AAAA,QACR,SAAA;AAAA,QACA,UAAU,SAAA,GAAY;AAAA,OACvB,CAAA;AACD,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,aAAa,MAAA,EAAQ;AAEzB,IAAA,IAAI,SAAS,MAAA,GAAS,SAAA;AACtB,IAAA,KAAA,MAAW,QAAQ,CAAC,GAAG,QAAQ,CAAA,CAAE,SAAQ,EAAG;AAC1C,MAAA,IAAI,UAAU,CAAA,EAAG;AACjB,MAAA,IAAI,IAAA,CAAK,YAAY,MAAA,EAAQ;AAC3B,QAAA,OAAA,CAAQ,KAAK,EAAE,MAAA,EAAQ,UAAU,MAAA,EAAQ,IAAA,CAAK,IAAI,CAAA;AAClD,QAAA,MAAA,IAAU,IAAA,CAAK,QAAA;AAAA,MACjB,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,UACX,MAAA,EAAQ,QAAA;AAAA,UACR,QAAQ,IAAA,CAAK,EAAA;AAAA,UACb,QAAA,EAAU,KAAK,QAAA,GAAW;AAAA,SAC3B,CAAA;AACD,QAAA,MAAA,GAAS,CAAA;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,OAAA;AACT;AAeO,SAAS,sBAAA,CAAuB,GAAe,CAAA,EAAwB;AAC5E,EAAA,OAAO,kBAAA,CAAmB,CAAC,CAAA,KAAM,kBAAA,CAAmB,CAAC,CAAA;AACvD;AAGO,SAAS,oBAAA,CACd,aACA,KAAA,EACQ;AACR,EAAA,OAAO,GAAG,WAAA,IAAe,EAAE,CAAA,CAAA,EAAI,kBAAA,CAAmB,KAAK,CAAC,CAAA,CAAA;AAC1D;AAcO,SAAS,uBACd,IAAA,EACe;AACf,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,MAAM,MAAA,GAAS,KAAK,MAAA,IAAU,IAAA;AAC9B,EAAA,OAAO,OAAO,WAAW,QAAA,IAAY,MAAA,CAAO,MAAK,GAAI,MAAA,CAAO,MAAK,GAAI,IAAA;AACvE;AAMO,SAAS,8BAAA,CACd,MACA,kBAAA,EACS;AACT,EAAA,IAAI,kBAAA,GAAqB,GAAG,OAAO,KAAA;AACnC,EAAA,MAAM,MAAA,GAAS,uBAAuB,IAAI,CAAA;AAC1C,EAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,EAAA,OAAO,MAAA,CAAO,aAAY,KAAM,YAAA;AAClC;ACpJO,SAAS,eAAA,CAAgB;AAAA,EAC9B,MAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,EAA2B;AACzB,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AACvC,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,CAAC,CAAA,KAAM,EAAE,WAAW,CAAA;AAChD,EAAA,MAAM,CAAC,qBAAA,EAAuB,wBAAwB,CAAA,GAAIY,SAAS,KAAK,CAAA;AACxE,EAAA,MAAM,WAAA,GAAcN,OAAsB,IAAI,CAAA;AAE9C,EAAAC,UAAU,MAAM;AACd,IAAA,WAAA,CAAY,OAAA,GAAU,IAAA;AACtB,IAAA,wBAAA,CAAyB,KAAK,CAAA;AAAA,EAChC,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,aAAA,IAAiB,aAAA,EAAe;AACjD,IAAA,MAAM,GAAA,GAAM,oBAAA,CAAqB,WAAA,IAAe,MAAA,EAAQ,SAAS,CAAA;AACjE,IAAA,IAAI,WAAA,CAAY,YAAY,IAAA,EAAM;AAChC,MAAA,WAAA,CAAY,OAAA,GAAU,GAAA;AACtB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,GAAA,KAAQ,YAAY,OAAA,EAAS;AAC/B,MAAA,wBAAA,CAAyB,IAAI,CAAA;AAAA,IAC/B;AAAA,EACF,CAAA,EAAG;AAAA,IACD,MAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,OAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,cAAA,GAAiBM,YAAY,MAAM;AACvC,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,MAAA,MAAA,CAAO,SAAS,MAAA,EAAO;AAAA,IACzB;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO;AAAA,IACL,qBAAA;AAAA,IACA;AAAA,GACF;AACF;;;ACVO,SAAS,mBAAmB,MAAA,EAAgB;AACjD,EAAA,MAAM,cAAcX,cAAAA,EAAe;AACnC,EAAA,MAAM,OAAA,GAAU,SAAS,CAAC,CAAA,KAAM,EAAE,IAAA,EAAM,KAAA,EAAO,MAAM,EAAE,CAAA;AACvD,EAAA,MAAM,QAAA,GAAW,SAAS,CAAC,CAAA,KAAM,EAAE,IAAA,EAAM,KAAA,EAAO,YAAY,KAAK,CAAA;AAEjE,EAAA,MAAM,EAAE,cAAA,EAAgB,gBAAA,EAAkB,IAAA,EAAM,WAAU,GAAI,OAAA;AAAA,IAC5D,UAAA,CAAW,CAAC,CAAA,MAAO;AAAA,MACjB,gBAAgB,CAAA,CAAE,cAAA;AAAA,MAClB,kBAAkB,CAAA,CAAE,gBAAA;AAAA,MACpB,MAAM,CAAA,CAAE;AAAA,KACV,CAAE;AAAA,GACJ;AAEA,EAAA,MAAM,CAAC,wBAAA,EAA0B,2BAA2B,CAAA,GAAIU,SAAS,KAAK,CAAA;AAC9E,EAAA,MAAM,oBAAA,GAAuBN,OAAO,KAAK,CAAA;AAEzC,EAAAC,UAAU,MAAM;AACd,IAAA,oBAAA,CAAqB,OAAA,GAAU,KAAA;AAC/B,IAAA,2BAAA,CAA4B,KAAK,CAAA;AAAA,EACnC,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,MAAM;AAAA,IACJ,kBAAA;AAAA,IACA,kBAAA;AAAA,IACA,sBAAA;AAAA,IACA,qBAAA;AAAA,IACA,wBAAA;AAAA,IACA,eAAA;AAAA,IACA,gBAAA;AAAA,IACA,mBAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAA;AAAA,IACA,iBAAA;AAAA,IACA;AAAA,MACE,YAAA,EAAa;AAEjB,EAAA,MAAM,aAAA,GAAgB,mBAAmB,MAAM,CAAA;AAC/C,EAAA,MAAM,cAAc,kBAAA,EAAmB;AACvC,EAAA,MAAM,kBAAkB,sBAAA,EAAuB;AAC/C,EAAA,MAAM,oBAAoB,wBAAA,EAAyB;AACnD,EAAA,MAAM,uBAAuB,eAAA,EAAgB;AAC7C,EAAA,MAAM,wBAAwB,gBAAA,EAAiB;AAC/C,EAAA,MAAM,2BAA2B,mBAAA,EAAoB;AACrD,EAAA,MAAM,sBAAsB,cAAA,EAAe;AAC3C,EAAA,MAAM,yBAAyB,iBAAA,EAAkB;AACjD,EAAA,MAAM,yBAAyB,iBAAA,EAAkB;AACjD,EAAA,MAAM,+BAA+B,uBAAA,EAAwB;AAE7D,EAAA,MAAM,QAAA,GAAW,cAAc,IAAA,EAAM,IAAA;AACrC,EAAA,MAAM,cAAA,GAAiB,aAAA,CAAc,IAAA,EAAM,cAAA,EAAgB,WAAW,EAAC;AAEvE,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,aAAA,CAAc,SAAA,IAAa,CAAC,QAAA,EAAU;AAC3C,IAAA,IAAI,CAAC,8BAAA,CAA+B,QAAA,EAAU,SAAA,CAAU,MAAM,CAAA,EAAG;AACjE,IAAA,IAAI,qBAAqB,OAAA,EAAS;AAElC,IAAA,oBAAA,CAAqB,OAAA,GAAU,IAAA;AAC/B,IAAA,2BAAA,CAA4B,IAAI,CAAA;AAChC,IAAA,gBAAA,EAAiB;AAAA,EACnB,CAAA,EAAG;AAAA,IACD,QAAA;AAAA,IACA,aAAA,CAAc,SAAA;AAAA,IACd,gBAAA;AAAA,IACA,SAAA,CAAU;AAAA,GACX,CAAA;AAED,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,qBAAqB,OAAA,EAAS;AAClC,IAAA,cAAA,CAAe,MAAM,CAAA;AAAA,EACvB,CAAA,EAAG,CAAC,MAAA,EAAQ,cAAc,CAAC,CAAA;AAE3B,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIK,QAAAA,CAA8B;AAAA,IAC1D,KAAA,EAAO,EAAA;AAAA,IACP,cAAA,EAAgB,IAAA;AAAA,IAChB,SAAA,EAAW,EAAA;AAAA,IACX,QAAA,EAAU,EAAA;AAAA,IACV,OAAA,EAAS,EAAA;AAAA,IACT,OAAA,EAAS,EAAA;AAAA,IACT,QAAA,EAAU,EAAA;AAAA,IACV,IAAA,EAAM,EAAA;AAAA,IACN,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY,EAAA;AAAA,IACZ,KAAA,EAAO,EAAA;AAAA,IACP,WAAA,EAAa,IAAA;AAAA,IACb,cAAA,EAAgB,EAAA;AAAA,IAChB,cAAA,EAAgB,EAAA;AAAA,IAChB,YAAA,EAAc,EAAA;AAAA,IACd,YAAA,EAAc,EAAA;AAAA,IACd,YAAA,EAAc,EAAA;AAAA,IACd,YAAA,EAAc;AAAA,GACf,CAAA;AAED,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,SAAwB,kBAAkB,CAAA;AACpF,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAClF,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAClF,EAAA,MAAM,CAAC,wBAAA,EAA0B,2BAA2B,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC9E,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,SAAS,EAAE,CAAA;AAC/C,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAClE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAC9D,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,SAAS,KAAK,CAAA;AAExD,EAAA,MAAM,WAAA,GAAcN,OAAO,KAAK,CAAA;AAChC,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,QAAA,IAAY,WAAA,CAAY,OAAA,EAAS;AACtC,IAAA,WAAA,CAAY,OAAA,GAAU,IAAA;AACtB,IAAA,MAAM,IAAA,GAAO,8BAA8B,QAAQ,CAAA;AACnD,IAAA,UAAA,CAAW,CAAC,CAAA,MAAO;AAAA,MACjB,GAAG,CAAA;AAAA,MACH,KAAA,EAAO,QAAA,CAAS,KAAA,IAAS,CAAA,CAAE,KAAA;AAAA,MAC3B,SAAA,EAAW,QAAA,CAAS,SAAA,IAAa,CAAA,CAAE,SAAA;AAAA,MACnC,QAAA,EAAU,QAAA,CAAS,QAAA,IAAY,CAAA,CAAE,QAAA;AAAA,MACjC,KAAA,EAAO,QAAA,CAAS,KAAA,IAAS,CAAA,CAAE,KAAA;AAAA,MAC3B,OAAA,EAAS,IAAA,EAAM,OAAA,IAAW,CAAA,CAAE,OAAA;AAAA,MAC5B,UAAA,EAAY,IAAA,EAAM,OAAA,IAAW,CAAA,CAAE,UAAA;AAAA,MAC/B,QAAA,EAAU,IAAA,EAAM,YAAA,IAAgB,CAAA,CAAE,QAAA;AAAA,MAClC,IAAA,EAAM,IAAA,EAAM,YAAA,IAAgB,CAAA,CAAE,IAAA;AAAA,MAC9B,WAAA,EAAa,IAAA,EAAM,WAAA,IAAe,CAAA,CAAE,WAAA;AAAA,MACpC,cAAA,EAAgB,IAAA,EAAM,cAAA,IAAkB,CAAA,CAAE,cAAA;AAAA,MAC1C,cAAA,EAAgB,IAAA,EAAM,cAAA,IAAkB,CAAA,CAAE,cAAA;AAAA,MAC1C,YAAA,EAAc,IAAA,EAAM,YAAA,IAAgB,CAAA,CAAE,YAAA;AAAA,MACtC,YAAA,EAAc,IAAA,EAAM,YAAA,IAAgB,CAAA,CAAE,YAAA;AAAA,MACtC,YAAA,EAAc,IAAA,EAAM,YAAA,IAAgB,CAAA,CAAE,YAAA;AAAA,MACtC,YAAA,EAAc,IAAA,EAAM,YAAA,IAAgB,CAAA,CAAE;AAAA,KACxC,CAAE,CAAA;AAAA,EACJ,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,kBAAA,GAAqB,OAAA,CAAQ,UAAA,CAAW,IAAA,EAAK;AACnD,EAAA,MAAM,oBAAA,GAAuB,qBAAA;AAAA,IAC3B,MAAA;AAAA,IACA,kBAAA,IAAsB,MAAA;AAAA,IACtB,CAAC,CAAC;AAAA,GACJ;AAEA,EAAA,MAAM,YAAA,GAAeO,QAAQ,MAAM;AACjC,IAAA,MAAM,MAIA,EAAC;AACP,IAAA,KAAA,MAAW,KAAA,IAAS,oBAAA,CAAqB,IAAA,EAAM,MAAA,IAAU,EAAC,EAAG;AAC3D,MAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,KAAA,IAAS,EAAC,EAAG;AACpC,QAAA,GAAA,CAAI,IAAA,CAAK;AAAA,UACP,KAAK,CAAA,EAAG,KAAA,CAAM,YAAY,EAAE,CAAA,EAAA,EAAK,KAAK,MAAM,CAAA,CAAA;AAAA,UAC5C,KAAA;AAAA,UACA;AAAA,SACD,CAAA;AAAA,MACH;AAAA,IACF;AACA,IAAA,OAAO,GAAA;AAAA,EACT,CAAA,EAAG,CAAC,oBAAA,CAAqB,IAAA,EAAM,MAAM,CAAC,CAAA;AAEtC,EAAA,MAAM,YAAA,GAAeA,OAAAA;AAAA,IACnB,MAAM,yBAAyB,QAAQ,CAAA;AAAA,IACvC,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,MAAM,eAAA,GAAkBA,OAAAA;AAAA,IACtB,MAAM,sBAAA,CAAuB,SAAA,EAAW,YAAY,CAAA;AAAA,IACpD,CAAC,WAAW,YAAY;AAAA,GAC1B;AAEA,EAAA,MAAM,WAAA,GAAcA,QAAQ,MAAM;AAChC,IAAA,IAAI,eAAA,IAAmB,YAAA,CAAa,MAAA,GAAS,CAAA,EAAG,OAAO,YAAA;AACvD,IAAA,IAAI,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG,OAAO,SAAA;AACjC,IAAA,OAAO,YAAA;AAAA,EACT,CAAA,EAAG,CAAC,YAAA,EAAc,eAAA,EAAiB,SAAS,CAAC,CAAA;AAE7C,EAAA,MAAM,mBAAA,GAAsBR,OAAsB,IAAI,CAAA;AACtD,EAAA,MAAM,gBAAA,GAAmBA,OAAO,KAAK,CAAA;AAErC,EAAA,MAAM,aAAA,GAAgBQ,OAAAA;AAAA,IACpB,MAAM,SAAA,CAAU,MAAA,CAAO,CAAC,GAAA,EAAK,IAAA,KAAS,GAAA,GAAM,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,QAAA,EAAU,CAAC,CAAA;AAAA,IACzE,CAAC,SAAS;AAAA,GACZ;AAEA,EAAA,MAAM,QAAA,GAAW,eAAA,GACZ,QAAA,EAAU,MAAA,EAAQ,YAAY,aAAA,GAC/B,aAAA;AACJ,EAAA,MAAM,QAAA,GAAW,eAAA,GAAmB,QAAA,EAAU,MAAA,EAAQ,iBAAiB,CAAA,GAAK,CAAA;AAC5E,EAAA,MAAM,QAAA,GAAW,eAAA,GAAmB,QAAA,EAAU,MAAA,EAAQ,iBAAiB,CAAA,GAAK,CAAA;AAC5E,EAAA,MAAM,GAAA,GAAM,eAAA,GAAmB,QAAA,EAAU,MAAA,EAAQ,YAAY,CAAA,GAAK,CAAA;AAClE,EAAA,MAAM,KAAA,GAAQ,kBACT,QAAA,EAAU,MAAA,EAAQ,SAAS,QAAA,GAAW,QAAA,GAAW,MAAM,QAAA,GACxD,aAAA;AAEJ,EAAA,MAAM,0BAAA,GAA6BD,WAAAA;AAAA,IACjC,CAAC,IAAA,KAAuB;AACtB,MAAA,WAAA,CAAY,YAAA;AAAA,QACV,qBAAqB,MAAM,CAAA;AAAA,QAC3B,CAAC,IAAA,KACC,CAAC,OACG,EAAE,IAAA,EAAM,MAAM,cAAA,EAAgB,EAAE,OAAA,EAAS,IAAG,EAAE,GAC9C,EAAE,GAAG,IAAA,EAAM,MAAM,IAAA;AAAK,OAC9B;AAAA,IACF,CAAA;AAAA,IACA,CAAC,aAAa,MAAM;AAAA,GACtB;AAEA,EAAAN,UAAU,MAAM;AACd,IAAA,mBAAA,CAAoB,OAAA,GAAU,IAAA;AAAA,EAChC,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,aAAA,CAAc,SAAA,IAAa,CAAC,QAAA,EAAU;AAC3C,IAAA,IAAI,iBAAiB,OAAA,EAAS;AAE9B,IAAA,MAAM,QAAA,GAAW,yBAAyB,QAAQ,CAAA;AAClD,IAAA,IAAI,SAAA,CAAU,MAAA,KAAW,CAAA,IAAK,QAAA,CAAS,WAAW,CAAA,EAAG;AACrD,IAAA,IAAI,sBAAA,CAAuB,SAAA,EAAW,QAAQ,CAAA,EAAG;AAEjD,IAAA,MAAM,gBAAA,GAAmB,6BAAA,CAA8B,SAAA,EAAW,QAAQ,CAAA;AAC1E,IAAA,IAAI,gBAAA,CAAiB,WAAW,CAAA,EAAG;AAEnC,IAAA,MAAM,UAAA,GAAa,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,kBAAA,CAAmB,SAAS,CAAC,CAAA,EAAA,EAAK,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAC/F,IAAA,IAAI,mBAAA,CAAoB,YAAY,UAAA,EAAY;AAEhD,IAAA,mBAAA,CAAoB,OAAA,GAAU,UAAA;AAC9B,IAAA,gBAAA,CAAiB,OAAA,GAAU,IAAA;AAC3B,IAAA,gBAAA,CAAiB,IAAI,CAAA;AAErB,IAAA,KAAA,CAAM,YAAY;AAChB,MAAA,IAAI;AACF,QAAA,MAAM,iBAAA,GAAoB,CAAC,WAAA,KAA8B;AACvD,UAAA,0BAAA,CAA2B,WAAW,CAAA;AAAA,QACxC,CAAA;AAEA,QAAA,KAAA,MAAW,UAAU,gBAAA,EAAkB;AACrC,UAAA,IAAI,MAAA,CAAO,MAAA,KAAW,QAAA,IAAY,MAAA,CAAO,WAAW,QAAA,EAAU;AAC5D,YAAA,IAAI;AACF,cAAA,MAAM,cACJ,MAAA,CAAO,MAAA,KAAW,QAAA,GACd,MAAM,uBAAuB,WAAA,CAAY;AAAA,gBACvC,MAAA;AAAA,gBACA,QAAQ,MAAA,CAAO;AAAA,eAChB,CAAA,GACD,MAAM,sBAAA,CAAuB,WAAA,CAAY;AAAA,gBACvC,MAAA;AAAA,gBACA,QAAQ,MAAA,CAAO,MAAA;AAAA,gBACf,IAAA,EAAM,EAAE,QAAA,EAAU,MAAA,CAAO,QAAA;AAAS,eACnC,CAAA;AACP,cAAA,iBAAA,CAAkB,WAAW,CAAA;AAAA,YAC/B,CAAA,CAAA,MAAQ;AAAA,YAER;AAAA,UACF;AAAA,QACF;AAEA,QAAA,KAAA,MAAW,UAAU,gBAAA,EAAkB;AACrC,UAAA,IAAI,MAAA,CAAO,WAAW,KAAA,EAAO;AAC7B,UAAA,IAAI;AACF,YAAA,MAAM,WAAA,GAAc,MAAM,mBAAA,CAAoB,WAAA,CAAY;AAAA,cACxD,MAAA;AAAA,cACA,WAAW,MAAA,CAAO,SAAA;AAAA,cAClB,UAAU,MAAA,CAAO;AAAA,aAClB,CAAA;AACD,YAAA,iBAAA,CAAkB,WAAW,CAAA;AAAA,UAC/B,CAAA,CAAA,MAAQ;AAAA,UAER;AAAA,QACF;AAEA,QAAA,MAAM,cAAc,OAAA,EAAQ;AAAA,MAC9B,CAAA,SAAE;AACA,QAAA,gBAAA,CAAiB,OAAA,GAAU,KAAA;AAC3B,QAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA,MACxB;AAAA,IACF,CAAA,GAAG;AAAA,EACL,CAAA,EAAG;AAAA,IACD,mBAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,aAAA;AAAA,IACA,sBAAA;AAAA,IACA,SAAA;AAAA,IACA,0BAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,sBAAA,GAAyBM,YAAY,YAAY;AACrD,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,MAAM,SAAA,GAAY,MAAM,WAAA,CAAY,WAAA,CAAY;AAAA,MAC9C,MAAA;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,OAAO,OAAA,CAAQ;AAAA;AACjB,KACD,CAAA;AACD,IAAA,0BAAA,CAA2B,SAAS,CAAA;AAEpC,IAAA,MAAM,WAAA,GAAA,CAAe,OAAA,CAAQ,WAAA,IAAe,IAAA,EAAM,WAAA,EAAY;AAC9D,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,YAAA,IAAgB,OAAA,CAAQ,IAAA;AACrD,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,YAAA,IAAgB,OAAA,CAAQ,QAAA;AACrD,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,MAAM,OAAA,CAAQ,OAAA;AAAA,MACd,UAAU,OAAA,CAAQ,OAAA;AAAA,MAClB,IAAA,EAAM,YAAA;AAAA,MACN,WAAA;AAAA,MACA,OAAA,EAAS,QAAQ,OAAA,IAAW,IAAA;AAAA,MAC5B,QAAA,EAAU,QAAQ,QAAA,IAAY,IAAA;AAAA,MAC9B,QAAA,EAAU,YAAA;AAAA,MACV,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,QAAA,EAAU,YAAA;AAAA,MACV,KAAA,EAAO,QAAQ,KAAA,IAAS,IAAA;AAAA,MACxB,QAAA,EAAU,IAAA;AAAA,MACV,SAAA,EAAW,IAAA;AAAA,MACX,GAAA,EAAK;AAAA,QACH,cAAA,EAAgB,QAAQ,cAAA,IAAkB,EAAA;AAAA,QAC1C,YAAA,EAAc,QAAQ,YAAA,IAAgB,EAAA;AAAA,QACtC,YAAA,EAAc,QAAQ,YAAA,IAAgB;AAAA;AACxC,KACF;AAEA,IAAA,MAAM,WAAA,GAAc,MAAM,eAAA,CAAgB,WAAA,CAAY;AAAA,MACpD,MAAA;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,eAAA,EAAiB,WAAA;AAAA,QACjB,cAAA,EACE,aAAA,KAAkB,kBAAA,GAAqB,WAAA,GAAc;AAAA;AACzD,KACD,CAAA;AACD,IAAA,0BAAA,CAA2B,WAAW,CAAA;AACtC,IAAA,MAAM,cAAc,OAAA,EAAQ;AAAA,EAC9B,CAAA,EAAG;AAAA,IACD,aAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,0BAAA;AAAA,IACA,eAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,eAAA,GAAkBA,WAAAA;AAAA,IACtB,OAAO,SAAA,KAAuC;AAC5C,MAAA,MAAM,WAAA,GAAc,MAAM,iBAAA,CAAkB,WAAA,CAAY;AAAA,QACtD,MAAA;AAAA,QACA,IAAA,EAAM;AAAA,UACJ,MAAA,EAAQ,UAAU,IAAA,CAAK,MAAA;AAAA,UACvB,gBAAA,EAAkB,UAAU,IAAA,CAAK,gBAAA;AAAA,UACjC,WAAA,EAAa,SAAA,CAAU,IAAA,CAAK,WAAA,IAAe,IAAA;AAAA,UAC3C,QAAA,EAAU,SAAA,CAAU,KAAA,CAAM,QAAA,IAAY,IAAA;AAAA,UACtC,iBAAA,EAAmB,SAAA,CAAU,KAAA,CAAM,iBAAA,IAAqB,IAAA;AAAA,UACxD,UAAA,EAAY,IAAA;AAAA,UACZ,aAAA,EAAe,IAAA;AAAA,UACf,aAAA,EAAe,IAAA;AAAA,UACf,aAAA,EAAe;AAAA;AACjB,OACD,CAAA;AACD,MAAA,0BAAA,CAA2B,WAAW,CAAA;AAAA,IACxC,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,0BAAA,EAA4B,iBAAiB;AAAA,GACxD;AAEA,EAAA,MAAM,iBAAA,GAAoBA,YAAY,YAAY;AAChD,IAAA,MAAM,IAAA,GAAO,WAAW,IAAA,EAAK;AAC7B,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,cAAA,CAAe,IAAI,CAAA;AACnB,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,qBAAA,CAAsB,WAAA,CAAY,EAAE,QAAQ,IAAA,EAAM,EAAE,IAAA,EAAK,EAAG,CAAA;AACnF,MAAA,0BAAA,CAA2B,QAAQ,CAAA;AACnC,MAAA,aAAA,CAAc,EAAE,CAAA;AAAA,IAClB,SAAS,KAAA,EAAO;AACd,MAAA,cAAA,CAAe,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,iCAA8B,CAAA;AAAA,IACxF;AAAA,EACF,GAAG,CAAC,qBAAA,EAAuB,MAAA,EAAQ,UAAA,EAAY,0BAA0B,CAAC,CAAA;AAE1E,EAAA,MAAM,kBAAA,GAAqBA,WAAAA;AAAA,IACzB,OAAO,IAAA,KAAiB;AACtB,MAAA,cAAA,CAAe,IAAI,CAAA;AACnB,MAAA,IAAI;AACF,QAAA,MAAM,WAAW,MAAM,wBAAA,CAAyB,YAAY,EAAE,MAAA,EAAQ,MAAM,CAAA;AAC5E,QAAA,0BAAA,CAA2B,QAAQ,CAAA;AAAA,MACrC,SAAS,KAAA,EAAO;AACd,QAAA,cAAA,CAAe,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,iCAA8B,CAAA;AAAA,MACxF;AAAA,IACF,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,0BAAA,EAA4B,wBAAwB;AAAA,GAC/D;AAEA,EAAA,MAAM,WAAA,GAAc,YAAY,MAAM,CAAA,CAAA;AACtC,EAAA,MAAM,qBAAqB,oBAAA,CAAqB,MAAA;AAChD,EAAA,MAAM,0BAA0B,oBAAA,CAAqB,WAAA;AACrD,EAAA,MAAM,yBAAA,GAA4BP,OAAsB,IAAI,CAAA;AAE5D,EAAAC,UAAU,MAAM;AACd,IAAA,yBAAA,CAA0B,OAAA,GAAU,IAAA;AAAA,EACtC,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,MAAM,oBAAA,GAAuBM,WAAAA;AAAA,IAC3B,CAAC,iBAAA,KAA8B;AAC7B,MAAA,MAAM,SAAS,cAAA,CAAe,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,iBAAiB,CAAA;AACtE,MAAA,IAAI,CAAC,MAAA,IAAU,CAAC,4BAAA,CAA6B,MAAM,CAAA,EAAG;AAEtD,MAAA,MAAM,SAAA,GAAY,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,iBAAiB,CAAA,CAAA;AAChD,MAAA,IAAI,yBAAA,CAA0B,YAAY,SAAA,EAAW;AACrD,MAAA,yBAAA,CAA0B,OAAA,GAAU,SAAA;AAEpC,MAAA,kBAAA,CAAmB;AAAA,QACjB,MAAA;AAAA,QACA,IAAA,EAAM,EAAE,iBAAA,EAAmB,WAAA;AAAY,OACxC,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,kBAAA,EAAoB,WAAA,EAAa,cAAc;AAAA,GAC1D;AAEA,EAAA,MAAM,mBAAA,GAAsBA,WAAAA;AAAA,IAC1B,CAAC,iBAAA,KAA8B;AAC7B,MAAA,sBAAA,CAAuB,iBAAiB,CAAA;AACxC,MAAA,2BAAA,CAA4B,KAAK,CAAA;AACjC,MAAA,oBAAA,CAAqB,iBAAiB,CAAA;AAAA,IACxC,CAAA;AAAA,IACA,CAAC,oBAAoB;AAAA,GACvB;AAEA,EAAA,MAAM,MAAA,GAASA,WAAAA;AAAA,IACb,OAAO,OAAA,KAAsC;AAC3C,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,IAAI;AACF,QAAA,MAAM,sBAAA,EAAuB;AAC7B,QAAA,IAAI,mBAAA,EAAqB;AACvB,UAAA,MAAM,SAAS,YAAA,CAAa,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,mBAAmB,CAAA;AACrE,UAAA,IAAI,MAAA,EAAQ,MAAM,eAAA,CAAgB,EAAE,KAAA,EAAO,OAAO,KAAA,EAAO,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM,CAAA;AAAA,QAC9E;AACA,QAAA,MAAM,IAAA,GACJ,mBAAA,IAAwB,cAAA,CAAe,CAAC,CAAA,EAAsC,IAAA;AAChF,QAAA,IAAI,CAAC,IAAA,EAAM;AACT,UAAA,YAAA,CAAa,kCAA+B,CAAA;AAC5C,UAAA;AAAA,QACF;AACA,QAAA,MAAM,SAAS,cAAA,CAAe,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,IAAI,CAAA;AACzD,QAAA,MAAM,cAAA,GAAiB,MAAA,GAAS,4BAAA,CAA6B,MAAM,CAAA,GAAI,KAAA;AAEvE,QAAA,IAAI,cAAA,EAAgB;AAClB,UAAA,IAAI,CAAC,wBAAA,EAA0B;AAC7B,YAAA,YAAA,CAAa,gEAAgE,CAAA;AAC7E,YAAA;AAAA,UACF;AACA,UAAA,MAAM,WAAW,oBAAA,CAAqB,IAAA;AACtC,UAAA,MAAM,UAAA,GACJ,oBAAA,CAAqB,SAAA,EAAW,IAAA,CAAK,iBAAA,IAAqB,IAAA;AAC5D,UAAA,IAAI,QAAA,IAAY,eAAe,IAAA,EAAM;AACnC,YAAA,OAAO,QAAA;AAAA,UACT;AAAA,QACF;AAEA,QAAA,MAAM,MAAA,GAAS,MAAM,uBAAA,CAAwB;AAAA,UAC3C,MAAA;AAAA,UACA,IAAA,EAAM;AAAA,YACJ,iBAAA,EAAmB,IAAA;AAAA,YACnB,WAAA;AAAA,YACA,GAAI,SAAS,UAAA,GAAa,EAAE,YAAY,OAAA,CAAQ,UAAA,KAAe;AAAC;AAClE,SACD,CAAA;AACD,QAAA,OAAO,MAAA;AAAA,MACT,SAAS,KAAA,EAAO;AACd,QAAA,YAAA,CAAa,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,+BAA+B,CAAA;AACrF,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACA,oBAAA,CAAqB,IAAA;AAAA,MACrB,oBAAA,CAAqB,WAAW,IAAA,CAAK,iBAAA;AAAA,MACrC,eAAA;AAAA,MACA,uBAAA;AAAA,MACA,MAAA;AAAA,MACA,WAAA;AAAA,MACA,cAAA;AAAA,MACA,wBAAA;AAAA,MACA,sBAAA;AAAA,MACA,mBAAA;AAAA,MACA,mBAAA;AAAA,MACA;AAAA;AACA,GACF;AAEA,EAAA,MAAM,gBACJ,aAAA,CAAc,SAAA,IAAa,CAAC,aAAA,CAAc,aAAa,CAAC,aAAA;AAE1D,EAAA,MAAM,EAAE,qBAAA,EAAuB,cAAA,EAAe,GAAI,eAAA,CAAgB;AAAA,IAChE,MAAA;AAAA,IACA,OAAA,EAAS,OAAA,CAAQ,MAAA,CAAO,IAAA,EAAM,CAAA;AAAA,IAC9B,aAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,aAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAA;AAAA,IACA,aAAA;AAAA,IACA,qBAAA;AAAA,IACA,wBAAA;AAAA,IACA,cAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA,gBAAA;AAAA,IACA,mBAAA;AAAA,IACA,sBAAA;AAAA,IACA,mBAAA;AAAA,IACA,sBAAA;AAAA,IACA,mBAAA;AAAA,IACA,wBAAA;AAAA,IACA,2BAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA,iBAAA;AAAA,IACA,kBAAA;AAAA,IACA,oBAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAA;AAAA,IACA,KAAA;AAAA,IACA,oBAAA;AAAA,IACA,yBAAyB,oBAAA,CAAqB,IAAA;AAAA,IAC9C,yBAAA,EACE,oBAAA,CAAqB,SAAA,EAAW,IAAA,CAAK,iBAAA,IAAqB,IAAA;AAAA,IAC5D,wBAAwB,oBAAA,CAAqB,SAAA;AAAA,IAC7C,oBAAA,EAAsB,oBAAA,CAAqB,OAAA,GACvC,0EAAA,GACA,IAAA;AAAA,IACJ,sBAAsB,4BAAA,CAA6B,WAAA;AAAA,IACnD,qBAAA;AAAA,IACA,wBAAA;AAAA,IACA,gBAAA;AAAA,IACA,sBAAA;AAAA,IACA,QAAA,EACE,aAAA,IACA,WAAA,CAAY,SAAA,IACZ,eAAA,CAAgB,aAChB,iBAAA,CAAkB,SAAA,IAClB,4BAAA,CAA6B,SAAA,IAC7B,oBAAA,CAAqB;AAAA,GACzB;AACF;ACzkBA,SAAS,WAAA,CAAY,EAAE,IAAA,EAAM,SAAA,EAAW,UAAS,EAAsB;AACrE,EAAA,uBACEb,GAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAY,WACZ,QAAA,EACH,CAAA;AAEJ;AAmBO,SAAS,YAAA,CAAa;AAAA,EAC3B,MAAA;AAAA,EACA,SAAA,EAAW,aAAA;AAAA,EACX,OAAA;AAAA,EACA,QAAA,GAAW,GAAA;AAAA,EACX,UAAA;AAAA,EACA,QAAA,GAAW,GAAA;AAAA,EACX,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,MAAM,aAAA,GAAgB;AACxB,CAAA,EAAsB;AACpB,EAAA,MAAM,IAAA,GAAO,aAAA;AACb,EAAA,MAAM,eAAe,QAAA,CAAS,CAAC,MAAM,CAAA,CAAE,IAAA,EAAM,OAAO,IAAI,CAAA;AACxD,EAAA,MAAM,WAAA,GAAc,QAAA;AAAA,IAClB,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,GAAA,EAAK,UAAU,QAAA,EAAU;AAAA,GAC1C;AACA,EAAA,MAAM,SAAA,GAAY,iBAAiB,YAAA,IAAgB,OAAA;AACnD,EAAA,MAAM,eAAe,OAAA,IAAW,WAAA;AAEhC,EAAA,MAAM,OAAA,GAAU,mBAAmB,MAAM,CAAA;AAEzC,EAAA,MAAM;AAAA,IACJ,YAAA;AAAA,IACA,mBAAA;AAAA,IACA,sBAAA;AAAA,IACA,cAAA;AAAA,IACA,mBAAA;AAAA,IACA;AAAA,GACF,GAAI,OAAA;AAEJ,EAAAO,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,YAAA,CAAa,MAAA,IAAU,mBAAA,EAAqB;AACjD,IAAA,sBAAA,CAAuB,YAAA,CAAa,CAAC,CAAA,CAAG,GAAG,CAAA;AAAA,EAC7C,CAAA,EAAG,CAAC,YAAA,EAAc,mBAAA,EAAqB,sBAAsB,CAAC,CAAA;AAE9D,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,cAAA,CAAe,MAAA,IAAU,mBAAA,EAAqB;AACnD,IAAA,MAAM,KAAA,GACJ,eAAe,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,SAAS,CAAA,IAAK,cAAA,CAAe,CAAC,CAAA;AAC7D,IAAA,IAAI,KAAA,EAAO,mBAAA,CAAoB,KAAA,CAAM,IAAI,CAAA;AAAA,EAC3C,CAAA,EAAG,CAAC,cAAA,EAAgB,mBAAA,EAAqB,mBAAmB,CAAC,CAAA;AAE7D,EAAA,MAAM,eAAA,GAAkBO,OAAAA;AAAA,IACtB,MACE,OAAA,CAAQ,YAAA,CAAa,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MAC/B,KAAK,CAAA,CAAE,GAAA;AAAA,MACP,KAAA,EAAO,CAAA,CAAE,IAAA,CAAK,IAAA,IAAQ,UAAA;AAAA,MACtB,QAAA,EACE,CAAA,CAAE,IAAA,CAAK,WAAA,KACN,CAAA,CAAE,IAAA,CAAK,qBAAA,IAAyB,IAAA,GAC7B,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,qBAAqB,CAAA,cAAA,CAAA,GAC/B,mBAAA,CAAA;AAAA,MACN,KAAA,EAAO,MAAA,CAAO,CAAA,CAAE,IAAA,CAAK,KAAK,CAAA,IAAK;AAAA,KACjC,CAAE,CAAA;AAAA,IACJ,CAAC,QAAQ,YAAY;AAAA,GACvB;AAEA,EAAA,MAAM,6BAAA,GAAgCD,WAAAA;AAAA,IACpC,CAAC,MAAA,KAAoC;AACnC,MAAA,IAAI,MAAA,CAAO,SAAS,SAAA,EAAW;AAC7B,QAAA,OAAA,CAAQ,gBAAA,EAAiB;AACzB,QAAA,MAAM,GAAA,GAAM,gBAAA,GAAmB,MAAA,EAAQ,MAAA,CAAO,aAAa,CAAA;AAC3D,QAAA,IAAI,GAAA,IAAO,OAAO,MAAA,KAAW,WAAA,EAAa;AACxC,UAAA,MAAA,CAAO,QAAA,CAAS,OAAO,GAAG,CAAA;AAAA,QAC5B;AACA,QAAA;AAAA,MACF;AACA,MAAA,IAAI,MAAA,CAAO,SAAS,UAAA,EAAY;AAC9B,QAAA,OAAA,CAAQ,gBAAA,EAAiB;AACzB,QAAA,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA;AACjC,QAAA;AAAA,MACF;AACA,MAAAM,KAAAA,CAAM,KAAA,CAAM,MAAA,CAAO,OAAO,CAAA;AAAA,IAC5B,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,gBAAA,EAAkB,OAAO;AAAA,GACpC;AAEA,EAAA,MAAM,YAAA,GAAe,OAAO,OAAA,KAAsC;AAChE,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,MAAA,CAAO,OAAO,CAAA;AAC3C,MAAA,IAAI,CAAC,MAAA,EAAQ;AACb,MAAA,OAAA,CAAQ,gBAAA,EAAiB;AACzB,MAAA,IAAI,gBAAA,EAAkB;AACpB,QAAA,gBAAA,CAAiB,MAAM,CAAA;AACvB,QAAA;AAAA,MACF;AACA,MAAA,MAAM,GAAA,GAAM,gBAAA;AAAA,QACV,MAAA;AAAA,QACA,MAAA,CAAO,SAAS,aAAA,IAAiB,KAAA;AAAA,OACnC;AACA,MAAA,IAAI,GAAA,IAAO,OAAO,MAAA,KAAW,WAAA,EAAa;AACxC,QAAA,MAAA,CAAO,QAAA,CAAS,OAAO,GAAG,CAAA;AAAA,MAC5B;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAA;AAEA,EAAA,IAAI,CAAC,MAAA,CAAO,IAAA,EAAK,EAAG;AAClB,IAAA,uBACEnB,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBACb,QAAA,kBAAAe,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACb,QAAA,EAAA;AAAA,sBAAAf,GAAAA,CAAC,QAAG,QAAA,EAAA,kBAAA,EAAgB,CAAA;AAAA,sBACpBA,GAAAA,CAAC,GAAA,EAAA,EAAE,QAAA,EAAA,6BAAA,EAA2B;AAAA,KAAA,EAChC,CAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,MAAM,cAAA,mBACJA,GAAAA,CAAC,QAAA,EAAA,EAAO,WAAU,2BAAA,EAChB,QAAA,kBAAAA,GAAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,QAAA,EAAU,WAAU,4BAAA,EAC7B,QAAA,EAAA,YAAA,mBAAeA,GAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,cAAc,GAAA,EAAK,SAAA,EAAW,CAAA,GAAK,SAAA,EAC/D,CAAA,EACF,CAAA;AAGF,EAAA,IAAI,OAAA,CAAQ,aAAA,CAAc,SAAA,IAAa,OAAA,CAAQ,aAAA,EAAe;AAC5D,IAAA,uBAAOA,GAAAA,CAAC,oBAAA,EAAA,EAAqB,MAAA,EAAQ,cAAA,EAAgB,CAAA;AAAA,EACvD;AAEA,EAAA,IAAI,OAAA,CAAQ,cAAc,OAAA,EAAS;AACjC,IAAA,uBACEe,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACZ,QAAA,EAAA;AAAA,MAAA,cAAA;AAAA,sBACDA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACb,QAAA,EAAA;AAAA,wBAAAf,GAAAA,CAAC,QAAG,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,wBACxBA,GAAAA,CAAC,GAAA,EAAA,EACE,kBAAQ,aAAA,CAAc,KAAA,EAAO,WAC5B,gDAAA,EACJ,CAAA;AAAA,wBACAA,GAAAA,CAAC,IAAA,EAAA,EAAK,MAAM,QAAA,EAAU,SAAA,EAAU,8BAA6B,QAAA,EAAA,iBAAA,EAE7D;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,IAAI,QAAQ,wBAAA,EAA0B;AACpC,IAAA,uBACEe,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACZ,QAAA,EAAA;AAAA,MAAA,cAAA;AAAA,sBACDA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACb,QAAA,EAAA;AAAA,wBAAAf,GAAAA,CAAC,QAAG,QAAA,EAAA,qBAAA,EAAmB,CAAA;AAAA,wBACvBA,GAAAA,CAAC,GAAA,EAAA,EAAE,QAAA,EAAA,8FAAA,EAGH,CAAA;AAAA,wBACAA,GAAAA,CAAC,IAAA,EAAA,EAAK,MAAM,QAAA,EAAU,SAAA,EAAU,8BAA6B,QAAA,EAAA,oBAAA,EAE7D;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEe,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EAAuB,6BAAyB,IAAA,EAC5D,QAAA,EAAA;AAAA,IAAA,cAAA;AAAA,IAEA,OAAA,CAAQ,wCACPA,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,4CAAA;AAAA,QACV,IAAA,EAAK,OAAA;AAAA,QACL,WAAA,EAAU,QAAA;AAAA,QAEV,QAAA,EAAA;AAAA,0BAAAf,GAAAA,CAAC,OAAE,QAAA,EAAA,oCAAA,EAEH,CAAA;AAAA,0BACAA,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,SAAA,EAAU,4CAAA;AAAA,cACV,SAAS,OAAA,CAAQ,cAAA;AAAA,cAClB,QAAA,EAAA;AAAA;AAAA;AAED;AAAA;AAAA,KACF,GACE,IAAA;AAAA,oBAEJe,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,EAAA;AAAA,sBAAAf,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EACb,QAAA,kBAAAA,GAAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,SAAS,OAAA,CAAQ,OAAA;AAAA,UACjB,SAAS,OAAA,CAAQ,OAAA;AAAA,UACjB,eAAA,EAAiB,CAAC,KAAA,KAChB,OAAA,CAAQ,UAAA,CAAW,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,GAAG,KAAA,EAAM,CAAE,CAAA;AAAA,UAEhD,eAAe,OAAA,CAAQ,aAAA;AAAA,UACvB,iBAAiB,OAAA,CAAQ,gBAAA;AAAA,UACzB,eAAA;AAAA,UACA,eAAA,EAAiB,QAAQ,oBAAA,CAAqB,SAAA;AAAA,UAC9C,aAAA,EACE,QAAQ,oBAAA,CAAqB,OAAA,GACxB,QAAQ,oBAAA,CAAqB,KAAA,EAAO,WACrC,kCAAA,GACA,IAAA;AAAA,UAEN,qBAAqB,OAAA,CAAQ,mBAAA;AAAA,UAC7B,kBAAkB,OAAA,CAAQ,sBAAA;AAAA,UAC1B,gBAAgB,OAAA,CAAQ,cAAA;AAAA,UACxB,qBAAqB,OAAA,CAAQ,mBAAA;AAAA,UAC7B,qBAAqB,OAAA,CAAQ,mBAAA;AAAA,UAC7B,0BAA0B,OAAA,CAAQ,wBAAA;AAAA,UAClC,6BAA6B,OAAA,CAAQ,2BAAA;AAAA,UACrC,yBAAyB,OAAA,CAAQ,uBAAA;AAAA,UACjC,2BAA2B,OAAA,CAAQ,yBAAA;AAAA,UACnC,wBAAwB,OAAA,CAAQ,sBAAA;AAAA,UAChC,sBAAsB,OAAA,CAAQ,oBAAA;AAAA,UAC9B,eAAA,EAAiB,OAAO,IAAA,KAAS;AAC/B,YAAA,MAAM,WAAW,MAAM,OAAA,CAAQ,qBAAqB,EAAE,MAAA,EAAQ,MAAM,CAAA;AACpE,YAAA,OAAO,EAAE,GAAA,EAAK,QAAA,CAAS,GAAA,EAAI;AAAA,UAC7B,CAAA;AAAA,UACA,yBAAA,EAA2B,6BAAA;AAAA,UAC3B,UAAU,OAAA,CAAQ,QAAA;AAAA,UAClB,WAAW,OAAA,CAAQ,SAAA;AAAA,UACnB,QAAA,EAAU,OAAA,CAAQ,QAAA,IAAY,OAAA,CAAQ,qBAAA;AAAA,UACtC,QAAA,EAAU,YAAA;AAAA,UACV,UAAA;AAAA,UACA;AAAA;AAAA,OACF,EACF,CAAA;AAAA,sBAEAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sCACb,QAAA,kBAAAA,GAAAA;AAAA,QAAC,oBAAA;AAAA,QAAA;AAAA,UACC,OAAO,OAAA,CAAQ,WAAA;AAAA,UACf,UAAU,OAAA,CAAQ,QAAA;AAAA,UAClB,UAAU,OAAA,CAAQ,QAAA;AAAA,UAClB,UAAU,OAAA,CAAQ,QAAA;AAAA,UAClB,UAAU,OAAA,CAAQ,QAAA;AAAA,UAClB,KAAK,OAAA,CAAQ,GAAA;AAAA,UACb,OAAO,OAAA,CAAQ,KAAA;AAAA,UACf,WAAA,EAAa,OAAA,CAAQ,QAAA,EAAU,cAAA,IAAkB,EAAC;AAAA,UAClD,YAAY,OAAA,CAAQ,UAAA;AAAA,UACpB,aAAa,OAAA,CAAQ,WAAA;AAAA,UACrB,UAAA,EACE,OAAA,CAAQ,qBAAA,CAAsB,SAAA,IAC9B,QAAQ,wBAAA,CAAyB,SAAA;AAAA,UAEnC,oBAAoB,OAAA,CAAQ,aAAA;AAAA,UAC5B,aAAA,EAAe,MAAM,KAAK,OAAA,CAAQ,iBAAA,EAAkB;AAAA,UACpD,gBAAgB,CAAC,IAAA,KAAS,KAAK,OAAA,CAAQ,mBAAmB,IAAI;AAAA;AAAA,OAChE,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;ACtRA,SAAS,kBAAkB,QAAA,EAA8C;AACvE,EAAA,MAAM,GAAA,uBAAU,GAAA,EAAiC;AACjD,EAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,IAAA,KAAA,MAAW,GAAA,IAAO,CAAA,CAAE,OAAA,IAAW,EAAC,EAAG;AACjC,MAAA,MAAM,MAAM,GAAA,CAAI,GAAA;AAChB,MAAA,MAAM,IAAA,GAAO,IAAI,IAAA,IAAQ,GAAA;AACzB,MAAA,IAAI,CAAC,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA,MAAO,GAAA,CAAI,GAAA,kBAAK,IAAI,GAAA,EAAK,CAAA;AACzC,MAAA,GAAA,CAAI,IAAI,GAAG,CAAA,CAAG,GAAA,CAAI,GAAA,CAAI,OAAO,IAAI,CAAA;AAAA,IACnC;AAAA,EACF;AACA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,QAAQ,CAAA,MAAO;AAAA,IACzD,GAAA;AAAA,IACA,IAAA,EAAM,MAAM,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,CAAE,CAAC,CAAA,IAAK,GAAA;AAAA,IAC1C,MAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,MAAM;AAAA,GACpC,CAAE,CAAA;AACJ;AAEA,SAAS,WAAA,CACP,QAAA,EACA,QAAA,EACA,sBAAA,EAC0B;AAE1B,EAAA,IAAI,CAAC,sBAAA,IAA0B,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAClD,IAAA,OAAO,QAAA,CAAS,CAAC,CAAA,IAAK,IAAA;AAAA,EACxB;AACA,EAAA,IAAI,OAAO,IAAA,CAAK,QAAQ,CAAA,CAAE,MAAA,KAAW,GAAG,OAAO,IAAA;AAC/C,EAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,IAAA,MAAM,IAAA,GAAO,CAAA,CAAE,OAAA,IAAW,EAAC;AAC3B,IAAA,MAAM,KAAA,GACJ,IAAA,CAAK,MAAA,GAAS,CAAA,IACd,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,KAAsC,QAAA,CAAS,CAAA,CAAE,GAAG,CAAA,KAAM,EAAE,KAAK,CAAA;AAC/E,IAAA,IAAI,OAAO,OAAO,CAAA;AAAA,EACpB;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,iBAAA,CACP,UACA,YAAA,EACiB;AACjB,EAAA,MAAM,KAAA,GAAQ,SAAS,CAAC,CAAA;AACxB,EAAA,IAAI,CAAC,KAAA,EAAO,OAAO,EAAC;AACpB,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,OAAA,IAAW,EAAC;AAC/B,EAAA,MAAM,WAA4B,EAAC;AACnC,EAAA,KAAA,MAAW,KAAK,YAAA,EAAc;AAC5B,IAAA,MAAM,CAAA,GAAI,KAAK,IAAA,CAAK,CAAC,MAAsC,CAAA,CAAE,GAAA,KAAQ,EAAE,GAAG,CAAA;AAC1E,IAAA,IAAI,CAAA,EAAG,QAAA,CAAS,CAAA,CAAE,GAAG,IAAI,CAAA,CAAE,KAAA;AAAA,EAC7B;AACA,EAAA,OAAO,QAAA;AACT;AAiBO,SAAS,sBAAA,CAAuB;AAAA,EACrC,OAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,WAAW,EAAC;AAAA,EACZ,eAAA;AAAA,EACA;AACF,CAAA,EAAgC;AAC9B,EAAA,MAAM,QAAA,GAAWc,OAAAA,CAAQ,MAAM,OAAA,CAAQ,QAAA,IAAY,EAAC,EAAG,CAAC,OAAA,CAAQ,QAAQ,CAAC,CAAA;AACzE,EAAA,MAAM,YAAA,GAAeA,QAAQ,MAAM,iBAAA,CAAkB,QAAQ,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAC1E,EAAA,MAAM,sBAAA,GAAyB,aAAa,MAAA,GAAS,CAAA;AAErD,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIF,QAAAA;AAAA,IAA0B,MACtE,iBAAA,CAAkB,QAAA,EAAU,YAAY;AAAA,GAC1C;AAEA,EAAA,MAAM,eAAA,GAAkBE,OAAAA;AAAA,IACtB,MAAM,WAAA,CAAY,QAAA,EAAU,eAAA,EAAiB,sBAAsB,CAAA;AAAA,IACnE,CAAC,QAAA,EAAU,eAAA,EAAiB,sBAAsB;AAAA,GACpD;AAEA,EAAA,MAAM,YAAA,GAAe,eAAA,EAAiB,KAAA,IAAS,OAAA,CAAQ,KAAA,IAAS,CAAA;AAChE,EAAA,MAAM,cAAA,GAAiB,eAAA,EAAiB,cAAA,IAAkB,OAAA,CAAQ,cAAA;AAClE,EAAA,MAAM,eACH,eAAA,GAAA,CAAmB,eAAA,CAAgB,YAAY,CAAA,IAAK,CAAA,GAAI,QAAQ,WAAA,KAAgB,IAAA;AAEnF,EAAAP,UAAU,MAAM;AACd,IAAA,eAAA,GAAkB,iBAAiB,YAAY,CAAA;AAAA,EACjD,CAAA,EAAG,CAAC,eAAA,EAAiB,YAAA,EAAc,eAAe,CAAC,CAAA;AAEnD,EAAA,MAAM,SAAA,GAAYM,WAAAA,CAAY,CAAC,GAAA,EAAa,KAAA,KAAkB;AAC5D,IAAA,kBAAA,CAAmB,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,GAAG,GAAG,KAAA,EAAM,CAAE,CAAA;AAAA,EAC1D,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,WAAA,GAAc,sBAAA;AAEpB,EAAA,uBACEE,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACb,QAAA,EAAA;AAAA,sBAAAf,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,sGAAA;AAAA,UACV,aAAA,EAAY,uBAAA;AAAA,UAEX,QAAA,EAAA,cAAA,CAAe,cAAc,QAAQ;AAAA;AAAA,OACxC;AAAA,MACC,cAAA,IAAkB,IAAA,IAAQ,cAAA,GAAiB,YAAA,oBAC1CA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4CAAA,EACb,QAAA,EAAA,cAAA,CAAe,cAAA,EAAgB,QAAQ,CAAA,EAC1C;AAAA,KAAA,EAEJ,CAAA;AAAA,IAGC,WAAA,IACC,aAAa,GAAA,CAAI,CAAC,0BAChBe,IAAAA,CAAC,KAAA,EAAA,EAAoB,SAAA,EAAU,WAAA,EAC7B,QAAA,EAAA;AAAA,sBAAAf,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sEAAA,EACb,gBAAM,IAAA,EACT,CAAA;AAAA,sBACAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBACZ,QAAA,EAAA,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU;AAC3B,QAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,KAAA,CAAM,GAAG,CAAA,KAAM,KAAA;AAClD,QAAA,MAAM,WAAA,GACJ,KAAA,CAAM,GAAA,CAAI,WAAA,EAAY,CAAE,QAAA,CAAS,OAAO,CAAA,IACxC,KAAA,CAAM,GAAA,CAAI,WAAA,EAAY,CAAE,SAAS,QAAQ,CAAA;AAC3C,QAAA,uBACEA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YAEC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAM,SAAA,CAAU,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,YACzC,SAAA,EACE,WAAA,GACI,CAAA,wJAAA,EACE,UAAA,GACI,2CAAA,GACA,4EACN,CAAA,CAAA,GACA,CAAA,yIAAA,EACE,UAAA,GACI,6CAAA,GACA,2GACN,CAAA,CAAA;AAAA,YAEN,KAAA,EACE,WAAA,IAAe,UAAA,IAAc,KAAA,CAAM,WAAA,EAAY,KAAM,OAAA,GACjD,EAAE,eAAA,EAAiB,SAAA,EAAW,WAAA,EAAa,SAAA,EAAW,KAAA,EAAO,MAAA,EAAO,GACpE,WAAA,IAAe,KAAA,CAAM,WAAA,EAAY,KAAM,OAAA,GACrC,EAAE,eAAA,EAAiB,SAAA,EAAW,KAAA,EAAO,SAAA,EAAW,WAAA,EAAa,SAAA,EAAU,GACvE,MAAA;AAAA,YAER,aAAA,EAAa,CAAA,eAAA,EAAkB,KAAA,CAAM,GAAG,IAAI,KAAK,CAAA,CAAA;AAAA,YAEhD,QAAA,EAAA;AAAA,WAAA;AAAA,UAzBI;AAAA,SA0BP;AAAA,MAEJ,CAAC,CAAA,EACH;AAAA,KAAA,EAAA,EAzCQ,KAAA,CAAM,GA0ChB,CACD,CAAA;AAAA,IAEF,SAAS,MAAA,GAAS,CAAA,oBACjBA,GAAAA,CAAC,IAAA,EAAA,EAAG,WAAU,+DAAA,EACX,QAAA,EAAA,QAAA,CAAS,IAAI,CAAC,CAAA,EAAG,sBAChBA,GAAAA,CAAC,QAAY,QAAA,EAAA,CAAA,EAAA,EAAJ,CAAM,CAChB,CAAA,EACH,CAAA;AAAA,IAID,QAAA,GAAW;AAAA,MACV,OAAA;AAAA,MACA,eAAA;AAAA,MACA,YAAA;AAAA,MACA,cAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACD;AAAA,GAAA,EACH,CAAA;AAEJ","file":"client.js","sourcesContent":["/**\n * Respuesta ProblemDetails / validation típica de la API cuando el carrito ya no existe o no está activo.\n */\nexport function isCartNotActiveApiError(error: unknown): boolean {\n if (!error || typeof error !== \"object\") return false;\n const e = error as { status?: number; body?: unknown };\n if (e.status !== 400) return false;\n const body = e.body as { errors?: Record<string, string[]> } | undefined;\n const keys = body?.errors ? Object.keys(body.errors) : [];\n return keys.includes(\"Carts.NotActive\");\n}\n","/**\n * Cliente para el proxy Next.js (`/api/store/*`), que a su vez llama al API Ecomiq con headers\n * definidos allí (`Authorization`, `X-Store-Id`, etc.). Ecomiq upstream no recibe `Cookie` del navegador.\n *\n * - En browser: base = `/api/store` + `credentials: \"include\"`. Cada request debe llevar `X-Store-Id`\n * (`setClientStoreId` desde `EcomiqProvider`); el proxy no resuelve tienda sin ese header.\n * - En server: URL absoluta vía `setServerRequestOrigin()` y `X-Store-Id` vía `setServerStoreId()` tras\n * `getPublicStore` (settings vía upstream o KV, nunca el proxy sin id).\n */\n\nconst STORE_API_PATH = \"/api/store\";\n\n/** Getter inyectado por la app (usa next/headers). Solo se llama en server. */\nlet serverRequestOriginGetter: string | null = null;\n\n/** Store id inyectado en server tras resolver settings (misma idea que `setServerRequestOrigin`). */\nlet serverStoreIdGetter: string | null = null;\n\n/** Store id en browser; lo asigna `EcomiqProvider` al hidratar la tienda. */\nlet clientStoreIdGetter: string | null = null;\n\n/**\n * Inyectar en server para que las llamadas al proxy usen el mismo origen que la request.\n * Ejemplo en la app: setServerRequestOrigin(getRequestOrigin) con getRequestOrigin usando headers().\n */\nexport function setServerRequestOrigin(getter: string | null): void {\n serverRequestOriginGetter = getter;\n}\n\n/** Inyectar en server el id de tienda ya resuelto (p. ej. tras `getPublicStore`). */\nexport function setServerStoreId(storeId: string | null): void {\n serverStoreIdGetter = storeId?.trim() || null;\n}\n\n/** Inyectar en el cliente el id de tienda (p. ej. desde `EcomiqProvider` con el payload de layout). */\nexport function setClientStoreId(storeId: string | null): void {\n if (typeof window === \"undefined\") return;\n clientStoreIdGetter = storeId?.trim() || null;\n}\n\n/**\n * Resuelve la URL base del API de store.\n * En server usa el getter inyectado; en browser devuelve path relativo.\n */\nexport async function getStoreApiBaseUrl(): Promise<string> {\n if (typeof window !== \"undefined\") {\n return STORE_API_PATH;\n }\n if (serverRequestOriginGetter) {\n return `${serverRequestOriginGetter.replace(/\\/$/, \"\")}/${STORE_API_PATH.replace(/^\\//, \"\")}`;\n }\n return STORE_API_PATH;\n}\n\n/**\n * Crea una instancia del cliente con la base URL indicada.\n * Para obtener la base correcta (sobre todo en server) usar getStoreApiClient().\n */\nexport function createStoreApiClient(baseUrl: string): StoreApiClient {\n return new StoreApiClient(baseUrl);\n}\n\n/**\n * Devuelve una instancia del cliente con la base URL resuelta (misma origen en server).\n * Usar este en servicios en lugar del singleton.\n */\nexport async function getStoreApiClient(): Promise<StoreApiClient> {\n const baseUrl = await getStoreApiBaseUrl();\n return new StoreApiClient(baseUrl);\n}\n\n/** Opciones de request al proxy /api/store (se reenvían al upstream salvo las filtradas por el handler). */\nexport type StoreApiGetOptions = {\n /** Header `X-Store-Id` (prioridad sobre los setters de runtime). */\n xStoreId?: string;\n /** Header X-Store-Domain para que el proxy resuelva la tienda cuando aún no hay `X-Store-Id`. */\n xStoreDomain?: string;\n xCartId?: string;\n /**\n * Bearer hacia `/api/store`. El proxy reenvía ese `Authorization` a Ecomiq (API privada solo acepta Bearer).\n * Omitir cuando el navegador use solo la cookie HttpOnly acotada a `/api/store`.\n */\n bearerToken?: string;\n /**\n * Cache key para el cache incremental.\n */\n cacheKey?: string;\n /**\n * Fuerza lectura fresca en Next/server. Usar cuando el backend ya aplica cache-aside.\n */\n noStore?: boolean;\n};\n\nexport class StoreApiClient {\n private readonly baseUrl: string;\n\n constructor(baseUrl: string = STORE_API_PATH) {\n this.baseUrl = baseUrl.replace(/\\/$/, \"\");\n }\n\n private async request<T>(\n path: string,\n init: RequestInit,\n options?: StoreApiGetOptions\n ): Promise<T> {\n const pathNorm = path.replace(/^\\/+/, \"\");\n const url = path.startsWith(\"http\")\n ? path\n : `${this.baseUrl}/${pathNorm}`;\n\n const headers = new Headers(init.headers ?? {});\n const isFormData =\n typeof FormData !== \"undefined\" && init.body instanceof FormData;\n if (!isFormData) {\n headers.set(\"Content-Type\", \"application/json\");\n }\n headers.set(\"Accept-Encoding\", \"identity\");\n\n const explicitStoreId = options?.xStoreId?.trim();\n const runtimeStoreId =\n explicitStoreId ||\n (typeof window === \"undefined\" ? serverStoreIdGetter : clientStoreIdGetter);\n if (runtimeStoreId && !headers.has(\"x-store-id\")) {\n headers.set(\"X-Store-Id\", runtimeStoreId);\n }\n\n if (options?.xStoreDomain) {\n headers.set(\"X-Store-Domain\", options.xStoreDomain);\n }\n if (options?.xCartId) {\n headers.set(\"X-Cart-Token\", options.xCartId);\n }\n\n const bearer =\n typeof options?.bearerToken === \"string\" && options.bearerToken.trim().length > 0\n ? options.bearerToken.trim()\n : undefined;\n if (bearer) {\n headers.set(\n \"Authorization\",\n bearer.toLowerCase().startsWith(\"bearer \") ? bearer : `Bearer ${bearer}`\n );\n }\n\n const isServer = typeof window === \"undefined\";\n\n const res = await fetch(url, {\n ...init,\n headers,\n credentials: isServer ? \"same-origin\" : \"include\",\n ...(options?.noStore ? { cache: \"no-store\" as RequestCache } : {}),\n ...((options?.cacheKey && isServer && !options?.noStore) ? {\n next: {\n revalidate: 60,\n tags: [options.cacheKey],\n },\n } : {}),\n });\n if (!res.ok) {\n let body: unknown;\n try {\n const errorText = await res.text();\n body = errorText ? JSON.parse(errorText) : undefined;\n } catch {\n body = undefined;\n }\n const msg =\n typeof body === \"object\" &&\n body !== null &&\n \"title\" in body &&\n typeof (body as { title?: unknown }).title === \"string\"\n ? (body as { title: string }).title\n : res.statusText || \"Store API error\";\n const err = new Error(msg) as Error & {\n status?: number;\n body?: unknown;\n };\n err.status = res.status;\n err.body = body;\n throw err;\n }\n const text = await res.text();\n if (!text) return undefined as T;\n return JSON.parse(text) as T;\n }\n\n get<T>(path: string, options?: StoreApiGetOptions): Promise<T> {\n return this.request<T>(path, { method: \"GET\" }, options);\n }\n\n post<T>(path: string, data?: unknown, options?: StoreApiGetOptions): Promise<T> {\n return this.request<T>(\n path,\n {\n method: \"POST\",\n body: data != null ? JSON.stringify(data) : undefined,\n },\n options\n );\n }\n\n /** POST multipart (no fuerza `Content-Type`; el runtime añade el boundary). */\n postForm<T>(\n path: string,\n form: FormData,\n options?: StoreApiGetOptions,\n ): Promise<T> {\n return this.request<T>(path, { method: \"POST\", body: form }, options);\n }\n\n patch<T>(path: string, data?: unknown, options?: StoreApiGetOptions): Promise<T> {\n return this.request<T>(path, {\n method: \"PATCH\",\n body: data != null ? JSON.stringify(data) : undefined,\n }, options);\n }\n\n put<T>(path: string, data?: unknown, options?: StoreApiGetOptions): Promise<T> {\n return this.request<T>(\n path,\n {\n method: \"PUT\",\n body: data != null ? JSON.stringify(data) : undefined,\n },\n options\n );\n }\n\n delete<T>(path: string, options?: StoreApiGetOptions): Promise<T> {\n return this.request<T>(path, { method: \"DELETE\" }, options);\n }\n}\n\n/** Cliente por defecto (base relativa). En server preferir getStoreApiClient(). */\nexport const storeApiClient = new StoreApiClient(STORE_API_PATH);\n","import { z } from 'zod';\n\nexport const ProductVariantSchema = z.object({\n id: z.coerce.string(),\n name: z.string(),\n storeId: z.string(),\n productId: z.coerce.string(),\n basePrice: z.number().positive().optional().nullable(),\n comparePrice: z.number().positive().optional().nullable(), //TODO: remove this field\n originalPrice: z.number().positive().optional().nullable(),\n costPrice: z.number().positive().optional().nullable(),\n isDefault: z.boolean().optional().nullable(),\n reserveStock: z.number().nonnegative().optional().nullable(),\n weight: z.number().nonnegative().optional().nullable().default(0),\n width: z.number().nonnegative().optional().nullable(),\n height: z.number().nonnegative().optional().nullable(),\n unitOfMeasure: z.string().optional().nullable(),\n order: z.number().nonnegative().optional().nullable().default(0),\n sku: z.string().optional().nullable(),\n stock: z.number().nonnegative().optional().nullable(),\n leadTime: z.string().optional().nullable(),\n barCode: z.string().optional().nullable(),\n shippingWeight: z.number().nonnegative().optional().nullable(),\n images: z.array(z.string()).optional().nullable(),\n attributes: z.array(z.string()).optional().nullable(),\n variantStatus: z.string().optional().nullable(),\n status: z.string().optional().nullable(),\n createdOn: z.string().optional().nullable(),\n updatedOn: z.string().optional().nullable(),\n deletedOn: z.string().optional().nullable(),\n});\n\nexport const ProductSchema = z.object({\n id: z.coerce.string(),\n name: z.string(),\n images: z.array(z.object({\n url: z.string().url(),\n name: z.string().optional(),\n isPrimary: z.boolean().optional(),\n })),\n basePrice: z.number().positive().optional(),\n salePrice: z.number().positive().optional(),\n slug: z.string(),\n description: z.string().optional(),\n categories: z.array(z.object({\n id: z.coerce.string(),\n name: z.string(),\n slug: z.string(),\n logo: z.string().optional(),\n icon: z.string().optional(),\n })).optional(),\n tags: z.array(z.string()).optional(),\n inStock: z.boolean().optional(),\n variants: z.array(ProductVariantSchema).optional(),\n});\n\nexport const ProductsResponseSchema = z.object({\n items: z.array(ProductSchema),\n meta: z.object({\n total: z.number().int().positive(),\n page: z.number().int().positive(),\n pageSize: z.number().int().positive(),\n hasNextPage: z.boolean(),\n }),\n});\n\nexport const ProductsFiltersSchema = z.object({\n category: z.string().optional(),\n search: z.string().optional(),\n minPrice: z.number().positive().optional(),\n maxPrice: z.number().positive().optional(),\n inStock: z.boolean().optional(),\n sortBy: z.enum(['name', 'price', 'createdAt']).optional(),\n sortOrder: z.enum(['asc', 'desc']).optional(),\n page: z.number().int().positive().optional(),\n limit: z.number().int().positive().optional(),\n});\n\n// --- Storefront API (v1/storefront/products) ---\n\nexport const StorefrontProductSchema = z.object({\n id: z.coerce.string(),\n name: z.string(),\n slug: z.string(),\n productType: z.string().optional().nullable(),\n imageUrl: z.string().optional().nullable(),\n price: z.number().nonnegative(),\n compareAtPrice: z.number().nonnegative().optional().nullable(),\n variantCount: z.number().int().nonnegative().optional().default(0),\n isAvailable: z.boolean(),\n totalInventory: z.number().int().nonnegative(),\n bundleItemsCount: z.number().int().nonnegative().optional().default(0),\n brand: z.string().optional().nullable(),\n category: z.string().optional().nullable(),\n status: z.string().optional().nullable(),\n tags: z.array(z.string()).optional().nullable(),\n});\n\nexport const StorefrontFacetSchema = z.object({\n value: z.string(),\n count: z.number().int().nonnegative(),\n});\n\nexport const StorefrontProductsResponseSchema = z.object({\n pageIndex: z.number().int().positive(),\n pageSize: z.number().int().positive(),\n totalCount: z.number().int().nonnegative(),\n totalPages: z.number().int().nonnegative(),\n products: z.array(StorefrontProductSchema),\n categories: z.array(StorefrontFacetSchema).optional().default([]),\n brands: z.array(StorefrontFacetSchema).optional().default([]),\n minPrice: z.number().nonnegative().optional().nullable(),\n maxPrice: z.number().nonnegative().optional().nullable(),\n});\n\nexport const StorefrontProductsParamsSchema = z.object({\n page: z.number().int().positive().optional().default(1),\n pageSize: z.number().int().positive().optional().default(20),\n sort: z\n .enum(['price_asc', 'price_desc', 'name_asc', 'name_desc', 'newest'])\n .optional()\n .default('price_asc'),\n sellerId: z.string().optional(),\n search: z.string().optional(),\n collection: z.string().optional(),\n category: z.string().optional(),\n brand: z.string().optional(),\n productType: z.string().optional(),\n inStock: z.boolean().optional(),\n minPrice: z.number().nonnegative().optional(),\n maxPrice: z.number().nonnegative().optional(),\n});\n\n// --- Storefront product by slug (v1/storefront/products/by-slug/:slug) ---\n\nexport const StorefrontVariantOptionSchema = z.object({\n key: z.string(),\n name: z.string(),\n value: z.string(),\n});\n\nexport const StorefrontProductImageSchema = z.object({\n url: z.string(),\n name: z.string().optional().nullable(),\n order: z.number().int().nonnegative().optional(),\n});\n\nexport const StorefrontVariantSchema = z.object({\n id: z.coerce.string().optional().default(''),\n sku: z.string(),\n status: z.string().optional().nullable(),\n price: z.number().nonnegative(),\n compareAtPrice: z.number().nonnegative().optional().nullable(),\n quantity: z.number().int().nonnegative(),\n options: z.array(StorefrontVariantOptionSchema).optional().default([]),\n images: z.array(StorefrontProductImageSchema).optional().default([]),\n});\n\nexport const StorefrontPriceTierSchema = z.object({\n variantId: z.coerce.string(),\n minQuantity: z.number().int().positive(),\n maxQuantity: z.number().int().positive().optional().nullable(),\n unitPrice: z.number().nonnegative(),\n});\n\nexport const StorefrontBundleItemSchema = z.object({\n productId: z.coerce.string(),\n variantId: z.coerce.string(),\n productName: z.string(),\n variantName: z.string().optional().nullable(),\n sku: z.string().optional().nullable(),\n brand: z.string().optional().nullable(),\n imageUrl: z.string().optional().nullable(),\n quantity: z.number().int(),\n availableStock: z.number().int().optional().default(0),\n allowBackorders: z.boolean().optional().default(false),\n requiresShipping: z.boolean().optional().default(true),\n});\n\nexport const StorefrontProductDetailSchema = z.object({\n id: z.coerce.string(),\n name: z.string(),\n slug: z.string(),\n description: z.string().optional().nullable(),\n productType: z.string().optional().nullable(),\n status: z.string().optional().nullable(),\n imageUrl: z.string().optional().nullable(),\n price: z.number().nonnegative(),\n compareAtPrice: z.number().nonnegative().optional().nullable(),\n isAvailable: z.boolean(),\n totalInventory: z.number().int().nonnegative(),\n brand: z.string().optional().nullable(),\n category: z.string().optional().nullable(),\n categoryId: z.coerce.string().optional().nullable(),\n tags: z.array(z.string()).optional().nullable(),\n specifications: z.array(z.record(z.string(), z.unknown())).optional().default([]),\n variants: z.array(StorefrontVariantSchema).optional().default([]),\n images: z.array(StorefrontProductImageSchema).optional().default([]),\n bundleItems: z.array(StorefrontBundleItemSchema).optional().default([]),\n priceTiers: z.array(StorefrontPriceTierSchema).optional().default([]),\n createdAt: z.string().optional().nullable(),\n updatedAt: z.string().optional().nullable(),\n});\n\n// Tipos TypeScript inferidos de los esquemas Zod\nexport type Product = z.infer<typeof ProductSchema>;\nexport type ProductVariant = z.infer<typeof ProductVariantSchema>;\nexport type ProductsResponse = z.infer<typeof ProductsResponseSchema>;\nexport type ProductsFilters = z.infer<typeof ProductsFiltersSchema>;\n\nexport type StorefrontProduct = z.infer<typeof StorefrontProductSchema>;\nexport type StorefrontFacet = z.infer<typeof StorefrontFacetSchema>;\nexport type StorefrontProductsResponse = z.infer<typeof StorefrontProductsResponseSchema>;\nexport type StorefrontProductsParams = z.infer<typeof StorefrontProductsParamsSchema>;\n/** Params de entrada (sort/page/pageSize opcionales con defaults en el schema) */\nexport type StorefrontProductsParamsInput = z.input<typeof StorefrontProductsParamsSchema>;\n\nexport type StorefrontVariantOption = z.infer<typeof StorefrontVariantOptionSchema>;\nexport type StorefrontVariant = z.infer<typeof StorefrontVariantSchema>;\nexport type StorefrontProductImage = z.infer<typeof StorefrontProductImageSchema>;\nexport type StorefrontPriceTier = z.infer<typeof StorefrontPriceTierSchema>;\nexport type StorefrontBundleItem = z.infer<typeof StorefrontBundleItemSchema>;\nexport type StorefrontProductDetail = z.infer<typeof StorefrontProductDetailSchema>; \n","import { getStoreApiClient } from \"./store-api-client\";\nimport type {\n StorefrontProductsParamsInput,\n StorefrontProductsResponse,\n StorefrontProductDetail,\n} from \"../models/product\";\nimport {\n StorefrontProductsParamsSchema,\n StorefrontProductsResponseSchema,\n StorefrontProductDetailSchema,\n} from \"../models/product\";\n\n/**\n * Servicio de productos vía proxy /api/store.\n * El proxy resuelve la tienda por cookie.\n */\nexport async function getStorefrontProducts(\n params?: StorefrontProductsParamsInput,\n cacheKey?: string\n): Promise<StorefrontProductsResponse> {\n const parsed = StorefrontProductsParamsSchema.parse(params ?? {});\n const searchParams = new URLSearchParams();\n searchParams.set(\"page\", String(parsed.page));\n searchParams.set(\"pageSize\", String(parsed.pageSize));\n if (parsed.sort) searchParams.set(\"sort\", parsed.sort);\n if (parsed.sellerId) searchParams.set(\"sellerId\", parsed.sellerId);\n if (parsed.search) searchParams.set(\"search\", parsed.search);\n if (parsed.collection) searchParams.set(\"collection\", parsed.collection);\n if (parsed.category) searchParams.set(\"category\", parsed.category);\n if (parsed.brand) searchParams.set(\"brand\", parsed.brand);\n if (parsed.productType) searchParams.set(\"productType\", parsed.productType);\n if (parsed.inStock != null) searchParams.set(\"inStock\", String(parsed.inStock));\n if (parsed.minPrice != null) searchParams.set(\"minPrice\", String(parsed.minPrice));\n if (parsed.maxPrice != null) searchParams.set(\"maxPrice\", String(parsed.maxPrice));\n\n const path = `products?${searchParams.toString()}`;\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(path, {\n cacheKey,\n });\n return StorefrontProductsResponseSchema.parse(response);\n}\n\nexport async function getStorefrontProductBySlug(\n slug: string\n): Promise<StorefrontProductDetail> {\n const path = `products/${encodeURIComponent(slug)}`;\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(path);\n return StorefrontProductDetailSchema.parse(response);\n}\n","import { z } from \"zod\";\n\nexport const StorefrontCollectionSchema = z.object({\n id: z.coerce.string(),\n slug: z.string(),\n name: z.string(),\n description: z.string().nullable().optional(),\n imageUrl: z.string().nullable().optional(),\n type: z.string(),\n productCount: z.number().int().nonnegative(),\n});\n\nexport const StorefrontCollectionsResponseSchema = z.array(StorefrontCollectionSchema);\nexport const StorefrontCollectionDetailSchema = StorefrontCollectionSchema;\n\nexport type StorefrontCollection = z.infer<typeof StorefrontCollectionSchema>;\nexport type StorefrontCollectionsResponse = z.infer<\n typeof StorefrontCollectionsResponseSchema\n>;\nexport type StorefrontCollectionDetail = z.infer<typeof StorefrontCollectionDetailSchema>;\n","import { getStoreApiClient } from \"./store-api-client\";\nimport type { StorefrontCollection, StorefrontCollectionDetail } from \"../models/collection\";\nimport {\n StorefrontCollectionsResponseSchema,\n StorefrontCollectionDetailSchema,\n} from \"../models/collection\";\n\n/**\n * Servicio de colecciones vía proxy /api/store.\n * GET /v1/collections.\n */\nexport async function getStorefrontCollections(): Promise<StorefrontCollection[]> {\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(\"collections\");\n return StorefrontCollectionsResponseSchema.parse(response);\n}\n\nexport async function getStorefrontCollectionBySlug(\n slug: string\n): Promise<StorefrontCollectionDetail> {\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(\n `collections/by-slug/${encodeURIComponent(slug)}`\n );\n return StorefrontCollectionDetailSchema.parse(response);\n}\n\n","import { z } from \"zod\";\n\n/** Page list item from GET /v1/pages */\nexport const StorefrontPageListItemSchema = z.object({\n id: z.string(),\n name: z.string(),\n slug: z.string(),\n layout: z.string(),\n});\n\nexport type StorefrontPageListItem = z.infer<typeof StorefrontPageListItemSchema>;\n\n/** SEO settings within page settings */\nexport const StorefrontPageSeoSchema = z.object({\n title: z.string().optional(),\n description: z.string().optional(),\n}).optional();\n\n/** Page settings (layout-specific; flexible) */\nexport const StorefrontPageSettingsSchema = z.object({\n seo: StorefrontPageSeoSchema,\n html: z.string().optional(),\n title: z.string().optional(),\n}).catchall(z.unknown());\n\n/** Section block (item, widget, etc.) */\nexport const StorefrontPageBlockSchema = z.object({\n id: z.string(),\n type: z.string(),\n order: z.number(),\n settings: z.record(z.unknown()).optional(),\n});\n\n/** Page section (page-hero, faq, widget-row, etc.) */\nexport const StorefrontPageSectionSchema = z.object({\n id: z.string(),\n type: z.string(),\n order: z.number(),\n settings: z.record(z.unknown()).optional(),\n blocks: z.array(StorefrontPageBlockSchema).optional().default([]),\n});\n\n/** Page detail from GET /v1/pages/{slug}; sections is optional */\nexport const StorefrontPageDetailSchema = z.object({\n id: z.string(),\n name: z.string(),\n slug: z.string(),\n layout: z.string(),\n settings: StorefrontPageSettingsSchema.optional(),\n sections: z.array(StorefrontPageSectionSchema).optional(),\n});\n\nexport type StorefrontPageDetail = z.infer<typeof StorefrontPageDetailSchema>;\nexport type StorefrontPageSection = z.infer<typeof StorefrontPageSectionSchema>;\nexport type StorefrontPageBlock = z.infer<typeof StorefrontPageBlockSchema>;\n","import { getStoreApiClient } from \"./store-api-client\";\nimport type {\n StorefrontPageListItem,\n StorefrontPageDetail,\n} from \"../models/page\";\nimport {\n StorefrontPageListItemSchema,\n StorefrontPageDetailSchema,\n} from \"../models/page\";\nimport { z } from \"zod\";\n\n/**\n * Servicio de páginas vía proxy /api/store.\n * GET /v1/pages y GET /v1/pages/{slug}.\n */\nexport async function getStorefrontPages(): Promise<StorefrontPageListItem[]> {\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(\"pages\");\n return z.array(StorefrontPageListItemSchema).parse(response);\n}\n\nexport async function getStorefrontPageBySlug(\n slug: string\n): Promise<StorefrontPageDetail> {\n const path = `pages/${encodeURIComponent(slug)}`;\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(path);\n return StorefrontPageDetailSchema.parse(response);\n}\n\nexport async function getStorefrontPagePreview(\n slug: string,\n token: string\n): Promise<StorefrontPageDetail> {\n const path = `pages/${encodeURIComponent(slug)}/preview?token=${encodeURIComponent(token)}`;\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(path);\n return StorefrontPageDetailSchema.parse(response);\n}\n","import { z } from \"zod\";\n\nexport const CartBuyerRequestSchema = z.object({\n email: z.string().email(),\n firstName: z.string().min(1),\n lastName: z.string().min(1),\n phone: z.string().min(1),\n});\n\nexport type CartBuyerRequest = z.input<typeof CartBuyerRequestSchema>;\n\nexport const CartCreateRequestSchema = z.object({\n currencyCode: z.string(),\n salesChannelId: z.string(),\n email: z.string().email(),\n});\n\nexport type CartCreateRequest = z.input<typeof CartCreateRequestSchema>;\n\nexport const CartAddressSchema = z.object({\n name: z.string().min(1),\n address1: z.string().min(1),\n city: z.string().min(1),\n countryCode: z.string().min(2),\n company: z.string().nullable().optional(),\n address2: z.string().nullable().optional(),\n province: z.string().nullable().optional(),\n postalCode: z.string().nullable().optional(),\n district: z.string().nullable().optional(),\n phone: z.string().nullable().optional(),\n latitude: z.number().nullable().optional(),\n longitude: z.number().nullable().optional(),\n geo: z\n .object({\n departmentCode: z.string().nullable().optional(),\n provinceCode: z.string().nullable().optional(),\n districtCode: z.string().nullable().optional(),\n })\n .nullable()\n .optional(),\n});\n\nexport const CartAddressesRequestSchema = z.object({\n shippingAddress: CartAddressSchema,\n billingAddress: CartAddressSchema,\n});\n\nexport type CartAddressesRequest = z.input<typeof CartAddressesRequestSchema>;\n\n// --- Cart items ---\n\nexport const CartItemModifierRequestSchema = z.object({\n modifierGroupId: z.coerce.string().min(1),\n optionIds: z.array(z.coerce.string().min(1)).optional().default([]),\n});\n\nexport type CartItemModifierRequest = {\n modifierGroupId: string;\n optionIds?: string[];\n};\n\nexport const CartItemRequestSchema = z.object({\n variantId: z.coerce.string().min(1),\n quantity: z.number().int().positive(),\n modifiers: z.array(CartItemModifierRequestSchema).optional(),\n});\n\nexport type CartItemRequest = {\n variantId: string;\n quantity: number;\n modifiers?: CartItemModifierRequest[];\n};\n\nexport const CartItemUpdateRequestSchema = z.object({\n quantity: z.number().int().positive(),\n});\n\nexport type CartItemUpdateRequest = z.input<typeof CartItemUpdateRequestSchema>;\n\nexport const CartCouponRequestSchema = z.object({\n code: z.string().min(1),\n});\n\nexport type CartCouponRequest = z.input<typeof CartCouponRequestSchema>;\n\nexport const CartTotalsSchema = z.object({\n subtotal: z.number(),\n discount: z.number(),\n tax: z.number(),\n warranty: z.number().optional().default(0),\n total: z.number(),\n});\n\nexport const CartResponseAddressSchema = z.object({\n name: z.string().nullable().optional(),\n address1: z.string(),\n city: z.string(),\n countryCode: z.string(),\n company: z.string().nullable().optional(),\n address2: z.string().nullable().optional(),\n province: z.string().nullable().optional(),\n postalCode: z.string().nullable().optional(),\n district: z.string().nullable().optional(),\n phone: z.string().nullable().optional(),\n latitude: z.number().nullable().optional(),\n longitude: z.number().nullable().optional(),\n geo: z\n .object({\n departmentCode: z.string().nullable().optional(),\n provinceCode: z.string().nullable().optional(),\n districtCode: z.string().nullable().optional(),\n })\n .nullable()\n .optional(),\n});\n\nexport const CartResponseBundleItemSchema = z.object({\n productId: z.coerce.string(),\n variantId: z.coerce.string(),\n productName: z.string(),\n variantName: z.string().nullable().optional(),\n sku: z.string().nullable().optional(),\n brand: z.string().nullable().optional(),\n imageUrl: z.string().nullable().optional(),\n quantity: z.number().int(),\n});\n\nexport const CartResponseItemSchema = z.object({\n id: z.string(),\n title: z.string(),\n variantLabel: z.string().nullable().optional(),\n thumbnail: z.string().nullable().optional(),\n quantity: z.number().int(),\n variantId: z.coerce.string(),\n variantSku: z.string().nullable().optional(),\n unitPrice: z.number(),\n bundleItems: z.array(CartResponseBundleItemSchema).optional().default([]),\n});\n\nexport const CartResponseShippingMethodSchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().nullable().optional(),\n total: z.number(),\n estimatedDays: z.number().int().nullable().optional(),\n pickupPointId: z.string().nullable().optional(),\n scheduledDate: z.string().nullable().optional(),\n scheduledTime: z.string().nullable().optional(),\n});\n\nexport const CartResponseSchema = z.object({\n id: z.string(),\n regionId: z.string().nullable().optional(),\n salesChannelId: z.string().nullable().optional(),\n email: z.string().email().nullable().optional(),\n phone: z.string().nullable().optional(),\n firstName: z.string().nullable().optional(),\n lastName: z.string().nullable().optional(),\n currencyCode: z.string(),\n /** Estado del carrito en backend (`inProgress`, `completed`, etc.). */\n status: z.string().nullable().optional(),\n completedAt: z.string().nullable().optional(),\n shippingAddress: z.unknown().nullable().optional(),\n billingAddress: z.unknown().nullable().optional(),\n metadata: z.record(z.string(), z.unknown()).optional().default({}),\n promotionCodes: z.array(z.string()).optional().default([]),\n items: z.array(CartResponseItemSchema).optional().default([]),\n shippingMethods: z.array(z.unknown()).optional().default([]),\n totals: z.object({\n discountTotal: z.number(),\n shippingTotal: z.number(),\n subtotal: z.number(),\n taxTotal: z.number(),\n total: z.number(),\n warrantyTotal: z.number(),\n }),\n});\n\nexport type CartResponse = z.infer<typeof CartResponseSchema>;\n\nexport const CartCheckoutRequestSchema = z.object({\n paymentMethodCode: z.string().min(1),\n externalRef: z.string().min(1),\n receiptUrl: z.string().min(1).optional(),\n});\n\nexport type CartCheckoutRequest = z.input<typeof CartCheckoutRequestSchema>;\n\n/** Acción concreta del proveedor (redirect, embedded, QR, etc.) */\nexport const CartCheckoutPaymentActionSchema = z\n .object({\n publicConfiguration: z\n .object({\n publishableKey: z.string().nullable().optional(),\n checkoutMode: z.string().nullable().optional(),\n phoneNumber: z.string().nullable().optional(),\n accountHolder: z.string().nullable().optional(),\n qrImageUrl: z.string().nullable().optional(),\n })\n .passthrough()\n .nullable()\n .optional(),\n url: z.string().nullable().optional(),\n html: z.string().nullable().optional(),\n clientSecret: z.string().nullable().optional(),\n qrCode: z.string().nullable().optional(),\n expiresAt: z.string().nullable().optional(),\n })\n .passthrough();\n\nexport type CartCheckoutPaymentAction = z.infer<\n typeof CartCheckoutPaymentActionSchema\n>;\n\n/** Objeto `payment` devuelto por POST checkout / flujo embedded */\nexport const CartCheckoutPaymentSchema = z\n .object({\n transactionId: z.string(),\n paymentMethodCode: z.string(),\n providerId: z.string().nullable().optional(),\n status: z.string(),\n amount: z.number(),\n reference: z.string(),\n actionType: z.string(),\n receiptUrl: z.string().nullable().optional(),\n action: CartCheckoutPaymentActionSchema.nullable().optional(),\n })\n .passthrough();\n\nexport type CartCheckoutPayment = z.infer<typeof CartCheckoutPaymentSchema>;\n\nexport const CartCheckoutResponseSchema = z\n .object({\n publicKey: z.string().optional(),\n publishableKey: z.string().optional(),\n stripePublicKey: z.string().optional(),\n clientSecret: z.string().optional(),\n intentClientSecret: z.string().optional(),\n orderId: z.coerce.string().optional(),\n orderGroup: z.string().optional(),\n orderIds: z.array(z.coerce.string()).optional(),\n /** Payload de pago (embedded, redirect, etc.) */\n payment: CartCheckoutPaymentSchema.optional(),\n cart: z.unknown().optional(),\n })\n .passthrough();\n\nexport type CartCheckoutResponse = z.infer<typeof CartCheckoutResponseSchema>;\n\nexport const CartPaymentReceiptResponseSchema = z.object({\n id: z.string(),\n url: z.string(),\n});\n\nexport type CartPaymentReceiptResponse = z.infer<\n typeof CartPaymentReceiptResponseSchema\n>;\n\nexport const CartPaymentMethodSchema = z.object({\n code: z.string(),\n name: z.string(),\n description: z.string().nullable().optional(),\n kind: z.string(),\n isActive: z.boolean(),\n isDefault: z.boolean(),\n isManual: z.boolean(),\n sortOrder: z.number(),\n phoneNumber: z.string().nullable().optional(),\n accountHolder: z.string().nullable().optional(),\n qrImageUrl: z.string().nullable().optional(),\n});\n\nexport type CartPaymentMethod = z.infer<typeof CartPaymentMethodSchema>;\n\nexport const CartPaymentMethodsResponseSchema = z.object({\n methods: z.array(CartPaymentMethodSchema),\n});\n\nexport type CartPaymentMethodsResponse = z.infer<\n typeof CartPaymentMethodsResponseSchema\n>;\n\n/**\n * GET /carts/{cartId}/checkout — devuelve carrito + métodos de pago en una sola respuesta.\n */\nexport const CartCheckoutReadResponseSchema = z.object({\n cart: CartResponseSchema,\n paymentMethods: CartPaymentMethodsResponseSchema,\n});\n\nexport type CartCheckoutReadResponse = z.infer<\n typeof CartCheckoutReadResponseSchema\n>;\n\n/** GET /carts/{cartId}/shipping-options?postalCode= */\nexport const ShippingRateSchema = z\n .object({\n shippingMethodId: z.string(),\n name: z.string(),\n displayName: z.string().optional(),\n type: z.string().optional(),\n price: z.number(),\n currency: z.string().optional(),\n sortOrder: z.number().optional(),\n rateId: z.string(),\n description: z.string().nullable().optional(),\n deliveryLocationId: z.string().nullable().optional(),\n deliveryLocationName: z.string().nullable().optional(),\n estimatedDeliveryDays: z.number().nullable().optional(),\n serviceCode: z.string().nullable().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n })\n .passthrough();\n\nexport type ShippingRate = z.infer<typeof ShippingRateSchema>;\n\nexport const ShippingOptionGroupSchema = z\n .object({\n sellerId: z.string(),\n shippingProfileId: z.string().nullable().optional(),\n orderAmount: z.number().optional(),\n totalWeight: z.number().optional(),\n itemIds: z.array(z.string()).optional(),\n rates: z.array(ShippingRateSchema),\n })\n .passthrough();\n\nexport type ShippingOptionGroup = z.infer<typeof ShippingOptionGroupSchema>;\n\nexport const ShippingOptionsResponseSchema = z.object({\n groups: z.array(ShippingOptionGroupSchema),\n});\n\nexport type ShippingOptionsResponse = z.infer<\n typeof ShippingOptionsResponseSchema\n>;\n\n/** PUT /carts/{cartId}/shipping-method */\nexport const CartShippingMethodPutRequestSchema = z.object({\n rateId: z.string().min(1),\n shippingMethodId: z.string().min(1),\n serviceCode: z.string().nullable().optional(),\n sellerId: z.string().nullable().optional(),\n shippingProfileId: z.string().nullable().optional(),\n locationId: z.string().nullable().optional(),\n pickupPointId: z.string().nullable().optional(),\n scheduledDate: z.string().nullable().optional(),\n scheduledTime: z.string().nullable().optional(),\n});\n\nexport type CartShippingMethodPutRequest = z.input<\n typeof CartShippingMethodPutRequestSchema\n>;\n","import { getStoreApiClient } from \"./store-api-client\";\nimport type {\n CartBuyerRequest,\n CartAddressesRequest,\n CartCreateRequest,\n CartResponse,\n CartCheckoutRequest,\n CartCheckoutResponse,\n CartCheckoutReadResponse,\n CartPaymentReceiptResponse,\n CartPaymentMethodsResponse,\n CartShippingMethodPutRequest,\n CartCouponRequest,\n CartItemRequest,\n CartItemUpdateRequest,\n ShippingOptionsResponse,\n} from \"../models/cart\";\nimport {\n CartBuyerRequestSchema,\n CartAddressesRequestSchema,\n CartCreateRequestSchema,\n CartItemRequestSchema,\n CartItemUpdateRequestSchema,\n CartResponseSchema,\n CartCheckoutRequestSchema,\n CartCheckoutResponseSchema,\n CartCheckoutReadResponseSchema,\n CartPaymentReceiptResponseSchema,\n CartShippingMethodPutRequestSchema,\n CartCouponRequestSchema,\n ShippingOptionsResponseSchema,\n} from \"../models/cart\";\n\n/**\n * Servicio de carrito vía proxy /api/store.\n * El proxy resuelve el carrito/tienda por cookie o contexto.\n */\nexport async function createCart(\n data: CartCreateRequest,\n): Promise<CartResponse> {\n const payload = CartCreateRequestSchema.parse(data);\n const client = await getStoreApiClient();\n const response = await client.post<unknown>(\"carts\", payload);\n return CartResponseSchema.parse(response);\n}\n\nexport async function getCart(cartId?: string): Promise<CartResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(`carts/${cartId}`);\n return CartResponseSchema.parse(response);\n}\n\nexport async function addCartItem(\n data: CartItemRequest,\n cartId?: string,\n): Promise<CartResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const payload = CartItemRequestSchema.parse(data);\n const variantId = Number(payload.variantId);\n if (!Number.isSafeInteger(variantId) || variantId <= 0) {\n throw new Error(\"variantId must be a valid public id\");\n }\n const modifiers = payload.modifiers?.map((modifier) => {\n const modifierGroupId = Number(modifier.modifierGroupId);\n const optionIds = modifier.optionIds.map((optionId) => Number(optionId));\n if (\n !Number.isSafeInteger(modifierGroupId) ||\n modifierGroupId <= 0 ||\n optionIds.some((optionId) => !Number.isSafeInteger(optionId) || optionId <= 0)\n ) {\n throw new Error(\"modifiers must use valid public ids\");\n }\n\n return { modifierGroupId, optionIds };\n });\n const client = await getStoreApiClient();\n const response = await client.post<unknown>(`carts/${cartId}/items`, {\n ...payload,\n variantId,\n ...(modifiers ? { modifiers } : {}),\n });\n return CartResponseSchema.parse(response);\n}\n\nexport async function updateCartItem(\n cartId: string,\n itemId: string,\n data: CartItemUpdateRequest,\n): Promise<CartResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n if (!itemId.trim()) throw new Error(\"itemId is required\");\n const payload = CartItemUpdateRequestSchema.parse(data);\n const client = await getStoreApiClient();\n const response = await client.patch<unknown>(\n `carts/${cartId}/items/${encodeURIComponent(itemId.trim())}`,\n payload,\n );\n return CartResponseSchema.parse(response);\n}\n\nexport async function deleteCartItem(\n cartId: string,\n itemId: string,\n): Promise<CartResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n if (!itemId.trim()) throw new Error(\"itemId is required\");\n const client = await getStoreApiClient();\n const response = await client.delete<unknown>(\n `carts/${cartId}/items/${encodeURIComponent(itemId.trim())}`,\n );\n return CartResponseSchema.parse(response);\n}\n\nexport async function patchCartBuyer(\n data: CartBuyerRequest,\n cartId?: string,\n): Promise<CartResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const payload = CartBuyerRequestSchema.parse(data);\n const client = await getStoreApiClient();\n const response = await client.patch<unknown>(\n `carts/${cartId}/buyer`,\n payload,\n );\n return CartResponseSchema.parse(response);\n}\n\nexport async function patchCartAddresses(\n data: CartAddressesRequest,\n cartId?: string,\n): Promise<CartResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const payload = CartAddressesRequestSchema.parse(data);\n const client = await getStoreApiClient();\n const response = await client.patch<unknown>(\n `carts/${cartId}/addresses`,\n payload,\n );\n return CartResponseSchema.parse(response);\n}\n\nexport async function addCartCoupon(\n cartId: string,\n data: CartCouponRequest,\n): Promise<CartResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const payload = CartCouponRequestSchema.parse(data);\n const client = await getStoreApiClient();\n const response = await client.post<unknown>(\n `carts/${cartId}/promotion-codes`,\n payload,\n );\n return CartResponseSchema.parse(response);\n}\n\nexport async function removeCartCoupon(\n cartId: string,\n code: string,\n): Promise<CartResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n if (!code.trim()) throw new Error(\"code is required\");\n const client = await getStoreApiClient();\n const response = await client.delete<unknown>(\n `carts/${cartId}/promotion-codes/${encodeURIComponent(code.trim())}`,\n );\n return CartResponseSchema.parse(response);\n}\n\n/**\n * Inicializa checkout de pago (POST /v1/carts/checkout).\n * Body: { paymentMethodCode, externalRef }\n */\nexport async function checkoutCart(\n data: CartCheckoutRequest,\n cartId?: string,\n): Promise<CartCheckoutResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const payload = CartCheckoutRequestSchema.parse(data);\n const client = await getStoreApiClient();\n const response = await client.post<unknown>(\n `carts/${cartId}/checkout`,\n payload,\n );\n return CartCheckoutResponseSchema.parse(response);\n}\n\nexport async function uploadPaymentReceipt(\n cartId: string,\n file: File,\n): Promise<CartPaymentReceiptResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const client = await getStoreApiClient();\n const form = new FormData();\n form.set(\"file\", file);\n const response = await client.postForm<unknown>(\n `carts/${cartId}/payment-receipt`,\n form,\n typeof window === \"undefined\" ? { noStore: true } : undefined,\n );\n return CartPaymentReceiptResponseSchema.parse(response);\n}\n\n/**\n * GET /carts/{cartId}/checkout — carrito + métodos de pago (vista checkout).\n */\nexport async function getCartCheckout(\n cartId: string,\n): Promise<CartCheckoutReadResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(`carts/${cartId}/checkout`);\n return CartCheckoutReadResponseSchema.parse(response);\n}\n\nexport async function getShippingOptions(\n cartId: string,\n postalCode: string,\n): Promise<ShippingOptionsResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n if (!postalCode?.trim()) throw new Error(\"postalCode is required\");\n const client = await getStoreApiClient();\n const q = new URLSearchParams({ postalCode: postalCode.trim() });\n const response = await client.get<unknown>(\n `carts/${cartId}/shipping-options?${q.toString()}`,\n );\n return ShippingOptionsResponseSchema.parse(response);\n}\n\nexport async function putCartShippingMethod(\n cartId: string,\n data: CartShippingMethodPutRequest,\n): Promise<CartResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const payload = CartShippingMethodPutRequestSchema.parse(data);\n const client = await getStoreApiClient();\n const response = await client.put<unknown>(\n `carts/${cartId}/shipping-method`,\n payload,\n );\n return CartResponseSchema.parse(response);\n}\n\n/**\n * Solo métodos de pago (misma respuesta que {@link getCartCheckout}; evita duplicar llamadas si ya tienes el checkout).\n */\nexport async function getCartPaymentMethods(\n cartId?: string,\n): Promise<CartPaymentMethodsResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const { paymentMethods } = await getCartCheckout(cartId);\n return paymentMethods;\n}\n","import { z } from \"zod\";\nimport { getStoreApiClient } from \"./store-api-client\";\n\nexport const CustomerRegisterRequestSchema = z.object({\n email: z.string().email(),\n firstName: z.string().trim().min(1),\n lastName: z.string().trim().min(1),\n countryIsoCode: z.string().trim().length(2),\n password: z.string(),\n phone: z.string().trim().optional(),\n});\n\nexport type CustomerRegisterRequest = z.infer<typeof CustomerRegisterRequestSchema>;\n\n/** GET/POST/PUT cuerpo de dirección (upstream `customer/me/addresses` vía proxy). */\nexport const CustomerAddressSchema = z.object({\n /** Presente en listados cuando el upstream expone el id para PUT/DELETE. */\n id: z.string().optional(),\n addressKey: z.string(),\n countryIsoCode: z.string(),\n addressLine: z.string(),\n addressNumber: z.string(),\n department: z.string(),\n province: z.string(),\n district: z.string(),\n phone: z.string(),\n cellPhone: z.string(),\n postalCode: z.string(),\n reference: z.string(),\n latitude: z.number().nullable(),\n longitude: z.number().nullable(),\n isDefault: z.boolean(),\n});\n\nexport type CustomerAddress = z.infer<typeof CustomerAddressSchema>;\n\nexport const CustomerAddressUpsertSchema = CustomerAddressSchema.omit({ id: true });\n\nexport type CustomerAddressUpsert = z.infer<typeof CustomerAddressUpsertSchema>;\n\n/** GET /v1/customer/me (upstream vía proxy `/api/store/customer/me`). */\nexport const CustomerMeSchema = z.object({\n id: z.string(),\n storeId: z.string(),\n email: z.string().email(),\n firstName: z.string(),\n lastName: z.string(),\n phone: z.string(),\n identificationNumber: z.string().nullable(),\n identificationType: z.string().nullable(),\n entityName: z.string().nullable(),\n dateOfBirth: z.string().nullable(),\n gender: z.string().nullable(),\n countryIsoCode: z.string(),\n role: z.string().nullable(),\n companyName: z.string().nullable(),\n consent: z.boolean(),\n userId: z.string(),\n customerType: z.string(),\n status: z.string(),\n entityIdentificationNumber: z.string().nullable(),\n defaultAddressId: z.string().nullable(),\n metadata: z.unknown().nullable(),\n totalOrders: z.number(),\n avgOrders: z.number(),\n lastOrderId: z.string().nullable(),\n lastOrderDate: z.string().nullable(),\n loyaltyPoints: z.number(),\n addresses: z.array(CustomerAddressSchema),\n createdOn: z.string(),\n updatedOn: z.string().nullable(),\n});\n\nexport type CustomerMe = z.infer<typeof CustomerMeSchema>;\n\n/** PATCH /v1/customer (upstream vía proxy `customer`, respuesta 204). */\nexport const CustomerProfilePatchSchema = z.object({\n firstName: z.string().trim().min(1),\n lastName: z.string().trim().min(1),\n phone: z.string().trim(),\n identificationNumber: z.string().nullable(),\n identificationType: z.string().nullable(),\n entityName: z.string().nullable(),\n entityIdentificationNumber: z.string().nullable(),\n gender: z.string().nullable(),\n role: z.string().nullable(),\n companyName: z.string().nullable(),\n dateOfBirth: z.string().nullable(),\n consent: z.boolean(),\n countryIsoCode: z.string().trim().length(2),\n});\n\nexport type CustomerProfilePatch = z.infer<typeof CustomerProfilePatchSchema>;\n\nexport function customerMeToProfilePatch(me: CustomerMe): CustomerProfilePatch {\n return {\n firstName: me.firstName,\n lastName: me.lastName,\n phone: me.phone ?? \"\",\n identificationNumber: me.identificationNumber,\n identificationType: me.identificationType,\n entityName: me.entityName,\n entityIdentificationNumber: me.entityIdentificationNumber,\n gender: me.gender,\n role: me.role,\n companyName: me.companyName,\n dateOfBirth: me.dateOfBirth,\n consent: me.consent,\n countryIsoCode: me.countryIsoCode || \"PE\",\n };\n}\n\nfunction customerAuthOptions(accessToken?: string) {\n const token =\n typeof accessToken === \"string\" && accessToken.trim().length > 0 ? accessToken.trim() : undefined;\n return token ? { bearerToken: token } : {};\n}\n\n/**\n * Registra un cliente vía proxy /api/store.\n * El proxy agrega X-Store-Id igual que en el resto de endpoints de storefront.\n */\nexport async function registerCustomer(data: CustomerRegisterRequest): Promise<unknown> {\n const payload = CustomerRegisterRequestSchema.parse(data);\n const client = await getStoreApiClient();\n return client.post<unknown>(\"customer/register\", payload);\n}\n\n/**\n * Direcciones del cliente autenticado (Ecomiq upstream: rutas privadas con `Authorization: Bearer` solamente).\n *\n * - Con `accessToken`, el cliente lo manda al proxy y este lo reenvía tal cual a upstream.\n * - Sin token, el proxy usa la cookie HttpOnly de storefront (mismo Bearer hacia Ecomiq).\n */\nexport async function getCustomerAddresses(accessToken?: string): Promise<CustomerAddress[]> {\n const client = await getStoreApiClient();\n const token =\n typeof accessToken === \"string\" && accessToken.trim().length > 0 ? accessToken.trim() : undefined;\n const response = await client.get<unknown>(\"customer/addresses\", {\n ...(token ? { bearerToken: token } : {}),\n });\n return z.array(CustomerAddressSchema).parse(response);\n}\n\nexport async function createCustomerAddress(\n data: CustomerAddressUpsert,\n accessToken?: string\n): Promise<unknown> {\n const client = await getStoreApiClient();\n const token =\n typeof accessToken === \"string\" && accessToken.trim().length > 0 ? accessToken.trim() : undefined;\n const payload = CustomerAddressUpsertSchema.parse(data);\n return client.post<unknown>(\"customer/addresses\", payload, {\n ...(token ? { bearerToken: token } : {}),\n });\n}\n\nexport async function updateCustomerAddress(\n addressId: string,\n data: CustomerAddressUpsert,\n accessToken?: string\n): Promise<unknown> {\n const client = await getStoreApiClient();\n const token =\n typeof accessToken === \"string\" && accessToken.trim().length > 0 ? accessToken.trim() : undefined;\n const payload = CustomerAddressUpsertSchema.parse(data);\n const id = addressId.trim();\n if (!id) throw new Error(\"addressId requerido\");\n return client.put<unknown>(`customer/addresses/${encodeURIComponent(id)}`, payload, {\n ...(token ? { bearerToken: token } : {}),\n });\n}\n\nexport async function deleteCustomerAddress(\n addressId: string,\n accessToken?: string\n): Promise<unknown> {\n const client = await getStoreApiClient();\n const token =\n typeof accessToken === \"string\" && accessToken.trim().length > 0 ? accessToken.trim() : undefined;\n const id = addressId.trim();\n if (!id) throw new Error(\"addressId requerido\");\n return client.delete<unknown>(`customer/addresses/${encodeURIComponent(id)}`, {\n ...(token ? { bearerToken: token } : {}),\n });\n}\n\n/**\n * Perfil del cliente autenticado (`GET /v1/customer/me`).\n * Autenticación igual que `getCustomerAddresses`: Bearer opcional o cookie HttpOnly en el proxy.\n */\nexport async function getCustomerMe(accessToken?: string): Promise<CustomerMe> {\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(\"customer\", customerAuthOptions(accessToken));\n return CustomerMeSchema.parse(response);\n}\n\n/** Actualiza el perfil del cliente autenticado (`PATCH /v1/customer`). */\nexport async function patchCustomer(\n data: CustomerProfilePatch,\n accessToken?: string\n): Promise<void> {\n const client = await getStoreApiClient();\n const payload = CustomerProfilePatchSchema.parse(data);\n await client.patch<unknown>(\"customer\", payload, customerAuthOptions(accessToken));\n}\n","import { z } from \"zod\";\nimport { getStoreApiClient } from \"./store-api-client\";\n\nconst CustomerOrderShippingAddressSchema = z\n .object({\n name: z.string().nullable().optional(),\n company: z.string().nullable().optional(),\n address1: z.string(),\n address2: z.string().nullable().optional(),\n city: z.string().nullable().optional(),\n countryCode: z.string(),\n province: z.string().nullable().optional(),\n postalCode: z.string().nullable().optional(),\n district: z.string().nullable().optional(),\n phone: z.string().nullable().optional(),\n latitude: z.number().nullable().optional(),\n longitude: z.number().nullable().optional(),\n metadata: z.record(z.unknown()).nullable().optional(),\n })\n .passthrough();\n\nconst CustomerOrderLineItemSchema = z.object({\n id: z.string(),\n orderId: z.coerce.string(),\n productId: z.coerce.string().nullable(),\n variantId: z.coerce.string().nullable(),\n title: z.string(),\n subtitle: z.string().nullable().optional(),\n thumbnail: z.string().nullable().optional(),\n variantTitle: z.string().nullable().optional(),\n productHandle: z.string().nullable().optional(),\n quantity: z.number(),\n unitPrice: z.number(),\n total: z.number(),\n status: z.string(),\n});\n\n/** GET /v1/customer/orders (listado agrupado vía proxy `customer/orders`). */\nexport const CustomerOrderListItemSchema = z.object({\n orderId: z.coerce.string(),\n orderNumber: z.string(),\n orderGroup: z.string(),\n orderIds: z.array(z.coerce.string()),\n status: z.string(),\n total: z.number(),\n totalPaid: z.number(),\n currencyCode: z.string(),\n orderDate: z.string(),\n createdOn: z.string(),\n updatedOn: z.string().nullable().optional(),\n paymentAt: z.string().nullable().optional(),\n shippingAddress: CustomerOrderShippingAddressSchema.nullable().optional(),\n shippingAddressSummary: z.string().nullable().optional(),\n items: z.array(CustomerOrderLineItemSchema),\n});\n\nexport type CustomerOrderListItemDto = z.infer<typeof CustomerOrderListItemSchema>;\n\nconst CustomerOrderPaymentSchema = z.object({\n id: z.string(),\n paymentMethod: z.string(),\n paymentCode: z.string(),\n amount: z.number(),\n paymentStatus: z.string(),\n receiptUrl: z.string().nullable().optional(),\n createdOn: z.string(),\n});\n\nconst CustomerOrderStatusTimelineSchema = z.object({\n key: z.string(),\n label: z.string(),\n occurredAt: z.string(),\n description: z.string().nullable().optional(),\n status: z.string(),\n source: z.string(),\n});\n\n/** GET /v1/customer/orders/{orderId} (detalle vía proxy). */\nexport const CustomerOrderDetailSchema = z.object({\n id: z.coerce.string(),\n orderNumber: z.string(),\n orderGroup: z.string(),\n status: z.string(),\n total: z.number(),\n totalPaid: z.number(),\n currencyCode: z.string(),\n orderDate: z.string(),\n createdOn: z.string(),\n updatedOn: z.string().nullable().optional(),\n paymentAt: z.string().nullable().optional(),\n subTotal: z.number(),\n discount: z.number(),\n shipping: z.number(),\n tax: z.number(),\n email: z.string(),\n phone: z.string(),\n firstName: z.string(),\n lastName: z.string(),\n shippingAddress: CustomerOrderShippingAddressSchema.nullable().optional(),\n shippingAddressSummary: z.string().nullable().optional(),\n billingAddress: CustomerOrderShippingAddressSchema.nullable().optional(),\n items: z.array(CustomerOrderLineItemSchema),\n payments: z.array(CustomerOrderPaymentSchema),\n statusTimeline: z.array(CustomerOrderStatusTimelineSchema),\n});\n\nexport type CustomerOrderDetailDto = z.infer<typeof CustomerOrderDetailSchema>;\n\nfunction authOptions(accessToken?: string) {\n const token =\n typeof accessToken === \"string\" && accessToken.trim().length > 0\n ? accessToken.trim()\n : undefined;\n return token ? { bearerToken: token } : {};\n}\n\nexport async function getCustomerOrders(\n accessToken?: string\n): Promise<CustomerOrderListItemDto[]> {\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(\"customer/orders\", authOptions(accessToken));\n return z.array(CustomerOrderListItemSchema).parse(response);\n}\n\nexport async function getCustomerOrder(\n orderId: string,\n accessToken?: string\n): Promise<CustomerOrderDetailDto> {\n const client = await getStoreApiClient();\n const id = orderId.trim();\n if (!id) throw new Error(\"orderId requerido\");\n const response = await client.get<unknown>(\n `customer/orders/${encodeURIComponent(id)}`,\n authOptions(accessToken)\n );\n return CustomerOrderDetailSchema.parse(response);\n}\n","import { z } from \"zod\";\n\n/** Dirección mínima para validar borradores de pedido en el storefront (sin depender de `@ecomiq/core`). */\nexport const StorefrontOrderAddressSchema = z\n .object({\n address1: z.string().optional(),\n address2: z.string().optional(),\n city: z.string().optional(),\n province: z.string().optional(),\n country: z.string().optional(),\n zip: z.string().optional(),\n phone: z.string().optional(),\n firstName: z.string().optional(),\n lastName: z.string().optional(),\n })\n .passthrough();\n\nexport const OrderDraftItemSchema = z.object({\n id: z.string(),\n productId: z.coerce.string().nullable().optional(),\n sellerId: z.string().nullable().optional(),\n shippingProfileId: z.string().nullable().optional(),\n variantId: z.coerce.string().nullable().optional(),\n title: z.string(),\n subtitle: z.string().nullable().optional(),\n thumbnail: z.string().nullable().optional(),\n quantity: z.number().optional().default(1),\n unitPrice: z.number().optional().default(0),\n subTotal: z.number().optional().default(0),\n discount: z.number().optional().default(0),\n shipping: z.number().optional().default(0),\n tax: z.number().optional().default(0),\n warranty: z.number().optional().default(0),\n total: z.number().optional().default(0),\n requiresShipping: z.boolean().optional().default(true),\n isTaxInclusive: z.boolean().optional().default(true),\n metadata: z.record(z.unknown()).optional().default({}),\n});\n\nexport const OrderDraftShippingMethodSchema = z.object({\n id: z.string(),\n name: z.string().optional().default(\"\"),\n description: z.string().nullable().optional(),\n subtotal: z.number().optional().default(0),\n discountTotal: z.number().optional().default(0),\n taxTotal: z.number().optional().default(0),\n total: z.number().optional().default(0),\n isTaxInclusive: z.boolean().optional().default(true),\n sellerId: z.string().nullable().optional(),\n shippingProfileId: z.string().nullable().optional(),\n shippingMethodId: z.string().nullable().optional(),\n connectionId: z.string().nullable().optional(),\n providerName: z.string().nullable().optional(),\n trackingCode: z.string().nullable().optional(),\n estimatedDays: z.number().nullable().optional(),\n zoneCode: z.string().nullable().optional(),\n locationId: z.string().nullable().optional(),\n pickupPointId: z.string().nullable().optional(),\n scheduledDate: z.string().nullable().optional(),\n scheduledTime: z.string().nullable().optional(),\n data: z.record(z.unknown()).optional().default({}),\n});\n\nexport const OrderDraftSchema = z.object({\n id: z.string(),\n storeId: z.string().optional(),\n customerId: z.coerce.string().nullable().optional(),\n cartId: z.string().nullable().optional(),\n draftNumber: z.string(),\n currencyCode: z.string().optional().default(\"PEN\"),\n source: z.string().nullable().optional(),\n notes: z.string().nullable().optional(),\n email: z.string().nullable().optional(),\n phone: z.string().nullable().optional(),\n firstName: z.string().nullable().optional(),\n lastName: z.string().nullable().optional(),\n identificationType: z.string().nullable().optional(),\n identificationNumber: z.string().nullable().optional(),\n entityTaxId: z.string().nullable().optional(),\n entityName: z.string().nullable().optional(),\n status: z.string(),\n draftDate: z.string().nullable().optional(),\n sentAt: z.string().nullable().optional(),\n viewedAt: z.string().nullable().optional(),\n acceptedAt: z.string().nullable().optional(),\n rejectedAt: z.string().nullable().optional(),\n expiredAt: z.string().nullable().optional(),\n cancelledAt: z.string().nullable().optional(),\n convertedAt: z.string().nullable().optional(),\n shareToken: z.string().nullable().optional(),\n shareExpiresAt: z.string().nullable().optional(),\n allowAnonymousShareAccess: z.boolean().optional().default(false),\n sharedAt: z.string().nullable().optional(),\n billingAddress: StorefrontOrderAddressSchema.optional().nullable(),\n shippingAddress: StorefrontOrderAddressSchema.optional().nullable(),\n metadata: z.record(z.unknown()).optional().default({}),\n subTotal: z.number().optional().default(0),\n discount: z.number().optional().default(0),\n shipping: z.number().optional().default(0),\n tax: z.number().optional().default(0),\n warranty: z.number().optional().default(0),\n total: z.number().optional().default(0),\n paymentMethod: z.string().optional().default(\"\"),\n paymentCode: z.string().optional().default(\"\"),\n items: z.array(OrderDraftItemSchema).optional().default([]),\n shippingMethods: z.array(OrderDraftShippingMethodSchema).optional().default([]),\n createdOn: z.string().optional(),\n updatedOn: z.string().nullable().optional(),\n});\n\nexport type OrderDraft = z.infer<typeof OrderDraftSchema>;\n","import { OrderDraftSchema, type OrderDraft } from \"../models/order-draft\";\nimport { getStoreApiClient } from \"./store-api-client\";\n\nexport async function getSharedOrderDraft(\n shareToken: string,\n): Promise<OrderDraft> {\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(\n `order-drafts/share/${encodeURIComponent(shareToken)}`,\n { noStore: true },\n );\n return OrderDraftSchema.parse(response);\n}\n","\"use client\";\n\nimport {\n QueryClient,\n QueryClientProvider,\n hydrate,\n type DehydratedState,\n} from \"@tanstack/react-query\";\nimport { useRef, useEffect, type ReactNode } from \"react\";\n\nconst defaultOptions = {\n queries: {\n staleTime: 60 * 1000,\n },\n};\n\nexport interface QueryProviderProps {\n children: ReactNode;\n dehydratedState?: DehydratedState;\n}\n\nexport function QueryProvider({ children, dehydratedState }: QueryProviderProps) {\n const queryClientRef = useRef<QueryClient | null>(null);\n const hydratedRef = useRef(false);\n\n if (queryClientRef.current === null) {\n queryClientRef.current = new QueryClient({ defaultOptions });\n }\n\n const queryClient = queryClientRef.current;\n\n useEffect(() => {\n if (dehydratedState && !hydratedRef.current) {\n hydrate(queryClient, dehydratedState);\n hydratedRef.current = true;\n }\n }, [queryClient, dehydratedState]);\n\n return (\n <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>\n );\n}\n","\"use client\";\n\nimport React, { createContext, useContext } from \"react\";\nimport { createAuthClient } from \"better-auth/react\";\n\n/** Instancia de `createAuthClient` (better-auth/react) con los plugins de la app. */\nexport type StorefrontAuthClientInstance = ReturnType<typeof createAuthClient>;\n\nconst StorefrontAuthContext = createContext<StorefrontAuthClientInstance | null>(null);\n\nexport function StorefrontAuthProvider({\n authClient,\n children,\n}: {\n authClient: StorefrontAuthClientInstance;\n children: React.ReactNode;\n}) {\n return (\n <StorefrontAuthContext.Provider value={authClient}>{children}</StorefrontAuthContext.Provider>\n );\n}\n\nexport function useStorefrontAuthClient(): StorefrontAuthClientInstance {\n const client = useContext(StorefrontAuthContext);\n if (!client) {\n throw new Error(\n \"useStorefrontAuthClient debe usarse dentro de StorefrontAuthProvider (o EcomiqProvider con authClient).\",\n );\n }\n return client;\n}\n\nexport type StorefrontSessionUser = {\n id: string;\n email: string;\n firstName: string;\n lastName: string;\n name?: string;\n phone?: string;\n};\n\n/** Caducidad alineada con OAuth/`expires_in` (skew en ms). El bearer ya no viene en JSON de sesión. */\nexport function storefrontSessionEndsSoon(expiresAt: Date | undefined, skewMs = 120_000): boolean {\n if (!expiresAt) return false;\n return Date.now() + skewMs >= expiresAt.getTime();\n}\n\n/** @deprecated Usar `storefrontSessionEndsSoon` */\nexport const storefrontAccessTokenNeedsRefresh = storefrontSessionEndsSoon;\n\nfunction parseStorefrontSessionExpires(at: unknown): Date | undefined {\n if (!at) return undefined;\n if (at instanceof Date) return Number.isNaN(at.getTime()) ? undefined : at;\n if (typeof at === \"string\") {\n const d = new Date(at);\n return Number.isNaN(d.getTime()) ? undefined : d;\n }\n return undefined;\n}\n\nfunction mapSessionUser(raw: unknown): StorefrontSessionUser | null {\n if (!raw || typeof raw !== \"object\") return null;\n const u = raw as Record<string, unknown>;\n const explicitFirst =\n typeof u.firstName === \"string\" ? u.firstName : typeof u.given_name === \"string\" ? u.given_name : \"\";\n const explicitLast =\n typeof u.lastName === \"string\" ? u.lastName : typeof u.family_name === \"string\" ? u.family_name : \"\";\n if (explicitFirst || explicitLast) {\n return {\n id: String(u.id ?? \"\"),\n email: String(u.email ?? \"\"),\n firstName: explicitFirst,\n lastName: explicitLast,\n name: typeof u.name === \"string\" ? u.name : undefined,\n phone: typeof u.phone === \"string\" ? u.phone : undefined,\n };\n }\n const emailLocal = String(u.email ?? \"\").split(\"@\")[0] ?? \"\";\n const full = typeof u.name === \"string\" ? u.name.trim() : emailLocal.trim();\n const parts = full ? full.split(/\\s+/) : [];\n return {\n id: String(u.id ?? \"\"),\n email: String(u.email ?? \"\"),\n firstName: parts[0] ?? \"\",\n lastName: parts.slice(1).join(\" \"),\n name: typeof u.name === \"string\" ? u.name : undefined,\n phone: typeof u.phone === \"string\" ? u.phone : undefined,\n };\n}\n\n/**\n * Sesión Better Auth + usuario mapeado para UI (headers, drawer).\n */\nexport function useStorefrontSession() {\n const authClient = useStorefrontAuthClient();\n const session = authClient.useSession();\n const user = mapSessionUser(session.data?.user);\n\n const storefrontSession = session.data?.session as { expiresAt?: unknown } | undefined;\n\n /** Misma fecha que OAuth cuando el login fijó `expires_in` en la sesión Better Auth. */\n const sessionExpiresAt = parseStorefrontSessionExpires(storefrontSession?.expiresAt);\n\n return {\n session,\n user,\n sessionExpiresAt,\n isAuthenticated: Boolean(session.data?.user),\n isPending: session.isPending,\n error: session.error,\n refetch: session.refetch,\n signOut: () => authClient.signOut(),\n };\n}\n","\"use client\";\n\nimport { useQuery, useInfiniteQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport {\n getStorefrontProducts,\n getStorefrontProductBySlug,\n} from \"../../../core/client/store-api-product.service\";\nimport type {\n StorefrontProductsParamsInput,\n StorefrontProductsResponse,\n} from \"../../../core/models/product\";\n\n/**\n * Hooks de productos que usan el proxy /api/store (cookie store_id).\n * No requiere storeId: el proxy lo resuelve por cookie.\n */\nexport function useStoreProducts() {\n const useStorefrontProductsList = (params?: StorefrontProductsParamsInput) => {\n return useQuery({\n queryKey: [\"storefront\", \"products\", params],\n queryFn: () => getStorefrontProducts(params),\n });\n };\n\n const useStorefrontInfiniteProducts = (\n params?: Omit<StorefrontProductsParamsInput, \"page\">\n ) => {\n return useInfiniteQuery({\n queryKey: [\"storefront\", \"products\", \"infinite\", params],\n queryFn: ({ pageParam = 1 }) =>\n getStorefrontProducts({ ...params, page: pageParam }),\n getNextPageParam: (lastPage: StorefrontProductsResponse) =>\n lastPage.pageIndex < lastPage.totalPages ? lastPage.pageIndex + 1 : undefined,\n initialPageParam: 1,\n });\n };\n\n const useProductBySlug = (slug: string) => {\n return useQuery({\n queryKey: [\"storefront\", \"product\", \"slug\", slug],\n queryFn: () => getStorefrontProductBySlug(slug),\n enabled: !!slug,\n });\n };\n\n const useRefreshStorefrontProducts = () => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (params?: StorefrontProductsParamsInput) =>\n getStorefrontProducts(params),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"storefront\", \"products\"] });\n },\n });\n };\n\n return {\n useStorefrontProductsList,\n useStorefrontInfiniteProducts,\n useProductBySlug,\n useRefreshStorefrontProducts,\n };\n}\n","\"use client\";\n\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport {\n getStorefrontCollections,\n getStorefrontCollectionBySlug,\n} from \"../../../core/client/store-api-collection.service\";\n\n/**\n * Hooks de colecciones que usan el proxy /api/store.\n */\nexport function useStoreCollections() {\n const useStorefrontCollectionsList = () => {\n return useQuery({\n queryKey: [\"storefront\", \"collections\"],\n queryFn: () => getStorefrontCollections(),\n });\n };\n\n const useCollectionBySlug = (slug: string) => {\n return useQuery({\n queryKey: [\"storefront\", \"collection\", \"slug\", slug],\n queryFn: () => getStorefrontCollectionBySlug(slug),\n enabled: !!slug,\n });\n };\n\n const useRefreshStorefrontCollections = () => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: () => getStorefrontCollections(),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"storefront\", \"collections\"] });\n },\n });\n };\n\n return {\n useStorefrontCollectionsList,\n useCollectionBySlug,\n useRefreshStorefrontCollections,\n };\n}\n\n","\"use client\";\n\nimport { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport {\n getStorefrontPages,\n getStorefrontPageBySlug,\n} from \"../../../core/client/store-api-pages.service\";\n\n/**\n * Hooks de páginas que usan el proxy /api/store.\n */\nexport function useStorePages() {\n const useStorefrontPagesList = () => {\n return useQuery({\n queryKey: [\"storefront\", \"pages\"],\n queryFn: () => getStorefrontPages(),\n });\n };\n\n const usePageBySlug = (slug: string) => {\n return useQuery({\n queryKey: [\"storefront\", \"page\", \"slug\", slug],\n queryFn: () => getStorefrontPageBySlug(slug),\n enabled: !!slug,\n });\n };\n\n const useRefreshStorefrontPages = () => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: () => getStorefrontPages(),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"storefront\", \"pages\"] });\n },\n });\n };\n\n return {\n useStorefrontPagesList,\n usePageBySlug,\n useRefreshStorefrontPages,\n };\n}\n","\"use client\";\n\nimport { create } from 'zustand';\nimport { persist } from 'zustand/middleware';\n\nexport type CartItemVariant = {\n /** Identifier of the selected variant (if any) */\n variantId?: string;\n /** Optional SKU of the variant */\n variantSku?: string;\n /** Human readable label for the variant (e.g. \"Color: Black • Size: M\") */\n variantLabel?: string;\n};\n\nexport type CartItem = CartItemVariant & {\n id: string;\n title: string;\n image: string;\n /** Backwards‑compatible size field; usually covered by variantLabel */\n size: string;\n price: number;\n quantity: number;\n};\n\nexport type CheckoutStep =\n | 'customer'\n | 'shipping'\n | 'shippingOptions'\n | 'payment';\n\nexport type CheckoutCustomerLocal = {\n email: string;\n firstName: string;\n lastName: string;\n phone: string;\n};\n\ntype CartState = {\n count: number;\n cart: CartItem[];\n /** Token/id del carrito en backend (ownerId) */\n cartTokenId: string | null;\n setCartTokenId: (token: string | null) => void;\n checkoutStep: CheckoutStep | null;\n setCheckoutStep: (step: CheckoutStep | null) => void;\n /**\n * Customer guardado localmente para poder recrear el carrito si el backend\n * devuelve 404 por token inválido.\n */\n checkoutCustomerLocal: { cartTokenId: string; customer: CheckoutCustomerLocal } | null;\n setCheckoutCustomerLocal: (customer: CheckoutCustomerLocal) => void;\n clearCheckoutCustomerLocal: () => void;\n addCart: (item: CartItem) => void;\n removeCart: (id: string) => void;\n /** Reemplaza líneas locales con el snapshot del API (checkout / carrito server). */\n replaceCartItems: (items: CartItem[]) => void;\n /** Carrito/token inválido en servidor (ej. eliminado): limpia estado local y checkout. */\n clearCartSession: () => void;\n};\n\nexport const CART_PERSIST_KEY = \"cart-storage\";\n\nexport const useCart = create<CartState>()(\n persist(\n (set) => ({\n count: 0,\n cart: [],\n cartTokenId: null,\n setCartTokenId: (token) => set((state) => ({ ...state, cartTokenId: token })),\n checkoutStep: null,\n setCheckoutStep: (step) => set((state) => ({ ...state, checkoutStep: step })),\n checkoutCustomerLocal: null,\n setCheckoutCustomerLocal: (customer) =>\n set((state) => {\n if (!state.cartTokenId) return state;\n return {\n checkoutCustomerLocal: {\n cartTokenId: state.cartTokenId,\n customer,\n },\n };\n }),\n clearCheckoutCustomerLocal: () => set(() => ({ checkoutCustomerLocal: null })),\n addCart: (item) =>\n set((state) => {\n const existingItem = state.cart.find(\n (cartItem) => cartItem.id === item.id\n );\n if (existingItem) {\n const newQuantity = Math.max(0, existingItem.quantity) + 1;\n const cart = state.cart.map((cartItem) =>\n cartItem.id === item.id\n ? { ...cartItem, quantity: newQuantity }\n : cartItem\n );\n const count = cart.reduce((sum, i) => sum + Math.max(0, i.quantity), 0);\n return { count, cart };\n }\n const newItem: CartItem = {\n ...item,\n quantity: Math.max(1, Math.max(0, item.quantity ?? 1)),\n };\n const cart = [...state.cart, newItem];\n const count = cart.reduce((sum, i) => sum + Math.max(0, i.quantity), 0);\n return { count, cart };\n }),\n removeCart: (id) =>\n set((state) => {\n const existingItem = state.cart.find((item) => item.id === id);\n if (!existingItem) return state;\n if (existingItem.quantity > 1) {\n const newQuantity = Math.max(0, existingItem.quantity - 1);\n const cart = state.cart.map((cartItem) =>\n cartItem.id === id\n ? { ...cartItem, quantity: newQuantity }\n : cartItem\n );\n const count = cart.reduce((sum, i) => sum + Math.max(0, i.quantity), 0);\n return { count, cart };\n }\n const cart = state.cart.filter((item) => item.id !== id);\n const count = Math.max(0, cart.reduce((sum, i) => sum + Math.max(0, i.quantity), 0));\n return { count, cart };\n }),\n replaceCartItems: (items) =>\n set(() => {\n const cart = items.map((item) => ({\n ...item,\n quantity: Math.max(0, item.quantity),\n }));\n const count = cart.reduce((sum, i) => sum + Math.max(0, i.quantity), 0);\n return { count, cart };\n }),\n clearCartSession: () =>\n set(() => ({\n count: 0,\n cart: [],\n cartTokenId: null,\n checkoutStep: null,\n checkoutCustomerLocal: null,\n })),\n }),\n { name: CART_PERSIST_KEY },\n ),\n);\n\n/** Otra pestaña escribió en localStorage → rehidratar el store en memoria. */\nif (typeof window !== \"undefined\") {\n window.addEventListener(\"storage\", (event) => {\n if (event.key !== CART_PERSIST_KEY) return;\n void useCart.persist.rehydrate();\n });\n}\n","\"use client\";\n\nimport { useMutation, useQuery } from \"@tanstack/react-query\";\nimport { useEffect, useRef } from \"react\";\nimport { toast } from \"sonner\";\nimport { useCart } from \"../../stores/use-cart\";\nimport { isCartNotActiveApiError } from \"../../../core/client/store-api-errors\";\nimport {\n getCart,\n createCart,\n patchCartBuyer,\n patchCartAddresses,\n addCartItem,\n updateCartItem,\n deleteCartItem,\n checkoutCart,\n uploadPaymentReceipt,\n getCartCheckout,\n getCartPaymentMethods,\n getShippingOptions,\n putCartShippingMethod,\n addCartCoupon,\n removeCartCoupon,\n} from \"../../../core/client/store-api-cart.service\";\nimport type {\n CartBuyerRequest,\n CartAddressesRequest,\n CartCreateRequest,\n CartResponse,\n CartCheckoutRequest,\n CartCheckoutResponse,\n CartCheckoutReadResponse,\n CartPaymentReceiptResponse,\n CartPaymentMethodsResponse,\n CartShippingMethodPutRequest,\n CartCouponRequest,\n CartItemRequest,\n CartItemUpdateRequest,\n ShippingOptionsResponse,\n} from \"../../../core/models/cart\";\n\n/**\n * Hooks de carrito que usan el proxy /api/store (`X-Store-Id` vía provider / server setters).\n */\nexport function useStoreCart() {\n const useGetCart = (cartId?: string | null) =>\n useQuery<CartResponse, Error>({\n queryKey: [\"storefront\", \"cart\", cartId ?? null],\n queryFn: () => getCart(cartId ?? undefined),\n // Si devuelve 404 no reintentar; para otros errores solo un intento adicional como máximo.\n retry: (failureCount, error) => {\n const status = (error as Error & { status?: number }).status;\n if (status === 404) return false;\n return failureCount < 1;\n },\n // Evitar refetch automático al enfocar la ventana; el carrito se carga una sola vez aquí.\n refetchOnWindowFocus: false,\n enabled: !!cartId,\n });\n\n const useCreateCart = () =>\n useMutation<CartResponse, Error, CartCreateRequest>({\n mutationFn: (data) => createCart(data),\n });\n\n const useUpdateCartBuyer = () =>\n useMutation<\n CartResponse,\n Error,\n { data: CartBuyerRequest; cartId: string }\n >({\n mutationFn: ({ data, cartId }) => patchCartBuyer(data, cartId),\n });\n\n const useUpdateCartAddresses = () =>\n useMutation<\n CartResponse,\n Error,\n { data: CartAddressesRequest; cartId: string }\n >({\n mutationFn: ({ data, cartId }) => patchCartAddresses(data, cartId),\n });\n\n const useAddCartItem = () =>\n useMutation<\n CartResponse,\n Error,\n CartItemRequest & { cartId: string }\n >({\n mutationFn: ({ cartId, ...data }) => addCartItem(data, cartId),\n });\n\n const useUpdateCartItem = () =>\n useMutation<\n CartResponse,\n Error,\n { cartId: string; itemId: string; data: CartItemUpdateRequest }\n >({\n mutationFn: ({ cartId, itemId, data }) =>\n updateCartItem(cartId, itemId, data),\n });\n\n const useDeleteCartItem = () =>\n useMutation<\n CartResponse,\n Error,\n { cartId: string; itemId: string }\n >({\n mutationFn: ({ cartId, itemId }) => deleteCartItem(cartId, itemId),\n });\n\n const useCheckoutCart = () =>\n useMutation<\n CartCheckoutResponse,\n Error,\n { data: CartCheckoutRequest; cartId: string }\n >({\n mutationFn: ({ data, cartId }) => checkoutCart(data, cartId),\n });\n\n const useUploadPaymentReceipt = () =>\n useMutation<\n CartPaymentReceiptResponse,\n Error,\n { cartId: string; file: File }\n >({\n mutationFn: ({ cartId, file }) => uploadPaymentReceipt(cartId, file),\n });\n\n const useGetCartCheckout = (cartId?: string | null) => {\n const inactiveHandledRef = useRef<string | null>(null);\n\n const query = useQuery<CartCheckoutReadResponse, Error>({\n queryKey: [\"storefront\", \"cart\", cartId ?? null, \"checkout\"],\n queryFn: () => getCartCheckout(cartId!),\n retry: (failureCount, error) => {\n const status = (error as Error & { status?: number }).status;\n if (status === 404) return false;\n if (status === 400 && isCartNotActiveApiError(error)) return false;\n return failureCount < 1;\n },\n /** Evita GET repetidos al cambiar de paso / re-render; `refetch()` sigue forzando actualización tras mutaciones. */\n staleTime: 60_000,\n refetchOnMount: false,\n refetchOnReconnect: false,\n refetchOnWindowFocus: false,\n enabled: !!cartId,\n });\n\n useEffect(() => {\n inactiveHandledRef.current = null;\n }, [cartId]);\n\n useEffect(() => {\n if (!cartId) return;\n if (!query.isError || !query.error) return;\n if (!isCartNotActiveApiError(query.error)) return;\n if (inactiveHandledRef.current === cartId) return;\n inactiveHandledRef.current = cartId;\n toast.error(\n \"Este carrito ya no está disponible. Se ha vaciado tu bolsa para que puedas empezar de nuevo.\",\n );\n useCart.getState().clearCartSession();\n }, [cartId, query.isError, query.error]);\n\n return query;\n };\n\n const useGetCartPaymentMethods = (cartId?: string | null) =>\n useQuery<CartPaymentMethodsResponse, Error>({\n queryKey: [\"storefront\", \"cart\", cartId ?? null, \"payment-methods\"],\n queryFn: () => getCartPaymentMethods(cartId ?? undefined),\n retry: (failureCount, error) => {\n const status = (error as Error & { status?: number }).status;\n if (status === 404) return false;\n return failureCount < 1;\n },\n refetchOnWindowFocus: false,\n enabled: !!cartId,\n });\n\n const useGetShippingOptions = (\n cartId: string | null | undefined,\n postalCode: string | undefined,\n enabled: boolean,\n ) =>\n useQuery<ShippingOptionsResponse, Error>({\n queryKey: [\n \"storefront\",\n \"cart\",\n cartId ?? null,\n \"shipping-options\",\n postalCode ?? \"\",\n ],\n queryFn: () => getShippingOptions(cartId!, postalCode!),\n retry: (failureCount, error) => {\n const status = (error as Error & { status?: number }).status;\n if (status === 404) return false;\n return failureCount < 1;\n },\n refetchOnWindowFocus: false,\n enabled: !!cartId && !!postalCode?.trim() && enabled,\n });\n\n const usePutCartShippingMethod = () =>\n useMutation<\n CartResponse,\n Error,\n { cartId: string; data: CartShippingMethodPutRequest }\n >({\n mutationFn: ({ cartId, data }) => putCartShippingMethod(cartId, data),\n });\n\n const useAddCartCoupon = () =>\n useMutation<\n CartResponse,\n Error,\n { cartId: string; data: CartCouponRequest }\n >({\n mutationFn: ({ cartId, data }) => addCartCoupon(cartId, data),\n });\n\n const useRemoveCartCoupon = () =>\n useMutation<CartResponse, Error, { cartId: string; code: string }>({\n mutationFn: ({ cartId, code }) => removeCartCoupon(cartId, code),\n });\n\n return {\n useCreateCart,\n useGetCart,\n useGetCartCheckout,\n useUpdateCartBuyer,\n useUpdateCartAddresses,\n useAddCartItem,\n useUpdateCartItem,\n useDeleteCartItem,\n useCheckoutCart,\n useUploadPaymentReceipt,\n useGetCartPaymentMethods,\n useGetShippingOptions,\n usePutCartShippingMethod,\n useAddCartCoupon,\n useRemoveCartCoupon,\n };\n}\n","\"use client\";\n\nimport { create } from 'zustand';\nimport { StorefrontSettings } from '../../core/models/store';\n\ntype Drawers = {\n cart: boolean;\n search: boolean;\n menu: boolean;\n filter: boolean;\n [key: string]: boolean;\n};\ntype Modals = {\n login: boolean;\n signup: boolean;\n [key: string]: boolean;\n};\n\ntype StoreState = {\n data: StorefrontSettings | null;\n drawers: Drawers;\n modals: Modals;\n openDrawer: (drawer: keyof Drawers) => void;\n closeDrawer: (drawer: keyof Drawers) => void;\n toggleDrawer: (drawer: keyof Drawers) => void;\n closeAllDrawers: () => void;\n openModal: (modal: keyof Modals) => void;\n closeModal: (modal: keyof Modals) => void;\n toggleModal: (modal: keyof Modals) => void;\n closeAllModals: () => void;\n};\n\nexport const useStore = create<StoreState>()(\n (set) => ({\n data: null,\n drawers: {\n cart: false,\n search: false,\n menu: false,\n filter: false,\n },\n openDrawer: (drawer) =>\n set((state) => ({\n drawers: {\n ...state.drawers,\n [drawer]: true,\n },\n })),\n closeDrawer: (drawer) =>\n set((state) => ({\n drawers: {\n ...state.drawers,\n [drawer]: false,\n },\n })),\n toggleDrawer: (drawer) =>\n set((state) => ({\n drawers: {\n ...state.drawers,\n [drawer]: !state.drawers[drawer],\n },\n })),\n closeAllDrawers: () =>\n set((state) => ({\n drawers: Object.keys(state.drawers).reduce(\n (acc, key) => ({ ...acc, [key]: false }),\n {} as Drawers\n ),\n })),\n modals: {\n login: false,\n signup: false,\n },\n openModal: (modal) =>\n set((state) => ({\n modals: {\n ...state.modals,\n login: false,\n signup: false,\n [modal]: true,\n },\n })),\n closeModal: (modal) =>\n set((state) => ({\n modals: {\n ...state.modals,\n login: false,\n signup: false,\n [modal]: false,\n },\n })),\n toggleModal: (modal) =>\n set((state) => ({\n modals: {\n ...state.modals,\n [modal]: !state.modals[modal],\n },\n })),\n closeAllModals: () =>\n set((state) => ({\n modals: Object.keys(state.modals).reduce(\n (acc, key) => ({ ...acc, [key]: false }),\n {} as Modals\n ),\n })),\n }),\n);\n","\"use client\";\n\nimport React, { useEffect, useState } from \"react\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport {\n StorefrontAuthProvider,\n type StorefrontAuthClientInstance,\n} from \"../../providers/storefront-auth-context\";\nimport type { StorefrontSettings } from \"../../../core/models/store\";\nimport { useStore } from \"../../stores/use-store\";\nimport { setClientStoreId } from \"../../../core/client/store-api-client\";\n\nexport type EcomiqProviderProps = {\n store: StorefrontSettings | null;\n /** Si lo omites, catálogo y carrito funcionan; login requiere configurar Better Auth (ver README). */\n authClient?: StorefrontAuthClientInstance;\n children: React.ReactNode;\n /**\n * Modales de login/registro y toasts del shell Ecomiq (requiere `@ecomiq/ui` en el monorepo).\n * En npm / tiendas custom deja `false` y monta tu propia UI.\n */\n withShellUi?: boolean;\n};\n\nexport function EcomiqProvider({\n store,\n authClient,\n children,\n withShellUi = false,\n}: EcomiqProviderProps) {\n useStore.setState({ data: store ?? null });\n\n useEffect(() => {\n setClientStoreId(store?.store.id ?? null);\n return () => setClientStoreId(null);\n }, [store]);\n\n const [queryClient] = useState(() => new QueryClient());\n\n const tree = (\n <QueryClientProvider client={queryClient}>\n {children}\n {withShellUi ? <EcomiqShellUi /> : null}\n </QueryClientProvider>\n );\n\n if (!authClient) return tree;\n\n return (\n <StorefrontAuthProvider authClient={authClient}>{tree}</StorefrontAuthProvider>\n );\n}\n\nfunction EcomiqShellUi() {\n const [ui, setUi] = useState<React.ComponentType | null>(null);\n\n useEffect(() => {\n void import(\"./ecomiq-shell-ui\").then((mod) => setUi(() => mod.EcomiqShellUi));\n }, []);\n\n return ui ? React.createElement(ui) : null;\n}\n","/** Id del plugin servidor/cliente Better Auth (debe coincidir en ambos lados). */\nexport const PLUGIN_ID = \"ecomiq-oauth-password\";\nexport const ECOMIQ_OAUTH_TOKEN_URL = \"https://auth.ecomiq.pe/connect/token\";\nexport const ECOMIQ_OAUTH_USERINFO_URL = \"https://auth.ecomiq.pe/connect/userinfo\";\n","import type { BetterAuthClientPlugin } from \"better-auth/client\";\nimport { PLUGIN_ID } from \"./ecomiq-oauth-password-constants\";\n\n/**\n * Cliente Better Auth para el plugin `ecomiqOAuthPassword`.\n * Tras añadirlo a `createAuthClient`, refresca la sesión al llamar al sign-in.\n *\n * Ejemplo:\n * `authClient.$fetch(\"/ecomiq-oauth/sign-in\", { method: \"POST\", headers, body: { email, password } })`\n */\nexport function ecomiqOAuthPasswordClient(): BetterAuthClientPlugin {\n return {\n id: PLUGIN_ID,\n pathMethods: {\n \"/ecomiq-oauth/sign-in\": \"POST\",\n },\n atomListeners: [\n {\n matcher: (path) => path === \"/ecomiq-oauth/sign-in\",\n signal: \"$sessionSignal\",\n },\n ],\n };\n}\n","import { z } from \"zod\";\n\nexport const StorefrontCheckoutSettingsSchema = z.object({\n allowGuestCheckout: z.boolean().optional(),\n identityScope: z.enum([\"store\", \"tenant\", \"global\"]).optional(),\n signInMethods: z.array(z.string()).optional(),\n});\n\nexport type StorefrontCheckoutSettings = z.infer<typeof StorefrontCheckoutSettingsSchema>;\n\nconst looseRecord = z.record(z.string(), z.unknown());\n\nexport const StorefrontThemeConfigSchema = z\n .object({\n name: z.string().nullable().optional(),\n mode: z.string().nullable().optional(),\n colors: looseRecord.optional(),\n fonts: looseRecord.optional(),\n assets: looseRecord.optional(),\n })\n .passthrough();\n\nexport const StorefrontFeaturesEnabledSchema = z\n .object({\n flags: looseRecord.optional(),\n })\n .passthrough();\n\nexport const StorefrontCmsBrandingSchema = z.object({\n logoUrl: z.string().nullable().optional(),\n logoDarkUrl: z.string().nullable().optional(),\n faviconUrl: z.string().nullable().optional(),\n socialImageUrl: z.string().nullable().optional(),\n});\n\nexport const StorefrontCmsSeoSchema = z.object({\n siteName: z.string().nullable().optional(),\n metaTitle: z.string().nullable().optional(),\n metaDescription: z.string().nullable().optional(),\n titleTemplate: z.string().nullable().optional(),\n robotsIndex: z.boolean().optional(),\n});\n\nexport const StorefrontCmsSocialLinksSchema = z.object({\n instagram: z.string().nullable().optional(),\n facebook: z.string().nullable().optional(),\n tiktok: z.string().nullable().optional(),\n youtube: z.string().nullable().optional(),\n x: z.string().nullable().optional(),\n});\n\nexport const StorefrontCmsContactSchema = z.object({\n supportEmail: z.string().nullable().optional(),\n phone: z.string().nullable().optional(),\n whatsapp: z.string().nullable().optional(),\n address: z.string().nullable().optional(),\n socialLinks: StorefrontCmsSocialLinksSchema.optional(),\n});\n\nexport const StorefrontCmsTrackingSchema = z.object({\n googleAnalyticsMeasurementId: z.string().nullable().optional(),\n metaPixelId: z.string().nullable().optional(),\n googleTagManagerContainerId: z.string().nullable().optional(),\n});\n\nexport const StorefrontCmsCustomScriptsSchema = z.object({\n enabled: z.boolean().optional(),\n head: z.string().nullable().optional(),\n bodyEnd: z.string().nullable().optional(),\n});\n\nexport const StorefrontCmsSettingsSchema = z.object({\n themeKey: z.string().optional(),\n branding: StorefrontCmsBrandingSchema.optional(),\n seo: StorefrontCmsSeoSchema.optional(),\n contact: StorefrontCmsContactSchema.optional(),\n tracking: StorefrontCmsTrackingSchema.optional(),\n customScripts: StorefrontCmsCustomScriptsSchema.optional(),\n updatedOn: z.string().nullable().optional(),\n});\n\nexport const StorefrontCmsPageSchema = z\n .object({\n id: z.string(),\n name: z.string(),\n slug: z.string(),\n layout: z.string().optional(),\n version: z.number().optional(),\n settings: z.record(z.string(), z.unknown()).optional().nullable(),\n sections: z.array(z.unknown()).optional(),\n status: z.string().optional(),\n hasPublishedVersion: z.boolean().optional(),\n publishedOn: z.string().nullable().optional(),\n publishedBy: z.string().nullable().optional(),\n createdOn: z.string().nullable().optional(),\n updatedOn: z.string().nullable().optional(),\n createdBy: z.string().nullable().optional(),\n updatedBy: z.string().nullable().optional(),\n lastModifiedBy: z.string().nullable().optional(),\n })\n .passthrough();\n\n/** Respuesta antigua GET /settings (objeto plano sin `store` / `cms`). */\nexport const StorefrontSettingsLegacyFlatSchema = z\n .object({\n id: z.coerce.string(),\n tenantId: z.string().nullable().optional(),\n name: z.string(),\n slug: z.coerce.string().optional(),\n description: z.string().nullable().optional(),\n visibility: z.string().nullable().optional(),\n logo: z.string().nullable().optional(),\n favicon: z.string().nullable().optional(),\n icon: z.string().nullable().optional(),\n currency: z.string().nullable().optional(),\n language: z.string().nullable().optional(),\n themeConfig: z.unknown().optional().nullable(),\n featuresEnabled: z.unknown().optional().nullable(),\n checkoutSettings: StorefrontCheckoutSettingsSchema.optional().nullable(),\n })\n .passthrough();\n\nexport type StorefrontSettingsLegacyFlat = z.infer<typeof StorefrontSettingsLegacyFlatSchema>;\n\nfunction unwrapSettingsResponseBody(v: unknown): unknown {\n if (!v || typeof v !== \"object\" || Array.isArray(v)) return v;\n const o = v as Record<string, unknown>;\n if (\n \"data\" in o &&\n o.data != null &&\n typeof o.data === \"object\" &&\n !Array.isArray(o.data)\n ) {\n return o.data;\n }\n return v;\n}\n\nfunction isLegacyFlatSettingsPayload(v: unknown): v is Record<string, unknown> {\n if (!v || typeof v !== \"object\" || Array.isArray(v)) return false;\n const o = v as Record<string, unknown>;\n if (\"store\" in o || \"schemaVersion\" in o || \"cms\" in o) return false;\n return (\n (typeof o.id === \"string\" || typeof o.id === \"number\") &&\n typeof o.name === \"string\"\n );\n}\n\n/** Convierte el JSON plano legacy al sobre actual (misma forma que el API nuevo). */\nexport function normalizeStorefrontSettingsPayload(v: unknown): unknown {\n const body = unwrapSettingsResponseBody(v);\n if (!isLegacyFlatSettingsPayload(body)) return body;\n const raw = body;\n const parsed = StorefrontSettingsLegacyFlatSchema.safeParse(raw);\n if (!parsed.success) return body;\n\n const l = parsed.data;\n const currency = l.currency?.trim() ? l.currency : \"PEN\";\n const language = l.language?.trim() ? l.language : \"es\";\n const slug = l.slug?.trim() ? l.slug : l.id;\n\n return {\n schemaVersion: 0,\n generatedAt: new Date(0).toISOString(),\n store: {\n id: l.id,\n tenantId: l.tenantId ?? undefined,\n name: l.name,\n slug,\n description: l.description ?? null,\n logo: l.logo ?? null,\n icon: l.icon ?? null,\n visibility: l.visibility ?? undefined,\n currency,\n language,\n themeConfig: l.themeConfig ?? undefined,\n featuresEnabled: l.featuresEnabled ?? undefined,\n checkoutSettings: l.checkoutSettings ?? undefined,\n },\n cms: {\n settings: {\n branding: {\n faviconUrl: l.favicon ?? null,\n logoUrl: l.logo ?? null,\n logoDarkUrl: null,\n socialImageUrl: null,\n },\n },\n pages: [],\n },\n };\n}\n\nexport const StorefrontStoreSchema = z\n .object({\n id: z.string(),\n tenantId: z.string().optional(),\n sellerId: z.string().optional(),\n plan: z.string().optional(),\n storageLimitBytes: z.number().optional(),\n monthlyTransferLimitBytes: z.number().optional(),\n maxUploadSizeBytes: z.number().optional(),\n maxStores: z.number().optional(),\n maxMembers: z.number().optional(),\n maxProducts: z.number().optional(),\n maxCategories: z.number().optional(),\n maxBrands: z.number().optional(),\n maxAttributes: z.number().optional(),\n maxCollections: z.number().optional(),\n enableApi: z.boolean().optional(),\n isActive: z.boolean().optional(),\n name: z.string(),\n description: z.string().nullable().optional(),\n avatarUrl: z.string().nullable().optional(),\n logo: z.string().nullable().optional(),\n icon: z.string().nullable().optional(),\n slug: z.string(),\n domain: z.string().nullable().optional(),\n domains: z.array(z.string()).optional(),\n timeZone: z.string().nullable().optional(),\n currency: z.string(),\n language: z.string(),\n visibility: z.string().optional(),\n privateAccessHash: z.string().nullable().optional(),\n privateAccessVersion: z.number().optional(),\n themeConfig: StorefrontThemeConfigSchema.optional(),\n featuresEnabled: StorefrontFeaturesEnabledSchema.optional(),\n checkoutSettings: StorefrontCheckoutSettingsSchema.optional().nullable(),\n })\n .passthrough();\n\nconst StorefrontSettingsEnvelopeSchema = z\n .object({\n schemaVersion: z.number(),\n generatedAt: z.string(),\n store: StorefrontStoreSchema,\n cms: z.object({\n settings: StorefrontCmsSettingsSchema,\n pages: z.array(StorefrontCmsPageSchema),\n }),\n })\n .passthrough();\n\n/** Acepta sobre nuevo o JSON plano legacy; siempre valida contra el sobre normalizado. */\nexport const StorefrontSettingsSchema = z.preprocess(\n normalizeStorefrontSettingsPayload,\n StorefrontSettingsEnvelopeSchema\n);\n\nexport type StorefrontSettings = z.infer<typeof StorefrontSettingsSchema>;\nexport type StorefrontStore = z.infer<typeof StorefrontStoreSchema>;\nexport type StorefrontCmsSettings = z.infer<typeof StorefrontCmsSettingsSchema>;\nexport type StorefrontCmsPage = z.infer<typeof StorefrontCmsPageSchema>;\n\n/** Nodo `store` del payload público (cookies, auth, moneda). */\nexport function storefrontStoreRecord(\n settings: StorefrontSettings | null | undefined\n): StorefrontStore | null {\n return settings?.store ?? null;\n}\n\n/** Favicon: CMS branding, luego logo/icono de tienda. */\nexport function storefrontFaviconUrl(\n settings: StorefrontSettings | null | undefined\n): string | null {\n const b = settings?.cms?.settings?.branding;\n return (\n b?.faviconUrl ??\n settings?.store?.logo ??\n settings?.store?.icon ??\n null\n );\n}\n\n/** Imagen social / OG: branding, luego logo de tienda. */\nexport function storefrontOgImageUrl(\n settings: StorefrontSettings | null | undefined\n): string | null {\n const b = settings?.cms?.settings?.branding;\n return b?.socialImageUrl ?? settings?.store?.logo ?? null;\n}\n","import {\n storefrontStoreRecord,\n type StorefrontSettings,\n} from \"../models/store\";\n\n/** Headers que el plugin OAuth de Ecomiq espera en el sign-in. */\nexport type EcomiqOAuthIdentityHeaders = Record<string, string>;\n\nexport function buildEcomiqOAuthIdentityHeaders(\n settings: StorefrontSettings | null | undefined,\n): EcomiqOAuthIdentityHeaders {\n const record = storefrontStoreRecord(settings);\n if (!record?.id) {\n throw new Error(\"Tienda no disponible para iniciar sesión\");\n }\n\n const checkout = record.checkoutSettings;\n const identityScope = checkout?.identityScope === \"tenant\" ? \"tenant\" : \"store\";\n const headers: EcomiqOAuthIdentityHeaders = {\n \"x-Identity-Scope\": identityScope,\n \"x-Store-Id\": record.id,\n };\n if (record.tenantId) headers[\"x-Tenant-Id\"] = record.tenantId;\n return headers;\n}\n","import { buildEcomiqOAuthIdentityHeaders } from \"../../core/lib/ecomiq-oauth-identity\";\nimport type { StorefrontSettings } from \"../../core/models/store\";\nimport type { StorefrontAuthClientInstance } from \"../providers/storefront-auth-context\";\n\nexport type EcomiqSignInCredentials = {\n email: string;\n password: string;\n};\n\n/**\n * Inicia sesión con email/contraseña vía plugin `ecomiqOAuthPassword` (Better Auth).\n * Usa la tienda de `settings` (p. ej. `useStore().data`) para los headers de identidad.\n */\nexport async function signInWithEcomiqCredentials(\n authClient: StorefrontAuthClientInstance,\n settings: StorefrontSettings | null | undefined,\n credentials: EcomiqSignInCredentials,\n) {\n const response = await authClient.$fetch(\"/ecomiq-oauth/sign-in\", {\n method: \"POST\",\n headers: buildEcomiqOAuthIdentityHeaders(settings),\n body: credentials,\n });\n\n if (response.error) {\n throw new Error(response.error.message ?? \"Error al iniciar sesión\");\n }\n\n return response;\n}\n","export const countryCurrency = {\n \"PEN\": \"es-PE\",\n \"USD\": \"en-US\",\n \"COP\": \"es-CO\",\n \"MXN\": \"es-MX\",\n}\n","import { countryCurrency } from \"../constants/currency\";\n\n/**\n * Formats a number as currency using the store's locale for the given currency code.\n * Uses countryCurrency to pick the right locale (e.g. PEN → es-PE, USD → en-US).\n */\nexport function formatCurrency(\n amount: number,\n currency: string = \"USD\"\n): string {\n const locale =\n countryCurrency[currency as keyof typeof countryCurrency] ?? \"en-US\";\n return new Intl.NumberFormat(locale, {\n style: \"currency\",\n currency,\n }).format(amount);\n}\n","import { z } from \"zod\";\nimport type { CheckoutContactForm } from \"../hooks/use-checkout-session\";\n\n/** IDs de DOM (`id` en input/select) para focus y mensajes de error. */\nexport const CHECKOUT_FIELD_IDS = [\n \"email\",\n \"firstName\",\n \"lastName\",\n \"countryCode\",\n \"address\",\n \"department\",\n \"province-geo\",\n \"district\",\n \"city\",\n \"province-region\",\n \"phone\",\n \"checkout-shipping-method\",\n \"checkout-payment-method\",\n] as const;\n\nexport type CheckoutFieldId = (typeof CHECKOUT_FIELD_IDS)[number];\n\n/** Orden visual del formulario para enfocar el primer campo inválido. */\nexport const CHECKOUT_FIELD_FOCUS_ORDER: CheckoutFieldId[] = [\n \"email\",\n \"firstName\",\n \"lastName\",\n \"countryCode\",\n \"address\",\n \"department\",\n \"province-geo\",\n \"district\",\n \"city\",\n \"province-region\",\n \"phone\",\n \"checkout-shipping-method\",\n \"checkout-payment-method\",\n];\n\nconst zodPathToFieldId: Record<string, CheckoutFieldId> = {\n email: \"email\",\n firstName: \"firstName\",\n lastName: \"lastName\",\n countryCode: \"countryCode\",\n address: \"address\",\n phone: \"phone\",\n departmentCode: \"department\",\n provinceCode: \"province-geo\",\n districtCode: \"district\",\n city: \"city\",\n province: \"province-region\",\n selectedShippingKey: \"checkout-shipping-method\",\n selectedPaymentCode: \"checkout-payment-method\",\n};\n\nexport type CheckoutFormValidationContext = {\n contact: CheckoutContactForm;\n selectedShippingKey: string | null;\n shippingOptionsCount: number;\n selectedPaymentCode: string | null;\n paymentMethodsCount: number;\n};\n\nexport function buildCheckoutFormValidationSchema(currency: string) {\n const phoneDigits = currency === \"PEN\" ? 9 : 10;\n\n return z\n .object({\n email: z\n .string()\n .trim()\n .min(1, \"El email es requerido\")\n .email(\"Ingresa un email válido\"),\n firstName: z\n .string()\n .trim()\n .min(1, \"El nombre es requerido\")\n .min(2, \"El nombre debe tener al menos 2 caracteres\"),\n lastName: z\n .string()\n .trim()\n .min(1, \"El apellido es requerido\")\n .min(2, \"El apellido debe tener al menos 2 caracteres\"),\n countryCode: z.string().trim().min(2, \"Selecciona un país\"),\n address: z\n .string()\n .trim()\n .min(1, \"La dirección es requerida\")\n .min(5, \"La dirección debe tener al menos 5 caracteres\"),\n phone: z\n .string()\n .trim()\n .min(1, \"El teléfono es requerido\")\n .regex(/^\\d+$/, \"El teléfono solo debe contener números\")\n .length(\n phoneDigits,\n `El teléfono debe tener ${phoneDigits} dígitos`,\n ),\n departmentCode: z.string(),\n provinceCode: z.string(),\n districtCode: z.string(),\n city: z.string(),\n province: z.string(),\n selectedShippingKey: z.string().nullable(),\n shippingOptionsCount: z.number().int().nonnegative(),\n selectedPaymentCode: z.string().nullable(),\n paymentMethodsCount: z.number().int().nonnegative(),\n })\n .superRefine((data, ctx) => {\n const country = data.countryCode.toUpperCase();\n\n if (country === \"PE\") {\n if (!data.departmentCode.trim()) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"departmentCode\"],\n message: \"Selecciona un departamento\",\n });\n }\n if (!data.provinceCode.trim()) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"provinceCode\"],\n message: \"Selecciona una provincia\",\n });\n }\n if (!data.districtCode.trim()) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"districtCode\"],\n message: \"Selecciona un distrito\",\n });\n }\n } else {\n if (!data.city.trim()) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"city\"],\n message: \"La ciudad es requerida\",\n });\n }\n if (!data.province.trim()) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"province\"],\n message: \"La región es requerida\",\n });\n }\n }\n\n if (data.shippingOptionsCount > 0 && !data.selectedShippingKey?.trim()) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"selectedShippingKey\"],\n message: \"Selecciona un método de envío\",\n });\n }\n\n if (data.paymentMethodsCount > 0 && !data.selectedPaymentCode?.trim()) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"selectedPaymentCode\"],\n message: \"Selecciona un método de pago\",\n });\n }\n });\n}\n\nexport function checkoutValidationInputFromContext(\n ctx: CheckoutFormValidationContext,\n) {\n const { contact } = ctx;\n return {\n email: contact.email,\n firstName: contact.firstName,\n lastName: contact.lastName,\n countryCode: contact.countryCode,\n address: contact.address,\n phone: contact.phone,\n departmentCode: contact.departmentCode,\n provinceCode: contact.provinceCode,\n districtCode: contact.districtCode,\n city: contact.city,\n province: contact.province,\n selectedShippingKey: ctx.selectedShippingKey,\n shippingOptionsCount: ctx.shippingOptionsCount,\n selectedPaymentCode: ctx.selectedPaymentCode,\n paymentMethodsCount: ctx.paymentMethodsCount,\n };\n}\n\nexport function mapZodIssuesToFieldErrors(\n error: z.ZodError,\n): Partial<Record<CheckoutFieldId, string>> {\n const out: Partial<Record<CheckoutFieldId, string>> = {};\n\n for (const issue of error.issues) {\n const key = issue.path[0];\n if (typeof key !== \"string\") continue;\n const fieldId = zodPathToFieldId[key];\n if (!fieldId || out[fieldId]) continue;\n out[fieldId] = issue.message;\n }\n\n return out;\n}\n\nexport function firstInvalidFieldId(\n errors: Partial<Record<CheckoutFieldId, string>>,\n): CheckoutFieldId | null {\n for (const id of CHECKOUT_FIELD_FOCUS_ORDER) {\n if (errors[id]) return id;\n }\n return null;\n}\n\nexport function focusCheckoutField(fieldId: CheckoutFieldId): void {\n if (typeof document === \"undefined\") return;\n\n const el = document.getElementById(fieldId);\n if (el) {\n el.focus({ preventScroll: false });\n el.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n return;\n }\n\n if (fieldId === \"checkout-shipping-method\") {\n const radio = document.querySelector<HTMLInputElement>(\n 'input[name=\"shipping\"]',\n );\n radio?.focus();\n radio?.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n return;\n }\n\n if (fieldId === \"checkout-payment-method\") {\n const radio = document.querySelector<HTMLInputElement>(\n 'input[name=\"payment\"]',\n );\n radio?.focus();\n radio?.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n }\n}\n","\"use client\";\n\nimport { useCallback, useMemo, useState } from \"react\";\nimport {\n buildCheckoutFormValidationSchema,\n checkoutValidationInputFromContext,\n firstInvalidFieldId,\n focusCheckoutField,\n mapZodIssuesToFieldErrors,\n type CheckoutFieldId,\n type CheckoutFormValidationContext,\n} from \"../lib/checkout-form-schema\";\n\nexport function useCheckoutFormValidation(currency = \"PEN\") {\n const schema = useMemo(\n () => buildCheckoutFormValidationSchema(currency),\n [currency],\n );\n\n const [fieldErrors, setFieldErrors] = useState<\n Partial<Record<CheckoutFieldId, string>>\n >({});\n const [validationError, setValidationError] = useState<string | null>(null);\n\n const clearFieldError = useCallback((fieldId: CheckoutFieldId) => {\n setFieldErrors((prev) => {\n if (!prev[fieldId]) return prev;\n const next = { ...prev };\n delete next[fieldId];\n return next;\n });\n setValidationError(null);\n }, []);\n\n const getFieldError = useCallback(\n (fieldId: CheckoutFieldId) => fieldErrors[fieldId],\n [fieldErrors],\n );\n\n const validateCheckoutForm = useCallback(\n (context: CheckoutFormValidationContext): boolean => {\n const result = schema.safeParse(\n checkoutValidationInputFromContext(context),\n );\n\n if (result.success) {\n setFieldErrors({});\n setValidationError(null);\n return true;\n }\n\n const errors = mapZodIssuesToFieldErrors(result.error);\n setFieldErrors(errors);\n\n const firstId = firstInvalidFieldId(errors);\n if (firstId) {\n focusCheckoutField(firstId);\n setValidationError(errors[firstId] ?? null);\n } else {\n setValidationError(\"Completa los campos requeridos.\");\n }\n\n return false;\n },\n [schema],\n );\n\n return {\n fieldErrors,\n validationError,\n setValidationError,\n validateCheckoutForm,\n clearFieldError,\n getFieldError,\n };\n}\n\nexport type { CheckoutFieldId, CheckoutFormValidationContext };\n","/**\n * Catálogo geo INEI vía proxy `/api/store/geo/*` (requiere `X-Store-Id`).\n */\n\nexport type GeoItem = { code: string; name: string };\n\nexport function toGeoItems(data: unknown): GeoItem[] {\n if (!Array.isArray(data)) return [];\n return data\n .map((raw) => {\n if (!raw || typeof raw !== \"object\") return null;\n const item = raw as { code?: unknown; name?: unknown };\n return {\n code: String(item.code ?? \"\"),\n name: String(item.name ?? \"\"),\n };\n })\n .filter((x): x is GeoItem => !!x && !!x.code && !!x.name);\n}\n\nlet departmentsCache: GeoItem[] | null = null;\nlet departmentsRequest: Promise<GeoItem[]> | null = null;\n\nexport function loadStorefrontGeoDepartments(headers: Record<string, string>): Promise<GeoItem[]> {\n if (departmentsCache) return Promise.resolve(departmentsCache);\n if (departmentsRequest) return departmentsRequest;\n\n departmentsRequest = fetch(\n `/api/store/geo/departments?countryCode=PE&source=inei&limit=200`,\n { cache: \"no-store\", headers }\n )\n .then((r) => r.json())\n .then((data) => {\n const items = toGeoItems(data);\n departmentsCache = items;\n return items;\n })\n .catch(() => {\n departmentsCache = [];\n return [];\n })\n .finally(() => {\n departmentsRequest = null;\n });\n\n return departmentsRequest;\n}\n\nexport async function fetchStorefrontGeoProvinces(\n headers: Record<string, string>,\n countryCode: string,\n departmentCode: string\n): Promise<GeoItem[]> {\n const res = await fetch(\n `/api/store/geo/provinces?countryCode=${encodeURIComponent(\n countryCode\n )}&departmentCode=${encodeURIComponent(departmentCode)}&source=inei&limit=200`,\n { headers }\n );\n const data = await res.json();\n return toGeoItems(data);\n}\n\nexport async function fetchStorefrontGeoDistricts(\n headers: Record<string, string>,\n countryCode: string,\n provinceCode: string\n): Promise<GeoItem[]> {\n const res = await fetch(\n `/api/store/geo/districts?countryCode=${encodeURIComponent(\n countryCode\n )}&provinceCode=${encodeURIComponent(provinceCode)}&source=inei`,\n { headers }\n );\n const data = await res.json();\n return toGeoItems(data);\n}\n\n/**\n * Resuelve códigos INEI a partir de nombres guardados en una dirección (p. ej. al editar).\n */\nexport async function resolveIneiCodesFromLabels(\n storeId: string,\n labels: { department: string; province: string; district: string },\n countryCode = \"PE\"\n): Promise<{ departmentCode: string; provinceCode: string; districtCode: string } | null> {\n const id = storeId.trim();\n if (!id) return null;\n const headers = { \"X-Store-Id\": id };\n const departments = await loadStorefrontGeoDepartments(headers);\n const dept = departments.find((d) => d.name.trim() === labels.department.trim());\n if (!dept) return null;\n const provinces = await fetchStorefrontGeoProvinces(headers, countryCode, dept.code);\n const prov = provinces.find((p) => p.name.trim() === labels.province.trim());\n if (!prov) {\n return { departmentCode: dept.code, provinceCode: \"\", districtCode: \"\" };\n }\n const districts = await fetchStorefrontGeoDistricts(headers, countryCode, prov.code);\n const dist = districts.find((d) => d.name.trim() === labels.district.trim());\n return {\n departmentCode: dept.code,\n provinceCode: prov.code,\n districtCode: dist?.code ?? \"\",\n };\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n fetchStorefrontGeoDistricts,\n fetchStorefrontGeoProvinces,\n loadStorefrontGeoDepartments,\n resolveIneiCodesFromLabels,\n type GeoItem,\n} from \"../../../../core/lib/storefront-geo-inei\";\nimport type { CheckoutContactForm } from \"./use-checkout-session\";\n\nexport type CheckoutDeliveryFormProps = {\n storeId: string;\n contact: CheckoutContactForm;\n onContactChange: (patch: Partial<CheckoutContactForm>) => void;\n};\n\nexport function useCheckoutDeliveryForm({\n storeId,\n contact,\n onContactChange,\n}: CheckoutDeliveryFormProps) {\n const [departments, setDepartments] = useState<GeoItem[]>([]);\n const [provinces, setProvinces] = useState<GeoItem[]>([]);\n const [districts, setDistricts] = useState<GeoItem[]>([]);\n const [loadingDepartments, setLoadingDepartments] = useState(false);\n const [loadingProvinces, setLoadingProvinces] = useState(false);\n const [loadingDistricts, setLoadingDistricts] = useState(false);\n\n const prevDepartmentCode = useRef<string | undefined>(undefined);\n const prevProvinceCode = useRef<string | undefined>(undefined);\n const resolvedLabelsRef = useRef(false);\n\n const onChangeRef = useRef(onContactChange);\n onChangeRef.current = onContactChange;\n\n const patchContact = useCallback((patch: Partial<CheckoutContactForm>) => {\n onChangeRef.current(patch);\n }, []);\n\n const countryCode = (contact.countryCode || \"PE\").toUpperCase();\n const isPeru = countryCode === \"PE\";\n\n const storeRequestHeaders = useMemo(() => {\n const id = storeId.trim();\n if (!id) return null;\n return { \"X-Store-Id\": id } as const;\n }, [storeId]);\n\n useEffect(() => {\n if (!isPeru || !storeRequestHeaders) {\n setDepartments([]);\n setLoadingDepartments(false);\n return;\n }\n\n let active = true;\n setLoadingDepartments(true);\n loadStorefrontGeoDepartments(storeRequestHeaders)\n .then((items) => {\n if (active) setDepartments(items);\n })\n .finally(() => {\n if (active) setLoadingDepartments(false);\n });\n\n return () => {\n active = false;\n };\n }, [isPeru, storeRequestHeaders]);\n\n useEffect(() => {\n if (!isPeru || !storeId.trim()) return;\n if (contact.departmentCode) return;\n if (resolvedLabelsRef.current) return;\n if (!contact.departmentName.trim()) return;\n if (!contact.province && !contact.city) return;\n\n resolvedLabelsRef.current = true;\n let cancelled = false;\n\n void resolveIneiCodesFromLabels(storeId, {\n department: contact.departmentName,\n province: contact.province,\n district: contact.city,\n }).then((codes) => {\n if (cancelled || !codes) return;\n patchContact({\n departmentCode: codes.departmentCode,\n provinceCode: codes.provinceCode,\n districtCode: codes.districtCode,\n });\n });\n\n return () => {\n cancelled = true;\n };\n }, [\n contact.city,\n contact.departmentCode,\n contact.departmentName,\n contact.province,\n isPeru,\n patchContact,\n storeId,\n ]);\n\n useEffect(() => {\n const dept = contact.departmentCode;\n const prev = prevDepartmentCode.current;\n const departmentChanged = prev !== undefined && prev !== dept;\n prevDepartmentCode.current = dept;\n\n if (!isPeru || !storeRequestHeaders) {\n setProvinces([]);\n if (!dept) {\n setDistricts([]);\n prevProvinceCode.current = \"\";\n }\n return;\n }\n\n if (!dept) {\n setProvinces([]);\n setDistricts([]);\n prevProvinceCode.current = \"\";\n return;\n }\n\n if (departmentChanged) {\n patchContact({\n provinceCode: \"\",\n provinceName: \"\",\n districtCode: \"\",\n districtName: \"\",\n province: \"\",\n city: \"\",\n postalCode: \"\",\n });\n setDistricts([]);\n prevProvinceCode.current = \"\";\n }\n\n const deptName = departments.find((d) => d.code === dept)?.name ?? \"\";\n if (deptName && deptName !== contact.departmentName) {\n patchContact({ departmentName: deptName });\n }\n\n let active = true;\n setLoadingProvinces(true);\n fetchStorefrontGeoProvinces(storeRequestHeaders, countryCode, dept)\n .then((items) => {\n if (active) setProvinces(items);\n })\n .catch(() => {\n if (active) setProvinces([]);\n })\n .finally(() => {\n if (active) setLoadingProvinces(false);\n });\n\n return () => {\n active = false;\n };\n }, [\n contact.departmentCode,\n contact.departmentName,\n countryCode,\n departments,\n isPeru,\n patchContact,\n storeRequestHeaders,\n ]);\n\n useEffect(() => {\n const prov = contact.provinceCode;\n const prev = prevProvinceCode.current;\n const provinceChanged = prev !== undefined && prev !== prov;\n prevProvinceCode.current = prov;\n\n if (!isPeru || !storeRequestHeaders) {\n setDistricts([]);\n return;\n }\n\n if (!prov) {\n setDistricts([]);\n prevProvinceCode.current = \"\";\n return;\n }\n\n if (provinceChanged) {\n patchContact({\n districtCode: \"\",\n districtName: \"\",\n city: \"\",\n postalCode: \"\",\n });\n }\n\n const provName = provinces.find((p) => p.code === prov)?.name ?? \"\";\n if (provName && provName !== contact.provinceName) {\n patchContact({ provinceName: provName, province: provName });\n }\n\n let active = true;\n setLoadingDistricts(true);\n fetchStorefrontGeoDistricts(storeRequestHeaders, countryCode, prov)\n .then((items) => {\n if (active) setDistricts(items);\n })\n .catch(() => {\n if (active) setDistricts([]);\n })\n .finally(() => {\n if (active) setLoadingDistricts(false);\n });\n\n return () => {\n active = false;\n };\n }, [\n contact.provinceCode,\n contact.provinceName,\n countryCode,\n isPeru,\n patchContact,\n provinces,\n storeRequestHeaders,\n ]);\n\n useEffect(() => {\n if (!contact.districtCode) return;\n const distName = districts.find((d) => d.code === contact.districtCode)?.name ?? \"\";\n const patch: Partial<CheckoutContactForm> = {};\n if (distName && distName !== contact.districtName) {\n patch.districtName = distName;\n patch.city = distName;\n }\n if (contact.postalCode !== contact.districtCode) {\n patch.postalCode = contact.districtCode;\n }\n if (Object.keys(patch).length > 0) patchContact(patch);\n }, [\n contact.districtCode,\n contact.districtName,\n contact.postalCode,\n districts,\n patchContact,\n ]);\n\n const handleDepartmentChange = useCallback(\n (code: string) => {\n const name = departments.find((d) => d.code === code)?.name ?? \"\";\n prevDepartmentCode.current = code;\n prevProvinceCode.current = \"\";\n patchContact({\n departmentCode: code,\n departmentName: name,\n provinceCode: \"\",\n provinceName: \"\",\n districtCode: \"\",\n districtName: \"\",\n province: \"\",\n city: \"\",\n postalCode: \"\",\n });\n },\n [departments, patchContact],\n );\n\n const handleProvinceChange = useCallback(\n (code: string) => {\n const name = provinces.find((p) => p.code === code)?.name ?? \"\";\n prevProvinceCode.current = code;\n patchContact({\n provinceCode: code,\n provinceName: name,\n province: name,\n districtCode: \"\",\n districtName: \"\",\n city: \"\",\n postalCode: \"\",\n });\n },\n [patchContact, provinces],\n );\n\n const handleDistrictChange = useCallback(\n (code: string) => {\n const name = districts.find((d) => d.code === code)?.name ?? \"\";\n patchContact({\n districtCode: code,\n districtName: name,\n city: name,\n postalCode: code,\n });\n },\n [districts, patchContact],\n );\n\n return {\n isPeru,\n departments,\n provinces,\n districts,\n loadingDepartments,\n loadingProvinces,\n loadingDistricts,\n handleDepartmentChange,\n handleProvinceChange,\n handleDistrictChange,\n };\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport type { CheckoutFieldId } from \"../lib/checkout-form-schema\";\n\ntype CheckoutTextFieldProps = {\n id: CheckoutFieldId | string;\n label: string;\n value: string;\n onChange: (value: string) => void;\n onClearError?: () => void;\n error?: string;\n type?: string;\n optional?: boolean;\n half?: boolean;\n};\n\nexport function CheckoutTextField({\n id,\n label,\n value,\n onChange,\n onClearError,\n error,\n type = \"text\",\n optional,\n half,\n}: CheckoutTextFieldProps) {\n return (\n <label\n className={`ecomiq-checkout-page__field${half ? \" ecomiq-checkout-page__field--half\" : \"\"}`}\n >\n <span className=\"ecomiq-checkout-page__label\">\n {label}\n {optional ? \" (optional)\" : \"\"}\n </span>\n <input\n id={id}\n type={type}\n className={`ecomiq-checkout-page__input${error ? \" ecomiq-checkout-page__input--error\" : \"\"}`}\n value={value}\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? `${id}-error` : undefined}\n onChange={(e) => {\n onClearError?.();\n onChange(e.target.value);\n }}\n />\n {error ? (\n <span id={`${id}-error`} className=\"ecomiq-checkout-page__field-error-inline\" role=\"alert\">\n {error}\n </span>\n ) : null}\n </label>\n );\n}\n\ntype CheckoutSelectFieldProps = {\n id: CheckoutFieldId | string;\n label: string;\n value: string;\n onChange: (value: string) => void;\n onClearError?: () => void;\n error?: string;\n disabled?: boolean;\n children: ReactNode;\n};\n\nexport function CheckoutSelectField({\n id,\n label,\n value,\n onChange,\n onClearError,\n error,\n disabled,\n children,\n}: CheckoutSelectFieldProps) {\n return (\n <label className=\"ecomiq-checkout-page__field\">\n <span className=\"ecomiq-checkout-page__label\">{label}</span>\n <select\n id={id}\n className={`ecomiq-checkout-page__input${error ? \" ecomiq-checkout-page__input--error\" : \"\"}`}\n value={value}\n disabled={disabled}\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? `${id}-error` : undefined}\n onChange={(e) => {\n onClearError?.();\n onChange(e.target.value);\n }}\n >\n {children}\n </select>\n {error ? (\n <span id={`${id}-error`} className=\"ecomiq-checkout-page__field-error-inline\" role=\"alert\">\n {error}\n </span>\n ) : null}\n </label>\n );\n}\n","\"use client\";\n\nimport type { CheckoutContactForm } from \"../hooks/use-checkout-session\";\nimport { useCheckoutDeliveryForm } from \"../hooks/use-checkout-delivery-form\";\nimport type { CheckoutFieldId } from \"../lib/checkout-form-schema\";\nimport { CheckoutSelectField, CheckoutTextField } from \"./checkout-form-controls\";\n\ntype CheckoutDeliveryFormProps = {\n storeId: string;\n contact: CheckoutContactForm;\n onContactChange: (patch: Partial<CheckoutContactForm>) => void;\n getFieldError: (fieldId: CheckoutFieldId) => string | undefined;\n clearFieldError: (fieldId: CheckoutFieldId) => void;\n};\n\nfunction geoSelect(\n id: CheckoutFieldId,\n label: string,\n value: string,\n placeholder: string,\n disabled: boolean,\n options: { code: string; name: string }[],\n onChange: (code: string) => void,\n error?: string,\n onClearError?: () => void,\n) {\n return (\n <CheckoutSelectField\n id={id}\n label={label}\n value={value}\n error={error}\n disabled={disabled}\n onClearError={onClearError}\n onChange={onChange}\n >\n <option value=\"\">{placeholder}</option>\n {options.map((item) => (\n <option key={item.code} value={item.code}>\n {item.name}\n </option>\n ))}\n </CheckoutSelectField>\n );\n}\n\nexport function CheckoutDeliveryForm({\n storeId,\n contact,\n onContactChange,\n getFieldError,\n clearFieldError,\n}: CheckoutDeliveryFormProps) {\n const {\n isPeru,\n departments,\n provinces,\n districts,\n loadingDepartments,\n loadingProvinces,\n loadingDistricts,\n handleDepartmentChange,\n handleProvinceChange,\n handleDistrictChange,\n } = useCheckoutDeliveryForm({ storeId, contact, onContactChange });\n\n return (\n <section className=\"ecomiq-checkout-page__section\">\n <h2>Delivery</h2>\n <CheckoutSelectField\n id=\"countryCode\"\n label=\"Country/Region\"\n value={contact.countryCode}\n error={getFieldError(\"countryCode\")}\n onClearError={() => clearFieldError(\"countryCode\")}\n onChange={(v) => onContactChange({ countryCode: v })}\n >\n <option value=\"PE\">Peru</option>\n <option value=\"US\">United States</option>\n <option value=\"MX\">Mexico</option>\n <option value=\"CO\">Colombia</option>\n </CheckoutSelectField>\n <div className=\"ecomiq-checkout-page__row\">\n <CheckoutTextField\n id=\"firstName\"\n label=\"First name\"\n half\n value={contact.firstName}\n error={getFieldError(\"firstName\")}\n onClearError={() => clearFieldError(\"firstName\")}\n onChange={(v) => onContactChange({ firstName: v })}\n />\n <CheckoutTextField\n id=\"lastName\"\n label=\"Last name\"\n half\n value={contact.lastName}\n error={getFieldError(\"lastName\")}\n onClearError={() => clearFieldError(\"lastName\")}\n onChange={(v) => onContactChange({ lastName: v })}\n />\n </div>\n <CheckoutTextField\n id=\"address\"\n label=\"Address\"\n value={contact.address}\n error={getFieldError(\"address\")}\n onClearError={() => clearFieldError(\"address\")}\n onChange={(v) => onContactChange({ address: v })}\n />\n\n {isPeru ? (\n <div className=\"ecomiq-checkout-page__row ecomiq-checkout-page__row--3\">\n {geoSelect(\n \"department\",\n \"Departamento\",\n contact.departmentCode,\n loadingDepartments ? \"Cargando…\" : \"Selecciona\",\n loadingDepartments || departments.length === 0,\n departments,\n handleDepartmentChange,\n getFieldError(\"department\"),\n () => clearFieldError(\"department\"),\n )}\n {geoSelect(\n \"province-geo\",\n \"Provincia\",\n contact.provinceCode,\n !contact.departmentCode\n ? \"Selecciona depto.\"\n : loadingProvinces\n ? \"Cargando…\"\n : \"Selecciona\",\n !contact.departmentCode || loadingProvinces || provinces.length === 0,\n provinces,\n handleProvinceChange,\n getFieldError(\"province-geo\"),\n () => clearFieldError(\"province-geo\"),\n )}\n {geoSelect(\n \"district\",\n \"Distrito\",\n contact.districtCode,\n !contact.provinceCode\n ? \"Selecciona prov.\"\n : loadingDistricts\n ? \"Cargando…\"\n : \"Selecciona\",\n !contact.provinceCode || loadingDistricts || districts.length === 0,\n districts,\n handleDistrictChange,\n getFieldError(\"district\"),\n () => clearFieldError(\"district\"),\n )}\n </div>\n ) : (\n <div className=\"ecomiq-checkout-page__row ecomiq-checkout-page__row--3\">\n <CheckoutTextField\n id=\"city\"\n label=\"City\"\n value={contact.city}\n error={getFieldError(\"city\")}\n onClearError={() => clearFieldError(\"city\")}\n onChange={(v) => onContactChange({ city: v })}\n />\n <CheckoutTextField\n id=\"province-region\"\n label=\"Region\"\n value={contact.province}\n error={getFieldError(\"province-region\")}\n onClearError={() => clearFieldError(\"province-region\")}\n onChange={(v) => onContactChange({ province: v })}\n />\n </div>\n )}\n\n <CheckoutTextField\n id=\"postalCode\"\n label=\"Postal code\"\n optional\n value={contact.postalCode}\n onChange={(v) => onContactChange({ postalCode: v })}\n />\n <CheckoutTextField\n id=\"phone\"\n label=\"Phone\"\n type=\"tel\"\n value={contact.phone}\n error={getFieldError(\"phone\")}\n onClearError={() => clearFieldError(\"phone\")}\n onChange={(v) => onContactChange({ phone: v })}\n />\n </section>\n );\n}\n","import type { CartCheckoutPayment, CartCheckoutResponse } from \"../../../../core/models/cart\";\n\nexport function getPaymentFromCheckout(\n checkout: CartCheckoutResponse | null,\n): CartCheckoutPayment | null {\n if (!checkout) return null;\n const raw = checkout.payment;\n if (!raw || typeof raw !== \"object\") return null;\n return raw as CartCheckoutPayment;\n}\n\n/**\n * Credenciales para Stripe Elements (payment embedded).\n * Prioriza `payment.action`; mantiene compat con campos legacy en la raíz del checkout.\n */\nexport function resolveStripeElementConfig(\n checkout: CartCheckoutResponse | null,\n): { publicKey: string; clientSecret: string } | null {\n if (!checkout) return null;\n const payment = getPaymentFromCheckout(checkout);\n const nestedPk = payment?.action?.publicConfiguration?.publishableKey;\n const nestedSecret = payment?.action?.clientSecret;\n\n const publicKey =\n (typeof nestedPk === \"string\" ? nestedPk : undefined) ??\n checkout.stripePublicKey ??\n checkout.publishableKey ??\n checkout.publicKey ??\n undefined;\n const clientSecret =\n (typeof nestedSecret === \"string\" ? nestedSecret : undefined) ??\n checkout.clientSecret ??\n checkout.intentClientSecret ??\n undefined;\n\n if (!publicKey || !clientSecret) return null;\n return { publicKey, clientSecret };\n}\n\nexport function normalizeProviderId(raw: string | undefined | null): string {\n return (raw ?? \"\").trim().toLowerCase();\n}\n\nexport function getProcessingReturnUrl(): string {\n if (typeof window === \"undefined\") return \"\";\n return `${window.location.origin}/store/checkout/processing`;\n}","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport \"./payment-provider.css\";\n\nexport function RedirectPaymentButton({\n url,\n label,\n}: {\n url: string;\n label: string;\n}) {\n return (\n <a\n href={url}\n className=\"ecomiq-payment-provider__redirect\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {label}\n </a>\n );\n}\n\nexport function PaymentPanel({ children }: { children: ReactNode }) {\n return <div className=\"ecomiq-payment-provider__panel\">{children}</div>;\n}\n\nexport function ExpiresNotice({ expiresAt }: { expiresAt: string | null | undefined }) {\n if (!expiresAt) return null;\n return (\n <p className=\"ecomiq-payment-provider__hint ecomiq-payment-provider__hint--sm\">\n Vence: <time dateTime={expiresAt}>{expiresAt}</time>\n </p>\n );\n}\n","\"use client\";\n\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport type { PaymentSubmissionResult } from \"./payment-submission-types\";\n\nexport type { PaymentSubmissionResult } from \"./payment-submission-types\";\n\nexport type PaymentSubmitFn = () => Promise<PaymentSubmissionResult>;\n\ntype PaymentSubmissionContextValue = {\n registerSubmit: (fn: PaymentSubmitFn | null) => void;\n submitPayment: () => Promise<PaymentSubmissionResult>;\n hasSubmitHandler: boolean;\n};\n\nconst PaymentSubmissionContext = createContext<PaymentSubmissionContextValue | null>(null);\n\nexport function PaymentSubmissionProvider({ children }: { children: ReactNode }) {\n const submitRef = useRef<PaymentSubmitFn | null>(null);\n const [hasSubmitHandler, setHasSubmitHandler] = useState(false);\n\n const registerSubmit = useCallback((fn: PaymentSubmitFn | null) => {\n submitRef.current = fn;\n setHasSubmitHandler(fn != null);\n }, []);\n\n const submitPayment = useCallback(async (): Promise<PaymentSubmissionResult> => {\n const fn = submitRef.current;\n if (!fn) {\n return {\n kind: \"error\",\n code: \"no_handler\",\n message: \"El método de pago aún no está listo. Espera un momento e inténtalo de nuevo.\",\n provider: \"unknown\",\n };\n }\n return fn();\n }, []);\n\n const value = useMemo(\n () => ({ registerSubmit, submitPayment, hasSubmitHandler }),\n [registerSubmit, submitPayment, hasSubmitHandler],\n );\n\n return (\n <PaymentSubmissionContext.Provider value={value}>{children}</PaymentSubmissionContext.Provider>\n );\n}\n\nexport function usePaymentSubmission(): PaymentSubmissionContextValue {\n const ctx = useContext(PaymentSubmissionContext);\n if (!ctx) {\n throw new Error(\"usePaymentSubmission must be used within PaymentSubmissionProvider\");\n }\n return ctx;\n}\n\n/** Para proveedores opcionales que pueden montarse fuera del provider (no usar). */\nexport function useOptionalPaymentSubmission(): PaymentSubmissionContextValue | null {\n return useContext(PaymentSubmissionContext);\n}\n\n/** Registra la función de cobro del proveedor actual (desmontaje limpia el registro). */\nexport function useSyncPaymentSubmit(submit: PaymentSubmitFn) {\n const { registerSubmit } = usePaymentSubmission();\n useEffect(() => {\n registerSubmit(submit);\n return () => registerSubmit(null);\n }, [registerSubmit, submit]);\n}\n","import type { CartCheckoutPayment } from \"../../../../core/models/cart\";\nimport { getProcessingReturnUrl } from \"./checkout-payment-helpers\";\nimport type { PaymentSubmissionResult } from \"./payment-submission-types\";\n\nexport async function submitMercadoPagoPayment(\n payment: CartCheckoutPayment,\n): Promise<PaymentSubmissionResult> {\n const url = payment.action?.url;\n if (typeof url === \"string\" && url.length > 0) {\n return { kind: \"redirect\", url, provider: \"mercadopago\" };\n }\n return {\n kind: \"error\",\n code: \"no_checkout_url\",\n message: \"No hay URL de pago de Mercado Pago. Vuelve a iniciar el checkout.\",\n provider: \"mercadopago\",\n };\n}\n\nexport async function submitPaypalPayment(\n payment: CartCheckoutPayment,\n): Promise<PaymentSubmissionResult> {\n const url = payment.action?.url;\n if (typeof url === \"string\" && url.length > 0) {\n return { kind: \"redirect\", url, provider: \"paypal\" };\n }\n return {\n kind: \"error\",\n code: \"no_approval_url\",\n message: \"No se recibió la URL de PayPal.\",\n provider: \"paypal\",\n };\n}\n\nexport async function submitCulqiPayment(\n payment: CartCheckoutPayment,\n): Promise<PaymentSubmissionResult> {\n const url = payment.action?.url;\n if (typeof url === \"string\" && url.length > 0) {\n return { kind: \"redirect\", url, provider: \"culqi\" };\n }\n return {\n kind: \"error\",\n code: \"culqi_embedded\",\n message:\n \"Completa el pago con Culqi según las instrucciones mostradas; la confirmación embebida se integrará aquí cuando corresponda.\",\n provider: \"culqi\",\n };\n}\n\nexport async function submitYapePayment(\n payment: CartCheckoutPayment,\n): Promise<PaymentSubmissionResult> {\n const qr = payment.action?.qrCode;\n if (typeof qr === \"string\" && qr.length > 0) {\n return {\n kind: \"error\",\n code: \"manual_qr\",\n message:\n \"Escanea el código QR con Yape y, cuando el banco confirme, actualizaremos tu pedido automáticamente.\",\n provider: \"yape\",\n };\n }\n return {\n kind: \"error\",\n code: \"no_qr\",\n message: \"No se recibió QR de Yape.\",\n provider: \"yape\",\n };\n}\n\nexport async function submitPagoEfectivoPayment(\n payment: CartCheckoutPayment,\n): Promise<PaymentSubmissionResult> {\n const ref = payment.reference ?? payment.transactionId;\n if (ref) {\n return {\n kind: \"error\",\n code: \"manual_reference\",\n message:\n \"Paga en efectivo con el código indicado antes de la fecha límite. Te avisaremos cuando registremos el pago.\",\n provider: \"pagoefectivo\",\n };\n }\n return {\n kind: \"error\",\n code: \"no_reference\",\n message: \"No hay código de pago en efectivo disponible.\",\n provider: \"pagoefectivo\",\n };\n}\n\nexport async function submitGenericPayment(\n payment: CartCheckoutPayment,\n): Promise<PaymentSubmissionResult> {\n const url = payment.action?.url;\n if (typeof url === \"string\" && url.length > 0) {\n return {\n kind: \"redirect\",\n url,\n provider: normalizeId(payment.providerId) || \"unknown\",\n };\n }\n \n if (payment.actionType === \"manual\") {\n return {\n kind: \"redirect\",\n url: getProcessingReturnUrl(),\n provider: normalizeId(payment.providerId) || \"unknown\",\n };\n }\n\n return {\n kind: \"error\",\n code: \"manual_or_unsupported\",\n message:\n \"Completa el pago con los datos mostrados arriba o elige otro método si está disponible.\",\n provider: normalizeId(payment.providerId) || \"unknown\",\n };\n}\n\nfunction normalizeId(id: string | null | undefined): string {\n return (id ?? \"\").trim().toLowerCase();\n}\n","\"use client\";\n\nimport { useCallback } from \"react\";\nimport type { CheckoutPaymentProviderProps } from \"./types\";\nimport { PaymentPanel, RedirectPaymentButton } from \"./provider-shared\";\nimport { useSyncPaymentSubmit } from \"./payment-submission-context\";\nimport { submitCulqiPayment } from \"./payment-submit-by-provider\";\n\n/**\n * Culqi: tokenización en cliente con publishable key; redirect si el backend envía URL.\n */\nexport function CulqiPaymentProvider({ payment }: CheckoutPaymentProviderProps) {\n const submit = useCallback(() => submitCulqiPayment(payment), [payment]);\n useSyncPaymentSubmit(submit);\n\n const pk = payment.action?.publicConfiguration?.publishableKey;\n const url = payment.action?.url;\n\n return (\n <PaymentPanel>\n <p className=\"text-sm font-medium\">Culqi</p>\n {typeof url === \"string\" && url.length > 0 ? (\n <RedirectPaymentButton url={url} label=\"Pagar con Culqi\" />\n ) : pk ? (\n <p className=\"text-sm text-muted-foreground\">\n Clave pública recibida. Integra Culqi Checkout o JS según tu backend (embedded).\n </p>\n ) : (\n <p className=\"text-sm text-muted-foreground\">Configuración de Culqi incompleta.</p>\n )}\n </PaymentPanel>\n );\n}\n","\"use client\";\n\nimport { useCallback } from \"react\";\nimport type { CheckoutPaymentProviderProps } from \"./types\";\nimport {\n ExpiresNotice,\n PaymentPanel,\n RedirectPaymentButton,\n} from \"./provider-shared\";\nimport { useSyncPaymentSubmit } from \"./payment-submission-context\";\nimport { submitGenericPayment } from \"./payment-submit-by-provider\";\n\n/**\n * Proveedor no registrado explícitamente o payload híbrido.\n */\nexport function GenericPaymentProvider({ payment }: CheckoutPaymentProviderProps) {\n const submit = useCallback(() => submitGenericPayment(payment), [payment]);\n useSyncPaymentSubmit(submit);\n\n const url = payment.action?.url;\n const qr = payment.action?.qrCode;\n\n return (\n <PaymentPanel>\n <p className=\"ecomiq-payment-provider__title\">\n Pago {payment.providerId ? `(${payment.providerId})` : \"\"}\n </p>\n {payment.status ? (\n <p className=\"ecomiq-payment-provider__hint ecomiq-payment-provider__hint--sm\">\n Estado: {payment.status}\n </p>\n ) : null}\n {typeof url === \"string\" && url.length > 0 ? (\n <RedirectPaymentButton url={url} label=\"Abrir página de pago\" />\n ) : null}\n {typeof qr === \"string\" && qr.length > 0 ? (\n <div className=\"ecomiq-payment-provider__qr-wrap\">\n <img src={qr} alt=\"Código QR\" className=\"ecomiq-payment-provider__qr\" />\n </div>\n ) : null}\n {payment.reference ? (\n <p className=\"ecomiq-payment-provider__hint ecomiq-payment-provider__hint--sm ecomiq-payment-provider__mono\">\n {payment.reference}\n </p>\n ) : null}\n <ExpiresNotice expiresAt={payment.action?.expiresAt} />\n\n <details className=\"ecomiq-payment-provider__details\">\n <summary>Detalle técnico</summary>\n <pre>{JSON.stringify(payment, null, 2)}</pre>\n </details>\n </PaymentPanel>\n );\n}\n","\"use client\";\n\nimport { useCallback } from \"react\";\nimport type { CheckoutPaymentProviderProps } from \"./types\";\nimport { PaymentPanel, RedirectPaymentButton } from \"./provider-shared\";\nimport { useSyncPaymentSubmit } from \"./payment-submission-context\";\nimport { submitMercadoPagoPayment } from \"./payment-submit-by-provider\";\n\n/**\n * Mercado Pago: preferencia con URL o Brick embedded (SDK aparte).\n */\nexport function MercadoPagoPaymentProvider({ payment }: CheckoutPaymentProviderProps) {\n const submit = useCallback(() => submitMercadoPagoPayment(payment), [payment]);\n useSyncPaymentSubmit(submit);\n\n const url = payment.action?.url;\n const mode = payment.action?.publicConfiguration?.checkoutMode;\n\n return (\n <PaymentPanel>\n <p className=\"ecomiq-payment-provider__title\">Mercado Pago</p>\n {mode ? (\n <p className=\"ecomiq-payment-provider__hint ecomiq-payment-provider__hint--sm\">\n Modo: {mode}\n </p>\n ) : null}\n {typeof url === \"string\" && url.length > 0 ? (\n <RedirectPaymentButton url={url} label=\"Pagar con Mercado Pago\" />\n ) : (\n <p className=\"ecomiq-payment-provider__hint\">\n Completa el pago cuando el backend envíe la URL de checkout.\n </p>\n )}\n {payment.reference ? (\n <p className=\"ecomiq-payment-provider__hint ecomiq-payment-provider__hint--sm ecomiq-payment-provider__mono\">\n Ref.: {payment.reference}\n </p>\n ) : null}\n </PaymentPanel>\n );\n}\n","\"use client\";\n\nimport { useCallback } from \"react\";\nimport type { CheckoutPaymentProviderProps } from \"./types\";\nimport { ExpiresNotice, PaymentPanel } from \"./provider-shared\";\nimport { useSyncPaymentSubmit } from \"./payment-submission-context\";\nimport { submitPagoEfectivoPayment } from \"./payment-submit-by-provider\";\n\n/** PagoEfectivo / CIP u otros códigos de ventanilla */\nexport function PagoEfectivoPaymentProvider({ payment }: CheckoutPaymentProviderProps) {\n const submit = useCallback(() => submitPagoEfectivoPayment(payment), [payment]);\n useSyncPaymentSubmit(submit);\n\n const reference = payment.reference ?? payment.transactionId;\n\n return (\n <PaymentPanel>\n <p className=\"text-sm font-medium\">Pago en efectivo</p>\n <p className=\"text-sm text-muted-foreground\">\n Usa el código de pago en una agencia o app autorizada antes de que venza.\n </p>\n {reference ? (\n <div className=\"rounded-md bg-muted px-3 py-2 font-mono text-sm break-all\">{reference}</div>\n ) : null}\n {payment.amount != null ? (\n <p className=\"text-sm\">\n Monto a pagar: <strong>{payment.amount}</strong>\n </p>\n ) : null}\n <ExpiresNotice expiresAt={payment.action?.expiresAt} />\n </PaymentPanel>\n );\n}\n","\"use client\";\n\nimport { useCallback } from \"react\";\nimport type { CheckoutPaymentProviderProps } from \"./types\";\nimport { PaymentPanel, RedirectPaymentButton } from \"./provider-shared\";\nimport { useSyncPaymentSubmit } from \"./payment-submission-context\";\nimport { submitPaypalPayment } from \"./payment-submit-by-provider\";\n\nexport function PaypalPaymentProvider({ payment }: CheckoutPaymentProviderProps) {\n const submit = useCallback(() => submitPaypalPayment(payment), [payment]);\n useSyncPaymentSubmit(submit);\n\n const url = payment.action?.url;\n\n return (\n <PaymentPanel>\n <p className=\"text-sm font-medium\">PayPal</p>\n {typeof url === \"string\" && url.length > 0 ? (\n <RedirectPaymentButton url={url} label=\"Continuar a PayPal\" />\n ) : (\n <p className=\"text-sm text-muted-foreground\">\n Esperando URL de aprobación de PayPal desde el servidor.\n </p>\n )}\n </PaymentPanel>\n );\n}\n","\"use client\";\n\nimport { useEffect, useRef } from \"react\";\nimport { getProcessingReturnUrl, resolveStripeElementConfig } from \"./checkout-payment-helpers\";\nimport { PaymentPanel } from \"./provider-shared\";\nimport { usePaymentSubmission } from \"./payment-submission-context\";\nimport type { PaymentSubmissionResult } from \"./payment-submission-types\";\nimport type { CheckoutPaymentProviderProps } from \"./types\";\n\ntype StripeConstructorLike = (publishableKey: string) => unknown;\n\n/** Tipado mínimo para `Stripe(pk).confirmPayment` (Stripe.js v3 por CDN). */\ntype StripeConfirmPaymentFn = (options: {\n elements: unknown;\n confirmParams: {\n return_url: string;\n payment_method_data?: Record<string, unknown>;\n };\n redirect?: \"always\" | \"if_required\";\n}) => Promise<{\n error?: { code?: string; message?: string | null; type?: string };\n paymentIntent?: { status?: string; id?: string };\n}>;\n\ntype StripeInstance = {\n confirmPayment: StripeConfirmPaymentFn;\n};\n\nasync function confirmStripePaymentWithElements(params: {\n stripe: StripeInstance;\n elements: unknown;\n returnUrl: string;\n}): Promise<PaymentSubmissionResult> {\n const { stripe, elements, returnUrl } = params;\n\n const result = await stripe.confirmPayment({\n elements,\n confirmParams: {\n return_url: returnUrl,\n payment_method_data: {},\n },\n redirect: \"if_required\",\n });\n\n if (result.error) {\n return {\n kind: \"error\",\n code: result.error.code ?? \"stripe_error\",\n message: result.error.message ?? \"Error al procesar el pago\",\n provider: \"stripe\",\n raw: result.error,\n };\n }\n\n const paymentIntent = result.paymentIntent;\n if (paymentIntent?.status === \"succeeded\") {\n return {\n kind: \"success\",\n transactionId: paymentIntent.id,\n provider: \"stripe\",\n raw: paymentIntent,\n };\n }\n\n return {\n kind: \"error\",\n code: \"pending\",\n message: \"El pago está pendiente.\",\n provider: \"stripe\",\n raw: paymentIntent,\n };\n}\n\n/** Igual contrato que el resto del registro; usa `checkout` para Stripe Elements. */\nexport function StripePaymentProvider({ checkout }: CheckoutPaymentProviderProps) {\n const stripeMountRef = useRef<HTMLDivElement | null>(null);\n const stripePaymentElementRef = useRef<{ unmount: () => void } | null>(null);\n const stripeRef = useRef<StripeInstance | null>(null);\n const elementsRef = useRef<unknown>(null);\n\n const { registerSubmit } = usePaymentSubmission();\n const stripeConfig = resolveStripeElementConfig(checkout);\n\n useEffect(() => {\n if (!stripeConfig) {\n stripePaymentElementRef.current?.unmount?.();\n stripePaymentElementRef.current = null;\n stripeRef.current = null;\n elementsRef.current = null;\n registerSubmit(null);\n return;\n }\n\n let cancelled = false;\n\n const ensureStripeScript = () =>\n new Promise<void>((resolve, reject) => {\n const maybeStripe = (globalThis as unknown as { Stripe?: unknown }).Stripe;\n if (maybeStripe) return resolve();\n const existing = document.querySelector('script[src=\"https://js.stripe.com/v3/\"]');\n if (existing) {\n existing.addEventListener(\"load\", () => resolve(), { once: true });\n existing.addEventListener(\n \"error\",\n () => reject(new Error(\"Stripe script failed to load\")),\n { once: true },\n );\n return;\n }\n const script = document.createElement(\"script\");\n script.src = \"https://js.stripe.com/v3/\";\n script.async = true;\n script.addEventListener(\"load\", () => resolve(), { once: true });\n script.addEventListener(\n \"error\",\n () => reject(new Error(\"Stripe script failed to load\")),\n { once: true },\n );\n document.head.appendChild(script);\n });\n\n const mountStripePaymentElement = async () => {\n await ensureStripeScript();\n if (cancelled) return;\n\n const StripeCtor = (globalThis as unknown as { Stripe?: StripeConstructorLike }).Stripe;\n if (!StripeCtor) throw new Error(\"Stripe is not available\");\n const stripeJs = StripeCtor(stripeConfig.publicKey) as unknown as StripeInstance & {\n elements: (opts: { clientSecret: string }) => {\n create: (type: \"payment\") => { mount: (el: HTMLElement) => void; unmount: () => void };\n };\n };\n stripeRef.current = stripeJs;\n const elements = stripeJs.elements({ clientSecret: stripeConfig.clientSecret });\n\n stripePaymentElementRef.current?.unmount?.();\n stripePaymentElementRef.current = null;\n\n const paymentElement = elements.create(\"payment\");\n const mountNode = stripeMountRef.current;\n if (!mountNode) return;\n paymentElement.mount(mountNode);\n stripePaymentElementRef.current = paymentElement;\n\n elementsRef.current = elements;\n\n registerSubmit(async () => {\n const s = stripeRef.current;\n const el = elementsRef.current;\n if (!s || !el) {\n return {\n kind: \"error\",\n code: \"stripe_not_ready\",\n message: \"Stripe no está listo. Espera un momento e inténtalo de nuevo.\",\n provider: \"stripe\",\n };\n }\n const returnUrl = getProcessingReturnUrl();\n return confirmStripePaymentWithElements({\n stripe: s,\n elements: el,\n returnUrl,\n });\n });\n };\n\n mountStripePaymentElement().catch(() => {\n registerSubmit(null);\n });\n\n return () => {\n cancelled = true;\n stripePaymentElementRef.current?.unmount?.();\n stripePaymentElementRef.current = null;\n stripeRef.current = null;\n elementsRef.current = null;\n registerSubmit(null);\n };\n }, [stripeConfig?.publicKey, stripeConfig?.clientSecret, registerSubmit]);\n\n if (!stripeConfig) {\n return (\n <PaymentPanel>\n <p className=\"ecomiq-payment-provider__hint\">\n No se recibió la configuración de Stripe (publishable key / client secret).\n </p>\n </PaymentPanel>\n );\n }\n\n return (\n <PaymentPanel>\n <div ref={stripeMountRef} />\n </PaymentPanel>\n );\n}\n","\"use client\";\n\nimport { useCallback } from \"react\";\nimport type { CheckoutPaymentProviderProps } from \"./types\";\nimport { ExpiresNotice, PaymentPanel } from \"./provider-shared\";\nimport { useSyncPaymentSubmit } from \"./payment-submission-context\";\nimport { submitYapePayment } from \"./payment-submit-by-provider\";\n\nexport function YapePaymentProvider({ payment }: CheckoutPaymentProviderProps) {\n const submit = useCallback(() => submitYapePayment(payment), [payment]);\n useSyncPaymentSubmit(submit);\n\n const qr = payment.action?.qrCode;\n\n return (\n <PaymentPanel>\n <p className=\"text-sm font-medium\">Yape</p>\n <p className=\"text-sm text-muted-foreground\">\n Escanea el código QR con la app Yape para completar el pago.\n </p>\n {typeof qr === \"string\" && qr.length > 0 ? (\n <div className=\"flex justify-center\">\n <img\n src={qr}\n alt=\"Código QR Yape\"\n className=\"max-w-[220px] rounded-md border bg-white p-2\"\n />\n </div>\n ) : (\n <p className=\"text-sm text-destructive\">No se recibió QR en la respuesta.</p>\n )}\n {payment.amount != null ? (\n <p className=\"text-sm\">\n Monto: <strong>{payment.amount}</strong>\n </p>\n ) : null}\n <ExpiresNotice expiresAt={payment.action?.expiresAt} />\n </PaymentPanel>\n );\n}\n","\"use client\";\n\nimport type { FC } from \"react\";\nimport { useMemo } from \"react\";\nimport { getPaymentFromCheckout, normalizeProviderId } from \"./checkout-payment-helpers\";\nimport type { CheckoutPaymentProviderProps, PaymentProviderRouterProps } from \"./types\";\nimport { CulqiPaymentProvider } from \"./culqi-payment-provider\";\nimport { GenericPaymentProvider } from \"./generic-payment-provider\";\nimport { MercadoPagoPaymentProvider } from \"./mercadopago-payment-provider\";\nimport { PagoEfectivoPaymentProvider } from \"./pagoefectivo-payment-provider\";\nimport { PaypalPaymentProvider } from \"./paypal-payment-provider\";\nimport { StripePaymentProvider } from \"./stripe-payment-provider\";\nimport { YapePaymentProvider } from \"./yape-payment-provider\";\n\ntype ProviderComponent = FC<CheckoutPaymentProviderProps>;\n\nconst REGISTRY: Record<string, ProviderComponent> = {\n stripe: StripePaymentProvider,\n mercadopago: MercadoPagoPaymentProvider,\n mercado_pago: MercadoPagoPaymentProvider,\n paypal: PaypalPaymentProvider,\n culqi: CulqiPaymentProvider,\n yape: YapePaymentProvider,\n pagoefectivo: PagoEfectivoPaymentProvider,\n pago_efectivo: PagoEfectivoPaymentProvider,\n};\n\n/**\n * Elige el componente según `payment.providerId` devuelto por la mutación checkout.\n * Proveedores no registrados caen en {@link GenericPaymentProvider}.\n */\nexport function PaymentProviderRouter({ checkout }: PaymentProviderRouterProps) {\n const payment = useMemo(() => getPaymentFromCheckout(checkout), [checkout]);\n\n if (!payment) {\n return null;\n }\n\n const key = normalizeProviderId(payment.providerId);\n const Provider = key ? REGISTRY[key] : undefined;\n\n if (Provider) {\n return <Provider payment={payment} checkout={checkout} />;\n }\n\n return <GenericPaymentProvider payment={payment} checkout={checkout} />;\n}\n","import type { StorePaymentMethod } from \"../types\";\n\nconst PROVIDER_CHECKOUT_UI = new Set([\"stripe\", \"mercadopago\", \"mercado_pago\"]);\n\nfunction normalizeProviderKey(raw: string): string {\n return raw.trim().toLowerCase().replace(/[\\s-]+/g, \"_\");\n}\n\n/** Stripe / Mercado Pago: POST checkout una vez para montar UI embebida o redirect. */\nexport function methodUsesProviderCheckoutUi(method: StorePaymentMethod): boolean {\n if (method.isManual) return false;\n\n const keys = [method.providerMethodCode, method.kind, method.code].filter(\n Boolean,\n ) as string[];\n\n return keys.some((key) => {\n const normalized = normalizeProviderKey(key);\n return (\n PROVIDER_CHECKOUT_UI.has(normalized) ||\n normalized.includes(\"stripe\") ||\n normalized.includes(\"mercado\")\n );\n });\n}\n","\"use client\";\n\nimport {\n useCallback,\n useEffect,\n useMemo,\n useState,\n type ChangeEvent,\n} from \"react\";\nimport type { CartCheckoutResponse } from \"../../../../core/models/cart\";\nimport { getPaymentFromCheckout } from \"../../../components/checkout/payment-providers/checkout-payment-helpers\";\nimport { usePaymentSubmission } from \"../../../components/checkout/payment-providers/payment-submission-context\";\nimport type { PaymentSubmissionResult } from \"../../../components/checkout/payment-providers/payment-submission-types\";\nimport type { CheckoutFieldId } from \"../lib/checkout-form-schema\";\nimport { methodUsesProviderCheckoutUi } from \"../lib/checkout-payment-method\";\nimport type { StorePaymentMethod } from \"../types\";\n\nexport type CheckoutPaymentPreResult =\n | { ok: true; receiptUrl?: string; finalizeOnly?: boolean }\n | { ok: false };\n\nexport type UseCheckoutPaymentArgs = {\n paymentMethods: StorePaymentMethod[];\n selectedPaymentCode: string | null;\n selectPaymentMethod: (paymentMethodCode: string) => void;\n providerPaymentCompleted: boolean;\n setProviderPaymentCompleted: (value: boolean) => void;\n checkoutResponse: CartCheckoutResponse | null | undefined;\n checkoutMethodCode: string | null;\n loadingCheckout: boolean;\n checkoutError: string | null;\n onUploadReceipt: (file: File) => Promise<{ url: string }>;\n onPaymentSubmissionResult?: (result: PaymentSubmissionResult) => void;\n onCanProceedToPayChange?: (canProceed: boolean) => void;\n clearFieldError?: (fieldId: CheckoutFieldId) => void;\n};\n\nexport function useCheckoutPayment({\n paymentMethods,\n selectedPaymentCode,\n selectPaymentMethod,\n providerPaymentCompleted,\n setProviderPaymentCompleted,\n checkoutResponse,\n checkoutMethodCode,\n loadingCheckout,\n checkoutError,\n onUploadReceipt,\n onPaymentSubmissionResult,\n onCanProceedToPayChange,\n clearFieldError,\n}: UseCheckoutPaymentArgs) {\n const { submitPayment, hasSubmitHandler } = usePaymentSubmission();\n\n const activeMethods = useMemo(\n () =>\n paymentMethods\n .filter((m) => m.isActive)\n .slice()\n .sort((a, b) => (a.sortOrder ?? 0) - (b.sortOrder ?? 0)),\n [paymentMethods],\n );\n\n const selectedMethod = useMemo(\n () => activeMethods.find((m) => m.code === selectedPaymentCode) ?? null,\n [activeMethods, selectedPaymentCode],\n );\n\n const requiresProviderUi = Boolean(\n selectedMethod && methodUsesProviderCheckoutUi(selectedMethod),\n );\n\n const effectiveCheckout =\n checkoutMethodCode && checkoutMethodCode === selectedMethod?.code\n ? (checkoutResponse ?? null)\n : null;\n\n const activeLoadingCheckout =\n !!checkoutMethodCode &&\n checkoutMethodCode === selectedMethod?.code &&\n loadingCheckout;\n\n const activeCheckoutError =\n checkoutMethodCode && checkoutMethodCode === selectedMethod?.code\n ? checkoutError\n : null;\n\n const manualPaymentDetails = useMemo(() => {\n if (!selectedMethod?.isManual) return null;\n\n const action = getPaymentFromCheckout(effectiveCheckout)?.action ?? null;\n const publicConfiguration = action?.publicConfiguration ?? {};\n const phoneNumber =\n selectedMethod.phoneNumber ?? publicConfiguration.phoneNumber ?? null;\n const accountHolder =\n selectedMethod.accountHolder ?? publicConfiguration.accountHolder ?? null;\n const qrImageUrl =\n action?.qrCode ??\n selectedMethod.qrImageUrl ??\n publicConfiguration.qrImageUrl ??\n null;\n\n if (!phoneNumber && !accountHolder && !qrImageUrl) return null;\n\n return { phoneNumber, accountHolder, qrImageUrl };\n }, [selectedMethod, effectiveCheckout]);\n\n const needsReceipt = Boolean(selectedMethod?.isManual && manualPaymentDetails);\n\n const showProviderPanel =\n requiresProviderUi &&\n !!selectedMethod &&\n !!effectiveCheckout &&\n !activeLoadingCheckout &&\n !activeCheckoutError;\n\n const [receiptFile, setReceiptFile] = useState<File | null>(null);\n const [receiptUrl, setReceiptUrl] = useState<string | null>(null);\n const [receiptError, setReceiptError] = useState<string | null>(null);\n const [confirmingProvider, setConfirmingProvider] = useState(false);\n\n const receiptPreviewUrl = useMemo(\n () => (receiptFile ? URL.createObjectURL(receiptFile) : null),\n [receiptFile],\n );\n\n useEffect(() => {\n return () => {\n if (receiptPreviewUrl) URL.revokeObjectURL(receiptPreviewUrl);\n };\n }, [receiptPreviewUrl]);\n\n useEffect(() => {\n setReceiptFile(null);\n setReceiptUrl(null);\n setReceiptError(null);\n }, [selectedMethod?.code]);\n\n const selectPayment = useCallback(\n (code: string) => {\n clearFieldError?.(\"checkout-payment-method\");\n selectPaymentMethod(code);\n },\n [clearFieldError, selectPaymentMethod],\n );\n\n const handleReceiptChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0] ?? null;\n setReceiptUrl(null);\n setReceiptError(null);\n\n if (!file) {\n setReceiptFile(null);\n return;\n }\n\n if (!file.type.startsWith(\"image/\")) {\n setReceiptFile(null);\n setReceiptError(\"Adjunta una imagen del comprobante.\");\n return;\n }\n\n setReceiptFile(file);\n }, []);\n\n const confirmProviderPayment = useCallback(async () => {\n if (!showProviderPanel) return;\n\n setConfirmingProvider(true);\n try {\n const result = await submitPayment();\n\n if (result.kind === \"redirect\") {\n onPaymentSubmissionResult?.(result);\n return;\n }\n if (result.kind === \"success\") {\n setProviderPaymentCompleted(true);\n return;\n }\n onPaymentSubmissionResult?.(result);\n } catch {\n setReceiptError(\"No se pudo completar el pago. Inténtalo de nuevo.\");\n } finally {\n setConfirmingProvider(false);\n }\n }, [\n onPaymentSubmissionResult,\n setProviderPaymentCompleted,\n showProviderPanel,\n submitPayment,\n ]);\n\n const runPreCheckoutSteps = useCallback(async (): Promise<CheckoutPaymentPreResult> => {\n if (!selectedMethod) return { ok: false };\n\n setReceiptError(null);\n\n try {\n if (needsReceipt) {\n let nextReceiptUrl = receiptUrl;\n\n if (!nextReceiptUrl) {\n if (!receiptFile) {\n setReceiptError(\"Adjunta el comprobante para completar la orden.\");\n return { ok: false };\n }\n const uploaded = await onUploadReceipt(receiptFile);\n nextReceiptUrl = uploaded.url;\n setReceiptUrl(nextReceiptUrl);\n }\n\n return { ok: true, receiptUrl: nextReceiptUrl ?? undefined };\n }\n\n if (requiresProviderUi) {\n if (!providerPaymentCompleted) {\n setReceiptError(\n \"Confirma el pago con Stripe o Mercado Pago antes de finalizar el pedido.\",\n );\n return { ok: false };\n }\n return { ok: true, finalizeOnly: true };\n }\n\n return { ok: true };\n } catch {\n setReceiptError(\"No se pudo completar el pago. Inténtalo de nuevo.\");\n return { ok: false };\n }\n }, [\n needsReceipt,\n onUploadReceipt,\n providerPaymentCompleted,\n receiptFile,\n receiptUrl,\n requiresProviderUi,\n selectedMethod,\n ]);\n\n const canProceedToPay = useMemo(() => {\n if (!selectedMethod) return false;\n if (activeLoadingCheckout || activeCheckoutError) return false;\n\n if (requiresProviderUi) {\n return providerPaymentCompleted;\n }\n\n return (\n (!needsReceipt || !!receiptFile || !!receiptUrl) &&\n (!showProviderPanel || hasSubmitHandler)\n );\n }, [\n activeCheckoutError,\n activeLoadingCheckout,\n hasSubmitHandler,\n needsReceipt,\n providerPaymentCompleted,\n receiptFile,\n receiptUrl,\n requiresProviderUi,\n selectedMethod,\n showProviderPanel,\n ]);\n\n useEffect(() => {\n onCanProceedToPayChange?.(canProceedToPay);\n }, [canProceedToPay, onCanProceedToPayChange]);\n\n const providerConfirmLabel = useMemo(() => {\n if (!selectedMethod) return \"Confirmar pago\";\n const key = (\n selectedMethod.providerMethodCode ??\n selectedMethod.kind ??\n \"\"\n )\n .toLowerCase()\n .replace(/[\\s-]+/g, \"_\");\n if (key.includes(\"mercado\")) return \"Ir a Mercado Pago\";\n if (key.includes(\"stripe\")) return \"Confirmar pago con tarjeta\";\n return \"Confirmar pago\";\n }, [selectedMethod]);\n\n return {\n activeMethods,\n selectedMethod,\n effectiveCheckout,\n activeLoadingCheckout,\n activeCheckoutError,\n manualPaymentDetails,\n needsReceipt,\n requiresProviderUi,\n showProviderPanel,\n providerPaymentCompleted,\n confirmingProvider,\n providerConfirmLabel,\n receiptFile,\n receiptUrl,\n receiptError,\n receiptPreviewUrl,\n selectPayment,\n handleReceiptChange,\n confirmProviderPayment,\n runPreCheckoutSteps,\n canProceedToPay,\n hasSubmitHandler,\n };\n}\n","\"use client\";\n\nimport { forwardRef, useImperativeHandle, type Ref } from \"react\";\nimport { PaymentProviderRouter } from \"../../../components/checkout/payment-providers/payment-provider-router\";\nimport { PaymentSubmissionProvider } from \"../../../components/checkout/payment-providers/payment-submission-context\";\nimport type { PaymentSubmissionResult } from \"../../../components/checkout/payment-providers/payment-submission-types\";\nimport type { CartCheckoutResponse } from \"../../../../core/models/cart\";\nimport {\n useCheckoutPayment,\n type CheckoutPaymentPreResult,\n} from \"../hooks/use-checkout-payment\";\nimport type { CheckoutFieldId } from \"../lib/checkout-form-schema\";\nimport type { StorePaymentMethod } from \"../types\";\n\nexport type CheckoutPaymentHandle = {\n runPreCheckoutSteps: () => Promise<CheckoutPaymentPreResult>;\n canProceedToPay: boolean;\n};\n\nexport type CheckoutPaymentSectionProps = {\n paymentMethods: StorePaymentMethod[];\n selectedPaymentCode: string | null;\n selectPaymentMethod: (paymentMethodCode: string) => void;\n providerPaymentCompleted: boolean;\n setProviderPaymentCompleted: (value: boolean) => void;\n checkoutResponse: CartCheckoutResponse | null | undefined;\n checkoutMethodCode: string | null;\n loadingCheckout: boolean;\n checkoutError: string | null;\n onUploadReceipt: (file: File) => Promise<{ url: string }>;\n onPaymentSubmissionResult?: (result: PaymentSubmissionResult) => void;\n onCanProceedToPayChange?: (canProceed: boolean) => void;\n getFieldError?: (fieldId: CheckoutFieldId) => string | undefined;\n clearFieldError?: (fieldId: CheckoutFieldId) => void;\n};\n\ntype InnerProps = CheckoutPaymentSectionProps & {\n paymentRef: Ref<CheckoutPaymentHandle>;\n};\n\nfunction CheckoutPaymentSectionInner({\n paymentRef,\n getFieldError,\n clearFieldError,\n ...paymentArgs\n}: InnerProps) {\n const payment = useCheckoutPayment({\n ...paymentArgs,\n clearFieldError,\n });\n\n useImperativeHandle(\n paymentRef,\n () => ({\n runPreCheckoutSteps: payment.runPreCheckoutSteps,\n canProceedToPay: payment.canProceedToPay,\n }),\n [payment.canProceedToPay, payment.runPreCheckoutSteps],\n );\n\n const paymentFieldError = getFieldError?.(\"checkout-payment-method\");\n\n return (\n <section\n className=\"ecomiq-checkout-page__section\"\n id=\"checkout-payment-method\"\n >\n <h2>Payment</h2>\n <p className=\"ecomiq-checkout-page__hint\">\n All transactions are secure and encrypted.\n </p>\n {paymentFieldError ? (\n <p className=\"ecomiq-checkout-page__field-error-inline\" role=\"alert\">\n {paymentFieldError}\n </p>\n ) : null}\n <div\n className={`ecomiq-checkout-page__options${paymentFieldError ? \" ecomiq-checkout-page__options--error\" : \"\"}`}\n >\n {payment.activeMethods.length === 0 ? (\n <p className=\"ecomiq-checkout-page__hint\">No payment methods available.</p>\n ) : (\n payment.activeMethods.map((method) => (\n <label\n key={method.code}\n className={`ecomiq-checkout-page__option${paymentArgs.selectedPaymentCode === method.code ? \" is-selected\" : \"\"}`}\n >\n <input\n type=\"radio\"\n name=\"payment\"\n checked={paymentArgs.selectedPaymentCode === method.code}\n onChange={() => payment.selectPayment(method.code)}\n />\n <span className=\"ecomiq-checkout-page__option-body\">\n <span className=\"ecomiq-checkout-page__option-title\">{method.name}</span>\n {method.description ? (\n <span className=\"ecomiq-checkout-page__option-sub\">\n {method.description}\n </span>\n ) : null}\n </span>\n </label>\n ))\n )}\n </div>\n\n {payment.activeLoadingCheckout ? (\n <p className=\"ecomiq-checkout-page__hint\">Cargando configuración del método de pago…</p>\n ) : null}\n {payment.activeCheckoutError ? (\n <p className=\"ecomiq-checkout-page__field-error\" role=\"alert\">\n {payment.activeCheckoutError}\n </p>\n ) : null}\n\n {payment.selectedMethod && payment.manualPaymentDetails ? (\n <div className=\"ecomiq-checkout-page__manual-payment\">\n <div className=\"ecomiq-checkout-page__manual-payment-body\">\n {payment.manualPaymentDetails.qrImageUrl ? (\n <div className=\"ecomiq-checkout-page__manual-payment-qr\">\n <img\n src={payment.manualPaymentDetails.qrImageUrl}\n alt={`${payment.selectedMethod.name} QR`}\n />\n </div>\n ) : null}\n <div className=\"ecomiq-checkout-page__manual-payment-info\">\n <p className=\"ecomiq-checkout-page__manual-payment-title\">\n Pay with {payment.selectedMethod.name}\n </p>\n <p className=\"ecomiq-checkout-page__hint\">\n Send the payment and keep your receipt. The order will stay pending until\n it is reviewed.\n </p>\n {payment.manualPaymentDetails.phoneNumber ? (\n <p className=\"ecomiq-checkout-page__manual-payment-row\">\n <span>Cell phone</span>\n <strong>{payment.manualPaymentDetails.phoneNumber}</strong>\n </p>\n ) : null}\n {payment.manualPaymentDetails.accountHolder ? (\n <p className=\"ecomiq-checkout-page__manual-payment-row\">\n <span>Holder</span>\n <strong>{payment.manualPaymentDetails.accountHolder}</strong>\n </p>\n ) : null}\n <div className=\"ecomiq-checkout-page__receipt-upload\">\n <span className=\"ecomiq-checkout-page__label\">Payment receipt</span>\n <label className=\"ecomiq-checkout-page__receipt-label\">\n <input\n type=\"file\"\n accept=\"image/*\"\n className=\"ecomiq-checkout-page__receipt-input\"\n onChange={payment.handleReceiptChange}\n />\n <span>\n {payment.receiptFile?.name ??\n (payment.receiptUrl ? \"Receipt attached\" : \"Upload receipt\")}\n </span>\n </label>\n {payment.receiptPreviewUrl ? (\n <img\n src={payment.receiptPreviewUrl}\n alt=\"Payment receipt\"\n className=\"ecomiq-checkout-page__receipt-preview\"\n />\n ) : null}\n {payment.receiptError ? (\n <p className=\"ecomiq-checkout-page__field-error-inline\" role=\"alert\">\n {payment.receiptError}\n </p>\n ) : null}\n </div>\n </div>\n </div>\n </div>\n ) : null}\n\n {payment.showProviderPanel && payment.effectiveCheckout ? (\n <div className=\"ecomiq-checkout-page__payment-provider\">\n <PaymentProviderRouter checkout={payment.effectiveCheckout} />\n {!payment.providerPaymentCompleted ? (\n <button\n type=\"button\"\n className=\"ecomiq-checkout-page__provider-confirm\"\n disabled={payment.confirmingProvider || !payment.hasSubmitHandler}\n onClick={() => void payment.confirmProviderPayment()}\n >\n {payment.confirmingProvider\n ? \"Procesando pago…\"\n : payment.providerConfirmLabel}\n </button>\n ) : (\n <p className=\"ecomiq-checkout-page__hint\" role=\"status\">\n Pago confirmado. Pulsa Pay now para finalizar tu pedido.\n </p>\n )}\n </div>\n ) : null}\n {payment.requiresProviderUi &&\n !payment.showProviderPanel &&\n !payment.activeLoadingCheckout &&\n !payment.activeCheckoutError ? (\n <p className=\"ecomiq-checkout-page__hint\">\n Espera a que cargue la configuración del método de pago.\n </p>\n ) : null}\n </section>\n );\n}\n\nexport const CheckoutPaymentSection = forwardRef<\n CheckoutPaymentHandle,\n CheckoutPaymentSectionProps\n>(function CheckoutPaymentSection(props, ref) {\n return (\n <PaymentSubmissionProvider>\n <CheckoutPaymentSectionInner paymentRef={ref} {...props} />\n </PaymentSubmissionProvider>\n );\n});\n","\"use client\";\n\nimport { useRef, useState, type ComponentType } from \"react\";\nimport type { CartCheckoutResponse } from \"../../../../core/models/cart\";\nimport type { PaymentSubmissionResult } from \"../../../components/checkout/payment-providers/payment-submission-types\";\nimport { formatCurrency } from \"../../../../core/utils/format-currency\";\nimport type { CheckoutContactForm, BillingChoice } from \"../hooks/use-checkout-session\";\nimport { useCheckoutFormValidation } from \"../hooks/use-checkout-form-validation\";\nimport type { CheckoutLinkProps } from \"../types\";\nimport type { StorePaymentMethod } from \"../types\";\nimport { CheckoutDeliveryForm } from \"./checkout-delivery-form\";\nimport { CheckoutTextField } from \"./checkout-form-controls\";\nimport {\n CheckoutPaymentSection,\n type CheckoutPaymentHandle,\n} from \"./checkout-payment-section\";\n\ntype ShippingOption = {\n key: string;\n title: string;\n subtitle: string;\n price: number;\n};\n\ntype CheckoutMainFormProps = {\n storeId: string;\n contact: CheckoutContactForm;\n onContactChange: (patch: Partial<CheckoutContactForm>) => void;\n billingChoice: BillingChoice;\n onBillingChange: (v: BillingChoice) => void;\n shippingOptions: ShippingOption[];\n shippingLoading: boolean;\n shippingError: string | null;\n selectedShippingKey: string | null;\n onSelectShipping: (key: string) => void;\n paymentMethods: StorePaymentMethod[];\n selectedPaymentCode: string | null;\n selectPaymentMethod: (code: string) => void;\n providerPaymentCompleted: boolean;\n setProviderPaymentCompleted: (value: boolean) => void;\n checkoutPaymentResponse: CartCheckoutResponse | null | undefined;\n checkoutPaymentMethodCode: string | null;\n checkoutPaymentLoading: boolean;\n checkoutPaymentError: string | null;\n onUploadReceipt: (file: File) => Promise<{ url: string }>;\n onPaymentSubmissionResult?: (result: PaymentSubmissionResult) => void;\n currency: string;\n formError: string | null;\n isSaving: boolean;\n onPayNow: (options?: { receiptUrl?: string }) => Promise<unknown>;\n signInHref?: string;\n Link: ComponentType<CheckoutLinkProps>;\n};\n\nexport function CheckoutMainForm({\n storeId,\n contact,\n onContactChange,\n billingChoice,\n onBillingChange,\n shippingOptions,\n shippingLoading,\n shippingError,\n selectedShippingKey,\n onSelectShipping,\n paymentMethods,\n selectedPaymentCode,\n selectPaymentMethod,\n providerPaymentCompleted,\n setProviderPaymentCompleted,\n checkoutPaymentResponse,\n checkoutPaymentMethodCode,\n checkoutPaymentLoading,\n checkoutPaymentError,\n onUploadReceipt,\n onPaymentSubmissionResult,\n currency,\n formError,\n isSaving,\n onPayNow,\n signInHref,\n Link,\n}: CheckoutMainFormProps) {\n const paymentRef = useRef<CheckoutPaymentHandle>(null);\n const [canProceedToPay, setCanProceedToPay] = useState(false);\n\n const {\n validationError,\n validateCheckoutForm,\n clearFieldError,\n getFieldError,\n } = useCheckoutFormValidation(currency);\n\n const displayError = validationError ?? formError;\n\n const handlePayClick = async () => {\n const valid = validateCheckoutForm({\n contact,\n selectedShippingKey,\n shippingOptionsCount: shippingOptions.length,\n selectedPaymentCode,\n paymentMethodsCount: paymentMethods.length,\n });\n if (!valid) return;\n\n const prep = await paymentRef.current?.runPreCheckoutSteps();\n if (!prep?.ok) return;\n await onPayNow({ receiptUrl: prep.receiptUrl });\n };\n\n return (\n <div className=\"ecomiq-checkout-page__form\">\n <section className=\"ecomiq-checkout-page__section\">\n <div className=\"ecomiq-checkout-page__section-head\">\n <h2>Contact</h2>\n {signInHref ? (\n <Link href={signInHref} className=\"ecomiq-checkout-page__link\">\n Sign in\n </Link>\n ) : null}\n </div>\n <CheckoutTextField\n id=\"email\"\n label=\"Email\"\n type=\"email\"\n value={contact.email}\n error={getFieldError(\"email\")}\n onClearError={() => clearFieldError(\"email\")}\n onChange={(v) => onContactChange({ email: v })}\n />\n <label className=\"ecomiq-checkout-page__checkbox\">\n <input\n type=\"checkbox\"\n checked={contact.marketingOptIn}\n onChange={(e) => onContactChange({ marketingOptIn: e.target.checked })}\n />\n <span>Email me with news and offers</span>\n </label>\n </section>\n\n <CheckoutDeliveryForm\n storeId={storeId}\n contact={contact}\n onContactChange={onContactChange}\n getFieldError={getFieldError}\n clearFieldError={clearFieldError}\n />\n\n <section\n className=\"ecomiq-checkout-page__section\"\n id=\"checkout-shipping-method\"\n >\n <h2>Shipping method</h2>\n {getFieldError(\"checkout-shipping-method\") ? (\n <p className=\"ecomiq-checkout-page__field-error-inline\" role=\"alert\">\n {getFieldError(\"checkout-shipping-method\")}\n </p>\n ) : null}\n {shippingLoading ? (\n <p className=\"ecomiq-checkout-page__hint\">Loading shipping options…</p>\n ) : shippingError ? (\n <p className=\"ecomiq-checkout-page__field-error\">{shippingError}</p>\n ) : shippingOptions.length === 0 ? (\n <p className=\"ecomiq-checkout-page__hint\">\n Enter your postal code to see shipping rates.\n </p>\n ) : (\n <div\n className={`ecomiq-checkout-page__options${getFieldError(\"checkout-shipping-method\") ? \" ecomiq-checkout-page__options--error\" : \"\"}`}\n >\n {shippingOptions.map((opt) => (\n <label\n key={opt.key}\n className={`ecomiq-checkout-page__option${selectedShippingKey === opt.key ? \" is-selected\" : \"\"}`}\n >\n <input\n type=\"radio\"\n name=\"shipping\"\n checked={selectedShippingKey === opt.key}\n onChange={() => {\n clearFieldError(\"checkout-shipping-method\");\n onSelectShipping(opt.key);\n }}\n />\n <span className=\"ecomiq-checkout-page__option-body\">\n <span className=\"ecomiq-checkout-page__option-title\">{opt.title}</span>\n <span className=\"ecomiq-checkout-page__option-sub\">{opt.subtitle}</span>\n </span>\n <span className=\"ecomiq-checkout-page__option-price\">\n {formatCurrency(opt.price, currency)}\n </span>\n </label>\n ))}\n </div>\n )}\n </section>\n\n <CheckoutPaymentSection\n ref={paymentRef}\n paymentMethods={paymentMethods}\n selectedPaymentCode={selectedPaymentCode}\n selectPaymentMethod={selectPaymentMethod}\n providerPaymentCompleted={providerPaymentCompleted}\n setProviderPaymentCompleted={setProviderPaymentCompleted}\n checkoutResponse={checkoutPaymentResponse}\n onCanProceedToPayChange={setCanProceedToPay}\n checkoutMethodCode={checkoutPaymentMethodCode}\n loadingCheckout={checkoutPaymentLoading}\n checkoutError={checkoutPaymentError}\n onUploadReceipt={onUploadReceipt}\n onPaymentSubmissionResult={onPaymentSubmissionResult}\n getFieldError={getFieldError}\n clearFieldError={clearFieldError}\n />\n\n <section className=\"ecomiq-checkout-page__section\">\n <h2>Billing address</h2>\n <div className=\"ecomiq-checkout-page__options\">\n <label\n className={`ecomiq-checkout-page__option${billingChoice === \"same_as_shipping\" ? \" is-selected\" : \"\"}`}\n >\n <input\n type=\"radio\"\n name=\"billing\"\n checked={billingChoice === \"same_as_shipping\"}\n onChange={() => onBillingChange(\"same_as_shipping\")}\n />\n <span className=\"ecomiq-checkout-page__option-body\">\n <span className=\"ecomiq-checkout-page__option-title\">Same as shipping address</span>\n </span>\n </label>\n <label\n className={`ecomiq-checkout-page__option${billingChoice === \"different\" ? \" is-selected\" : \"\"}`}\n >\n <input\n type=\"radio\"\n name=\"billing\"\n checked={billingChoice === \"different\"}\n onChange={() => onBillingChange(\"different\")}\n />\n <span className=\"ecomiq-checkout-page__option-body\">\n <span className=\"ecomiq-checkout-page__option-title\">\n Use a different billing address\n </span>\n </span>\n </label>\n </div>\n </section>\n\n {displayError ? (\n <p className=\"ecomiq-checkout-page__field-error\" role=\"alert\">\n {displayError}\n </p>\n ) : null}\n\n <button\n type=\"button\"\n className=\"ecomiq-checkout-page__pay\"\n disabled={isSaving || !canProceedToPay}\n onClick={() => void handlePayClick()}\n >\n {isSaving ? \"Processing…\" : \"Pay now\"}\n </button>\n\n <nav className=\"ecomiq-checkout-page__policies\" aria-label=\"Policies\">\n <a href=\"#\">Refund policy</a>\n <a href=\"#\">Shipping</a>\n <a href=\"#\">Privacy policy</a>\n <a href=\"#\">Terms of service</a>\n </nav>\n </div>\n );\n}\n","\"use client\";\n\nimport { type FormEvent } from \"react\";\nimport { formatCurrency } from \"../../../../core/utils/format-currency\";\nimport type { CartItem } from \"../../../stores/use-cart\";\n\ntype CheckoutOrderSummaryProps = {\n items: CartItem[];\n currency: string;\n subtotal: number;\n shipping: number;\n discount: number;\n tax: number;\n total: number;\n couponCodes: string[];\n couponCode: string;\n couponError: string | null;\n couponBusy: boolean;\n onCouponCodeChange: (value: string) => void;\n onApplyCoupon: () => void;\n onRemoveCoupon: (code: string) => void;\n};\n\nexport function CheckoutOrderSummary({\n items,\n currency,\n subtotal,\n shipping,\n discount,\n tax,\n total,\n couponCodes,\n couponCode,\n couponError,\n couponBusy,\n onCouponCodeChange,\n onApplyCoupon,\n onRemoveCoupon,\n}: CheckoutOrderSummaryProps) {\n const onCouponSubmit = (e: FormEvent) => {\n e.preventDefault();\n onApplyCoupon();\n };\n\n return (\n <aside className=\"ecomiq-checkout-page__summary\">\n <ul className=\"ecomiq-checkout-page__summary-items\">\n {items.map((item) => (\n <li key={item.id} className=\"ecomiq-checkout-page__summary-item\">\n <div className=\"ecomiq-checkout-page__summary-thumb\">\n <div className=\"ecomiq-checkout-page__summary-thumb-image\">\n {item.image ? (\n <img src={item.image} alt=\"\" />\n ) : (\n <span className=\"ecomiq-checkout-page__summary-thumb-ph\" />\n )}\n </div>\n <span className=\"ecomiq-checkout-page__summary-qty\">{item.quantity}</span>\n </div>\n <div className=\"ecomiq-checkout-page__summary-item-body\">\n <p className=\"ecomiq-checkout-page__summary-item-title\">{item.title}</p>\n {(item.variantLabel || item.size) && (\n <p className=\"ecomiq-checkout-page__summary-item-meta\">\n {item.variantLabel ?? item.size}\n </p>\n )}\n </div>\n <p className=\"ecomiq-checkout-page__summary-item-price\">\n {formatCurrency(item.price * item.quantity, currency)}\n </p>\n </li>\n ))}\n </ul>\n\n <form className=\"ecomiq-checkout-page__discount\" onSubmit={onCouponSubmit}>\n <input\n type=\"text\"\n className=\"ecomiq-checkout-page__input\"\n placeholder=\"Discount code or gift card\"\n value={couponCode}\n onChange={(e) => onCouponCodeChange(e.target.value)}\n aria-label=\"Discount code\"\n />\n <button\n type=\"submit\"\n className=\"ecomiq-checkout-page__discount-apply\"\n disabled={!couponCode.trim() || couponBusy}\n >\n Apply\n </button>\n </form>\n {couponError ? (\n <p className=\"ecomiq-checkout-page__field-error\">{couponError}</p>\n ) : null}\n {couponCodes.length > 0 ? (\n <ul className=\"ecomiq-checkout-page__coupon-tags\">\n {couponCodes.map((code) => (\n <li key={code}>\n <span>{code}</span>\n <button type=\"button\" onClick={() => onRemoveCoupon(code)} aria-label={`Remove ${code}`}>\n ×\n </button>\n </li>\n ))}\n </ul>\n ) : null}\n\n <dl className=\"ecomiq-checkout-page__totals\">\n <div className=\"ecomiq-checkout-page__totals-row\">\n <dt>Subtotal</dt>\n <dd>{formatCurrency(subtotal, currency)}</dd>\n </div>\n <div className=\"ecomiq-checkout-page__totals-row\">\n <dt>Shipping</dt>\n <dd>{shipping > 0 ? formatCurrency(shipping, currency) : shipping === 0 ? \"Free\" : \"—\"}</dd>\n </div>\n {discount > 0 ? (\n <div className=\"ecomiq-checkout-page__totals-row\">\n <dt>Discount</dt>\n <dd>-{formatCurrency(discount, currency)}</dd>\n </div>\n ) : null}\n <div className=\"ecomiq-checkout-page__totals-row\">\n <dt>Taxes</dt>\n <dd>{tax > 0 ? formatCurrency(tax, currency) : \"—\"}</dd>\n </div>\n <div className=\"ecomiq-checkout-page__totals-row ecomiq-checkout-page__totals-row--total\">\n <dt>Total</dt>\n <dd>\n <span className=\"ecomiq-checkout-page__total-currency\">{currency}</span>\n {formatCurrency(total, currency)}\n </dd>\n </div>\n </dl>\n </aside>\n );\n}\n","\"use client\";\n\nimport type { CSSProperties, ReactNode } from \"react\";\n\ntype CheckoutPageSkeletonProps = {\n header: ReactNode;\n};\n\nfunction Block({\n className = \"\",\n style,\n}: {\n className?: string;\n style?: CSSProperties;\n}) {\n return (\n <div\n className={`ecomiq-checkout-page__skeleton-block${className ? ` ${className}` : \"\"}`}\n style={style}\n aria-hidden\n />\n );\n}\n\nexport function CheckoutPageSkeleton({ header }: CheckoutPageSkeletonProps) {\n return (\n <div\n className=\"ecomiq-checkout-page ecomiq-checkout-page--skeleton\"\n aria-busy=\"true\"\n aria-label=\"Loading checkout\"\n >\n {header}\n\n <div className=\"ecomiq-checkout-page__layout\">\n <div className=\"ecomiq-checkout-page__main-wrap\">\n <section className=\"ecomiq-checkout-page__section\">\n <div className=\"ecomiq-checkout-page__section-head\">\n <Block className=\"ecomiq-checkout-page__skeleton-title\" />\n <Block className=\"ecomiq-checkout-page__skeleton-link\" />\n </div>\n <Block className=\"ecomiq-checkout-page__skeleton-field\" />\n <Block className=\"ecomiq-checkout-page__skeleton-checkbox\" />\n </section>\n\n <section className=\"ecomiq-checkout-page__section\">\n <Block className=\"ecomiq-checkout-page__skeleton-title\" />\n <Block className=\"ecomiq-checkout-page__skeleton-field\" />\n <div className=\"ecomiq-checkout-page__skeleton-row\">\n <Block className=\"ecomiq-checkout-page__skeleton-field ecomiq-checkout-page__skeleton-field--half\" />\n <Block className=\"ecomiq-checkout-page__skeleton-field ecomiq-checkout-page__skeleton-field--half\" />\n </div>\n <Block className=\"ecomiq-checkout-page__skeleton-field\" />\n <Block className=\"ecomiq-checkout-page__skeleton-field\" />\n <Block className=\"ecomiq-checkout-page__skeleton-field\" />\n <div className=\"ecomiq-checkout-page__skeleton-row\">\n <Block className=\"ecomiq-checkout-page__skeleton-field ecomiq-checkout-page__skeleton-field--third\" />\n <Block className=\"ecomiq-checkout-page__skeleton-field ecomiq-checkout-page__skeleton-field--third\" />\n <Block className=\"ecomiq-checkout-page__skeleton-field ecomiq-checkout-page__skeleton-field--third\" />\n </div>\n <Block className=\"ecomiq-checkout-page__skeleton-field\" />\n </section>\n\n <section className=\"ecomiq-checkout-page__section\">\n <Block className=\"ecomiq-checkout-page__skeleton-title\" />\n <Block className=\"ecomiq-checkout-page__skeleton-option\" />\n <Block className=\"ecomiq-checkout-page__skeleton-option\" />\n </section>\n\n <section className=\"ecomiq-checkout-page__section\">\n <Block className=\"ecomiq-checkout-page__skeleton-title\" />\n <Block className=\"ecomiq-checkout-page__skeleton-option\" />\n <Block className=\"ecomiq-checkout-page__skeleton-option\" />\n </section>\n\n <Block className=\"ecomiq-checkout-page__skeleton-button\" />\n </div>\n\n <div className=\"ecomiq-checkout-page__summary-wrap\">\n <aside className=\"ecomiq-checkout-page__summary\">\n <div className=\"ecomiq-checkout-page__skeleton-summary-item\">\n <Block className=\"ecomiq-checkout-page__skeleton-thumb\" />\n <div className=\"ecomiq-checkout-page__skeleton-summary-body\">\n <Block className=\"ecomiq-checkout-page__skeleton-line\" />\n <Block className=\"ecomiq-checkout-page__skeleton-line ecomiq-checkout-page__skeleton-line--short\" />\n </div>\n <Block className=\"ecomiq-checkout-page__skeleton-price\" />\n </div>\n\n <div className=\"ecomiq-checkout-page__skeleton-coupon\">\n <Block className=\"ecomiq-checkout-page__skeleton-coupon-input\" />\n <Block className=\"ecomiq-checkout-page__skeleton-coupon-btn\" />\n </div>\n\n <div className=\"ecomiq-checkout-page__skeleton-totals\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"ecomiq-checkout-page__skeleton-total-row\">\n <Block className=\"ecomiq-checkout-page__skeleton-line ecomiq-checkout-page__skeleton-line--short\" />\n <Block className=\"ecomiq-checkout-page__skeleton-line ecomiq-checkout-page__skeleton-line--xs\" />\n </div>\n ))}\n <div className=\"ecomiq-checkout-page__skeleton-total-row ecomiq-checkout-page__skeleton-total-row--final\">\n <Block className=\"ecomiq-checkout-page__skeleton-line\" />\n <Block className=\"ecomiq-checkout-page__skeleton-line ecomiq-checkout-page__skeleton-line--price\" />\n </div>\n </div>\n </aside>\n </div>\n </div>\n </div>\n );\n}\n","import type { CartResponse } from \"../../../../core/models/cart\";\nimport type { CartItem } from \"../../../stores/use-cart\";\nimport type { ShippingFormValues } from \"../types\";\n\nexport function mapApiItemsToCartItems(items: unknown[] | undefined): CartItem[] {\n if (!items?.length) return [];\n return items\n .map((raw) => {\n const item = raw as {\n id: string;\n title: string;\n thumbnail?: string | null;\n variantLabel?: string | null;\n quantity: unknown;\n unitPrice: unknown;\n variantId: unknown;\n variantSku?: string | null;\n };\n const price = Number(item.unitPrice);\n const quantity = Number(item.quantity);\n const variantId = String(item.variantId ?? \"\");\n if (!Number.isFinite(price) || !Number.isFinite(quantity) || !variantId) return null;\n return {\n id: item.id,\n title: item.title,\n image: String(item.thumbnail ?? \"\"),\n size: String(item.variantLabel ?? \"—\"),\n price,\n quantity,\n variantId,\n variantSku: item.variantSku ?? undefined,\n variantLabel: item.variantLabel ?? undefined,\n } satisfies CartItem;\n })\n .filter(Boolean) as CartItem[];\n}\n\nexport function shippingValuesFromCartAddress(\n cartData: CartResponse,\n): ShippingFormValues | undefined {\n const addr = cartData.shippingAddress as {\n address1: string;\n postalCode?: string | null;\n countryCode?: string;\n province?: string | null;\n district?: string | null;\n city?: string;\n geo?: {\n departmentCode?: string | null;\n provinceCode?: string | null;\n districtCode?: string | null;\n } | null;\n } | null;\n if (!addr) return undefined;\n const geo = addr.geo;\n return {\n address: addr.address1,\n zipCode: addr.postalCode ?? \"\",\n countryCode: addr.countryCode ?? \"PE\",\n departmentCode: geo?.departmentCode ?? \"\",\n departmentName: \"\",\n provinceCode: geo?.provinceCode ?? \"\",\n provinceName: addr.province ?? \"\",\n districtCode: geo?.districtCode ?? \"\",\n districtName: addr.district ?? addr.city ?? \"\",\n };\n}\n","import type { QueryClient } from \"@tanstack/react-query\";\nimport type {\n CartCheckoutReadResponse,\n CartResponse,\n} from \"../../../../core/models/cart\";\nimport type { CartItem } from \"../../../stores/use-cart\";\nimport { mapApiItemsToCartItems } from \"./cart-mappers\";\n\nexport const checkoutReadQueryKey = (cartId: string) =>\n [\"storefront\", \"cart\", cartId, \"checkout\"] as const;\n\nexport type CartLineToPush = {\n variantId: string;\n quantity: number;\n};\n\nexport type CartReconcileAction =\n | { action: \"add\"; variantId: string; quantity: number }\n | { action: \"update\"; itemId: string; quantity: number }\n | { action: \"remove\"; itemId: string };\n\nexport function cartItemsSignature(items: CartItem[]): string {\n return items\n .map((i) => `${i.variantId ?? i.id}:${i.quantity}`)\n .sort()\n .join(\"|\");\n}\n\nexport function apiCartItemsFromResponse(\n cart: CartResponse | undefined,\n): CartItem[] {\n return mapApiItemsToCartItems(cart?.items as unknown[] | undefined);\n}\n\nexport function groupCartQuantitiesByVariant(\n items: CartItem[],\n): Map<string, number> {\n const map = new Map<string, number>();\n for (const item of items) {\n const variantId = item.variantId ?? item.id;\n map.set(variantId, (map.get(variantId) ?? 0) + Math.max(0, item.quantity));\n }\n return map;\n}\n\nfunction groupApiLinesByVariant(items: CartItem[]): Map<string, CartItem[]> {\n const map = new Map<string, CartItem[]>();\n for (const item of items) {\n const variantId = item.variantId ?? item.id;\n const lines = map.get(variantId) ?? [];\n lines.push(item);\n map.set(variantId, lines);\n }\n return map;\n}\n\n/**\n * Acciones para alinear el carrito del API con el store local (fuente de verdad).\n * Aplica removes/updates antes que adds.\n */\nexport function findCartReconciliationActions(\n local: CartItem[],\n api: CartItem[],\n): CartReconcileAction[] {\n const actions: CartReconcileAction[] = [];\n const localQty = groupCartQuantitiesByVariant(local);\n const apiLinesByVariant = groupApiLinesByVariant(api);\n const variantIds = new Set([\n ...localQty.keys(),\n ...apiLinesByVariant.keys(),\n ]);\n\n for (const variantId of variantIds) {\n const targetQty = localQty.get(variantId) ?? 0;\n const apiLines = apiLinesByVariant.get(variantId) ?? [];\n const apiQty = apiLines.reduce((sum, line) => sum + line.quantity, 0);\n\n if (targetQty > apiQty) {\n actions.push({\n action: \"add\",\n variantId,\n quantity: targetQty - apiQty,\n });\n continue;\n }\n\n if (targetQty >= apiQty) continue;\n\n let excess = apiQty - targetQty;\n for (const line of [...apiLines].reverse()) {\n if (excess <= 0) break;\n if (line.quantity <= excess) {\n actions.push({ action: \"remove\", itemId: line.id });\n excess -= line.quantity;\n } else {\n actions.push({\n action: \"update\",\n itemId: line.id,\n quantity: line.quantity - excess,\n });\n excess = 0;\n }\n }\n }\n\n return actions;\n}\n\n/** Líneas del store local que faltan en el API o tienen mayor cantidad. */\nexport function findLocalCartLinesToPush(\n local: CartItem[],\n api: CartItem[],\n): CartLineToPush[] {\n return findCartReconciliationActions(local, api)\n .filter((action) => action.action === \"add\")\n .map((action) => ({\n variantId: action.variantId,\n quantity: action.quantity,\n }));\n}\n\nexport function areCartSignaturesEqual(a: CartItem[], b: CartItem[]): boolean {\n return cartItemsSignature(a) === cartItemsSignature(b);\n}\n\n/** Firma del carrito local + token (detectar cambios cross-tab en checkout). */\nexport function cartSessionSignature(\n cartTokenId: string | null | undefined,\n items: CartItem[],\n): string {\n return `${cartTokenId ?? \"\"}|${cartItemsSignature(items)}`;\n}\n\nexport function readCheckoutLineCount(\n queryClient: QueryClient,\n cartId: string,\n): number {\n const data = queryClient.getQueryData<CartCheckoutReadResponse>(\n checkoutReadQueryKey(cartId),\n );\n const raw = data?.cart?.items;\n return Array.isArray(raw) ? raw.length : 0;\n}\n\n/** Lee `status` del carrito devuelto por el API de checkout. */\nexport function readCartCheckoutStatus(\n cart: CartResponse | undefined,\n): string | null {\n if (!cart) return null;\n const status = cart.status ?? null;\n return typeof status === \"string\" && status.trim() ? status.trim() : null;\n}\n\n/**\n * Carrito en checkout ya convertido en pedido: el API sigue en `inProgress` pero el\n * store local ya no tiene líneas (p. ej. tras pagar y vaciar la bolsa).\n */\nexport function isCheckoutCartAlreadyPurchased(\n cart: CartResponse | undefined,\n localCartItemCount: number,\n): boolean {\n if (localCartItemCount > 0) return false;\n const status = readCartCheckoutStatus(cart);\n if (!status) return false;\n return status.toLowerCase() === \"inprogress\";\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useCart } from \"../../../stores/use-cart\";\nimport { cartSessionSignature } from \"../lib/cart-sync\";\n\ntype UseCartListenerOptions = {\n cartId: string;\n enabled: boolean;\n isReconciling: boolean;\n checkoutReady: boolean;\n};\n\n/**\n * Detecta cambios del carrito local hechos en otra pestaña (persist + evento `storage`).\n * Tras el baseline inicial del checkout, cualquier divergencia pide recargar la página.\n */\nexport function useCartListener({\n cartId,\n enabled,\n isReconciling,\n checkoutReady,\n}: UseCartListenerOptions) {\n const localCart = useCart((s) => s.cart);\n const cartTokenId = useCart((s) => s.cartTokenId);\n const [cartChangedExternally, setCartChangedExternally] = useState(false);\n const baselineRef = useRef<string | null>(null);\n\n useEffect(() => {\n baselineRef.current = null;\n setCartChangedExternally(false);\n }, [cartId]);\n\n useEffect(() => {\n if (!enabled || !checkoutReady || isReconciling) return;\n const sig = cartSessionSignature(cartTokenId ?? cartId, localCart);\n if (baselineRef.current === null) {\n baselineRef.current = sig;\n return;\n }\n if (sig !== baselineRef.current) {\n setCartChangedExternally(true);\n }\n }, [\n cartId,\n cartTokenId,\n checkoutReady,\n enabled,\n isReconciling,\n localCart,\n ]);\n\n const reloadCheckout = useCallback(() => {\n if (typeof window !== \"undefined\") {\n window.location.reload();\n }\n }, []);\n\n return {\n cartChangedExternally,\n reloadCheckout,\n };\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { useShallow } from \"zustand/shallow\";\nimport type {\n CartCheckoutReadResponse,\n CartResponse,\n ShippingOptionGroup,\n ShippingRate,\n} from \"../../../../core/models/cart\";\nimport type { StorePaymentMethod, ShippingOptionSelection } from \"../types\";\nimport { useStoreCart } from \"../../../shell/hooks/use-store-cart\";\nimport { useCart } from \"../../../stores/use-cart\";\nimport { useStore } from \"../../../stores/use-store\";\nimport { shippingValuesFromCartAddress } from \"../lib/cart-mappers\";\nimport {\n apiCartItemsFromResponse,\n areCartSignaturesEqual,\n cartItemsSignature,\n checkoutReadQueryKey,\n findCartReconciliationActions,\n isCheckoutCartAlreadyPurchased,\n} from \"../lib/cart-sync\";\nimport { methodUsesProviderCheckoutUi } from \"../lib/checkout-payment-method\";\nimport { useCartListener } from \"./use-cart-listener\";\n\nexport type CheckoutContactForm = {\n email: string;\n marketingOptIn: boolean;\n firstName: string;\n lastName: string;\n company: string;\n address: string;\n address2: string;\n /** Distrito (nombre); en Perú se sincroniza con districtName. */\n city: string;\n /** Provincia (nombre); en Perú se sincroniza con provinceName. */\n province: string;\n postalCode: string;\n phone: string;\n countryCode: string;\n departmentCode: string;\n departmentName: string;\n provinceCode: string;\n provinceName: string;\n districtCode: string;\n districtName: string;\n};\n\nexport type BillingChoice = \"same_as_shipping\" | \"different\";\n\nexport function useCheckoutSession(cartId: string) {\n const queryClient = useQueryClient();\n const storeId = useStore((s) => s.data?.store?.id ?? \"\");\n const currency = useStore((s) => s.data?.store?.currency ?? \"PEN\");\n\n const { setCartTokenId, clearCartSession, cart: localCart } = useCart(\n useShallow((s) => ({\n setCartTokenId: s.setCartTokenId,\n clearCartSession: s.clearCartSession,\n cart: s.cart,\n })),\n );\n\n const [checkoutAlreadyPurchased, setCheckoutAlreadyPurchased] = useState(false);\n const skipCartTokenBindRef = useRef(false);\n\n useEffect(() => {\n skipCartTokenBindRef.current = false;\n setCheckoutAlreadyPurchased(false);\n }, [cartId]);\n\n const {\n useGetCartCheckout,\n useUpdateCartBuyer,\n useUpdateCartAddresses,\n useGetShippingOptions,\n usePutCartShippingMethod,\n useCheckoutCart,\n useAddCartCoupon,\n useRemoveCartCoupon,\n useAddCartItem,\n useUpdateCartItem,\n useDeleteCartItem,\n useUploadPaymentReceipt,\n } = useStoreCart();\n\n const checkoutQuery = useGetCartCheckout(cartId);\n const updateBuyer = useUpdateCartBuyer();\n const updateAddresses = useUpdateCartAddresses();\n const putShippingMethod = usePutCartShippingMethod();\n const checkoutCartMutation = useCheckoutCart();\n const addCartCouponMutation = useAddCartCoupon();\n const removeCartCouponMutation = useRemoveCartCoupon();\n const addCartItemMutation = useAddCartItem();\n const updateCartItemMutation = useUpdateCartItem();\n const deleteCartItemMutation = useDeleteCartItem();\n const uploadPaymentReceiptMutation = useUploadPaymentReceipt();\n\n const cartData = checkoutQuery.data?.cart;\n const paymentMethods = checkoutQuery.data?.paymentMethods?.methods ?? [];\n\n useEffect(() => {\n if (!checkoutQuery.isSuccess || !cartData) return;\n if (!isCheckoutCartAlreadyPurchased(cartData, localCart.length)) return;\n if (skipCartTokenBindRef.current) return;\n\n skipCartTokenBindRef.current = true;\n setCheckoutAlreadyPurchased(true);\n clearCartSession();\n }, [\n cartData,\n checkoutQuery.isSuccess,\n clearCartSession,\n localCart.length,\n ]);\n\n useEffect(() => {\n if (skipCartTokenBindRef.current) return;\n setCartTokenId(cartId);\n }, [cartId, setCartTokenId]);\n\n const [contact, setContact] = useState<CheckoutContactForm>({\n email: \"\",\n marketingOptIn: true,\n firstName: \"\",\n lastName: \"\",\n company: \"\",\n address: \"\",\n address2: \"\",\n city: \"\",\n province: \"\",\n postalCode: \"\",\n phone: \"\",\n countryCode: \"PE\",\n departmentCode: \"\",\n departmentName: \"\",\n provinceCode: \"\",\n provinceName: \"\",\n districtCode: \"\",\n districtName: \"\",\n });\n\n const [billingChoice, setBillingChoice] = useState<BillingChoice>(\"same_as_shipping\");\n const [selectedShippingKey, setSelectedShippingKey] = useState<string | null>(null);\n const [selectedPaymentCode, setSelectedPaymentCode] = useState<string | null>(null);\n const [providerPaymentCompleted, setProviderPaymentCompleted] = useState(false);\n const [couponCode, setCouponCode] = useState(\"\");\n const [couponError, setCouponError] = useState<string | null>(null);\n const [formError, setFormError] = useState<string | null>(null);\n const [isReconciling, setIsReconciling] = useState(false);\n\n const hydratedRef = useRef(false);\n useEffect(() => {\n if (!cartData || hydratedRef.current) return;\n hydratedRef.current = true;\n const ship = shippingValuesFromCartAddress(cartData);\n setContact((c) => ({\n ...c,\n email: cartData.email ?? c.email,\n firstName: cartData.firstName ?? c.firstName,\n lastName: cartData.lastName ?? c.lastName,\n phone: cartData.phone ?? c.phone,\n address: ship?.address ?? c.address,\n postalCode: ship?.zipCode ?? c.postalCode,\n province: ship?.provinceName ?? c.province,\n city: ship?.districtName ?? c.city,\n countryCode: ship?.countryCode ?? c.countryCode,\n departmentCode: ship?.departmentCode ?? c.departmentCode,\n departmentName: ship?.departmentName ?? c.departmentName,\n provinceCode: ship?.provinceCode ?? c.provinceCode,\n provinceName: ship?.provinceName ?? c.provinceName,\n districtCode: ship?.districtCode ?? c.districtCode,\n districtName: ship?.districtName ?? c.districtName,\n }));\n }, [cartData]);\n\n const postalCodeForRates = contact.postalCode.trim();\n const shippingOptionsQuery = useGetShippingOptions(\n cartId,\n postalCodeForRates || undefined,\n !!postalCodeForRates,\n );\n\n const shippingFlat = useMemo(() => {\n const out: {\n key: string;\n group: ShippingOptionGroup;\n rate: ShippingRate;\n }[] = [];\n for (const group of shippingOptionsQuery.data?.groups ?? []) {\n for (const rate of group.rates ?? []) {\n out.push({\n key: `${group.sellerId ?? \"\"}::${rate.rateId}`,\n group,\n rate,\n });\n }\n }\n return out;\n }, [shippingOptionsQuery.data?.groups]);\n\n const apiCartItems = useMemo(\n () => apiCartItemsFromResponse(cartData),\n [cartData],\n );\n\n const cartsReconciled = useMemo(\n () => areCartSignaturesEqual(localCart, apiCartItems),\n [localCart, apiCartItems],\n );\n\n const uiCartItems = useMemo(() => {\n if (cartsReconciled && apiCartItems.length > 0) return apiCartItems;\n if (localCart.length > 0) return localCart;\n return apiCartItems;\n }, [apiCartItems, cartsReconciled, localCart]);\n\n const reconcileAttemptRef = useRef<string | null>(null);\n const isReconcilingRef = useRef(false);\n\n const localSubtotal = useMemo(\n () => localCart.reduce((sum, item) => sum + item.price * item.quantity, 0),\n [localCart],\n );\n\n const subtotal = cartsReconciled\n ? (cartData?.totals?.subtotal ?? localSubtotal)\n : localSubtotal;\n const shipping = cartsReconciled ? (cartData?.totals?.shippingTotal ?? 0) : 0;\n const discount = cartsReconciled ? (cartData?.totals?.discountTotal ?? 0) : 0;\n const tax = cartsReconciled ? (cartData?.totals?.taxTotal ?? 0) : 0;\n const total = cartsReconciled\n ? (cartData?.totals?.total ?? subtotal + shipping + tax - discount)\n : localSubtotal;\n\n const mergeCartIntoCheckoutCache = useCallback(\n (next: CartResponse) => {\n queryClient.setQueryData<CartCheckoutReadResponse>(\n checkoutReadQueryKey(cartId),\n (prev) =>\n !prev\n ? { cart: next, paymentMethods: { methods: [] } }\n : { ...prev, cart: next },\n );\n },\n [queryClient, cartId],\n );\n\n useEffect(() => {\n reconcileAttemptRef.current = null;\n }, [cartId]);\n\n useEffect(() => {\n if (!checkoutQuery.isSuccess || !cartData) return;\n if (isReconcilingRef.current) return;\n\n const apiItems = apiCartItemsFromResponse(cartData);\n if (localCart.length === 0 && apiItems.length === 0) return;\n if (areCartSignaturesEqual(localCart, apiItems)) return;\n\n const reconcileActions = findCartReconciliationActions(localCart, apiItems);\n if (reconcileActions.length === 0) return;\n\n const attemptKey = `${cartId}::${cartItemsSignature(localCart)}::${cartItemsSignature(apiItems)}`;\n if (reconcileAttemptRef.current === attemptKey) return;\n\n reconcileAttemptRef.current = attemptKey;\n isReconcilingRef.current = true;\n setIsReconciling(true);\n\n void (async () => {\n try {\n const applyCartResponse = (updatedCart: CartResponse) => {\n mergeCartIntoCheckoutCache(updatedCart);\n };\n\n for (const action of reconcileActions) {\n if (action.action === \"remove\" || action.action === \"update\") {\n try {\n const updatedCart =\n action.action === \"remove\"\n ? await deleteCartItemMutation.mutateAsync({\n cartId,\n itemId: action.itemId,\n })\n : await updateCartItemMutation.mutateAsync({\n cartId,\n itemId: action.itemId,\n data: { quantity: action.quantity },\n });\n applyCartResponse(updatedCart);\n } catch {\n /* el API puede rechazar líneas inválidas o stock */\n }\n }\n }\n\n for (const action of reconcileActions) {\n if (action.action !== \"add\") continue;\n try {\n const updatedCart = await addCartItemMutation.mutateAsync({\n cartId,\n variantId: action.variantId,\n quantity: action.quantity,\n });\n applyCartResponse(updatedCart);\n } catch {\n /* el API puede rechazar variantes inválidas o stock */\n }\n }\n\n await checkoutQuery.refetch();\n } finally {\n isReconcilingRef.current = false;\n setIsReconciling(false);\n }\n })();\n }, [\n addCartItemMutation,\n cartData,\n cartId,\n checkoutQuery,\n deleteCartItemMutation,\n localCart,\n mergeCartIntoCheckoutCache,\n updateCartItemMutation,\n ]);\n\n const saveContactAndDelivery = useCallback(async () => {\n setFormError(null);\n const buyerCart = await updateBuyer.mutateAsync({\n cartId,\n data: {\n email: contact.email,\n firstName: contact.firstName,\n lastName: contact.lastName,\n phone: contact.phone,\n },\n });\n mergeCartIntoCheckoutCache(buyerCart);\n\n const countryCode = (contact.countryCode || \"PE\").toUpperCase();\n const districtName = contact.districtName || contact.city;\n const provinceName = contact.provinceName || contact.province;\n const baseAddress = {\n name: contact.address,\n address1: contact.address,\n city: districtName,\n countryCode,\n company: contact.company || null,\n address2: contact.address2 || null,\n province: provinceName,\n postalCode: contact.postalCode,\n district: districtName,\n phone: contact.phone || null,\n latitude: null,\n longitude: null,\n geo: {\n departmentCode: contact.departmentCode || \"\",\n provinceCode: contact.provinceCode || \"\",\n districtCode: contact.districtCode || \"\",\n },\n };\n\n const updatedCart = await updateAddresses.mutateAsync({\n cartId,\n data: {\n shippingAddress: baseAddress,\n billingAddress:\n billingChoice === \"same_as_shipping\" ? baseAddress : baseAddress,\n },\n });\n mergeCartIntoCheckoutCache(updatedCart);\n await checkoutQuery.refetch();\n }, [\n billingChoice,\n cartId,\n contact,\n mergeCartIntoCheckoutCache,\n updateAddresses,\n updateBuyer,\n checkoutQuery,\n ]);\n\n const confirmShipping = useCallback(\n async (selection: ShippingOptionSelection) => {\n const updatedCart = await putShippingMethod.mutateAsync({\n cartId,\n data: {\n rateId: selection.rate.rateId,\n shippingMethodId: selection.rate.shippingMethodId,\n serviceCode: selection.rate.serviceCode ?? null,\n sellerId: selection.group.sellerId ?? null,\n shippingProfileId: selection.group.shippingProfileId ?? null,\n locationId: null,\n pickupPointId: null,\n scheduledDate: null,\n scheduledTime: null,\n },\n });\n mergeCartIntoCheckoutCache(updatedCart);\n },\n [cartId, mergeCartIntoCheckoutCache, putShippingMethod],\n );\n\n const handleApplyCoupon = useCallback(async () => {\n const code = couponCode.trim();\n if (!code) return;\n setCouponError(null);\n try {\n const nextCart = await addCartCouponMutation.mutateAsync({ cartId, data: { code } });\n mergeCartIntoCheckoutCache(nextCart);\n setCouponCode(\"\");\n } catch (error) {\n setCouponError(error instanceof Error ? error.message : \"No se pudo aplicar el cupón.\");\n }\n }, [addCartCouponMutation, cartId, couponCode, mergeCartIntoCheckoutCache]);\n\n const handleRemoveCoupon = useCallback(\n async (code: string) => {\n setCouponError(null);\n try {\n const nextCart = await removeCartCouponMutation.mutateAsync({ cartId, code });\n mergeCartIntoCheckoutCache(nextCart);\n } catch (error) {\n setCouponError(error instanceof Error ? error.message : \"No se pudo remover el cupón.\");\n }\n },\n [cartId, mergeCartIntoCheckoutCache, removeCartCouponMutation],\n );\n\n const externalRef = `checkout-${cartId}`;\n const checkoutCartMutate = checkoutCartMutation.mutate;\n const checkoutCartMutateAsync = checkoutCartMutation.mutateAsync;\n const checkoutPaymentInitKeyRef = useRef<string | null>(null);\n\n useEffect(() => {\n checkoutPaymentInitKeyRef.current = null;\n }, [cartId]);\n\n const initProviderCheckout = useCallback(\n (paymentMethodCode: string) => {\n const method = paymentMethods.find((m) => m.code === paymentMethodCode);\n if (!method || !methodUsesProviderCheckoutUi(method)) return;\n\n const dedupeKey = `${cartId}:${paymentMethodCode}`;\n if (checkoutPaymentInitKeyRef.current === dedupeKey) return;\n checkoutPaymentInitKeyRef.current = dedupeKey;\n\n checkoutCartMutate({\n cartId,\n data: { paymentMethodCode, externalRef },\n });\n },\n [cartId, checkoutCartMutate, externalRef, paymentMethods],\n );\n\n const selectPaymentMethod = useCallback(\n (paymentMethodCode: string) => {\n setSelectedPaymentCode(paymentMethodCode);\n setProviderPaymentCompleted(false);\n initProviderCheckout(paymentMethodCode);\n },\n [initProviderCheckout],\n );\n\n const payNow = useCallback(\n async (options?: { receiptUrl?: string }) => {\n setFormError(null);\n try {\n await saveContactAndDelivery();\n if (selectedShippingKey) {\n const picked = shippingFlat.find((o) => o.key === selectedShippingKey);\n if (picked) await confirmShipping({ group: picked.group, rate: picked.rate });\n }\n const code =\n selectedPaymentCode ?? (paymentMethods[0] as StorePaymentMethod | undefined)?.code;\n if (!code) {\n setFormError(\"Selecciona un método de pago.\");\n return;\n }\n const method = paymentMethods.find((m) => m.code === code);\n const usesProviderUi = method ? methodUsesProviderCheckoutUi(method) : false;\n\n if (usesProviderUi) {\n if (!providerPaymentCompleted) {\n setFormError(\"Completa el pago con Stripe o Mercado Pago antes de continuar.\");\n return;\n }\n const existing = checkoutCartMutation.data;\n const postedCode =\n checkoutCartMutation.variables?.data.paymentMethodCode ?? null;\n if (existing && postedCode === code) {\n return existing;\n }\n }\n\n const result = await checkoutCartMutateAsync({\n cartId,\n data: {\n paymentMethodCode: code,\n externalRef,\n ...(options?.receiptUrl ? { receiptUrl: options.receiptUrl } : {}),\n },\n });\n return result;\n } catch (error) {\n setFormError(error instanceof Error ? error.message : \"No se pudo completar el pago.\");\n throw error;\n }\n },\n [\n checkoutCartMutation.data,\n checkoutCartMutation.variables?.data.paymentMethodCode,\n confirmShipping,\n checkoutCartMutateAsync,\n cartId,\n externalRef,\n paymentMethods,\n providerPaymentCompleted,\n saveContactAndDelivery,\n selectedPaymentCode,\n selectedShippingKey,\n shippingFlat,\n ],\n );\n\n const checkoutReady =\n checkoutQuery.isSuccess && !checkoutQuery.isLoading && !isReconciling;\n\n const { cartChangedExternally, reloadCheckout } = useCartListener({\n cartId,\n enabled: Boolean(cartId.trim()),\n isReconciling,\n checkoutReady,\n });\n\n return {\n storeId,\n currency,\n cartId,\n checkoutQuery,\n cartData,\n uiCartItems,\n cartsReconciled,\n isReconciling,\n cartChangedExternally,\n checkoutAlreadyPurchased,\n reloadCheckout,\n contact,\n setContact,\n billingChoice,\n setBillingChoice,\n selectedShippingKey,\n setSelectedShippingKey,\n selectedPaymentCode,\n setSelectedPaymentCode,\n selectPaymentMethod,\n providerPaymentCompleted,\n setProviderPaymentCompleted,\n payNow,\n couponCode,\n setCouponCode,\n couponError,\n formError,\n handleApplyCoupon,\n handleRemoveCoupon,\n shippingOptionsQuery,\n shippingFlat,\n paymentMethods,\n subtotal,\n shipping,\n discount,\n tax,\n total,\n checkoutCartMutation,\n checkoutPaymentResponse: checkoutCartMutation.data,\n checkoutPaymentMethodCode:\n checkoutCartMutation.variables?.data.paymentMethodCode ?? null,\n checkoutPaymentLoading: checkoutCartMutation.isPending,\n checkoutPaymentError: checkoutCartMutation.isError\n ? \"Tuvimos problemas al cargar el método de pago. Inténtalo de nuevo.\"\n : null,\n uploadPaymentReceipt: uploadPaymentReceiptMutation.mutateAsync,\n addCartCouponMutation,\n removeCartCouponMutation,\n clearCartSession,\n saveContactAndDelivery,\n isSaving:\n isReconciling ||\n updateBuyer.isPending ||\n updateAddresses.isPending ||\n putShippingMethod.isPending ||\n uploadPaymentReceiptMutation.isPending ||\n checkoutCartMutation.isPending,\n };\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useMemo, type ComponentType } from \"react\";\nimport { toast } from \"sonner\";\nimport type { PaymentSubmissionResult } from \"../../components/checkout/payment-providers/payment-submission-types\";\nimport { useStore } from \"../../stores/use-store\";\nimport { CheckoutMainForm } from \"./components/checkout-main-form\";\nimport { CheckoutOrderSummary } from \"./components/checkout-order-summary\";\nimport { CheckoutPageSkeleton } from \"./components/checkout-page-skeleton\";\nimport { useCheckoutSession } from \"./hooks/use-checkout-session\";\nimport type { CheckoutLinkProps, CheckoutPageProps } from \"./types\";\nimport \"./checkout-page.css\";\n\nfunction DefaultLink({ href, className, children }: CheckoutLinkProps) {\n return (\n <a href={href} className={className}>\n {children}\n </a>\n );\n}\n\n/**\n * Checkout estilo Shopify — full page, `cartId` por URL.\n * Requiere `EcomiqProvider` y proxy `/api/store`.\n *\n * @example Next.js — `app/checkout/[cartId]/page.tsx`\n * ```tsx\n * \"use client\";\n * import { use } from \"react\";\n * import Link from \"next/link\";\n * import { CheckoutPage } from \"@ecomiq/storefront/react\";\n *\n * export default function Page({ params }: { params: Promise<{ cartId: string }> }) {\n * const { cartId } = use(params);\n * return <CheckoutPage cartId={cartId} Link={Link} signInHref=\"/account/login\" />;\n * }\n * ```\n */\nexport function CheckoutPage({\n cartId,\n storeName: storeNameProp,\n logoUrl,\n logoHref = \"/\",\n signInHref,\n homeHref = \"/\",\n onPaymentSuccess,\n getProcessingUrl,\n Link: LinkComponent = DefaultLink as ComponentType<CheckoutLinkProps>,\n}: CheckoutPageProps) {\n const Link = LinkComponent;\n const brandingName = useStore((s) => s.data?.store?.name);\n const logoFromCms = useStore(\n (s) => s.data?.cms?.settings?.branding?.logoUrl as string | undefined,\n );\n const storeName = storeNameProp ?? brandingName ?? \"Store\";\n const resolvedLogo = logoUrl ?? logoFromCms;\n\n const session = useCheckoutSession(cartId);\n\n const {\n shippingFlat,\n selectedShippingKey,\n setSelectedShippingKey,\n paymentMethods,\n selectedPaymentCode,\n selectPaymentMethod,\n } = session;\n\n useEffect(() => {\n if (!shippingFlat.length || selectedShippingKey) return;\n setSelectedShippingKey(shippingFlat[0]!.key);\n }, [shippingFlat, selectedShippingKey, setSelectedShippingKey]);\n\n useEffect(() => {\n if (!paymentMethods.length || selectedPaymentCode) return;\n const first =\n paymentMethods.find((m) => m.isDefault) ?? paymentMethods[0];\n if (first) selectPaymentMethod(first.code);\n }, [paymentMethods, selectedPaymentCode, selectPaymentMethod]);\n\n const shippingOptions = useMemo(\n () =>\n session.shippingFlat.map((o) => ({\n key: o.key,\n title: o.rate.name ?? \"Shipping\",\n subtitle:\n o.rate.description ??\n (o.rate.estimatedDeliveryDays != null\n ? `${o.rate.estimatedDeliveryDays} business days`\n : \"Standard delivery\"),\n price: Number(o.rate.price) || 0,\n })),\n [session.shippingFlat],\n );\n\n const handlePaymentSubmissionResult = useCallback(\n (result: PaymentSubmissionResult) => {\n if (result.kind === \"success\") {\n session.clearCartSession();\n const url = getProcessingUrl?.(cartId, result.transactionId);\n if (url && typeof window !== \"undefined\") {\n window.location.assign(url);\n }\n return;\n }\n if (result.kind === \"redirect\") {\n session.clearCartSession();\n window.location.assign(result.url);\n return;\n }\n toast.error(result.message);\n },\n [cartId, getProcessingUrl, session],\n );\n\n const handlePayNow = async (options?: { receiptUrl?: string }) => {\n try {\n const result = await session.payNow(options);\n if (!result) return;\n session.clearCartSession();\n if (onPaymentSuccess) {\n onPaymentSuccess(result);\n return;\n }\n const url = getProcessingUrl?.(\n cartId,\n result.payment?.transactionId ?? undefined,\n );\n if (url && typeof window !== \"undefined\") {\n window.location.assign(url);\n }\n } catch {\n /* formError set in hook */\n }\n };\n\n if (!cartId.trim()) {\n return (\n <div className=\"ecomiq-checkout-page\">\n <div className=\"ecomiq-checkout-page__state\">\n <h1>Invalid checkout</h1>\n <p>Missing cart ID in the URL.</p>\n </div>\n </div>\n );\n }\n\n const checkoutHeader = (\n <header className=\"ecomiq-checkout-page__top\">\n <Link href={logoHref} className=\"ecomiq-checkout-page__logo\">\n {resolvedLogo ? <img src={resolvedLogo} alt={storeName} /> : storeName}\n </Link>\n </header>\n );\n\n if (session.checkoutQuery.isLoading || session.isReconciling) {\n return <CheckoutPageSkeleton header={checkoutHeader} />;\n }\n\n if (session.checkoutQuery.isError) {\n return (\n <div className=\"ecomiq-checkout-page\">\n {checkoutHeader}\n <div className=\"ecomiq-checkout-page__state\">\n <h1>Checkout unavailable</h1>\n <p>\n {session.checkoutQuery.error?.message ??\n \"Could not load this cart. It may have expired.\"}\n </p>\n <Link href={homeHref} className=\"ecomiq-checkout-page__link\">\n Return to store\n </Link>\n </div>\n </div>\n );\n }\n\n if (session.checkoutAlreadyPurchased) {\n return (\n <div className=\"ecomiq-checkout-page\">\n {checkoutHeader}\n <div className=\"ecomiq-checkout-page__state\">\n <h1>Pedido ya realizado</h1>\n <p>\n Este checkout ya fue completado. Tu bolsa se ha reiniciado para que puedas\n seguir comprando.\n </p>\n <Link href={homeHref} className=\"ecomiq-checkout-page__link\">\n Volver a la tienda\n </Link>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"ecomiq-checkout-page\" data-ecomiq-checkout-page>\n {checkoutHeader}\n\n {session.cartChangedExternally ? (\n <div\n className=\"ecomiq-checkout-page__external-cart-banner\"\n role=\"alert\"\n aria-live=\"polite\"\n >\n <p>\n Tu carrito se acaba de actualizar.\n </p>\n <button\n type=\"button\"\n className=\"ecomiq-checkout-page__external-cart-reload\"\n onClick={session.reloadCheckout}\n >\n Recargar checkout\n </button>\n </div>\n ) : null}\n\n <div className=\"ecomiq-checkout-page__layout\">\n <div className=\"ecomiq-checkout-page__main-wrap\">\n <CheckoutMainForm\n storeId={session.storeId}\n contact={session.contact}\n onContactChange={(patch) =>\n session.setContact((c) => ({ ...c, ...patch }))\n }\n billingChoice={session.billingChoice}\n onBillingChange={session.setBillingChoice}\n shippingOptions={shippingOptions}\n shippingLoading={session.shippingOptionsQuery.isLoading}\n shippingError={\n session.shippingOptionsQuery.isError\n ? (session.shippingOptionsQuery.error?.message ??\n \"Could not load shipping options.\")\n : null\n }\n selectedShippingKey={session.selectedShippingKey}\n onSelectShipping={session.setSelectedShippingKey}\n paymentMethods={session.paymentMethods}\n selectedPaymentCode={session.selectedPaymentCode}\n selectPaymentMethod={session.selectPaymentMethod}\n providerPaymentCompleted={session.providerPaymentCompleted}\n setProviderPaymentCompleted={session.setProviderPaymentCompleted}\n checkoutPaymentResponse={session.checkoutPaymentResponse}\n checkoutPaymentMethodCode={session.checkoutPaymentMethodCode}\n checkoutPaymentLoading={session.checkoutPaymentLoading}\n checkoutPaymentError={session.checkoutPaymentError}\n onUploadReceipt={async (file) => {\n const uploaded = await session.uploadPaymentReceipt({ cartId, file });\n return { url: uploaded.url };\n }}\n onPaymentSubmissionResult={handlePaymentSubmissionResult}\n currency={session.currency}\n formError={session.formError}\n isSaving={session.isSaving || session.cartChangedExternally}\n onPayNow={handlePayNow}\n signInHref={signInHref}\n Link={Link}\n />\n </div>\n\n <div className=\"ecomiq-checkout-page__summary-wrap\">\n <CheckoutOrderSummary\n items={session.uiCartItems}\n currency={session.currency}\n subtotal={session.subtotal}\n shipping={session.shipping}\n discount={session.discount}\n tax={session.tax}\n total={session.total}\n couponCodes={session.cartData?.promotionCodes ?? []}\n couponCode={session.couponCode}\n couponError={session.couponError}\n couponBusy={\n session.addCartCouponMutation.isPending ||\n session.removeCartCouponMutation.isPending\n }\n onCouponCodeChange={session.setCouponCode}\n onApplyCoupon={() => void session.handleApplyCoupon()}\n onRemoveCoupon={(code) => void session.handleRemoveCoupon(code)}\n />\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { useMemo, useState, useCallback, useEffect } from \"react\";\nimport { formatCurrency } from \"../../../../core/utils/format-currency\";\nimport type { StorefrontProductDetail, StorefrontVariant } from \"../../../../core/models/product\";\nimport type { OptionGroup, SelectedOptions } from \"./types\";\n\nfunction buildOptionGroups(variants: StorefrontVariant[]): OptionGroup[] {\n const map = new Map<string, Map<string, string>>();\n for (const v of variants) {\n for (const opt of v.options ?? []) {\n const key = opt.key;\n const name = opt.name ?? key;\n if (!map.has(key)) map.set(key, new Map());\n map.get(key)!.set(opt.value, name);\n }\n }\n return Array.from(map.entries()).map(([key, valueMap]) => ({\n key,\n name: Array.from(valueMap.values())[0] ?? key,\n values: Array.from(valueMap.keys()),\n }));\n}\n\nfunction findVariant(\n variants: StorefrontVariant[],\n selected: SelectedOptions,\n hasConfigurableOptions: boolean\n): StorefrontVariant | null {\n // Producto con variante(s) pero sin opciones (p. ej. options: []): una sola variante implícita\n if (!hasConfigurableOptions && variants.length > 0) {\n return variants[0] ?? null;\n }\n if (Object.keys(selected).length === 0) return null;\n for (const v of variants) {\n const opts = v.options ?? [];\n const match =\n opts.length > 0 &&\n opts.every((o: { key: string; value: string }) => selected[o.key] === o.value);\n if (match) return v;\n }\n return null;\n}\n\nfunction getInitialOptions(\n variants: StorefrontVariant[],\n optionGroups: OptionGroup[]\n): SelectedOptions {\n const first = variants[0];\n if (!first) return {};\n const opts = first.options ?? [];\n const selected: SelectedOptions = {};\n for (const g of optionGroups) {\n const o = opts.find((x: { key: string; value: string }) => x.key === g.key);\n if (o) selected[g.key] = o.value;\n }\n return selected;\n}\n\nexport type ProductVariantSelectorProps = {\n product: StorefrontProductDetail;\n currency?: string;\n features?: string[];\n onVariantChange?: (variant: StorefrontVariant | null, price: number) => void;\n children?: (props: {\n product: StorefrontProductDetail;\n selectedVariant: StorefrontVariant | null;\n displayPrice: number;\n compareAtPrice: number | null | undefined;\n isAvailable: boolean;\n selectedOptions: SelectedOptions;\n }) => React.ReactNode;\n};\n\nexport function ProductVariantSelector({\n product,\n currency = \"USD\",\n features = [],\n onVariantChange,\n children,\n}: ProductVariantSelectorProps) {\n const variants = useMemo(() => product.variants ?? [], [product.variants]);\n const optionGroups = useMemo(() => buildOptionGroups(variants), [variants]);\n const hasConfigurableOptions = optionGroups.length > 0;\n\n const [selectedOptions, setSelectedOptions] = useState<SelectedOptions>(() =>\n getInitialOptions(variants, optionGroups)\n );\n\n const selectedVariant = useMemo(\n () => findVariant(variants, selectedOptions, hasConfigurableOptions),\n [variants, selectedOptions, hasConfigurableOptions]\n );\n\n const displayPrice = selectedVariant?.price ?? product.price ?? 0;\n const compareAtPrice = selectedVariant?.compareAtPrice ?? product.compareAtPrice;\n const isAvailable =\n (selectedVariant ? (selectedVariant.quantity ?? 0) > 0 : product.isAvailable) ?? true;\n\n useEffect(() => {\n onVariantChange?.(selectedVariant, displayPrice);\n }, [selectedVariant, displayPrice, onVariantChange]);\n\n const setOption = useCallback((key: string, value: string) => {\n setSelectedOptions((prev) => ({ ...prev, [key]: value }));\n }, []);\n\n const hasVariants = hasConfigurableOptions;\n\n return (\n <div className=\"space-y-5\">\n <div className=\"flex items-baseline gap-2 flex-wrap\">\n <span\n className=\"inline-flex items-center rounded-md bg-primary/10 px-2.5 py-0.5 text-base font-semibold text-primary\"\n data-testid=\"product-display-price\"\n >\n {formatCurrency(displayPrice, currency)}\n </span>\n {compareAtPrice != null && compareAtPrice > displayPrice && (\n <span className=\"text-sm text-muted-foreground line-through\">\n {formatCurrency(compareAtPrice, currency)}\n </span>\n )}\n </div>\n\n {/* Option groups (Color, Size, etc.) */}\n {hasVariants &&\n optionGroups.map((group) => (\n <div key={group.key} className=\"space-y-2\">\n <span className=\"text-xs font-semibold uppercase tracking-wider text-muted-foreground\">\n {group.name}\n </span>\n <div className=\"flex flex-wrap gap-2\">\n {group.values.map((value) => {\n const isSelected = selectedOptions[group.key] === value;\n const isColorLike =\n group.key.toLowerCase().includes(\"color\") ||\n group.key.toLowerCase().includes(\"colour\");\n return (\n <button\n key={value}\n type=\"button\"\n onClick={() => setOption(group.key, value)}\n className={\n isColorLike\n ? `min-w-[72px] rounded-md border-2 px-3 py-2 text-sm font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2 ${\n isSelected\n ? \"border-primary bg-primary text-foreground\"\n : \"border-border bg-muted/30 text-foreground hover:border-muted-foreground/50\"\n }`\n : `rounded-md border px-3 py-2 text-sm font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2 ${\n isSelected\n ? \"border-primary bg-muted ring-1 ring-primary\"\n : \"border-border bg-transparent text-muted-foreground hover:border-muted-foreground/50 hover:text-foreground\"\n }`\n }\n style={\n isColorLike && isSelected && value.toLowerCase() === \"black\"\n ? { backgroundColor: \"#1a1a1a\", borderColor: \"#1a1a1a\", color: \"#fff\" }\n : isColorLike && value.toLowerCase() === \"white\"\n ? { backgroundColor: \"#fafafa\", color: \"#1a1a1a\", borderColor: \"#e5e5e5\" }\n : undefined\n }\n data-testid={`variant-option-${group.key}-${value}`}\n >\n {value}\n </button>\n );\n })}\n </div>\n </div>\n ))}\n\n {features.length > 0 && (\n <ul className=\"list-disc list-inside space-y-1 text-sm text-muted-foreground\">\n {features.map((f, i) => (\n <li key={i}>{f}</li>\n ))}\n </ul>\n )}\n\n {/* Add to cart slot */}\n {children?.({\n product,\n selectedVariant,\n displayPrice,\n compareAtPrice,\n isAvailable,\n selectedOptions,\n })}\n </div>\n );\n}\n"]}
|