diff --git a/CHANGELOG.md b/CHANGELOG.md index 36c6a5ca4..698ca2ae1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,20 @@ All notable changes to Bambuddy will be documented in this file. +## [0.1.6b] - 2025-12-28 + +### Added +- **Docker printer discovery** - Subnet scanning for discovering printers when running in Docker with `network_mode: host`. Automatically detects Docker environment and shows subnet input field in Add Printer dialog. +- **Printer model mapping** - Discovery now shows friendly model names (X1C, H2D, P1S) instead of raw SSDP codes (BL-P001, O1D, C11). +- **Discovery API tests** - Comprehensive test coverage for discovery endpoints. + +### Changed +- **GitHub issue template** - Added mandatory printer firmware version field and LAN-only mode checkbox for better bug reports. +- **Docker compose** - Clearer comments explaining `network_mode: host` requirement for printer discovery and camera streaming. + +### Fixed +- **Notification module** - Fixed bug where notifications were sent even when printer was offline. + ## [0.1.5] - 2025-12-19 ### Fixed diff --git a/README.md b/README.md index 80b565b49..01fc98d21 100644 --- a/README.md +++ b/README.md @@ -288,7 +288,7 @@ server { > **Note:** WebSocket support is required for real-time printer updates. -**Network Mode Host** (for easier printer discovery): +**Network Mode Host** (required for printer discovery and camera streaming): ```yaml services: @@ -297,6 +297,8 @@ services: network_mode: host ``` +> **Note:** Docker's default bridge networking cannot receive SSDP multicast packets for automatic printer discovery. When using `network_mode: host`, Bambuddy can discover printers via subnet scanning - enter your network range (e.g., `192.168.1.0/24`) in the Add Printer dialog. + #### Manual Installation diff --git a/backend/app/api/routes/discovery.py b/backend/app/api/routes/discovery.py index cc0dec09e..ed3047601 100644 --- a/backend/app/api/routes/discovery.py +++ b/backend/app/api/routes/discovery.py @@ -2,6 +2,7 @@ Printer discovery API endpoints. Provides endpoints for discovering Bambu Lab printers on the local network. +Supports both SSDP discovery (for native installs) and subnet scanning (for Docker). """ import logging @@ -9,7 +10,11 @@ import logging from fastapi import APIRouter from pydantic import BaseModel -from backend.app.services.discovery import discovery_service +from backend.app.services.discovery import ( + discovery_service, + is_running_in_docker, + subnet_scanner, +) logger = logging.getLogger(__name__) router = APIRouter(prefix="/discovery", tags=["discovery"]) @@ -21,6 +26,29 @@ class DiscoveryStatus(BaseModel): running: bool +class DiscoveryInfo(BaseModel): + """Discovery environment info.""" + + is_docker: bool + ssdp_running: bool + scan_running: bool + + +class SubnetScanRequest(BaseModel): + """Request to scan a subnet.""" + + subnet: str # CIDR notation, e.g., "192.168.1.0/24" + timeout: float = 1.0 # Connection timeout per host + + +class SubnetScanStatus(BaseModel): + """Subnet scan status response.""" + + running: bool + scanned: int + total: int + + class DiscoveredPrinterResponse(BaseModel): """Discovered printer response.""" @@ -31,15 +59,25 @@ class DiscoveredPrinterResponse(BaseModel): discovered_at: str | None = None +@router.get("/info", response_model=DiscoveryInfo) +async def get_discovery_info(): + """Get discovery environment info (Docker detection, etc.).""" + return DiscoveryInfo( + is_docker=is_running_in_docker(), + ssdp_running=discovery_service.is_running, + scan_running=subnet_scanner.is_running, + ) + + @router.get("/status", response_model=DiscoveryStatus) async def get_discovery_status(): - """Get the current discovery status.""" + """Get the current SSDP discovery status.""" return DiscoveryStatus(running=discovery_service.is_running) @router.post("/start", response_model=DiscoveryStatus) async def start_discovery(duration: float = 10.0): - """Start printer discovery. + """Start SSDP printer discovery. Args: duration: Discovery duration in seconds (default 10) @@ -50,14 +88,26 @@ async def start_discovery(duration: float = 10.0): @router.post("/stop", response_model=DiscoveryStatus) async def stop_discovery(): - """Stop printer discovery.""" + """Stop SSDP printer discovery.""" await discovery_service.stop() return DiscoveryStatus(running=discovery_service.is_running) @router.get("/printers", response_model=list[DiscoveredPrinterResponse]) async def get_discovered_printers(): - """Get list of discovered printers.""" + """Get list of discovered printers (from both SSDP and subnet scan).""" + # Combine results from both discovery methods + printers = {} + + # Add SSDP discovered printers + for p in discovery_service.discovered_printers: + printers[p.ip_address] = p + + # Add subnet scan discovered printers (may override if same IP) + for p in subnet_scanner.discovered_printers: + if p.ip_address not in printers: + printers[p.ip_address] = p + return [ DiscoveredPrinterResponse( serial=p.serial, @@ -66,5 +116,54 @@ async def get_discovered_printers(): model=p.model, discovered_at=p.discovered_at, ) - for p in discovery_service.discovered_printers + for p in printers.values() ] + + +# Subnet scanning endpoints (for Docker environments) + + +@router.post("/scan", response_model=SubnetScanStatus) +async def start_subnet_scan(request: SubnetScanRequest): + """Start a subnet scan for Bambu printers. + + Use this when running in Docker where SSDP multicast doesn't work. + + Args: + request: Subnet to scan in CIDR notation (e.g., "192.168.1.0/24") + """ + # Start scan in background + import asyncio + + asyncio.create_task(subnet_scanner.scan_subnet(request.subnet, request.timeout)) + + # Return immediate status + scanned, total = subnet_scanner.progress + return SubnetScanStatus( + running=subnet_scanner.is_running, + scanned=scanned, + total=total, + ) + + +@router.get("/scan/status", response_model=SubnetScanStatus) +async def get_scan_status(): + """Get the current subnet scan status.""" + scanned, total = subnet_scanner.progress + return SubnetScanStatus( + running=subnet_scanner.is_running, + scanned=scanned, + total=total, + ) + + +@router.post("/scan/stop", response_model=SubnetScanStatus) +async def stop_subnet_scan(): + """Stop the current subnet scan.""" + subnet_scanner.stop() + scanned, total = subnet_scanner.progress + return SubnetScanStatus( + running=subnet_scanner.is_running, + scanned=scanned, + total=total, + ) diff --git a/backend/app/services/discovery.py b/backend/app/services/discovery.py index edd2b2a89..3142f7058 100644 --- a/backend/app/services/discovery.py +++ b/backend/app/services/discovery.py @@ -1,21 +1,47 @@ """ -Bambu Lab printer discovery service using SSDP. +Bambu Lab printer discovery service using SSDP and subnet scanning. Bambu Lab printers advertise themselves via SSDP (Simple Service Discovery Protocol) on the local network. This service listens for these advertisements and provides a list of discovered printers. + +For Docker environments where SSDP multicast doesn't work, subnet scanning is +available as an alternative discovery method. """ import asyncio +import ipaddress import logging +import os import re import socket import struct from dataclasses import dataclass from datetime import datetime +from pathlib import Path logger = logging.getLogger(__name__) + +def is_running_in_docker() -> bool: + """Detect if we're running inside a Docker container.""" + # Check for .dockerenv file + if Path("/.dockerenv").exists(): + return True + + # Check cgroup for docker/containerd + try: + with open("/proc/1/cgroup") as f: + content = f.read() + if "docker" in content or "containerd" in content or "kubepods" in content: + return True + except (FileNotFoundError, PermissionError): + pass + + # Check for container environment variable + return bool(os.environ.get("CONTAINER") or os.environ.get("DOCKER_CONTAINER")) + + # SSDP multicast address - Bambu uses port 2021, not standard 1900 SSDP_ADDR = "239.255.255.250" SSDP_PORT = 2021 # Bambu Lab uses non-standard port @@ -276,5 +302,183 @@ class PrinterDiscoveryService: logger.info(f"Discovered printer: {name} ({serial}) at {ip_address}") -# Global discovery service instance +class SubnetScanner: + """Scanner for discovering Bambu printers by probing IP addresses.""" + + # Bambu printer ports + MQTT_PORT = 8883 + FTP_PORT = 990 + + def __init__(self): + self._discovered: dict[str, DiscoveredPrinter] = {} + self._running = False + self._scanned = 0 + self._total = 0 + + @property + def is_running(self) -> bool: + return self._running + + @property + def discovered_printers(self) -> list[DiscoveredPrinter]: + return list(self._discovered.values()) + + @property + def progress(self) -> tuple[int, int]: + """Return (scanned, total) counts.""" + return self._scanned, self._total + + async def scan_subnet(self, subnet: str, timeout: float = 1.0) -> list[DiscoveredPrinter]: + """Scan a subnet for Bambu printers. + + Args: + subnet: CIDR notation subnet (e.g., "192.168.1.0/24") + timeout: Connection timeout per host in seconds + + Returns: + List of discovered printers + """ + if self._running: + return [] + + self._running = True + self._discovered.clear() + self._scanned = 0 + + try: + network = ipaddress.ip_network(subnet, strict=False) + hosts = list(network.hosts()) + self._total = len(hosts) + + if self._total > 1024: + logger.warning(f"Subnet {subnet} has {self._total} hosts, limiting to /22 (1024 hosts)") + self._total = 1024 + hosts = hosts[:1024] + + logger.info(f"Starting subnet scan of {subnet} ({self._total} hosts)") + + # Scan in batches to avoid overwhelming the network + batch_size = 50 + for i in range(0, len(hosts), batch_size): + if not self._running: + break + + batch = hosts[i : i + batch_size] + tasks = [self._probe_host(str(ip), timeout) for ip in batch] + await asyncio.gather(*tasks, return_exceptions=True) + self._scanned = min(i + batch_size, len(hosts)) + + logger.info(f"Subnet scan complete. Found {len(self._discovered)} printers.") + return self.discovered_printers + + except ValueError as e: + logger.error(f"Invalid subnet format: {e}") + return [] + finally: + self._running = False + + async def _probe_host(self, ip: str, timeout: float): + """Probe a single host for Bambu printer ports.""" + # Check FTP port (990) - more reliable indicator + ftp_open = await self._check_port(ip, self.FTP_PORT, timeout) + if not ftp_open: + return + + # Also check MQTT port (8883) for confirmation + mqtt_open = await self._check_port(ip, self.MQTT_PORT, timeout) + if not mqtt_open: + return + + # Both ports open - likely a Bambu printer + logger.info(f"Found potential Bambu printer at {ip}") + + # Try to get printer info via SSDP unicast + serial, name, model = await self._get_printer_info_ssdp(ip, timeout) + + printer = DiscoveredPrinter( + serial=serial or f"unknown-{ip.replace('.', '-')}", + name=name or f"Printer at {ip}", + ip_address=ip, + model=model, + discovered_at=datetime.now().isoformat(), + ) + self._discovered[ip] = printer + + async def _get_printer_info_ssdp(self, ip: str, timeout: float) -> tuple[str | None, str | None, str | None]: + """Try to get printer info via SSDP unicast query.""" + loop = asyncio.get_event_loop() + + def _query(): + try: + sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) + sock.settimeout(timeout) + sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + + # Send M-SEARCH directly to the printer + msearch = ( + "M-SEARCH * HTTP/1.1\r\n" + f"HOST: {ip}:{SSDP_PORT}\r\n" + 'MAN: "ssdp:discover"\r\n' + "MX: 1\r\n" + f"ST: {BAMBU_SEARCH_TARGET}\r\n" + "\r\n" + ) + sock.sendto(msearch.encode(), (ip, SSDP_PORT)) + + # Wait for response + data, _ = sock.recvfrom(4096) + response = data.decode("utf-8", errors="ignore") + sock.close() + + # Parse response + serial = None + name = None + model = None + + usn_match = re.search(r"USN:\s*(?:uuid:)?([^\s\r\n]+)", response, re.IGNORECASE) + if usn_match: + serial = usn_match.group(1).strip() + + name_match = re.search(r"DevName\.bambu\.com:\s*(.+?)(?:\r\n|\n|$)", response, re.IGNORECASE) + if name_match: + name = name_match.group(1).strip() + + model_match = re.search(r"DevModel\.bambu\.com:\s*(.+?)(?:\r\n|\n|$)", response, re.IGNORECASE) + if model_match: + model = model_match.group(1).strip() + + logger.debug(f"SSDP info from {ip}: serial={serial}, name={name}, model={model}") + return serial, name, model + + except Exception as e: + logger.debug(f"SSDP query to {ip} failed: {e}") + return None, None, None + + return await loop.run_in_executor(None, _query) + + async def _check_port(self, ip: str, port: int, timeout: float) -> bool: + """Check if a port is open on the given IP.""" + try: + _, writer = await asyncio.wait_for(asyncio.open_connection(ip, port), timeout=timeout) + writer.close() + await writer.wait_closed() + logger.debug(f"Port {port} open on {ip}") + return True + except TimeoutError: + return False + except ConnectionRefusedError: + return False + except OSError as e: + # Log first few errors to help debug network issues + if self._scanned < 5: + logger.debug(f"OSError checking {ip}:{port}: {e}") + return False + + def stop(self): + """Stop the current scan.""" + self._running = False + + +# Global instances discovery_service = PrinterDiscoveryService() +subnet_scanner = SubnetScanner() diff --git a/backend/tests/integration/test_discovery_api.py b/backend/tests/integration/test_discovery_api.py new file mode 100644 index 000000000..77fe16379 --- /dev/null +++ b/backend/tests/integration/test_discovery_api.py @@ -0,0 +1,144 @@ +"""Integration tests for Discovery API endpoints. + +Tests the full request/response cycle for /api/v1/discovery/ endpoints. +""" + +from unittest.mock import AsyncMock, patch + +import pytest +from httpx import AsyncClient + + +class TestDiscoveryAPI: + """Integration tests for /api/v1/discovery/ endpoints.""" + + # ======================================================================== + # Info endpoint + # ======================================================================== + + @pytest.mark.asyncio + @pytest.mark.integration + async def test_get_discovery_info(self, async_client: AsyncClient): + """Verify discovery info endpoint returns expected fields.""" + response = await async_client.get("/api/v1/discovery/info") + + assert response.status_code == 200 + data = response.json() + assert "is_docker" in data + assert "ssdp_running" in data + assert "scan_running" in data + assert isinstance(data["is_docker"], bool) + assert isinstance(data["ssdp_running"], bool) + assert isinstance(data["scan_running"], bool) + + # ======================================================================== + # SSDP Discovery endpoints + # ======================================================================== + + @pytest.mark.asyncio + @pytest.mark.integration + async def test_get_discovery_status(self, async_client: AsyncClient): + """Verify SSDP discovery status endpoint works.""" + response = await async_client.get("/api/v1/discovery/status") + + assert response.status_code == 200 + data = response.json() + assert "running" in data + assert isinstance(data["running"], bool) + + @pytest.mark.asyncio + @pytest.mark.integration + async def test_start_discovery(self, async_client: AsyncClient): + """Verify SSDP discovery can be started.""" + response = await async_client.post("/api/v1/discovery/start?duration=1.0") + + assert response.status_code == 200 + data = response.json() + assert "running" in data + + @pytest.mark.asyncio + @pytest.mark.integration + async def test_stop_discovery(self, async_client: AsyncClient): + """Verify SSDP discovery can be stopped.""" + response = await async_client.post("/api/v1/discovery/stop") + + assert response.status_code == 200 + data = response.json() + assert "running" in data + assert data["running"] is False + + @pytest.mark.asyncio + @pytest.mark.integration + async def test_get_discovered_printers_empty(self, async_client: AsyncClient): + """Verify empty list when no printers discovered.""" + response = await async_client.get("/api/v1/discovery/printers") + + assert response.status_code == 200 + data = response.json() + assert isinstance(data, list) + + # ======================================================================== + # Subnet scanning endpoints + # ======================================================================== + + @pytest.mark.asyncio + @pytest.mark.integration + async def test_start_subnet_scan(self, async_client: AsyncClient): + """Verify subnet scan can be started.""" + response = await async_client.post( + "/api/v1/discovery/scan", + json={"subnet": "192.168.1.0/30", "timeout": 0.1}, # Small subnet for testing + ) + + assert response.status_code == 200 + data = response.json() + assert "running" in data + assert "scanned" in data + assert "total" in data + + @pytest.mark.asyncio + @pytest.mark.integration + async def test_get_scan_status(self, async_client: AsyncClient): + """Verify subnet scan status endpoint works.""" + response = await async_client.get("/api/v1/discovery/scan/status") + + assert response.status_code == 200 + data = response.json() + assert "running" in data + assert "scanned" in data + assert "total" in data + + @pytest.mark.asyncio + @pytest.mark.integration + async def test_stop_subnet_scan(self, async_client: AsyncClient): + """Verify subnet scan can be stopped.""" + response = await async_client.post("/api/v1/discovery/scan/stop") + + assert response.status_code == 200 + data = response.json() + assert "running" in data + + @pytest.mark.asyncio + @pytest.mark.integration + async def test_subnet_scan_invalid_subnet(self, async_client: AsyncClient): + """Verify invalid subnet format is rejected.""" + response = await async_client.post("/api/v1/discovery/scan", json={"subnet": "invalid-subnet", "timeout": 1.0}) + + # Should return 422 validation error or 200 with empty results + assert response.status_code in [200, 422] + + +class TestDiscoveryService: + """Unit tests for discovery service functionality.""" + + @pytest.mark.asyncio + @pytest.mark.integration + async def test_docker_detection_fields(self, async_client: AsyncClient): + """Verify Docker detection returns consistent response.""" + # Call multiple times to ensure consistency + response1 = await async_client.get("/api/v1/discovery/info") + response2 = await async_client.get("/api/v1/discovery/info") + + assert response1.status_code == 200 + assert response2.status_code == 200 + assert response1.json()["is_docker"] == response2.json()["is_docker"] diff --git a/docker-compose.yml b/docker-compose.yml index 2636da411..333dba6a1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,11 +2,15 @@ services: bambuddy: build: . container_name: bambuddy - # OPTIONAL: Host network mode can help if you have camera or printer - # discovery issues. Docker's default bridge networking works in most setups. - # network_mode: host # Uncomment this and remove "ports:" below if needed - ports: - - "8000:8000" + # Network mode options: + # - Default (bridge): Works for basic usage, but printer discovery and + # camera streaming may not work since container can't reach LAN directly. + # - Host mode: Required for printer discovery scanning and camera streaming. + # Uncomment "network_mode: host" and remove "ports:" section below. + # + network_mode: host + #ports: + # - "8000:8000" volumes: - bambuddy_data:/app/data - bambuddy_logs:/app/logs diff --git a/frontend/src/api/client.ts b/frontend/src/api/client.ts index 04fba0ce1..dd74db6ec 100644 --- a/frontend/src/api/client.ts +++ b/frontend/src/api/client.ts @@ -2190,8 +2190,22 @@ export interface DiscoveryStatus { running: boolean; } +export interface DiscoveryInfo { + is_docker: boolean; + ssdp_running: boolean; + scan_running: boolean; +} + +export interface SubnetScanStatus { + running: boolean; + scanned: number; + total: number; +} + // Discovery API export const discoveryApi = { + getInfo: () => request('/discovery/info'), + getStatus: () => request('/discovery/status'), startDiscovery: (duration: number = 10) => @@ -2202,4 +2216,16 @@ export const discoveryApi = { getDiscoveredPrinters: () => request('/discovery/printers'), + + // Subnet scanning (for Docker environments) + startSubnetScan: (subnet: string, timeout: number = 1.0) => + request('/discovery/scan', { + method: 'POST', + body: JSON.stringify({ subnet, timeout }), + }), + + getScanStatus: () => request('/discovery/scan/status'), + + stopSubnetScan: () => + request('/discovery/scan/stop', { method: 'POST' }), }; diff --git a/frontend/src/pages/PrintersPage.tsx b/frontend/src/pages/PrintersPage.tsx index faf507c58..711af8de0 100644 --- a/frontend/src/pages/PrintersPage.tsx +++ b/frontend/src/pages/PrintersPage.tsx @@ -1496,6 +1496,18 @@ function AddPrinterModal({ const [discovered, setDiscovered] = useState([]); const [discoveryError, setDiscoveryError] = useState(''); const [hasScanned, setHasScanned] = useState(false); + const [isDocker, setIsDocker] = useState(false); + const [subnet, setSubnet] = useState('192.168.1.0/24'); + const [scanProgress, setScanProgress] = useState({ scanned: 0, total: 0 }); + + // Fetch discovery info on mount + useEffect(() => { + discoveryApi.getInfo().then(info => { + setIsDocker(info.is_docker); + }).catch(() => { + // Ignore errors, assume not Docker + }); + }, []); // Filter out already-added printers const newPrinters = discovered.filter(p => !existingSerials.includes(p.serial)); @@ -1505,38 +1517,64 @@ function AddPrinterModal({ setDiscovered([]); setDiscovering(true); setHasScanned(false); + setScanProgress({ scanned: 0, total: 0 }); try { - await discoveryApi.startDiscovery(10); + if (isDocker) { + // Use subnet scanning for Docker + await discoveryApi.startSubnetScan(subnet); - // Poll for discovered printers every second - const pollInterval = setInterval(async () => { - try { - const printers = await discoveryApi.getDiscoveredPrinters(); - setDiscovered(printers); - } catch (e) { - console.error('Failed to get discovered printers:', e); - } - }, 1000); + // Poll for scan status and results + const pollInterval = setInterval(async () => { + try { + const status = await discoveryApi.getScanStatus(); + setScanProgress({ scanned: status.scanned, total: status.total }); - // Stop after 10 seconds - setTimeout(async () => { - clearInterval(pollInterval); - try { - await discoveryApi.stopDiscovery(); - } catch (e) { - // Ignore stop errors - } - setDiscovering(false); - setHasScanned(true); - // Final fetch - try { - const printers = await discoveryApi.getDiscoveredPrinters(); - setDiscovered(printers); - } catch (e) { - console.error('Failed to get final discovered printers:', e); - } - }, 10000); + const printers = await discoveryApi.getDiscoveredPrinters(); + setDiscovered(printers); + + if (!status.running) { + clearInterval(pollInterval); + setDiscovering(false); + setHasScanned(true); + } + } catch (e) { + console.error('Failed to get scan status:', e); + } + }, 500); + } else { + // Use SSDP discovery for native installs + await discoveryApi.startDiscovery(10); + + // Poll for discovered printers every second + const pollInterval = setInterval(async () => { + try { + const printers = await discoveryApi.getDiscoveredPrinters(); + setDiscovered(printers); + } catch (e) { + console.error('Failed to get discovered printers:', e); + } + }, 1000); + + // Stop after 10 seconds + setTimeout(async () => { + clearInterval(pollInterval); + try { + await discoveryApi.stopDiscovery(); + } catch (e) { + // Ignore stop errors + } + setDiscovering(false); + setHasScanned(true); + // Final fetch + try { + const printers = await discoveryApi.getDiscoveredPrinters(); + setDiscovered(printers); + } catch (e) { + console.error('Failed to get final discovered printers:', e); + } + }, 10000); + } } catch (e) { console.error('Failed to start discovery:', e); setDiscoveryError(e instanceof Error ? e.message : 'Failed to start discovery'); @@ -1596,6 +1634,7 @@ function AddPrinterModal({ useEffect(() => { return () => { discoveryApi.stopDiscovery().catch(() => {}); + discoveryApi.stopSubnetScan().catch(() => {}); }; }, []); @@ -1619,6 +1658,26 @@ function AddPrinterModal({ {/* Discovery Section */}
+ {isDocker && ( +
+ + setSubnet(e.target.value)} + placeholder="192.168.1.0/24" + disabled={discovering} + /> +

+ Docker detected. Enter your printer's subnet in CIDR notation. + Requires network_mode: host in docker-compose.yml. +

+
+ )} + @@ -1656,7 +1717,7 @@ function AddPrinterModal({ {printer.name || printer.serial}

- {printer.model || 'Unknown'} • {printer.ip_address} + {mapModelCode(printer.model) || 'Unknown'} • {printer.ip_address}

@@ -1667,13 +1728,13 @@ function AddPrinterModal({ {discovering && (

- Scanning network... + {isDocker ? 'Scanning subnet for Bambu printers...' : 'Scanning network...'}

)} {hasScanned && !discovering && discovered.length === 0 && (

- No printers found on the network. + No printers found{isDocker ? ' in the specified subnet' : ' on the network'}.

)} diff --git a/static/assets/index-BCPmsaqF.js b/static/assets/index-DpxuzRSm.js similarity index 82% rename from static/assets/index-BCPmsaqF.js rename to static/assets/index-DpxuzRSm.js index 00f3aabb6..7b794efce 100644 --- a/static/assets/index-BCPmsaqF.js +++ b/static/assets/index-DpxuzRSm.js @@ -1,20 +1,20 @@ -function kre(t,e){for(var n=0;nr[i]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))r(i);new MutationObserver(i=>{for(const a of i)if(a.type==="childList")for(const s of a.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&r(s)}).observe(document,{childList:!0,subtree:!0});function n(i){const a={};return i.integrity&&(a.integrity=i.integrity),i.referrerPolicy&&(a.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?a.credentials="include":i.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function r(i){if(i.ep)return;i.ep=!0;const a=n(i);fetch(i.href,a)}})();var mv=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function mo(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var MA={exports:{}},sx={};var lF;function Pre(){if(lF)return sx;lF=1;var t=Symbol.for("react.transitional.element"),e=Symbol.for("react.fragment");function n(r,i,a){var s=null;if(a!==void 0&&(s=""+a),i.key!==void 0&&(s=""+i.key),"key"in i){a={};for(var o in i)o!=="key"&&(a[o]=i[o])}else a=i;return i=a.ref,{$$typeof:t,type:r,key:s,ref:i!==void 0?i:null,props:a}}return sx.Fragment=e,sx.jsx=n,sx.jsxs=n,sx}var cF;function Rre(){return cF||(cF=1,MA.exports=Pre()),MA.exports}var l=Rre(),EA={exports:{}},en={};var uF;function jre(){if(uF)return en;uF=1;var t=Symbol.for("react.transitional.element"),e=Symbol.for("react.portal"),n=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),a=Symbol.for("react.consumer"),s=Symbol.for("react.context"),o=Symbol.for("react.forward_ref"),c=Symbol.for("react.suspense"),u=Symbol.for("react.memo"),d=Symbol.for("react.lazy"),f=Symbol.for("react.activity"),g=Symbol.iterator;function p(U){return U===null||typeof U!="object"?null:(U=g&&U[g]||U["@@iterator"],typeof U=="function"?U:null)}var x={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},v=Object.assign,y={};function b(U,H,ee){this.props=U,this.context=H,this.refs=y,this.updater=ee||x}b.prototype.isReactComponent={},b.prototype.setState=function(U,H){if(typeof U!="object"&&typeof U!="function"&&U!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,U,H,"setState")},b.prototype.forceUpdate=function(U){this.updater.enqueueForceUpdate(this,U,"forceUpdate")};function E(){}E.prototype=b.prototype;function w(U,H,ee){this.props=U,this.context=H,this.refs=y,this.updater=ee||x}var A=w.prototype=new E;A.constructor=w,v(A,b.prototype),A.isPureReactComponent=!0;var T=Array.isArray;function C(){}var k={H:null,A:null,T:null,S:null},F=Object.prototype.hasOwnProperty;function N(U,H,ee){var ie=ee.ref;return{$$typeof:t,type:U,key:H,ref:ie!==void 0?ie:null,props:ee}}function j(U,H){return N(U.type,H,U.props)}function I(U){return typeof U=="object"&&U!==null&&U.$$typeof===t}function O(U){var H={"=":"=0",":":"=2"};return"$"+U.replace(/[=:]/g,function(ee){return H[ee]})}var q=/\/+/g;function R(U,H){return typeof U=="object"&&U!==null&&U.key!=null?O(""+U.key):H.toString(36)}function W(U){switch(U.status){case"fulfilled":return U.value;case"rejected":throw U.reason;default:switch(typeof U.status=="string"?U.then(C,C):(U.status="pending",U.then(function(H){U.status==="pending"&&(U.status="fulfilled",U.value=H)},function(H){U.status==="pending"&&(U.status="rejected",U.reason=H)})),U.status){case"fulfilled":return U.value;case"rejected":throw U.reason}}throw U}function K(U,H,ee,ie,pe){var ue=typeof U;(ue==="undefined"||ue==="boolean")&&(U=null);var be=!1;if(U===null)be=!0;else switch(ue){case"bigint":case"string":case"number":be=!0;break;case"object":switch(U.$$typeof){case t:case e:be=!0;break;case d:return be=U._init,K(be(U._payload),H,ee,ie,pe)}}if(be)return pe=pe(U),be=ie===""?"."+R(U,0):ie,T(pe)?(ee="",be!=null&&(ee=be.replace(q,"$&/")+"/"),K(pe,H,ee,"",function(_e){return _e})):pe!=null&&(I(pe)&&(pe=j(pe,ee+(pe.key==null||U&&U.key===pe.key?"":(""+pe.key).replace(q,"$&/")+"/")+be)),H.push(pe)),1;be=0;var Re=ie===""?".":ie+":";if(T(U))for(var Z=0;Z>>1,J=K[Y];if(0>>1;Yi(ee,te))iei(pe,ee)?(K[Y]=pe,K[ie]=te,Y=ie):(K[Y]=ee,K[H]=te,Y=H);else if(iei(pe,te))K[Y]=pe,K[ie]=te,Y=ie;else break e}}return G}function i(K,G){var te=K.sortIndex-G.sortIndex;return te!==0?te:K.id-G.id}if(t.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var a=performance;t.unstable_now=function(){return a.now()}}else{var s=Date,o=s.now();t.unstable_now=function(){return s.now()-o}}var c=[],u=[],d=1,f=null,g=3,p=!1,x=!1,v=!1,y=!1,b=typeof setTimeout=="function"?setTimeout:null,E=typeof clearTimeout=="function"?clearTimeout:null,w=typeof setImmediate<"u"?setImmediate:null;function A(K){for(var G=n(u);G!==null;){if(G.callback===null)r(u);else if(G.startTime<=K)r(u),G.sortIndex=G.expirationTime,e(c,G);else break;G=n(u)}}function T(K){if(v=!1,A(K),!x)if(n(c)!==null)x=!0,C||(C=!0,O());else{var G=n(u);G!==null&&W(T,G.startTime-K)}}var C=!1,k=-1,F=5,N=-1;function j(){return y?!0:!(t.unstable_now()-NK&&j());){var Y=f.callback;if(typeof Y=="function"){f.callback=null,g=f.priorityLevel;var J=Y(f.expirationTime<=K);if(K=t.unstable_now(),typeof J=="function"){f.callback=J,A(K),G=!0;break t}f===n(c)&&r(c),A(K)}else r(c);f=n(c)}if(f!==null)G=!0;else{var U=n(u);U!==null&&W(T,U.startTime-K),G=!1}}break e}finally{f=null,g=te,p=!1}G=void 0}}finally{G?O():C=!1}}}var O;if(typeof w=="function")O=function(){w(I)};else if(typeof MessageChannel<"u"){var q=new MessageChannel,R=q.port2;q.port1.onmessage=I,O=function(){R.postMessage(null)}}else O=function(){b(I,0)};function W(K,G){k=b(function(){K(t.unstable_now())},G)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(K){K.callback=null},t.unstable_forceFrameRate=function(K){0>K||125Y?(K.sortIndex=te,e(u,K),n(c)===null&&K===n(u)&&(v?(E(k),k=-1):v=!0,W(T,te-Y))):(K.sortIndex=J,e(c,K),x||p||(x=!0,C||(C=!0,O()))),K},t.unstable_shouldYield=j,t.unstable_wrapCallback=function(K){var G=g;return function(){var te=g;g=G;try{return K.apply(this,arguments)}finally{g=te}}}})(CA)),CA}var fF;function Lre(){return fF||(fF=1,TA.exports=Ore()),TA.exports}var NA={exports:{}},ia={};var mF;function Ire(){if(mF)return ia;mF=1;var t=qp();function e(c){var u="https://react.dev/errors/"+c;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(e){console.error(e)}}return t(),NA.exports=Ire(),NA.exports}var gF;function Fre(){if(gF)return ox;gF=1;var t=Lre(),e=qp(),n=C9();function r(h){var m="https://react.dev/errors/"+h;if(1J||(h.current=Y[J],Y[J]=null,J--)}function ee(h,m){J++,Y[J]=h.current,h.current=m}var ie=U(null),pe=U(null),ue=U(null),be=U(null);function Re(h,m){switch(ee(ue,m),ee(pe,h),ee(ie,null),m.nodeType){case 9:case 11:h=(h=m.documentElement)&&(h=h.namespaceURI)?P5(h):0;break;default:if(h=m.tagName,m=m.namespaceURI)m=P5(m),h=R5(m,h);else switch(h){case"svg":h=1;break;case"math":h=2;break;default:h=0}}H(ie),ee(ie,h)}function Z(){H(ie),H(pe),H(ue)}function _e(h){h.memoizedState!==null&&ee(be,h);var m=ie.current,_=R5(m,h.type);m!==_&&(ee(pe,h),ee(ie,_))}function Le(h){pe.current===h&&(H(ie),H(pe)),be.current===h&&(H(be),nx._currentValue=te)}var ce,Ie;function z(h){if(ce===void 0)try{throw Error()}catch(_){var m=_.stack.trim().match(/\n( *(at )?)/);ce=m&&m[1]||"",Ie=-1<_.stack.indexOf(` +function kre(t,e){for(var n=0;nr[i]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))r(i);new MutationObserver(i=>{for(const a of i)if(a.type==="childList")for(const s of a.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&r(s)}).observe(document,{childList:!0,subtree:!0});function n(i){const a={};return i.integrity&&(a.integrity=i.integrity),i.referrerPolicy&&(a.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?a.credentials="include":i.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function r(i){if(i.ep)return;i.ep=!0;const a=n(i);fetch(i.href,a)}})();var mv=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function mo(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var MA={exports:{}},ox={};var lF;function Pre(){if(lF)return ox;lF=1;var t=Symbol.for("react.transitional.element"),e=Symbol.for("react.fragment");function n(r,i,a){var s=null;if(a!==void 0&&(s=""+a),i.key!==void 0&&(s=""+i.key),"key"in i){a={};for(var o in i)o!=="key"&&(a[o]=i[o])}else a=i;return i=a.ref,{$$typeof:t,type:r,key:s,ref:i!==void 0?i:null,props:a}}return ox.Fragment=e,ox.jsx=n,ox.jsxs=n,ox}var cF;function Rre(){return cF||(cF=1,MA.exports=Pre()),MA.exports}var l=Rre(),EA={exports:{}},en={};var uF;function jre(){if(uF)return en;uF=1;var t=Symbol.for("react.transitional.element"),e=Symbol.for("react.portal"),n=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),a=Symbol.for("react.consumer"),s=Symbol.for("react.context"),o=Symbol.for("react.forward_ref"),c=Symbol.for("react.suspense"),u=Symbol.for("react.memo"),d=Symbol.for("react.lazy"),f=Symbol.for("react.activity"),g=Symbol.iterator;function p(U){return U===null||typeof U!="object"?null:(U=g&&U[g]||U["@@iterator"],typeof U=="function"?U:null)}var x={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},v=Object.assign,y={};function b(U,H,ee){this.props=U,this.context=H,this.refs=y,this.updater=ee||x}b.prototype.isReactComponent={},b.prototype.setState=function(U,H){if(typeof U!="object"&&typeof U!="function"&&U!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,U,H,"setState")},b.prototype.forceUpdate=function(U){this.updater.enqueueForceUpdate(this,U,"forceUpdate")};function E(){}E.prototype=b.prototype;function w(U,H,ee){this.props=U,this.context=H,this.refs=y,this.updater=ee||x}var A=w.prototype=new E;A.constructor=w,v(A,b.prototype),A.isPureReactComponent=!0;var T=Array.isArray;function N(){}var C={H:null,A:null,T:null,S:null},F=Object.prototype.hasOwnProperty;function k(U,H,ee){var ie=ee.ref;return{$$typeof:t,type:U,key:H,ref:ie!==void 0?ie:null,props:ee}}function j(U,H){return k(U.type,H,U.props)}function I(U){return typeof U=="object"&&U!==null&&U.$$typeof===t}function O(U){var H={"=":"=0",":":"=2"};return"$"+U.replace(/[=:]/g,function(ee){return H[ee]})}var q=/\/+/g;function R(U,H){return typeof U=="object"&&U!==null&&U.key!=null?O(""+U.key):H.toString(36)}function W(U){switch(U.status){case"fulfilled":return U.value;case"rejected":throw U.reason;default:switch(typeof U.status=="string"?U.then(N,N):(U.status="pending",U.then(function(H){U.status==="pending"&&(U.status="fulfilled",U.value=H)},function(H){U.status==="pending"&&(U.status="rejected",U.reason=H)})),U.status){case"fulfilled":return U.value;case"rejected":throw U.reason}}throw U}function K(U,H,ee,ie,pe){var ue=typeof U;(ue==="undefined"||ue==="boolean")&&(U=null);var be=!1;if(U===null)be=!0;else switch(ue){case"bigint":case"string":case"number":be=!0;break;case"object":switch(U.$$typeof){case t:case e:be=!0;break;case d:return be=U._init,K(be(U._payload),H,ee,ie,pe)}}if(be)return pe=pe(U),be=ie===""?"."+R(U,0):ie,T(pe)?(ee="",be!=null&&(ee=be.replace(q,"$&/")+"/"),K(pe,H,ee,"",function(_e){return _e})):pe!=null&&(I(pe)&&(pe=j(pe,ee+(pe.key==null||U&&U.key===pe.key?"":(""+pe.key).replace(q,"$&/")+"/")+be)),H.push(pe)),1;be=0;var Re=ie===""?".":ie+":";if(T(U))for(var Z=0;Z>>1,J=K[Y];if(0>>1;Yi(ee,te))iei(pe,ee)?(K[Y]=pe,K[ie]=te,Y=ie):(K[Y]=ee,K[H]=te,Y=H);else if(iei(pe,te))K[Y]=pe,K[ie]=te,Y=ie;else break e}}return G}function i(K,G){var te=K.sortIndex-G.sortIndex;return te!==0?te:K.id-G.id}if(t.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var a=performance;t.unstable_now=function(){return a.now()}}else{var s=Date,o=s.now();t.unstable_now=function(){return s.now()-o}}var c=[],u=[],d=1,f=null,g=3,p=!1,x=!1,v=!1,y=!1,b=typeof setTimeout=="function"?setTimeout:null,E=typeof clearTimeout=="function"?clearTimeout:null,w=typeof setImmediate<"u"?setImmediate:null;function A(K){for(var G=n(u);G!==null;){if(G.callback===null)r(u);else if(G.startTime<=K)r(u),G.sortIndex=G.expirationTime,e(c,G);else break;G=n(u)}}function T(K){if(v=!1,A(K),!x)if(n(c)!==null)x=!0,N||(N=!0,O());else{var G=n(u);G!==null&&W(T,G.startTime-K)}}var N=!1,C=-1,F=5,k=-1;function j(){return y?!0:!(t.unstable_now()-kK&&j());){var Y=f.callback;if(typeof Y=="function"){f.callback=null,g=f.priorityLevel;var J=Y(f.expirationTime<=K);if(K=t.unstable_now(),typeof J=="function"){f.callback=J,A(K),G=!0;break t}f===n(c)&&r(c),A(K)}else r(c);f=n(c)}if(f!==null)G=!0;else{var U=n(u);U!==null&&W(T,U.startTime-K),G=!1}}break e}finally{f=null,g=te,p=!1}G=void 0}}finally{G?O():N=!1}}}var O;if(typeof w=="function")O=function(){w(I)};else if(typeof MessageChannel<"u"){var q=new MessageChannel,R=q.port2;q.port1.onmessage=I,O=function(){R.postMessage(null)}}else O=function(){b(I,0)};function W(K,G){C=b(function(){K(t.unstable_now())},G)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(K){K.callback=null},t.unstable_forceFrameRate=function(K){0>K||125Y?(K.sortIndex=te,e(u,K),n(c)===null&&K===n(u)&&(v?(E(C),C=-1):v=!0,W(T,te-Y))):(K.sortIndex=J,e(c,K),x||p||(x=!0,N||(N=!0,O()))),K},t.unstable_shouldYield=j,t.unstable_wrapCallback=function(K){var G=g;return function(){var te=g;g=G;try{return K.apply(this,arguments)}finally{g=te}}}})(CA)),CA}var fF;function Lre(){return fF||(fF=1,TA.exports=Ore()),TA.exports}var NA={exports:{}},ia={};var mF;function Ire(){if(mF)return ia;mF=1;var t=Kp();function e(c){var u="https://react.dev/errors/"+c;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(e){console.error(e)}}return t(),NA.exports=Ire(),NA.exports}var gF;function Fre(){if(gF)return lx;gF=1;var t=Lre(),e=Kp(),n=C9();function r(h){var m="https://react.dev/errors/"+h;if(1J||(h.current=Y[J],Y[J]=null,J--)}function ee(h,m){J++,Y[J]=h.current,h.current=m}var ie=U(null),pe=U(null),ue=U(null),be=U(null);function Re(h,m){switch(ee(ue,m),ee(pe,h),ee(ie,null),m.nodeType){case 9:case 11:h=(h=m.documentElement)&&(h=h.namespaceURI)?P5(h):0;break;default:if(h=m.tagName,m=m.namespaceURI)m=P5(m),h=R5(m,h);else switch(h){case"svg":h=1;break;case"math":h=2;break;default:h=0}}H(ie),ee(ie,h)}function Z(){H(ie),H(pe),H(ue)}function _e(h){h.memoizedState!==null&&ee(be,h);var m=ie.current,_=R5(m,h.type);m!==_&&(ee(pe,h),ee(ie,_))}function Le(h){pe.current===h&&(H(ie),H(pe)),be.current===h&&(H(be),rx._currentValue=te)}var ce,Ie;function z(h){if(ce===void 0)try{throw Error()}catch(_){var m=_.stack.trim().match(/\n( *(at )?)/);ce=m&&m[1]||"",Ie=-1<_.stack.indexOf(` at`)?" ()":-1<_.stack.indexOf("@")?"@unknown:0:0":""}return` `+ce+h+Ie}var B=!1;function ne(h,m){if(!h||B)return"";B=!0;var _=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var S={DetermineComponentFrameRoot:function(){try{if(m){var ht=function(){throw Error()};if(Object.defineProperty(ht.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(ht,[])}catch(st){var Je=st}Reflect.construct(h,[],ht)}else{try{ht.call()}catch(st){Je=st}h.call(ht.prototype)}}else{try{throw Error()}catch(st){Je=st}(ht=h())&&typeof ht.catch=="function"&&ht.catch(function(){})}}catch(st){if(st&&Je&&typeof st.stack=="string")return[st.stack,Je.stack]}return[null,null]}};S.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var P=Object.getOwnPropertyDescriptor(S.DetermineComponentFrameRoot,"name");P&&P.configurable&&Object.defineProperty(S.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"});var D=S.DetermineComponentFrameRoot(),X=D[0],le=D[1];if(X&&le){var Te=X.split(` `),Ze=le.split(` `);for(P=S=0;SP||Te[S]!==Ze[P]){var ct=` `+Te[S].replace(" at new "," at ");return h.displayName&&ct.includes("")&&(ct=ct.replace("",h.displayName)),ct}while(1<=S&&0<=P);break}}}finally{B=!1,Error.prepareStackTrace=_}return(_=h?h.displayName||h.name:"")?z(_):""}function V(h,m){switch(h.tag){case 26:case 27:case 5:return z(h.type);case 16:return z("Lazy");case 13:return h.child!==m&&m!==null?z("Suspense Fallback"):z("Suspense");case 19:return z("SuspenseList");case 0:case 15:return ne(h.type,!1);case 11:return ne(h.type.render,!1);case 1:return ne(h.type,!0);case 31:return z("Activity");default:return""}}function Q(h){try{var m="",_=null;do m+=V(h,_),_=h,h=h.return;while(h);return m}catch(S){return` Error generating stack: `+S.message+` -`+S.stack}}var se=Object.prototype.hasOwnProperty,Me=t.unstable_scheduleCallback,Ae=t.unstable_cancelCallback,Se=t.unstable_shouldYield,$=t.unstable_requestPaint,L=t.unstable_now,re=t.unstable_getCurrentPriorityLevel,ye=t.unstable_ImmediatePriority,we=t.unstable_UserBlockingPriority,xe=t.unstable_NormalPriority,rt=t.unstable_LowPriority,He=t.unstable_IdlePriority,he=t.log,Ge=t.unstable_setDisableYieldValue,Ue=null,oe=null;function tt(h){if(typeof he=="function"&&Ge(h),oe&&typeof oe.setStrictMode=="function")try{oe.setStrictMode(Ue,h)}catch{}}var $e=Math.clz32?Math.clz32:fe,Ye=Math.log,ut=Math.LN2;function fe(h){return h>>>=0,h===0?32:31-(Ye(h)/ut|0)|0}var Qe=256,ge=262144,ze=4194304;function ke(h){var m=h&42;if(m!==0)return m;switch(h&-h){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return h&261888;case 262144:case 524288:case 1048576:case 2097152:return h&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return h&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return h}}function ve(h,m,_){var S=h.pendingLanes;if(S===0)return 0;var P=0,D=h.suspendedLanes,X=h.pingedLanes;h=h.warmLanes;var le=S&134217727;return le!==0?(S=le&~D,S!==0?P=ke(S):(X&=le,X!==0?P=ke(X):_||(_=le&~h,_!==0&&(P=ke(_))))):(le=S&~D,le!==0?P=ke(le):X!==0?P=ke(X):_||(_=S&~h,_!==0&&(P=ke(_)))),P===0?0:m!==0&&m!==P&&(m&D)===0&&(D=P&-P,_=m&-m,D>=_||D===32&&(_&4194048)!==0)?m:P}function de(h,m){return(h.pendingLanes&~(h.suspendedLanes&~h.pingedLanes)&m)===0}function ot(h,m){switch(h){case 1:case 2:case 4:case 8:case 64:return m+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return m+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function xt(){var h=ze;return ze<<=1,(ze&62914560)===0&&(ze=4194304),h}function Et(h){for(var m=[],_=0;31>_;_++)m.push(h);return m}function Qt(h,m){h.pendingLanes|=m,m!==268435456&&(h.suspendedLanes=0,h.pingedLanes=0,h.warmLanes=0)}function Ot(h,m,_,S,P,D){var X=h.pendingLanes;h.pendingLanes=_,h.suspendedLanes=0,h.pingedLanes=0,h.warmLanes=0,h.expiredLanes&=_,h.entangledLanes&=_,h.errorRecoveryDisabledLanes&=_,h.shellSuspendCounter=0;var le=h.entanglements,Te=h.expirationTimes,Ze=h.hiddenUpdates;for(_=X&~_;0<_;){var ct=31-$e(_),ht=1<"u")return null;try{return h.activeElement||h.body}catch{return h.body}}var Ir=/[\n"\\]/g;function jn(h){return h.replace(Ir,function(m){return"\\"+m.charCodeAt(0).toString(16)+" "})}function xo(h,m,_,S,P,D,X,le){h.name="",X!=null&&typeof X!="function"&&typeof X!="symbol"&&typeof X!="boolean"?h.type=X:h.removeAttribute("type"),m!=null?X==="number"?(m===0&&h.value===""||h.value!=m)&&(h.value=""+hn(m)):h.value!==""+hn(m)&&(h.value=""+hn(m)):X!=="submit"&&X!=="reset"||h.removeAttribute("value"),m!=null?Ai(h,X,hn(m)):_!=null?Ai(h,X,hn(_)):S!=null&&h.removeAttribute("value"),P==null&&D!=null&&(h.defaultChecked=!!D),P!=null&&(h.checked=P&&typeof P!="function"&&typeof P!="symbol"),le!=null&&typeof le!="function"&&typeof le!="symbol"&&typeof le!="boolean"?h.name=""+hn(le):h.removeAttribute("name")}function Ln(h,m,_,S,P,D,X,le){if(D!=null&&typeof D!="function"&&typeof D!="symbol"&&typeof D!="boolean"&&(h.type=D),m!=null||_!=null){if(!(D!=="submit"&&D!=="reset"||m!=null)){Jt(h);return}_=_!=null?""+hn(_):"",m=m!=null?""+hn(m):_,le||m===h.value||(h.value=m),h.defaultValue=m}S=S??P,S=typeof S!="function"&&typeof S!="symbol"&&!!S,h.checked=le?h.checked:!!S,h.defaultChecked=!!S,X!=null&&typeof X!="function"&&typeof X!="symbol"&&typeof X!="boolean"&&(h.name=X),Jt(h)}function Ai(h,m,_){m==="number"&&Cr(h.ownerDocument)===h||h.defaultValue===""+_||(h.defaultValue=""+_)}function oi(h,m,_,S){if(h=h.options,m){m={};for(var P=0;P<_.length;P++)m["$"+_[P]]=!0;for(_=0;_"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),ME=!1;if(Nl)try{var vg={};Object.defineProperty(vg,"passive",{get:function(){ME=!0}}),window.addEventListener("test",vg,vg),window.removeEventListener("test",vg,vg)}catch{ME=!1}var Yc=null,EE=null,sy=null;function RL(){if(sy)return sy;var h,m=EE,_=m.length,S,P="value"in Yc?Yc.value:Yc.textContent,D=P.length;for(h=0;h<_&&m[h]===P[h];h++);var X=_-h;for(S=1;S<=X&&m[_-S]===P[D-S];S++);return sy=P.slice(h,1=Sg),FL=" ",UL=!1;function zL(h,m){switch(h){case"keyup":return Qte.indexOf(m.keyCode)!==-1;case"keydown":return m.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function BL(h){return h=h.detail,typeof h=="object"&&"data"in h?h.data:null}var wf=!1;function ene(h,m){switch(h){case"compositionend":return BL(m);case"keypress":return m.which!==32?null:(UL=!0,FL);case"textInput":return h=m.data,h===FL&&UL?null:h;default:return null}}function tne(h,m){if(wf)return h==="compositionend"||!kE&&zL(h,m)?(h=RL(),sy=EE=Yc=null,wf=!1,h):null;switch(h){case"paste":return null;case"keypress":if(!(m.ctrlKey||m.altKey||m.metaKey)||m.ctrlKey&&m.altKey){if(m.char&&1=m)return{node:_,offset:m-h};h=S}e:{for(;_;){if(_.nextSibling){_=_.nextSibling;break e}_=_.parentNode}_=void 0}_=XL(_)}}function ZL(h,m){return h&&m?h===m?!0:h&&h.nodeType===3?!1:m&&m.nodeType===3?ZL(h,m.parentNode):"contains"in h?h.contains(m):h.compareDocumentPosition?!!(h.compareDocumentPosition(m)&16):!1:!1}function QL(h){h=h!=null&&h.ownerDocument!=null&&h.ownerDocument.defaultView!=null?h.ownerDocument.defaultView:window;for(var m=Cr(h.document);m instanceof h.HTMLIFrameElement;){try{var _=typeof m.contentWindow.location.href=="string"}catch{_=!1}if(_)h=m.contentWindow;else break;m=Cr(h.document)}return m}function jE(h){var m=h&&h.nodeName&&h.nodeName.toLowerCase();return m&&(m==="input"&&(h.type==="text"||h.type==="search"||h.type==="tel"||h.type==="url"||h.type==="password")||m==="textarea"||h.contentEditable==="true")}var cne=Nl&&"documentMode"in document&&11>=document.documentMode,Sf=null,DE=null,Tg=null,OE=!1;function JL(h,m,_){var S=_.window===_?_.document:_.nodeType===9?_:_.ownerDocument;OE||Sf==null||Sf!==Cr(S)||(S=Sf,"selectionStart"in S&&jE(S)?S={start:S.selectionStart,end:S.selectionEnd}:(S=(S.ownerDocument&&S.ownerDocument.defaultView||window).getSelection(),S={anchorNode:S.anchorNode,anchorOffset:S.anchorOffset,focusNode:S.focusNode,focusOffset:S.focusOffset}),Tg&&Ag(Tg,S)||(Tg=S,S=Jy(DE,"onSelect"),0>=X,P-=X,Go=1<<32-$e(m)+P|_<rn?(vn=It,It=null):vn=It.sibling;var Cn=Je(Be,It,Xe[rn],dt);if(Cn===null){It===null&&(It=vn);break}h&&It&&Cn.alternate===null&&m(Be,It),je=D(Cn,je,rn),Tn===null?zt=Cn:Tn.sibling=Cn,Tn=Cn,It=vn}if(rn===Xe.length)return _(Be,It),wn&&Pl(Be,rn),zt;if(It===null){for(;rnrn?(vn=It,It=null):vn=It.sibling;var bu=Je(Be,It,Cn.value,dt);if(bu===null){It===null&&(It=vn);break}h&&It&&bu.alternate===null&&m(Be,It),je=D(bu,je,rn),Tn===null?zt=bu:Tn.sibling=bu,Tn=bu,It=vn}if(Cn.done)return _(Be,It),wn&&Pl(Be,rn),zt;if(It===null){for(;!Cn.done;rn++,Cn=Xe.next())Cn=ht(Be,Cn.value,dt),Cn!==null&&(je=D(Cn,je,rn),Tn===null?zt=Cn:Tn.sibling=Cn,Tn=Cn);return wn&&Pl(Be,rn),zt}for(It=S(It);!Cn.done;rn++,Cn=Xe.next())Cn=st(It,Be,rn,Cn.value,dt),Cn!==null&&(h&&Cn.alternate!==null&&It.delete(Cn.key===null?rn:Cn.key),je=D(Cn,je,rn),Tn===null?zt=Cn:Tn.sibling=Cn,Tn=Cn);return h&&It.forEach(function(Nre){return m(Be,Nre)}),wn&&Pl(Be,rn),zt}function Wn(Be,je,Xe,dt){if(typeof Xe=="object"&&Xe!==null&&Xe.type===v&&Xe.key===null&&(Xe=Xe.props.children),typeof Xe=="object"&&Xe!==null){switch(Xe.$$typeof){case p:e:{for(var zt=Xe.key;je!==null;){if(je.key===zt){if(zt=Xe.type,zt===v){if(je.tag===7){_(Be,je.sibling),dt=P(je,Xe.props.children),dt.return=Be,Be=dt;break e}}else if(je.elementType===zt||typeof zt=="object"&&zt!==null&&zt.$$typeof===F&&Hd(zt)===je.type){_(Be,je.sibling),dt=P(je,Xe.props),jg(dt,Xe),dt.return=Be,Be=dt;break e}_(Be,je);break}else m(Be,je);je=je.sibling}Xe.type===v?(dt=Id(Xe.props.children,Be.mode,dt,Xe.key),dt.return=Be,Be=dt):(dt=gy(Xe.type,Xe.key,Xe.props,null,Be.mode,dt),jg(dt,Xe),dt.return=Be,Be=dt)}return X(Be);case x:e:{for(zt=Xe.key;je!==null;){if(je.key===zt)if(je.tag===4&&je.stateNode.containerInfo===Xe.containerInfo&&je.stateNode.implementation===Xe.implementation){_(Be,je.sibling),dt=P(je,Xe.children||[]),dt.return=Be,Be=dt;break e}else{_(Be,je);break}else m(Be,je);je=je.sibling}dt=HE(Xe,Be.mode,dt),dt.return=Be,Be=dt}return X(Be);case F:return Xe=Hd(Xe),Wn(Be,je,Xe,dt)}if(W(Xe))return Dt(Be,je,Xe,dt);if(O(Xe)){if(zt=O(Xe),typeof zt!="function")throw Error(r(150));return Xe=zt.call(Xe),Gt(Be,je,Xe,dt)}if(typeof Xe.then=="function")return Wn(Be,je,Sy(Xe),dt);if(Xe.$$typeof===w)return Wn(Be,je,yy(Be,Xe),dt);My(Be,Xe)}return typeof Xe=="string"&&Xe!==""||typeof Xe=="number"||typeof Xe=="bigint"?(Xe=""+Xe,je!==null&&je.tag===6?(_(Be,je.sibling),dt=P(je,Xe),dt.return=Be,Be=dt):(_(Be,je),dt=BE(Xe,Be.mode,dt),dt.return=Be,Be=dt),X(Be)):_(Be,je)}return function(Be,je,Xe,dt){try{Rg=0;var zt=Wn(Be,je,Xe,dt);return Df=null,zt}catch(It){if(It===jf||It===_y)throw It;var Tn=ls(29,It,null,Be.mode);return Tn.lanes=dt,Tn.return=Be,Tn}finally{}}}var Vd=w4(!0),S4=w4(!1),tu=!1;function e2(h){h.updateQueue={baseState:h.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function t2(h,m){h=h.updateQueue,m.updateQueue===h&&(m.updateQueue={baseState:h.baseState,firstBaseUpdate:h.firstBaseUpdate,lastBaseUpdate:h.lastBaseUpdate,shared:h.shared,callbacks:null})}function nu(h){return{lane:h,tag:0,payload:null,callback:null,next:null}}function ru(h,m,_){var S=h.updateQueue;if(S===null)return null;if(S=S.shared,(Pn&2)!==0){var P=S.pending;return P===null?m.next=m:(m.next=P.next,P.next=m),S.pending=m,m=py(h),s4(h,null,_),m}return my(h,S,m,_),py(h)}function Dg(h,m,_){if(m=m.updateQueue,m!==null&&(m=m.shared,(_&4194048)!==0)){var S=m.lanes;S&=h.pendingLanes,_|=S,m.lanes=_,On(h,_)}}function n2(h,m){var _=h.updateQueue,S=h.alternate;if(S!==null&&(S=S.updateQueue,_===S)){var P=null,D=null;if(_=_.firstBaseUpdate,_!==null){do{var X={lane:_.lane,tag:_.tag,payload:_.payload,callback:null,next:null};D===null?P=D=X:D=D.next=X,_=_.next}while(_!==null);D===null?P=D=m:D=D.next=m}else P=D=m;_={baseState:S.baseState,firstBaseUpdate:P,lastBaseUpdate:D,shared:S.shared,callbacks:S.callbacks},h.updateQueue=_;return}h=_.lastBaseUpdate,h===null?_.firstBaseUpdate=m:h.next=m,_.lastBaseUpdate=m}var r2=!1;function Og(){if(r2){var h=Rf;if(h!==null)throw h}}function Lg(h,m,_,S){r2=!1;var P=h.updateQueue;tu=!1;var D=P.firstBaseUpdate,X=P.lastBaseUpdate,le=P.shared.pending;if(le!==null){P.shared.pending=null;var Te=le,Ze=Te.next;Te.next=null,X===null?D=Ze:X.next=Ze,X=Te;var ct=h.alternate;ct!==null&&(ct=ct.updateQueue,le=ct.lastBaseUpdate,le!==X&&(le===null?ct.firstBaseUpdate=Ze:le.next=Ze,ct.lastBaseUpdate=Te))}if(D!==null){var ht=P.baseState;X=0,ct=Ze=Te=null,le=D;do{var Je=le.lane&-536870913,st=Je!==le.lane;if(st?(yn&Je)===Je:(S&Je)===Je){Je!==0&&Je===Pf&&(r2=!0),ct!==null&&(ct=ct.next={lane:0,tag:le.tag,payload:le.payload,callback:null,next:null});e:{var Dt=h,Gt=le;Je=m;var Wn=_;switch(Gt.tag){case 1:if(Dt=Gt.payload,typeof Dt=="function"){ht=Dt.call(Wn,ht,Je);break e}ht=Dt;break e;case 3:Dt.flags=Dt.flags&-65537|128;case 0:if(Dt=Gt.payload,Je=typeof Dt=="function"?Dt.call(Wn,ht,Je):Dt,Je==null)break e;ht=f({},ht,Je);break e;case 2:tu=!0}}Je=le.callback,Je!==null&&(h.flags|=64,st&&(h.flags|=8192),st=P.callbacks,st===null?P.callbacks=[Je]:st.push(Je))}else st={lane:Je,tag:le.tag,payload:le.payload,callback:le.callback,next:null},ct===null?(Ze=ct=st,Te=ht):ct=ct.next=st,X|=Je;if(le=le.next,le===null){if(le=P.shared.pending,le===null)break;st=le,le=st.next,st.next=null,P.lastBaseUpdate=st,P.shared.pending=null}}while(!0);ct===null&&(Te=ht),P.baseState=Te,P.firstBaseUpdate=Ze,P.lastBaseUpdate=ct,D===null&&(P.shared.lanes=0),lu|=X,h.lanes=X,h.memoizedState=ht}}function M4(h,m){if(typeof h!="function")throw Error(r(191,h));h.call(m)}function E4(h,m){var _=h.callbacks;if(_!==null)for(h.callbacks=null,h=0;h<_.length;h++)M4(_[h],m)}var Of=U(null),Ey=U(0);function A4(h,m){h=Hl,ee(Ey,h),ee(Of,m),Hl=h|m.baseLanes}function i2(){ee(Ey,Hl),ee(Of,Of.current)}function a2(){Hl=Ey.current,H(Of),H(Ey)}var cs=U(null),Ls=null;function iu(h){var m=h.alternate;ee(Fr,Fr.current&1),ee(cs,h),Ls===null&&(m===null||Of.current!==null||m.memoizedState!==null)&&(Ls=h)}function s2(h){ee(Fr,Fr.current),ee(cs,h),Ls===null&&(Ls=h)}function T4(h){h.tag===22?(ee(Fr,Fr.current),ee(cs,h),Ls===null&&(Ls=h)):au()}function au(){ee(Fr,Fr.current),ee(cs,cs.current)}function us(h){H(cs),Ls===h&&(Ls=null),H(Fr)}var Fr=U(0);function Ay(h){for(var m=h;m!==null;){if(m.tag===13){var _=m.memoizedState;if(_!==null&&(_=_.dehydrated,_===null||hA(_)||fA(_)))return m}else if(m.tag===19&&(m.memoizedProps.revealOrder==="forwards"||m.memoizedProps.revealOrder==="backwards"||m.memoizedProps.revealOrder==="unstable_legacy-backwards"||m.memoizedProps.revealOrder==="together")){if((m.flags&128)!==0)return m}else if(m.child!==null){m.child.return=m,m=m.child;continue}if(m===h)break;for(;m.sibling===null;){if(m.return===null||m.return===h)return null;m=m.return}m.sibling.return=m.return,m=m.sibling}return null}var Dl=0,nn=null,Vn=null,Kr=null,Ty=!1,Lf=!1,Gd=!1,Cy=0,Ig=0,If=null,yne=0;function Nr(){throw Error(r(321))}function o2(h,m){if(m===null)return!1;for(var _=0;_D?D:8;var X=K.T,le={};K.T=le,w2(h,!1,m,_);try{var Te=P(),Ze=K.S;if(Ze!==null&&Ze(le,Te),Te!==null&&typeof Te=="object"&&typeof Te.then=="function"){var ct=bne(Te,S);Ug(h,m,ct,fs(h))}else Ug(h,m,S,fs(h))}catch(ht){Ug(h,m,{then:function(){},status:"rejected",reason:ht},fs())}finally{G.p=D,X!==null&&le.types!==null&&(X.types=le.types),K.T=X}}function Mne(){}function v2(h,m,_,S){if(h.tag!==5)throw Error(r(476));var P=rI(h).queue;nI(h,P,m,te,_===null?Mne:function(){return iI(h),_(S)})}function rI(h){var m=h.memoizedState;if(m!==null)return m;m={memoizedState:te,baseState:te,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ol,lastRenderedState:te},next:null};var _={};return m.next={memoizedState:_,baseState:_,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ol,lastRenderedState:_},next:null},h.memoizedState=m,h=h.alternate,h!==null&&(h.memoizedState=m),m}function iI(h){var m=rI(h);m.next===null&&(m=h.alternate.memoizedState),Ug(h,m.next.queue,{},fs())}function _2(){return $i(nx)}function aI(){return Ur().memoizedState}function sI(){return Ur().memoizedState}function Ene(h){for(var m=h.return;m!==null;){switch(m.tag){case 24:case 3:var _=fs();h=nu(_);var S=ru(m,h,_);S!==null&&(Ba(S,m,_),Dg(S,m,_)),m={cache:YE()},h.payload=m;return}m=m.return}}function Ane(h,m,_){var S=fs();_={lane:S,revertLane:0,gesture:null,action:_,hasEagerState:!1,eagerState:null,next:null},Dy(h)?lI(m,_):(_=UE(h,m,_,S),_!==null&&(Ba(_,h,S),cI(_,m,S)))}function oI(h,m,_){var S=fs();Ug(h,m,_,S)}function Ug(h,m,_,S){var P={lane:S,revertLane:0,gesture:null,action:_,hasEagerState:!1,eagerState:null,next:null};if(Dy(h))lI(m,P);else{var D=h.alternate;if(h.lanes===0&&(D===null||D.lanes===0)&&(D=m.lastRenderedReducer,D!==null))try{var X=m.lastRenderedState,le=D(X,_);if(P.hasEagerState=!0,P.eagerState=le,ss(le,X))return my(h,m,P,0),er===null&&fy(),!1}catch{}finally{}if(_=UE(h,m,P,S),_!==null)return Ba(_,h,S),cI(_,m,S),!0}return!1}function w2(h,m,_,S){if(S={lane:2,revertLane:eA(),gesture:null,action:S,hasEagerState:!1,eagerState:null,next:null},Dy(h)){if(m)throw Error(r(479))}else m=UE(h,_,S,2),m!==null&&Ba(m,h,2)}function Dy(h){var m=h.alternate;return h===nn||m!==null&&m===nn}function lI(h,m){Lf=Ty=!0;var _=h.pending;_===null?m.next=m:(m.next=_.next,_.next=m),h.pending=m}function cI(h,m,_){if((_&4194048)!==0){var S=m.lanes;S&=h.pendingLanes,_|=S,m.lanes=_,On(h,_)}}var zg={readContext:$i,use:ky,useCallback:Nr,useContext:Nr,useEffect:Nr,useImperativeHandle:Nr,useLayoutEffect:Nr,useInsertionEffect:Nr,useMemo:Nr,useReducer:Nr,useRef:Nr,useState:Nr,useDebugValue:Nr,useDeferredValue:Nr,useTransition:Nr,useSyncExternalStore:Nr,useId:Nr,useHostTransitionStatus:Nr,useFormState:Nr,useActionState:Nr,useOptimistic:Nr,useMemoCache:Nr,useCacheRefresh:Nr};zg.useEffectEvent=Nr;var uI={readContext:$i,use:ky,useCallback:function(h,m){return ya().memoizedState=[h,m===void 0?null:m],h},useContext:$i,useEffect:q4,useImperativeHandle:function(h,m,_){_=_!=null?_.concat([h]):null,Ry(4194308,4,Z4.bind(null,m,h),_)},useLayoutEffect:function(h,m){return Ry(4194308,4,h,m)},useInsertionEffect:function(h,m){Ry(4,2,h,m)},useMemo:function(h,m){var _=ya();m=m===void 0?null:m;var S=h();if(Gd){tt(!0);try{h()}finally{tt(!1)}}return _.memoizedState=[S,m],S},useReducer:function(h,m,_){var S=ya();if(_!==void 0){var P=_(m);if(Gd){tt(!0);try{_(m)}finally{tt(!1)}}}else P=m;return S.memoizedState=S.baseState=P,h={pending:null,lanes:0,dispatch:null,lastRenderedReducer:h,lastRenderedState:P},S.queue=h,h=h.dispatch=Ane.bind(null,nn,h),[S.memoizedState,h]},useRef:function(h){var m=ya();return h={current:h},m.memoizedState=h},useState:function(h){h=p2(h);var m=h.queue,_=oI.bind(null,nn,m);return m.dispatch=_,[h.memoizedState,_]},useDebugValue:b2,useDeferredValue:function(h,m){var _=ya();return y2(_,h,m)},useTransition:function(){var h=p2(!1);return h=nI.bind(null,nn,h.queue,!0,!1),ya().memoizedState=h,[!1,h]},useSyncExternalStore:function(h,m,_){var S=nn,P=ya();if(wn){if(_===void 0)throw Error(r(407));_=_()}else{if(_=m(),er===null)throw Error(r(349));(yn&127)!==0||P4(S,m,_)}P.memoizedState=_;var D={value:_,getSnapshot:m};return P.queue=D,q4(j4.bind(null,S,D,h),[h]),S.flags|=2048,Ff(9,{destroy:void 0},R4.bind(null,S,D,_,m),null),_},useId:function(){var h=ya(),m=er.identifierPrefix;if(wn){var _=Wo,S=Go;_=(S&~(1<<32-$e(S)-1)).toString(32)+_,m="_"+m+"R_"+_,_=Cy++,0<_&&(m+="H"+_.toString(32)),m+="_"}else _=yne++,m="_"+m+"r_"+_.toString(32)+"_";return h.memoizedState=m},useHostTransitionStatus:_2,useFormState:H4,useActionState:H4,useOptimistic:function(h){var m=ya();m.memoizedState=m.baseState=h;var _={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return m.queue=_,m=w2.bind(null,nn,!0,_),_.dispatch=m,[h,m]},useMemoCache:h2,useCacheRefresh:function(){return ya().memoizedState=Ene.bind(null,nn)},useEffectEvent:function(h){var m=ya(),_={impl:h};return m.memoizedState=_,function(){if((Pn&2)!==0)throw Error(r(440));return _.impl.apply(void 0,arguments)}}},S2={readContext:$i,use:ky,useCallback:J4,useContext:$i,useEffect:x2,useImperativeHandle:Q4,useInsertionEffect:X4,useLayoutEffect:Y4,useMemo:eI,useReducer:Py,useRef:W4,useState:function(){return Py(Ol)},useDebugValue:b2,useDeferredValue:function(h,m){var _=Ur();return tI(_,Vn.memoizedState,h,m)},useTransition:function(){var h=Py(Ol)[0],m=Ur().memoizedState;return[typeof h=="boolean"?h:Fg(h),m]},useSyncExternalStore:k4,useId:aI,useHostTransitionStatus:_2,useFormState:$4,useActionState:$4,useOptimistic:function(h,m){var _=Ur();return L4(_,Vn,h,m)},useMemoCache:h2,useCacheRefresh:sI};S2.useEffectEvent=K4;var dI={readContext:$i,use:ky,useCallback:J4,useContext:$i,useEffect:x2,useImperativeHandle:Q4,useInsertionEffect:X4,useLayoutEffect:Y4,useMemo:eI,useReducer:m2,useRef:W4,useState:function(){return m2(Ol)},useDebugValue:b2,useDeferredValue:function(h,m){var _=Ur();return Vn===null?y2(_,h,m):tI(_,Vn.memoizedState,h,m)},useTransition:function(){var h=m2(Ol)[0],m=Ur().memoizedState;return[typeof h=="boolean"?h:Fg(h),m]},useSyncExternalStore:k4,useId:aI,useHostTransitionStatus:_2,useFormState:G4,useActionState:G4,useOptimistic:function(h,m){var _=Ur();return Vn!==null?L4(_,Vn,h,m):(_.baseState=h,[h,_.queue.dispatch])},useMemoCache:h2,useCacheRefresh:sI};dI.useEffectEvent=K4;function M2(h,m,_,S){m=h.memoizedState,_=_(S,m),_=_==null?m:f({},m,_),h.memoizedState=_,h.lanes===0&&(h.updateQueue.baseState=_)}var E2={enqueueSetState:function(h,m,_){h=h._reactInternals;var S=fs(),P=nu(S);P.payload=m,_!=null&&(P.callback=_),m=ru(h,P,S),m!==null&&(Ba(m,h,S),Dg(m,h,S))},enqueueReplaceState:function(h,m,_){h=h._reactInternals;var S=fs(),P=nu(S);P.tag=1,P.payload=m,_!=null&&(P.callback=_),m=ru(h,P,S),m!==null&&(Ba(m,h,S),Dg(m,h,S))},enqueueForceUpdate:function(h,m){h=h._reactInternals;var _=fs(),S=nu(_);S.tag=2,m!=null&&(S.callback=m),m=ru(h,S,_),m!==null&&(Ba(m,h,_),Dg(m,h,_))}};function hI(h,m,_,S,P,D,X){return h=h.stateNode,typeof h.shouldComponentUpdate=="function"?h.shouldComponentUpdate(S,D,X):m.prototype&&m.prototype.isPureReactComponent?!Ag(_,S)||!Ag(P,D):!0}function fI(h,m,_,S){h=m.state,typeof m.componentWillReceiveProps=="function"&&m.componentWillReceiveProps(_,S),typeof m.UNSAFE_componentWillReceiveProps=="function"&&m.UNSAFE_componentWillReceiveProps(_,S),m.state!==h&&E2.enqueueReplaceState(m,m.state,null)}function Wd(h,m){var _=m;if("ref"in m){_={};for(var S in m)S!=="ref"&&(_[S]=m[S])}if(h=h.defaultProps){_===m&&(_=f({},_));for(var P in h)_[P]===void 0&&(_[P]=h[P])}return _}function mI(h){hy(h)}function pI(h){console.error(h)}function gI(h){hy(h)}function Oy(h,m){try{var _=h.onUncaughtError;_(m.value,{componentStack:m.stack})}catch(S){setTimeout(function(){throw S})}}function xI(h,m,_){try{var S=h.onCaughtError;S(_.value,{componentStack:_.stack,errorBoundary:m.tag===1?m.stateNode:null})}catch(P){setTimeout(function(){throw P})}}function A2(h,m,_){return _=nu(_),_.tag=3,_.payload={element:null},_.callback=function(){Oy(h,m)},_}function bI(h){return h=nu(h),h.tag=3,h}function yI(h,m,_,S){var P=_.type.getDerivedStateFromError;if(typeof P=="function"){var D=S.value;h.payload=function(){return P(D)},h.callback=function(){xI(m,_,S)}}var X=_.stateNode;X!==null&&typeof X.componentDidCatch=="function"&&(h.callback=function(){xI(m,_,S),typeof P!="function"&&(cu===null?cu=new Set([this]):cu.add(this));var le=S.stack;this.componentDidCatch(S.value,{componentStack:le!==null?le:""})})}function Tne(h,m,_,S,P){if(_.flags|=32768,S!==null&&typeof S=="object"&&typeof S.then=="function"){if(m=_.alternate,m!==null&&kf(m,_,P,!0),_=cs.current,_!==null){switch(_.tag){case 31:case 13:return Ls===null?qy():_.alternate===null&&kr===0&&(kr=3),_.flags&=-257,_.flags|=65536,_.lanes=P,S===wy?_.flags|=16384:(m=_.updateQueue,m===null?_.updateQueue=new Set([S]):m.add(S),Z2(h,S,P)),!1;case 22:return _.flags|=65536,S===wy?_.flags|=16384:(m=_.updateQueue,m===null?(m={transitions:null,markerInstances:null,retryQueue:new Set([S])},_.updateQueue=m):(_=m.retryQueue,_===null?m.retryQueue=new Set([S]):_.add(S)),Z2(h,S,P)),!1}throw Error(r(435,_.tag))}return Z2(h,S,P),qy(),!1}if(wn)return m=cs.current,m!==null?((m.flags&65536)===0&&(m.flags|=256),m.flags|=65536,m.lanes=P,S!==GE&&(h=Error(r(422),{cause:S}),Ng(Rs(h,_)))):(S!==GE&&(m=Error(r(423),{cause:S}),Ng(Rs(m,_))),h=h.current.alternate,h.flags|=65536,P&=-P,h.lanes|=P,S=Rs(S,_),P=A2(h.stateNode,S,P),n2(h,P),kr!==4&&(kr=2)),!1;var D=Error(r(520),{cause:S});if(D=Rs(D,_),Kg===null?Kg=[D]:Kg.push(D),kr!==4&&(kr=2),m===null)return!0;S=Rs(S,_),_=m;do{switch(_.tag){case 3:return _.flags|=65536,h=P&-P,_.lanes|=h,h=A2(_.stateNode,S,h),n2(_,h),!1;case 1:if(m=_.type,D=_.stateNode,(_.flags&128)===0&&(typeof m.getDerivedStateFromError=="function"||D!==null&&typeof D.componentDidCatch=="function"&&(cu===null||!cu.has(D))))return _.flags|=65536,P&=-P,_.lanes|=P,P=bI(P),yI(P,h,_,S),n2(_,P),!1}_=_.return}while(_!==null);return!1}var T2=Error(r(461)),Xr=!1;function Vi(h,m,_,S){m.child=h===null?S4(m,null,_,S):Vd(m,h.child,_,S)}function vI(h,m,_,S,P){_=_.render;var D=m.ref;if("ref"in S){var X={};for(var le in S)le!=="ref"&&(X[le]=S[le])}else X=S;return zd(m),S=l2(h,m,_,X,D,P),le=c2(),h!==null&&!Xr?(u2(h,m,P),Ll(h,m,P)):(wn&&le&&$E(m),m.flags|=1,Vi(h,m,S,P),m.child)}function _I(h,m,_,S,P){if(h===null){var D=_.type;return typeof D=="function"&&!zE(D)&&D.defaultProps===void 0&&_.compare===null?(m.tag=15,m.type=D,wI(h,m,D,S,P)):(h=gy(_.type,null,S,m,m.mode,P),h.ref=m.ref,h.return=m,m.child=h)}if(D=h.child,!O2(h,P)){var X=D.memoizedProps;if(_=_.compare,_=_!==null?_:Ag,_(X,S)&&h.ref===m.ref)return Ll(h,m,P)}return m.flags|=1,h=kl(D,S),h.ref=m.ref,h.return=m,m.child=h}function wI(h,m,_,S,P){if(h!==null){var D=h.memoizedProps;if(Ag(D,S)&&h.ref===m.ref)if(Xr=!1,m.pendingProps=S=D,O2(h,P))(h.flags&131072)!==0&&(Xr=!0);else return m.lanes=h.lanes,Ll(h,m,P)}return C2(h,m,_,S,P)}function SI(h,m,_,S){var P=S.children,D=h!==null?h.memoizedState:null;if(h===null&&m.stateNode===null&&(m.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),S.mode==="hidden"){if((m.flags&128)!==0){if(D=D!==null?D.baseLanes|_:_,h!==null){for(S=m.child=h.child,P=0;S!==null;)P=P|S.lanes|S.childLanes,S=S.sibling;S=P&~D}else S=0,m.child=null;return MI(h,m,D,_,S)}if((_&536870912)!==0)m.memoizedState={baseLanes:0,cachePool:null},h!==null&&vy(m,D!==null?D.cachePool:null),D!==null?A4(m,D):i2(),T4(m);else return S=m.lanes=536870912,MI(h,m,D!==null?D.baseLanes|_:_,_,S)}else D!==null?(vy(m,D.cachePool),A4(m,D),au(),m.memoizedState=null):(h!==null&&vy(m,null),i2(),au());return Vi(h,m,P,_),m.child}function Bg(h,m){return h!==null&&h.tag===22||m.stateNode!==null||(m.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),m.sibling}function MI(h,m,_,S,P){var D=QE();return D=D===null?null:{parent:qr._currentValue,pool:D},m.memoizedState={baseLanes:_,cachePool:D},h!==null&&vy(m,null),i2(),T4(m),h!==null&&kf(h,m,S,!0),m.childLanes=P,null}function Ly(h,m){return m=Fy({mode:m.mode,children:m.children},h.mode),m.ref=h.ref,h.child=m,m.return=h,m}function EI(h,m,_){return Vd(m,h.child,null,_),h=Ly(m,m.pendingProps),h.flags|=2,us(m),m.memoizedState=null,h}function Cne(h,m,_){var S=m.pendingProps,P=(m.flags&128)!==0;if(m.flags&=-129,h===null){if(wn){if(S.mode==="hidden")return h=Ly(m,S),m.lanes=536870912,Bg(null,h);if(s2(m),(h=lr)?(h=I5(h,Os),h=h!==null&&h.data==="&"?h:null,h!==null&&(m.memoizedState={dehydrated:h,treeContext:Zc!==null?{id:Go,overflow:Wo}:null,retryLane:536870912,hydrationErrors:null},_=l4(h),_.return=m,m.child=_,Hi=m,lr=null)):h=null,h===null)throw Jc(m);return m.lanes=536870912,null}return Ly(m,S)}var D=h.memoizedState;if(D!==null){var X=D.dehydrated;if(s2(m),P)if(m.flags&256)m.flags&=-257,m=EI(h,m,_);else if(m.memoizedState!==null)m.child=h.child,m.flags|=128,m=null;else throw Error(r(558));else if(Xr||kf(h,m,_,!1),P=(_&h.childLanes)!==0,Xr||P){if(S=er,S!==null&&(X=Mi(S,_),X!==0&&X!==D.retryLane))throw D.retryLane=X,Ld(h,X),Ba(S,h,X),T2;qy(),m=EI(h,m,_)}else h=D.treeContext,lr=Is(X.nextSibling),Hi=m,wn=!0,Qc=null,Os=!1,h!==null&&d4(m,h),m=Ly(m,S),m.flags|=4096;return m}return h=kl(h.child,{mode:S.mode,children:S.children}),h.ref=m.ref,m.child=h,h.return=m,h}function Iy(h,m){var _=m.ref;if(_===null)h!==null&&h.ref!==null&&(m.flags|=4194816);else{if(typeof _!="function"&&typeof _!="object")throw Error(r(284));(h===null||h.ref!==_)&&(m.flags|=4194816)}}function C2(h,m,_,S,P){return zd(m),_=l2(h,m,_,S,void 0,P),S=c2(),h!==null&&!Xr?(u2(h,m,P),Ll(h,m,P)):(wn&&S&&$E(m),m.flags|=1,Vi(h,m,_,P),m.child)}function AI(h,m,_,S,P,D){return zd(m),m.updateQueue=null,_=N4(m,S,_,P),C4(h),S=c2(),h!==null&&!Xr?(u2(h,m,D),Ll(h,m,D)):(wn&&S&&$E(m),m.flags|=1,Vi(h,m,_,D),m.child)}function TI(h,m,_,S,P){if(zd(m),m.stateNode===null){var D=Af,X=_.contextType;typeof X=="object"&&X!==null&&(D=$i(X)),D=new _(S,D),m.memoizedState=D.state!==null&&D.state!==void 0?D.state:null,D.updater=E2,m.stateNode=D,D._reactInternals=m,D=m.stateNode,D.props=S,D.state=m.memoizedState,D.refs={},e2(m),X=_.contextType,D.context=typeof X=="object"&&X!==null?$i(X):Af,D.state=m.memoizedState,X=_.getDerivedStateFromProps,typeof X=="function"&&(M2(m,_,X,S),D.state=m.memoizedState),typeof _.getDerivedStateFromProps=="function"||typeof D.getSnapshotBeforeUpdate=="function"||typeof D.UNSAFE_componentWillMount!="function"&&typeof D.componentWillMount!="function"||(X=D.state,typeof D.componentWillMount=="function"&&D.componentWillMount(),typeof D.UNSAFE_componentWillMount=="function"&&D.UNSAFE_componentWillMount(),X!==D.state&&E2.enqueueReplaceState(D,D.state,null),Lg(m,S,D,P),Og(),D.state=m.memoizedState),typeof D.componentDidMount=="function"&&(m.flags|=4194308),S=!0}else if(h===null){D=m.stateNode;var le=m.memoizedProps,Te=Wd(_,le);D.props=Te;var Ze=D.context,ct=_.contextType;X=Af,typeof ct=="object"&&ct!==null&&(X=$i(ct));var ht=_.getDerivedStateFromProps;ct=typeof ht=="function"||typeof D.getSnapshotBeforeUpdate=="function",le=m.pendingProps!==le,ct||typeof D.UNSAFE_componentWillReceiveProps!="function"&&typeof D.componentWillReceiveProps!="function"||(le||Ze!==X)&&fI(m,D,S,X),tu=!1;var Je=m.memoizedState;D.state=Je,Lg(m,S,D,P),Og(),Ze=m.memoizedState,le||Je!==Ze||tu?(typeof ht=="function"&&(M2(m,_,ht,S),Ze=m.memoizedState),(Te=tu||hI(m,_,Te,S,Je,Ze,X))?(ct||typeof D.UNSAFE_componentWillMount!="function"&&typeof D.componentWillMount!="function"||(typeof D.componentWillMount=="function"&&D.componentWillMount(),typeof D.UNSAFE_componentWillMount=="function"&&D.UNSAFE_componentWillMount()),typeof D.componentDidMount=="function"&&(m.flags|=4194308)):(typeof D.componentDidMount=="function"&&(m.flags|=4194308),m.memoizedProps=S,m.memoizedState=Ze),D.props=S,D.state=Ze,D.context=X,S=Te):(typeof D.componentDidMount=="function"&&(m.flags|=4194308),S=!1)}else{D=m.stateNode,t2(h,m),X=m.memoizedProps,ct=Wd(_,X),D.props=ct,ht=m.pendingProps,Je=D.context,Ze=_.contextType,Te=Af,typeof Ze=="object"&&Ze!==null&&(Te=$i(Ze)),le=_.getDerivedStateFromProps,(Ze=typeof le=="function"||typeof D.getSnapshotBeforeUpdate=="function")||typeof D.UNSAFE_componentWillReceiveProps!="function"&&typeof D.componentWillReceiveProps!="function"||(X!==ht||Je!==Te)&&fI(m,D,S,Te),tu=!1,Je=m.memoizedState,D.state=Je,Lg(m,S,D,P),Og();var st=m.memoizedState;X!==ht||Je!==st||tu||h!==null&&h.dependencies!==null&&by(h.dependencies)?(typeof le=="function"&&(M2(m,_,le,S),st=m.memoizedState),(ct=tu||hI(m,_,ct,S,Je,st,Te)||h!==null&&h.dependencies!==null&&by(h.dependencies))?(Ze||typeof D.UNSAFE_componentWillUpdate!="function"&&typeof D.componentWillUpdate!="function"||(typeof D.componentWillUpdate=="function"&&D.componentWillUpdate(S,st,Te),typeof D.UNSAFE_componentWillUpdate=="function"&&D.UNSAFE_componentWillUpdate(S,st,Te)),typeof D.componentDidUpdate=="function"&&(m.flags|=4),typeof D.getSnapshotBeforeUpdate=="function"&&(m.flags|=1024)):(typeof D.componentDidUpdate!="function"||X===h.memoizedProps&&Je===h.memoizedState||(m.flags|=4),typeof D.getSnapshotBeforeUpdate!="function"||X===h.memoizedProps&&Je===h.memoizedState||(m.flags|=1024),m.memoizedProps=S,m.memoizedState=st),D.props=S,D.state=st,D.context=Te,S=ct):(typeof D.componentDidUpdate!="function"||X===h.memoizedProps&&Je===h.memoizedState||(m.flags|=4),typeof D.getSnapshotBeforeUpdate!="function"||X===h.memoizedProps&&Je===h.memoizedState||(m.flags|=1024),S=!1)}return D=S,Iy(h,m),S=(m.flags&128)!==0,D||S?(D=m.stateNode,_=S&&typeof _.getDerivedStateFromError!="function"?null:D.render(),m.flags|=1,h!==null&&S?(m.child=Vd(m,h.child,null,P),m.child=Vd(m,null,_,P)):Vi(h,m,_,P),m.memoizedState=D.state,h=m.child):h=Ll(h,m,P),h}function CI(h,m,_,S){return Fd(),m.flags|=256,Vi(h,m,_,S),m.child}var N2={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function k2(h){return{baseLanes:h,cachePool:x4()}}function P2(h,m,_){return h=h!==null?h.childLanes&~_:0,m&&(h|=hs),h}function NI(h,m,_){var S=m.pendingProps,P=!1,D=(m.flags&128)!==0,X;if((X=D)||(X=h!==null&&h.memoizedState===null?!1:(Fr.current&2)!==0),X&&(P=!0,m.flags&=-129),X=(m.flags&32)!==0,m.flags&=-33,h===null){if(wn){if(P?iu(m):au(),(h=lr)?(h=I5(h,Os),h=h!==null&&h.data!=="&"?h:null,h!==null&&(m.memoizedState={dehydrated:h,treeContext:Zc!==null?{id:Go,overflow:Wo}:null,retryLane:536870912,hydrationErrors:null},_=l4(h),_.return=m,m.child=_,Hi=m,lr=null)):h=null,h===null)throw Jc(m);return fA(h)?m.lanes=32:m.lanes=536870912,null}var le=S.children;return S=S.fallback,P?(au(),P=m.mode,le=Fy({mode:"hidden",children:le},P),S=Id(S,P,_,null),le.return=m,S.return=m,le.sibling=S,m.child=le,S=m.child,S.memoizedState=k2(_),S.childLanes=P2(h,X,_),m.memoizedState=N2,Bg(null,S)):(iu(m),R2(m,le))}var Te=h.memoizedState;if(Te!==null&&(le=Te.dehydrated,le!==null)){if(D)m.flags&256?(iu(m),m.flags&=-257,m=j2(h,m,_)):m.memoizedState!==null?(au(),m.child=h.child,m.flags|=128,m=null):(au(),le=S.fallback,P=m.mode,S=Fy({mode:"visible",children:S.children},P),le=Id(le,P,_,null),le.flags|=2,S.return=m,le.return=m,S.sibling=le,m.child=S,Vd(m,h.child,null,_),S=m.child,S.memoizedState=k2(_),S.childLanes=P2(h,X,_),m.memoizedState=N2,m=Bg(null,S));else if(iu(m),fA(le)){if(X=le.nextSibling&&le.nextSibling.dataset,X)var Ze=X.dgst;X=Ze,S=Error(r(419)),S.stack="",S.digest=X,Ng({value:S,source:null,stack:null}),m=j2(h,m,_)}else if(Xr||kf(h,m,_,!1),X=(_&h.childLanes)!==0,Xr||X){if(X=er,X!==null&&(S=Mi(X,_),S!==0&&S!==Te.retryLane))throw Te.retryLane=S,Ld(h,S),Ba(X,h,S),T2;hA(le)||qy(),m=j2(h,m,_)}else hA(le)?(m.flags|=192,m.child=h.child,m=null):(h=Te.treeContext,lr=Is(le.nextSibling),Hi=m,wn=!0,Qc=null,Os=!1,h!==null&&d4(m,h),m=R2(m,S.children),m.flags|=4096);return m}return P?(au(),le=S.fallback,P=m.mode,Te=h.child,Ze=Te.sibling,S=kl(Te,{mode:"hidden",children:S.children}),S.subtreeFlags=Te.subtreeFlags&65011712,Ze!==null?le=kl(Ze,le):(le=Id(le,P,_,null),le.flags|=2),le.return=m,S.return=m,S.sibling=le,m.child=S,Bg(null,S),S=m.child,le=h.child.memoizedState,le===null?le=k2(_):(P=le.cachePool,P!==null?(Te=qr._currentValue,P=P.parent!==Te?{parent:Te,pool:Te}:P):P=x4(),le={baseLanes:le.baseLanes|_,cachePool:P}),S.memoizedState=le,S.childLanes=P2(h,X,_),m.memoizedState=N2,Bg(h.child,S)):(iu(m),_=h.child,h=_.sibling,_=kl(_,{mode:"visible",children:S.children}),_.return=m,_.sibling=null,h!==null&&(X=m.deletions,X===null?(m.deletions=[h],m.flags|=16):X.push(h)),m.child=_,m.memoizedState=null,_)}function R2(h,m){return m=Fy({mode:"visible",children:m},h.mode),m.return=h,h.child=m}function Fy(h,m){return h=ls(22,h,null,m),h.lanes=0,h}function j2(h,m,_){return Vd(m,h.child,null,_),h=R2(m,m.pendingProps.children),h.flags|=2,m.memoizedState=null,h}function kI(h,m,_){h.lanes|=m;var S=h.alternate;S!==null&&(S.lanes|=m),KE(h.return,m,_)}function D2(h,m,_,S,P,D){var X=h.memoizedState;X===null?h.memoizedState={isBackwards:m,rendering:null,renderingStartTime:0,last:S,tail:_,tailMode:P,treeForkCount:D}:(X.isBackwards=m,X.rendering=null,X.renderingStartTime=0,X.last=S,X.tail=_,X.tailMode=P,X.treeForkCount=D)}function PI(h,m,_){var S=m.pendingProps,P=S.revealOrder,D=S.tail;S=S.children;var X=Fr.current,le=(X&2)!==0;if(le?(X=X&1|2,m.flags|=128):X&=1,ee(Fr,X),Vi(h,m,S,_),S=wn?Cg:0,!le&&h!==null&&(h.flags&128)!==0)e:for(h=m.child;h!==null;){if(h.tag===13)h.memoizedState!==null&&kI(h,_,m);else if(h.tag===19)kI(h,_,m);else if(h.child!==null){h.child.return=h,h=h.child;continue}if(h===m)break e;for(;h.sibling===null;){if(h.return===null||h.return===m)break e;h=h.return}h.sibling.return=h.return,h=h.sibling}switch(P){case"forwards":for(_=m.child,P=null;_!==null;)h=_.alternate,h!==null&&Ay(h)===null&&(P=_),_=_.sibling;_=P,_===null?(P=m.child,m.child=null):(P=_.sibling,_.sibling=null),D2(m,!1,P,_,D,S);break;case"backwards":case"unstable_legacy-backwards":for(_=null,P=m.child,m.child=null;P!==null;){if(h=P.alternate,h!==null&&Ay(h)===null){m.child=P;break}h=P.sibling,P.sibling=_,_=P,P=h}D2(m,!0,_,null,D,S);break;case"together":D2(m,!1,null,null,void 0,S);break;default:m.memoizedState=null}return m.child}function Ll(h,m,_){if(h!==null&&(m.dependencies=h.dependencies),lu|=m.lanes,(_&m.childLanes)===0)if(h!==null){if(kf(h,m,_,!1),(_&m.childLanes)===0)return null}else return null;if(h!==null&&m.child!==h.child)throw Error(r(153));if(m.child!==null){for(h=m.child,_=kl(h,h.pendingProps),m.child=_,_.return=m;h.sibling!==null;)h=h.sibling,_=_.sibling=kl(h,h.pendingProps),_.return=m;_.sibling=null}return m.child}function O2(h,m){return(h.lanes&m)!==0?!0:(h=h.dependencies,!!(h!==null&&by(h)))}function Nne(h,m,_){switch(m.tag){case 3:Re(m,m.stateNode.containerInfo),eu(m,qr,h.memoizedState.cache),Fd();break;case 27:case 5:_e(m);break;case 4:Re(m,m.stateNode.containerInfo);break;case 10:eu(m,m.type,m.memoizedProps.value);break;case 31:if(m.memoizedState!==null)return m.flags|=128,s2(m),null;break;case 13:var S=m.memoizedState;if(S!==null)return S.dehydrated!==null?(iu(m),m.flags|=128,null):(_&m.child.childLanes)!==0?NI(h,m,_):(iu(m),h=Ll(h,m,_),h!==null?h.sibling:null);iu(m);break;case 19:var P=(h.flags&128)!==0;if(S=(_&m.childLanes)!==0,S||(kf(h,m,_,!1),S=(_&m.childLanes)!==0),P){if(S)return PI(h,m,_);m.flags|=128}if(P=m.memoizedState,P!==null&&(P.rendering=null,P.tail=null,P.lastEffect=null),ee(Fr,Fr.current),S)break;return null;case 22:return m.lanes=0,SI(h,m,_,m.pendingProps);case 24:eu(m,qr,h.memoizedState.cache)}return Ll(h,m,_)}function RI(h,m,_){if(h!==null)if(h.memoizedProps!==m.pendingProps)Xr=!0;else{if(!O2(h,_)&&(m.flags&128)===0)return Xr=!1,Nne(h,m,_);Xr=(h.flags&131072)!==0}else Xr=!1,wn&&(m.flags&1048576)!==0&&u4(m,Cg,m.index);switch(m.lanes=0,m.tag){case 16:e:{var S=m.pendingProps;if(h=Hd(m.elementType),m.type=h,typeof h=="function")zE(h)?(S=Wd(h,S),m.tag=1,m=TI(null,m,h,S,_)):(m.tag=0,m=C2(null,m,h,S,_));else{if(h!=null){var P=h.$$typeof;if(P===A){m.tag=11,m=vI(null,m,h,S,_);break e}else if(P===k){m.tag=14,m=_I(null,m,h,S,_);break e}}throw m=R(h)||h,Error(r(306,m,""))}}return m;case 0:return C2(h,m,m.type,m.pendingProps,_);case 1:return S=m.type,P=Wd(S,m.pendingProps),TI(h,m,S,P,_);case 3:e:{if(Re(m,m.stateNode.containerInfo),h===null)throw Error(r(387));S=m.pendingProps;var D=m.memoizedState;P=D.element,t2(h,m),Lg(m,S,null,_);var X=m.memoizedState;if(S=X.cache,eu(m,qr,S),S!==D.cache&&XE(m,[qr],_,!0),Og(),S=X.element,D.isDehydrated)if(D={element:S,isDehydrated:!1,cache:X.cache},m.updateQueue.baseState=D,m.memoizedState=D,m.flags&256){m=CI(h,m,S,_);break e}else if(S!==P){P=Rs(Error(r(424)),m),Ng(P),m=CI(h,m,S,_);break e}else{switch(h=m.stateNode.containerInfo,h.nodeType){case 9:h=h.body;break;default:h=h.nodeName==="HTML"?h.ownerDocument.body:h}for(lr=Is(h.firstChild),Hi=m,wn=!0,Qc=null,Os=!0,_=S4(m,null,S,_),m.child=_;_;)_.flags=_.flags&-3|4096,_=_.sibling}else{if(Fd(),S===P){m=Ll(h,m,_);break e}Vi(h,m,S,_)}m=m.child}return m;case 26:return Iy(h,m),h===null?(_=$5(m.type,null,m.pendingProps,null))?m.memoizedState=_:wn||(_=m.type,h=m.pendingProps,S=ev(ue.current).createElement(_),S[yr]=m,S[Lr]=h,Gi(S,_,h),Oe(S),m.stateNode=S):m.memoizedState=$5(m.type,h.memoizedProps,m.pendingProps,h.memoizedState),null;case 27:return _e(m),h===null&&wn&&(S=m.stateNode=z5(m.type,m.pendingProps,ue.current),Hi=m,Os=!0,P=lr,fu(m.type)?(mA=P,lr=Is(S.firstChild)):lr=P),Vi(h,m,m.pendingProps.children,_),Iy(h,m),h===null&&(m.flags|=4194304),m.child;case 5:return h===null&&wn&&((P=S=lr)&&(S=are(S,m.type,m.pendingProps,Os),S!==null?(m.stateNode=S,Hi=m,lr=Is(S.firstChild),Os=!1,P=!0):P=!1),P||Jc(m)),_e(m),P=m.type,D=m.pendingProps,X=h!==null?h.memoizedProps:null,S=D.children,cA(P,D)?S=null:X!==null&&cA(P,X)&&(m.flags|=32),m.memoizedState!==null&&(P=l2(h,m,vne,null,null,_),nx._currentValue=P),Iy(h,m),Vi(h,m,S,_),m.child;case 6:return h===null&&wn&&((h=_=lr)&&(_=sre(_,m.pendingProps,Os),_!==null?(m.stateNode=_,Hi=m,lr=null,h=!0):h=!1),h||Jc(m)),null;case 13:return NI(h,m,_);case 4:return Re(m,m.stateNode.containerInfo),S=m.pendingProps,h===null?m.child=Vd(m,null,S,_):Vi(h,m,S,_),m.child;case 11:return vI(h,m,m.type,m.pendingProps,_);case 7:return Vi(h,m,m.pendingProps,_),m.child;case 8:return Vi(h,m,m.pendingProps.children,_),m.child;case 12:return Vi(h,m,m.pendingProps.children,_),m.child;case 10:return S=m.pendingProps,eu(m,m.type,S.value),Vi(h,m,S.children,_),m.child;case 9:return P=m.type._context,S=m.pendingProps.children,zd(m),P=$i(P),S=S(P),m.flags|=1,Vi(h,m,S,_),m.child;case 14:return _I(h,m,m.type,m.pendingProps,_);case 15:return wI(h,m,m.type,m.pendingProps,_);case 19:return PI(h,m,_);case 31:return Cne(h,m,_);case 22:return SI(h,m,_,m.pendingProps);case 24:return zd(m),S=$i(qr),h===null?(P=QE(),P===null&&(P=er,D=YE(),P.pooledCache=D,D.refCount++,D!==null&&(P.pooledCacheLanes|=_),P=D),m.memoizedState={parent:S,cache:P},e2(m),eu(m,qr,P)):((h.lanes&_)!==0&&(t2(h,m),Lg(m,null,null,_),Og()),P=h.memoizedState,D=m.memoizedState,P.parent!==S?(P={parent:S,cache:S},m.memoizedState=P,m.lanes===0&&(m.memoizedState=m.updateQueue.baseState=P),eu(m,qr,S)):(S=D.cache,eu(m,qr,S),S!==P.cache&&XE(m,[qr],_,!0))),Vi(h,m,m.pendingProps.children,_),m.child;case 29:throw m.pendingProps}throw Error(r(156,m.tag))}function Il(h){h.flags|=4}function L2(h,m,_,S,P){if((m=(h.mode&32)!==0)&&(m=!1),m){if(h.flags|=16777216,(P&335544128)===P)if(h.stateNode.complete)h.flags|=8192;else if(a5())h.flags|=8192;else throw $d=wy,JE}else h.flags&=-16777217}function jI(h,m){if(m.type!=="stylesheet"||(m.state.loading&4)!==0)h.flags&=-16777217;else if(h.flags|=16777216,!K5(m))if(a5())h.flags|=8192;else throw $d=wy,JE}function Uy(h,m){m!==null&&(h.flags|=4),h.flags&16384&&(m=h.tag!==22?xt():536870912,h.lanes|=m,Hf|=m)}function Hg(h,m){if(!wn)switch(h.tailMode){case"hidden":m=h.tail;for(var _=null;m!==null;)m.alternate!==null&&(_=m),m=m.sibling;_===null?h.tail=null:_.sibling=null;break;case"collapsed":_=h.tail;for(var S=null;_!==null;)_.alternate!==null&&(S=_),_=_.sibling;S===null?m||h.tail===null?h.tail=null:h.tail.sibling=null:S.sibling=null}}function cr(h){var m=h.alternate!==null&&h.alternate.child===h.child,_=0,S=0;if(m)for(var P=h.child;P!==null;)_|=P.lanes|P.childLanes,S|=P.subtreeFlags&65011712,S|=P.flags&65011712,P.return=h,P=P.sibling;else for(P=h.child;P!==null;)_|=P.lanes|P.childLanes,S|=P.subtreeFlags,S|=P.flags,P.return=h,P=P.sibling;return h.subtreeFlags|=S,h.childLanes=_,m}function kne(h,m,_){var S=m.pendingProps;switch(VE(m),m.tag){case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return cr(m),null;case 1:return cr(m),null;case 3:return _=m.stateNode,S=null,h!==null&&(S=h.memoizedState.cache),m.memoizedState.cache!==S&&(m.flags|=2048),jl(qr),Z(),_.pendingContext&&(_.context=_.pendingContext,_.pendingContext=null),(h===null||h.child===null)&&(Nf(m)?Il(m):h===null||h.memoizedState.isDehydrated&&(m.flags&256)===0||(m.flags|=1024,WE())),cr(m),null;case 26:var P=m.type,D=m.memoizedState;return h===null?(Il(m),D!==null?(cr(m),jI(m,D)):(cr(m),L2(m,P,null,S,_))):D?D!==h.memoizedState?(Il(m),cr(m),jI(m,D)):(cr(m),m.flags&=-16777217):(h=h.memoizedProps,h!==S&&Il(m),cr(m),L2(m,P,h,S,_)),null;case 27:if(Le(m),_=ue.current,P=m.type,h!==null&&m.stateNode!=null)h.memoizedProps!==S&&Il(m);else{if(!S){if(m.stateNode===null)throw Error(r(166));return cr(m),null}h=ie.current,Nf(m)?h4(m):(h=z5(P,S,_),m.stateNode=h,Il(m))}return cr(m),null;case 5:if(Le(m),P=m.type,h!==null&&m.stateNode!=null)h.memoizedProps!==S&&Il(m);else{if(!S){if(m.stateNode===null)throw Error(r(166));return cr(m),null}if(D=ie.current,Nf(m))h4(m);else{var X=ev(ue.current);switch(D){case 1:D=X.createElementNS("http://www.w3.org/2000/svg",P);break;case 2:D=X.createElementNS("http://www.w3.org/1998/Math/MathML",P);break;default:switch(P){case"svg":D=X.createElementNS("http://www.w3.org/2000/svg",P);break;case"math":D=X.createElementNS("http://www.w3.org/1998/Math/MathML",P);break;case"script":D=X.createElement("div"),D.innerHTML=" +