diff --git a/eval_protocol/mcp/mcp_multi_client.py b/eval_protocol/mcp/mcp_multi_client.py index 38f2dbee..5b0c676c 100644 --- a/eval_protocol/mcp/mcp_multi_client.py +++ b/eval_protocol/mcp/mcp_multi_client.py @@ -69,10 +69,7 @@ async def connect_to_servers(self): return for server_name, server_config in self.config.mcpServers.items(): - try: - await self._connect_to_server(server_name, server_config) - except Exception as e: - print(f"Failed to connect to server '{server_name}': {e}") + await self._connect_to_server(server_name, server_config) async def _connect_to_server( self, server_name: str, server_config: Union[MCPConfigurationServerStdio, MCPConfigurationServerUrl] diff --git a/eval_protocol/models.py b/eval_protocol/models.py index 61b96e54..d210d0cc 100644 --- a/eval_protocol/models.py +++ b/eval_protocol/models.py @@ -107,13 +107,29 @@ class Code(int, Enum): DATA_LOSS = 15 UNAUTHENTICATED = 16 - # Custom codes for rollout states (using higher numbers to avoid conflicts) + # Custom codes for EP (using higher numbers to avoid conflicts) FINISHED = 100 + RUNNING = 101 @classmethod def rollout_running(cls) -> "Status": """Create a status indicating the rollout is running.""" - return cls(code=cls.Code.OK, message="Rollout is running", details=[]) + return cls(code=cls.Code.RUNNING, message="Rollout is running", details=[]) + + @classmethod + def eval_running(cls) -> "Status": + """Create a status indicating the evaluation is running.""" + return cls(code=cls.Code.RUNNING, message="Evaluation is running", details=[]) + + @classmethod + def eval_finished(cls) -> "Status": + """Create a status indicating the evaluation finished.""" + return cls(code=cls.Code.FINISHED, message="Evaluation finished", details=[]) + + @classmethod + def aborted(cls, message: str, details: Optional[List[Dict[str, Any]]] = None) -> "Status": + """Create a status indicating the evaluation was aborted.""" + return cls(code=cls.Code.ABORTED, message=message, details=details or []) @classmethod def rollout_finished( @@ -127,7 +143,12 @@ def rollout_finished( details.append(ErrorInfo.termination_reason(termination_reason).to_aip193_format()) if extra_info: details.append(ErrorInfo.extra_info(extra_info).to_aip193_format()) - return cls(code=cls.Code.FINISHED, message="Rollout finished", details=details) + return cls.finished("Rollout finished", details) + + @classmethod + def finished(cls, message: str, details: Optional[List[Dict[str, Any]]] = None) -> "Status": + """Create a status indicating the rollout finished.""" + return cls(code=cls.Code.FINISHED, message=message, details=details or []) @classmethod def rollout_error(cls, error_message: str, extra_info: Optional[Dict[str, Any]] = None) -> "Status": @@ -140,11 +161,11 @@ def rollout_error(cls, error_message: str, extra_info: Optional[Dict[str, Any]] @classmethod def error(cls, error_message: str, details: Optional[List[Dict[str, Any]]] = None) -> "Status": """Create a status indicating the rollout failed with an error.""" - return cls(code=cls.Code.INTERNAL, message=error_message, details=details) + return cls(code=cls.Code.INTERNAL, message=error_message, details=details or []) def is_running(self) -> bool: """Check if the status indicates the rollout is running.""" - return self.code == self.Code.OK and self.message == "Rollout is running" + return self.code == self.Code.RUNNING def is_finished(self) -> bool: """Check if the status indicates the rollout finished successfully.""" @@ -436,9 +457,7 @@ class EvalMetadata(BaseModel): default_factory=get_pep440_version, description="Version of the evaluation. Should be populated with a PEP 440 version string.", ) - status: Optional[Literal["running", "finished", "error", "stopped"]] = Field( - None, description="Status of the evaluation" - ) + status: Optional[Status] = Field(None, description="Status of the evaluation") num_runs: int = Field(..., description="Number of times the evaluation was repeated") aggregation_method: str = Field(..., description="Method used to aggregate scores across runs") passed_threshold: Optional[EvaluationThreshold] = Field( @@ -527,7 +546,7 @@ class EvaluationRow(BaseModel): ) pid: Optional[int] = Field( - None, + default=None, description="The PID of the process that created the row. This is used by the evaluation watcher to detect stopped evaluations.", ) diff --git a/eval_protocol/pytest/evaluation_test.py b/eval_protocol/pytest/evaluation_test.py index 95abbab9..2cacc09f 100644 --- a/eval_protocol/pytest/evaluation_test.py +++ b/eval_protocol/pytest/evaluation_test.py @@ -21,11 +21,13 @@ from eval_protocol.human_id import generate_id, num_combinations from eval_protocol.models import ( CompletionParams, + ErrorInfo, EvalMetadata, EvaluationRow, EvaluationThreshold, InputMetadata, Message, + Status, ) from eval_protocol.pytest.default_dataset_adapter import default_dataset_adapter from eval_protocol.pytest.default_no_op_rollout_processor import NoOpRolloutProcessor @@ -36,7 +38,6 @@ EvaluationInputParam, EvaluationTestMode, InputMessagesParam, - InputRowsParam, ModelParam, RolloutProcessorConfig, RolloutProcessorInputParam, @@ -58,6 +59,7 @@ ) from eval_protocol.pytest.exception_config import ExceptionHandlerConfig from eval_protocol.stats.confidence_intervals import compute_fixed_set_mu_ci +from eval_protocol.types.types import TerminationReason from ..common_utils import load_jsonl @@ -240,7 +242,7 @@ def evaluation_test( # noqa: C901 completion_params: List[CompletionParams], input_messages: Optional[List[InputMessagesParam]] = None, input_dataset: Optional[List[DatasetPathParam]] = None, - input_rows: Optional[List[InputRowsParam]] = None, + input_rows: Optional[List[EvaluationRow]] = None, dataset_adapter: Callable[[List[Dict[str, Any]]], Dataset] = default_dataset_adapter, rollout_processor: RolloutProcessor = NoOpRolloutProcessor(), evaluation_test_kwargs: Optional[List[EvaluationInputParam]] = None, @@ -425,7 +427,7 @@ async def execute_with_params( if mode == "groupwise": combinations = generate_parameter_combinations( input_dataset, - None, + completion_params, input_messages, input_rows, evaluation_test_kwargs, @@ -489,9 +491,7 @@ async def wrapper_body(**kwargs): experiment_id = generate_id() - def _log_eval_error( - status: Literal["finished", "error"], rows: Optional[List[EvaluationRow]] | None, passed: bool - ) -> None: + def _log_eval_error(status: Status, rows: Optional[List[EvaluationRow]] | None, passed: bool) -> None: log_eval_status_and_rows(eval_metadata, rows, status, passed, active_logger) try: @@ -562,7 +562,7 @@ def _log_eval_error( eval_metadata = EvalMetadata( name=test_func.__name__, description=test_func.__doc__, - status="running", + status=Status.eval_running(), num_runs=num_runs, aggregation_method=aggregation_method, passed_threshold=threshold, @@ -732,7 +732,12 @@ async def _collect_result(config, lst): for r in results: if r.eval_metadata is not None: - r.eval_metadata.status = "finished" + if r.rollout_status.is_error(): + r.eval_metadata.status = Status.error( + r.rollout_status.message, r.rollout_status.details + ) + else: + r.eval_metadata.status = Status.eval_finished() active_logger.log(r) # for groupwise mode, the result contains eval otuput from multiple completion_params, we need to differentiate them @@ -770,14 +775,16 @@ async def _collect_result(config, lst): except AssertionError: _log_eval_error( - "finished", + Status.eval_finished(), processed_rows_in_run if "processed_rows_in_run" in locals() else None, passed=False, ) raise - except Exception: + except Exception as e: _log_eval_error( - "error", processed_rows_in_run if "processed_rows_in_run" in locals() else None, passed=False + Status.error(str(e)), + processed_rows_in_run if "processed_rows_in_run" in locals() else None, + passed=False, ) raise diff --git a/eval_protocol/pytest/types.py b/eval_protocol/pytest/types.py index cd6c7687..ff34e6df 100644 --- a/eval_protocol/pytest/types.py +++ b/eval_protocol/pytest/types.py @@ -15,7 +15,6 @@ ModelParam = str # gpt-4o, gpt-4o-mini, accounts/fireworks/models/llama-3.1-8b-instruct DatasetPathParam = str InputMessagesParam = List[Message] -InputRowsParam = List[EvaluationRow] EvaluationInputParam = Dict[str, Any] RolloutProcessorInputParam = Dict[str, Any] @@ -31,7 +30,7 @@ """ Test function types """ -TestFunction = Callable[..., Dataset] +TestFunction = Callable """ Rollout processor types diff --git a/eval_protocol/pytest/utils.py b/eval_protocol/pytest/utils.py index 498f6c22..c24fbdc9 100644 --- a/eval_protocol/pytest/utils.py +++ b/eval_protocol/pytest/utils.py @@ -13,7 +13,6 @@ DatasetPathParam, EvaluationInputParam, InputMessagesParam, - InputRowsParam, RolloutProcessorConfig, ) from eval_protocol.pytest.exception_config import ExceptionHandlerConfig, get_default_exception_handler_config @@ -115,7 +114,7 @@ async def wrapper(**kwargs): def log_eval_status_and_rows( eval_metadata: Optional[EvalMetadata], rows: Optional[List[EvaluationRow]] | None, - status: Literal["finished", "error"], + status: Status, passed: bool, logger: DatasetLogger, ) -> None: @@ -185,7 +184,7 @@ def generate_parameter_combinations( input_dataset: Optional[List[DatasetPathParam]], completion_params: List[CompletionParams], input_messages: Optional[List[InputMessagesParam]], - input_rows: Optional[List[InputRowsParam]], + input_rows: Optional[List[EvaluationRow]], evaluation_test_kwargs: Optional[List[EvaluationInputParam]], max_dataset_rows: Optional[int], combine_datasets: bool, @@ -341,12 +340,20 @@ async def execute_row_with_backoff(task: asyncio.Task, row: EvaluationRow) -> Ev else: # Non-retryable exception - fail immediately logging.error(f"❌ Rollout failed (non-retryable error encountered): {repr(e)}") - row.rollout_status = Status.rollout_error(str(e)) + row.rollout_status = Status.rollout_error(repr(e)) return row + async def execute_row_with_backoff_and_log(task: asyncio.Task, row: EvaluationRow) -> EvaluationRow: + """Execute a single row task with backoff retry and logging.""" + result = await execute_row_with_backoff(task, row) + # Log the row after execution completes (success or failure) + config.logger.log(result) + return result + # Process all tasks concurrently with backoff retry retry_tasks = [ - asyncio.create_task(execute_row_with_backoff(task, fresh_dataset[i])) for i, task in enumerate(base_tasks) + asyncio.create_task(execute_row_with_backoff_and_log(task, fresh_dataset[i])) + for i, task in enumerate(base_tasks) ] # Yield results as they complete diff --git a/eval_protocol/utils/logs_server.py b/eval_protocol/utils/logs_server.py index e5e6e4a3..ddcbb2b3 100644 --- a/eval_protocol/utils/logs_server.py +++ b/eval_protocol/utils/logs_server.py @@ -15,6 +15,7 @@ from eval_protocol.dataset_logger import default_logger from eval_protocol.dataset_logger.dataset_logger import LOG_EVENT_TYPE from eval_protocol.event_bus import event_bus +from eval_protocol.models import Status from eval_protocol.utils.vite_server import ViteServer if TYPE_CHECKING: @@ -178,8 +179,17 @@ def _check_running_evaluations(self): for row in logs: if self._should_update_status(row): logger.info(f"Updating status to 'stopped' for row {row.input_metadata.row_id} (PID {row.pid})") - if row.eval_metadata is not None: - row.eval_metadata.status = "stopped" + + # Update eval_metadata.status if it's running + if row.eval_metadata and row.eval_metadata.status and row.eval_metadata.status.is_running(): + row.eval_metadata.status = Status.aborted( + f"Evaluation aborted since process {row.pid} stopped" + ) + + # Update rollout_status if it's running + if row.rollout_status and row.rollout_status.is_running(): + row.rollout_status = Status.aborted(f"Rollout aborted since process {row.pid} stopped") + updated_rows.append(row) # Log all updated rows @@ -193,11 +203,18 @@ def _check_running_evaluations(self): def _should_update_status(self, row: "EvaluationRow") -> bool: """Check if a row's status should be updated to 'stopped'.""" - # Check if the row has running status and a PID - if row.eval_metadata and row.eval_metadata.status == "running" and row.pid is not None: + # Check if any status field should be updated + return self._should_update_status_field( + row.eval_metadata.status if row.eval_metadata else None, row.pid + ) or self._should_update_status_field(row.rollout_status, row.pid) + + def _should_update_status_field(self, status: Optional["Status"], pid: Optional[int]) -> bool: + """Check if a specific status field should be updated to 'stopped'.""" + # Check if the status is running and there's a PID + if status and status.is_running() and pid is not None: # Check if the process is still running try: - process = psutil.Process(row.pid) + process = psutil.Process(pid) # Check if process is still running if not process.is_running(): return True @@ -206,10 +223,10 @@ def _should_update_status(self, row: "EvaluationRow") -> bool: return True except psutil.AccessDenied: # Can't access process info, assume it's stopped - logger.warning(f"Access denied to process {row.pid}, assuming stopped") + logger.warning(f"Access denied to process {pid}, assuming stopped") return True except Exception as e: - logger.error(f"Error checking process {row.pid}: {e}") + logger.error(f"Error checking process {pid}: {e}") # On error, assume process is still running to be safe return False diff --git a/tests/pytest/mcp_configurations/docs_mcp_config_broken.json b/tests/pytest/mcp_configurations/docs_mcp_config_broken.json new file mode 100644 index 00000000..11a3bb56 --- /dev/null +++ b/tests/pytest/mcp_configurations/docs_mcp_config_broken.json @@ -0,0 +1,7 @@ +{ + "mcpServers": { + "docs.fireworks.ai": { + "url": "https://docs.fireworks.ai/mcp-non-existent" + } + } +} diff --git a/tests/pytest/test_pytest_propagate_error.py b/tests/pytest/test_pytest_propagate_error.py new file mode 100644 index 00000000..83797a1f --- /dev/null +++ b/tests/pytest/test_pytest_propagate_error.py @@ -0,0 +1,68 @@ +from typing import Set +from eval_protocol.models import EvaluationRow, Message +from eval_protocol.pytest.default_agent_rollout_processor import AgentRolloutProcessor +from eval_protocol.dataset_logger import DatasetLogger + + +class TrackingLogger(DatasetLogger): + """Custom logger that ensures that the final row is in an error state.""" + + def __init__(self, rollouts: dict[str, EvaluationRow]): + self.rollouts = rollouts + + def log(self, row: EvaluationRow): + self.rollouts[row.execution_metadata.rollout_id] = row + + def read(self): + return [] + + +async def test_pytest_propagate_error(): + """ + Properly propagate errors from rollout processing to eval_metadata.status. + To test this, we use a broken MCP configuration that should fail during the + rollout processing. Then the final eval_metadata.status should be an error. + This way the UI can properly render an error state for the rollout and a + developer can identify and investigate the error. + """ + from eval_protocol.pytest.evaluation_test import evaluation_test + + input_messages = [ + [ + Message( + role="system", + content="You are a helpful assistant that can answer questions about Fireworks.", + ), + ] + ] + completion_params_list = [ + {"model": "dummy/local-model"}, + ] + + rollouts: dict[str, EvaluationRow] = {} + logger = TrackingLogger(rollouts) + + @evaluation_test( + input_messages=input_messages, + completion_params=completion_params_list, + rollout_processor=AgentRolloutProcessor(), + mode="pointwise", + num_runs=5, + mcp_config_path="tests/pytest/mcp_configurations/docs_mcp_config_broken.json", + logger=logger, + ) + def eval_fn(row: EvaluationRow) -> EvaluationRow: + return row + + # Manually invoke all parameter combinations within a single test + for params in completion_params_list: + await eval_fn(input_messages=input_messages, completion_params=params) + + # assert that the status of eval_metadata.status is "error" + assert len(rollouts) == 5 + assert all(row.eval_metadata.status.is_error() for row in rollouts.values()) + + # make sure the error message includes details of the error + assert all("HTTPStatusError" in row.rollout_status.message for row in rollouts.values()) + assert all("405 Method Not Allowed" in row.rollout_status.message for row in rollouts.values()) + assert all("https://docs.fireworks.ai/mcp-non-existent" in row.rollout_status.message for row in rollouts.values()) diff --git a/tests/pytest/test_utils.py b/tests/pytest/test_utils.py new file mode 100644 index 00000000..e8d64d99 --- /dev/null +++ b/tests/pytest/test_utils.py @@ -0,0 +1,200 @@ +import asyncio +from unittest.mock import AsyncMock, MagicMock, patch +import pytest + +from eval_protocol.pytest.utils import rollout_processor_with_retry +from eval_protocol.pytest.types import RolloutProcessorConfig +from eval_protocol.models import EvaluationRow, Status, InputMetadata, ExecutionMetadata +from eval_protocol.dataset_logger.dataset_logger import DatasetLogger + + +class TestRolloutProcessorWithRetry: + """Test the rollout_processor_with_retry function to ensure logging works correctly.""" + + @pytest.fixture + def mock_rollout_processor(self): + """Create a mock rollout processor that returns async tasks.""" + processor = MagicMock() + processor.cleanup = MagicMock() + return processor + + @pytest.fixture + def mock_config(self): + """Create a mock config with a logger.""" + config = MagicMock(spec=RolloutProcessorConfig) + config.logger = MagicMock(spec=DatasetLogger) + config.logger.log = MagicMock() + config.exception_handler_config = None + config.kwargs = {} + return config + + @pytest.fixture + def sample_dataset(self): + """Create a sample dataset for testing.""" + from datetime import datetime + + row = EvaluationRow( + messages=[], + input_metadata=InputMetadata(completion_params={"model": "test-model"}), + rollout_status=Status.rollout_finished(), + execution_metadata=ExecutionMetadata(), + created_at=datetime.fromisoformat("2024-01-01T00:00:00"), + ) + return [row] + + @pytest.mark.asyncio + async def test_logger_called_on_successful_execution(self, mock_rollout_processor, mock_config, sample_dataset): + """Test that the logger is called when execution succeeds.""" + + # Create mock tasks that will complete successfully + async def mock_task(): + from datetime import datetime + + row = EvaluationRow( + messages=[], + input_metadata=InputMetadata(completion_params={"model": "test-model"}), + rollout_status=Status.rollout_finished(), + execution_metadata=ExecutionMetadata(), + created_at=datetime.fromisoformat("2024-01-01T00:00:00"), + ) + return row + + # Mock the processor to return a list of tasks + mock_rollout_processor.return_value = [asyncio.create_task(mock_task())] + + # Call the function + results = [] + async for result in rollout_processor_with_retry(mock_rollout_processor, sample_dataset, mock_config): + results.append(result) + + # Verify that the logger was called for each result + assert mock_config.logger.log.call_count == 1 + mock_config.logger.log.assert_called_once_with(results[0]) + + # Verify cleanup was called + mock_rollout_processor.cleanup.assert_called_once() + + @pytest.mark.asyncio + async def test_logger_called_on_failed_execution(self, mock_rollout_processor, mock_config, sample_dataset): + """Test that the logger is called when execution fails.""" + + # Mock the processor to return a task that raises an exception + async def failing_task(): + raise ValueError("Test error") + + mock_rollout_processor.return_value = [asyncio.create_task(failing_task())] + + # Call the function + results = [] + async for result in rollout_processor_with_retry(mock_rollout_processor, sample_dataset, mock_config): + results.append(result) + + # Verify that the logger was called for the failed result + assert mock_config.logger.log.call_count == 1 + mock_config.logger.log.assert_called_once_with(results[0]) + + # Verify the result has an error status + assert results[0].rollout_status.code == 13 # INTERNAL error code + assert "Test error" in results[0].rollout_status.message + + # Verify cleanup was called + mock_rollout_processor.cleanup.assert_called_once() + + @pytest.mark.asyncio + async def test_logger_called_on_retry_execution(self, mock_rollout_processor, mock_config, sample_dataset): + """Test that the logger is called when execution succeeds after retry.""" + # Mock the processor to return a task that fails first, then succeeds on retry + call_count = 0 + + async def flaky_task(): + nonlocal call_count + call_count += 1 + if call_count == 1: + raise ConnectionError("Connection failed") + else: + row = EvaluationRow( + messages=[], + input_metadata={}, + rollout_status=Status.rollout_finished(), + execution_metadata={}, + created_at="2024-01-01T00:00:00Z", + ) + return row + + mock_rollout_processor.return_value = [asyncio.create_task(flaky_task())] + + # Call the function - it should handle the retry internally + results = [] + async for result in rollout_processor_with_retry(mock_rollout_processor, sample_dataset, mock_config): + results.append(result) + + # Verify that the logger was called for the result + assert mock_config.logger.log.call_count == 1 + mock_config.logger.log.assert_called_once_with(results[0]) + + # Verify cleanup was called + mock_rollout_processor.cleanup.assert_called_once() + + @pytest.mark.asyncio + async def test_logger_called_for_multiple_rows(self, mock_rollout_processor, mock_config): + """Test that the logger is called for each row in a multi-row dataset.""" + # Create a dataset with multiple rows + from datetime import datetime + + sample_dataset = [ + EvaluationRow( + messages=[], + input_metadata=InputMetadata(completion_params={"model": "test-model"}), + rollout_status=Status.rollout_finished(), + execution_metadata=ExecutionMetadata(), + created_at=datetime.fromisoformat("2024-01-01T00:00:00"), + ), + EvaluationRow( + messages=[], + input_metadata=InputMetadata(completion_params={"model": "test-model"}), + rollout_status=Status.rollout_finished(), + execution_metadata=ExecutionMetadata(), + created_at=datetime.fromisoformat("2024-01-01T00:00:00"), + ), + ] + + # Mock the processor to return multiple tasks + async def mock_task(): + row = EvaluationRow( + messages=[], + input_metadata=InputMetadata(completion_params={"model": "test-model"}), + rollout_status=Status.rollout_finished(), + execution_metadata=ExecutionMetadata(), + created_at=datetime.fromisoformat("2024-01-01T00:00:00"), + ) + return row + + mock_rollout_processor.return_value = [asyncio.create_task(mock_task()), asyncio.create_task(mock_task())] + + # Call the function + results = [] + async for result in rollout_processor_with_retry(mock_rollout_processor, sample_dataset, mock_config): + results.append(result) + + # Verify that the logger was called for each result + assert mock_config.logger.log.call_count == 2 + assert len(results) == 2 + + # Verify cleanup was called + mock_rollout_processor.cleanup.assert_called_once() + + @pytest.mark.asyncio + async def test_logger_called_even_when_processor_fails_to_initialize( + self, mock_rollout_processor, mock_config, sample_dataset + ): + """Test that cleanup is called even when the processor fails to initialize.""" + # Mock the processor to raise an exception during initialization + mock_rollout_processor.side_effect = RuntimeError("Processor failed to initialize") + + # Call the function and expect it to raise the exception + with pytest.raises(RuntimeError, match="Processor failed to initialize"): + async for result in rollout_processor_with_retry(mock_rollout_processor, sample_dataset, mock_config): + pass + + # Verify cleanup was called even though the function failed + mock_rollout_processor.cleanup.assert_called_once() diff --git a/tests/test_logs_server.py b/tests/test_logs_server.py index c0fb572e..92f8d8d7 100644 --- a/tests/test_logs_server.py +++ b/tests/test_logs_server.py @@ -16,7 +16,7 @@ from eval_protocol.dataset_logger import default_logger from eval_protocol.dataset_logger.dataset_logger import LOG_EVENT_TYPE from eval_protocol.event_bus import event_bus -from eval_protocol.models import EvalMetadata, EvaluationRow, InputMetadata, Message +from eval_protocol.models import EvalMetadata, EvaluationRow, InputMetadata, Message, Status from eval_protocol.utils.logs_server import ( EvaluationWatcher, LogsServer, @@ -201,7 +201,9 @@ def test_should_update_status_running_process(self, mock_process): test_row = EvaluationRow( messages=[Message(role="user", content="test")], input_metadata=InputMetadata(row_id="test-123"), - eval_metadata=EvalMetadata(name="test_eval", num_runs=1, aggregation_method="mean", status="running"), + eval_metadata=EvalMetadata( + name="test_eval", num_runs=1, aggregation_method="mean", status=Status.rollout_running() + ), pid=12345, ) @@ -222,7 +224,9 @@ def test_should_update_status_stopped_process(self, mock_process): test_row = EvaluationRow( messages=[Message(role="user", content="test")], input_metadata=InputMetadata(row_id="test-123"), - eval_metadata=EvalMetadata(name="test_eval", num_runs=1, aggregation_method="mean", status="running"), + eval_metadata=EvalMetadata( + name="test_eval", num_runs=1, aggregation_method="mean", status=Status.rollout_running() + ), pid=12345, ) @@ -241,7 +245,9 @@ def test_should_update_status_no_such_process(self, mock_process): test_row = EvaluationRow( messages=[Message(role="user", content="test")], input_metadata=InputMetadata(row_id="test-123"), - eval_metadata=EvalMetadata(name="test_eval", num_runs=1, aggregation_method="mean", status="running"), + eval_metadata=EvalMetadata( + name="test_eval", num_runs=1, aggregation_method="mean", status=Status.rollout_running() + ), pid=999, ) @@ -256,7 +262,10 @@ def test_should_update_status_not_running(self): test_row = EvaluationRow( messages=[Message(role="user", content="test")], input_metadata=InputMetadata(row_id="test-123"), - eval_metadata=EvalMetadata(name="test_eval", num_runs=1, aggregation_method="mean", status="finished"), + eval_metadata=EvalMetadata( + name="test_eval", num_runs=1, aggregation_method="mean", status=Status.rollout_finished() + ), + rollout_status=Status.rollout_finished(), pid=12345, ) @@ -271,7 +280,9 @@ def test_should_update_status_no_pid(self): test_row = EvaluationRow( messages=[Message(role="user", content="test")], input_metadata=InputMetadata(row_id="test-123"), - eval_metadata=EvalMetadata(name="test_eval", num_runs=1, aggregation_method="mean", status="running"), + eval_metadata=EvalMetadata( + name="test_eval", num_runs=1, aggregation_method="mean", status=Status.rollout_running() + ), pid=None, ) diff --git a/tests/test_status_migration_changes.py b/tests/test_status_migration_changes.py index 66bde969..47cccba6 100644 --- a/tests/test_status_migration_changes.py +++ b/tests/test_status_migration_changes.py @@ -83,10 +83,10 @@ def test_trajectory_running_status_creation(self): row = EvaluationRow(messages=[]) # Simulate the status assignment from MCP execution manager - row.rollout_status = Status(code=Status.Code.OK, message="Rollout is running", details=[]) + row.rollout_status = Status(code=Status.Code.RUNNING, message="Rollout is running", details=[]) # Verify the status - assert row.rollout_status.code == Status.Code.OK + assert row.rollout_status.code == Status.Code.RUNNING assert row.rollout_status.message == "Rollout is running" assert row.rollout_status.is_running() assert not row.rollout_status.is_finished() @@ -278,7 +278,7 @@ def test_status_creation_methods_integration(self): # Test running status row.rollout_status = Status.rollout_running() assert row.rollout_status.is_running() - assert row.rollout_status.code == Status.Code.OK + assert row.rollout_status.code == Status.Code.RUNNING # Test finished status row.rollout_status = Status.rollout_finished() @@ -426,7 +426,7 @@ def test_status_code_compliance(self): # Test standard gRPC codes statuses = [ - (Status.rollout_running(), Status.Code.OK), + (Status.rollout_running(), Status.Code.RUNNING), (Status.rollout_finished(), Status.Code.FINISHED), # Custom code (Status.rollout_error("Test"), Status.Code.INTERNAL), ] diff --git a/tests/test_status_migration_integration.py b/tests/test_status_migration_integration.py index e9beb080..39e9291a 100644 --- a/tests/test_status_migration_integration.py +++ b/tests/test_status_migration_integration.py @@ -34,7 +34,7 @@ def test_rollout_status_field_access(self): row = EvaluationRow(messages=[]) # Should be able to access directly - assert row.rollout_status.code == Status.Code.OK + assert row.rollout_status.code == Status.Code.RUNNING assert row.rollout_status.message == "Rollout is running" # Should be able to set directly @@ -276,7 +276,7 @@ def test_status_code_mapping(self): # Test different status types and their codes statuses = [ - (Status.rollout_running(), Status.Code.OK), + (Status.rollout_running(), Status.Code.RUNNING), (Status.rollout_finished(), Status.Code.FINISHED), (Status.rollout_error("Test"), Status.Code.INTERNAL), ] diff --git a/tests/test_status_model.py b/tests/test_status_model.py index 459e8497..bc815546 100644 --- a/tests/test_status_model.py +++ b/tests/test_status_model.py @@ -82,7 +82,7 @@ def test_status_creation_methods(self): """Test the convenience methods for creating Status instances.""" # Test running status running_status = Status.rollout_running() - assert running_status.code == Status.Code.OK + assert running_status.code == Status.Code.RUNNING assert running_status.message == "Rollout is running" assert running_status.details == [] @@ -267,7 +267,7 @@ def test_evaluation_row_default_status(self): assert not hasattr(row, "status") # Default status should be running - assert row.rollout_status.code == Status.Code.OK + assert row.rollout_status.code == Status.Code.RUNNING assert row.rollout_status.message == "Rollout is running" assert row.rollout_status.details == [] @@ -345,6 +345,16 @@ def test_large_metadata(self): assert len(status.details) == 1 assert status.details[0]["metadata"] == large_metadata + def test_empty_details_error(self): + """Test Status with empty details and error message.""" + status = Status.error("Test error") + assert status.is_error() + + def test_empty_details_error_finished(self): + """Test Status with empty details and error message.""" + status = Status.finished("Test error") + assert status.is_finished() + if __name__ == "__main__": pytest.main([__file__]) diff --git a/vite-app/dist/assets/index-BC0wdun-.js b/vite-app/dist/assets/index-CmORTC9_.js similarity index 65% rename from vite-app/dist/assets/index-BC0wdun-.js rename to vite-app/dist/assets/index-CmORTC9_.js index 94c51d32..17d83dec 100644 --- a/vite-app/dist/assets/index-BC0wdun-.js +++ b/vite-app/dist/assets/index-CmORTC9_.js @@ -1,4 +1,4 @@ -(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))n(i);new MutationObserver(i=>{for(const a of i)if(a.type==="childList")for(const o of a.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&n(o)}).observe(document,{childList:!0,subtree:!0});function A(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 n(i){if(i.ep)return;i.ep=!0;const a=A(i);fetch(i.href,a)}})();function Y_(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Cg={exports:{}},ho={};/** +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))n(i);new MutationObserver(i=>{for(const a of i)if(a.type==="childList")for(const o of a.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&n(o)}).observe(document,{childList:!0,subtree:!0});function A(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 n(i){if(i.ep)return;i.ep=!0;const a=A(i);fetch(i.href,a)}})();function W_(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Cg={exports:{}},ho={};/** * @license React * react-jsx-runtime.production.js * @@ -6,7 +6,7 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var ab;function l1(){if(ab)return ho;ab=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function A(n,i,a){var o=null;if(a!==void 0&&(o=""+a),i.key!==void 0&&(o=""+i.key),"key"in i){a={};for(var u in i)u!=="key"&&(a[u]=i[u])}else a=i;return i=a.ref,{$$typeof:e,type:n,key:o,ref:i!==void 0?i:null,props:a}}return ho.Fragment=t,ho.jsx=A,ho.jsxs=A,ho}var ob;function u1(){return ob||(ob=1,Cg.exports=l1()),Cg.exports}var U=u1(),_g={exports:{}},Ct={};/** + */var ab;function c1(){if(ab)return ho;ab=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function A(n,i,a){var o=null;if(a!==void 0&&(o=""+a),i.key!==void 0&&(o=""+i.key),"key"in i){a={};for(var u in i)u!=="key"&&(a[u]=i[u])}else a=i;return i=a.ref,{$$typeof:e,type:n,key:o,ref:i!==void 0?i:null,props:a}}return ho.Fragment=t,ho.jsx=A,ho.jsxs=A,ho}var ob;function f1(){return ob||(ob=1,Cg.exports=c1()),Cg.exports}var U=f1(),_g={exports:{}},Ct={};/** * @license React * react.production.js * @@ -14,7 +14,7 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var lb;function c1(){if(lb)return Ct;lb=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.portal"),A=Symbol.for("react.fragment"),n=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),a=Symbol.for("react.consumer"),o=Symbol.for("react.context"),u=Symbol.for("react.forward_ref"),c=Symbol.for("react.suspense"),h=Symbol.for("react.memo"),g=Symbol.for("react.lazy"),B=Symbol.iterator;function m(H){return H===null||typeof H!="object"?null:(H=B&&H[B]||H["@@iterator"],typeof H=="function"?H:null)}var v={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},b=Object.assign,y={};function _(H,X,tt){this.props=H,this.context=X,this.refs=y,this.updater=tt||v}_.prototype.isReactComponent={},_.prototype.setState=function(H,X){if(typeof H!="object"&&typeof H!="function"&&H!=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,H,X,"setState")},_.prototype.forceUpdate=function(H){this.updater.enqueueForceUpdate(this,H,"forceUpdate")};function C(){}C.prototype=_.prototype;function x(H,X,tt){this.props=H,this.context=X,this.refs=y,this.updater=tt||v}var E=x.prototype=new C;E.constructor=x,b(E,_.prototype),E.isPureReactComponent=!0;var O=Array.isArray,F={H:null,A:null,T:null,S:null,V:null},T=Object.prototype.hasOwnProperty;function k(H,X,tt,q,Y,ot){return tt=ot.ref,{$$typeof:e,type:H,key:X,ref:tt!==void 0?tt:null,props:ot}}function P(H,X){return k(H.type,X,void 0,void 0,void 0,H.props)}function N(H){return typeof H=="object"&&H!==null&&H.$$typeof===e}function J(H){var X={"=":"=0",":":"=2"};return"$"+H.replace(/[=:]/g,function(tt){return X[tt]})}var et=/\/+/g;function nt(H,X){return typeof H=="object"&&H!==null&&H.key!=null?J(""+H.key):X.toString(36)}function ct(){}function bt(H){switch(H.status){case"fulfilled":return H.value;case"rejected":throw H.reason;default:switch(typeof H.status=="string"?H.then(ct,ct):(H.status="pending",H.then(function(X){H.status==="pending"&&(H.status="fulfilled",H.value=X)},function(X){H.status==="pending"&&(H.status="rejected",H.reason=X)})),H.status){case"fulfilled":return H.value;case"rejected":throw H.reason}}throw H}function ut(H,X,tt,q,Y){var ot=typeof H;(ot==="undefined"||ot==="boolean")&&(H=null);var st=!1;if(H===null)st=!0;else switch(ot){case"bigint":case"string":case"number":st=!0;break;case"object":switch(H.$$typeof){case e:case t:st=!0;break;case g:return st=H._init,ut(st(H._payload),X,tt,q,Y)}}if(st)return Y=Y(H),st=q===""?"."+nt(H,0):q,O(Y)?(tt="",st!=null&&(tt=st.replace(et,"$&/")+"/"),ut(Y,X,tt,"",function(FA){return FA})):Y!=null&&(N(Y)&&(Y=P(Y,tt+(Y.key==null||H&&H.key===Y.key?"":(""+Y.key).replace(et,"$&/")+"/")+st)),X.push(Y)),1;st=0;var be=q===""?".":q+":";if(O(H))for(var qt=0;qt>>1,H=I[ht];if(0>>1;hti(q,rt))Yi(ot,q)?(I[ht]=ot,I[Y]=rt,ht=Y):(I[ht]=q,I[tt]=rt,ht=tt);else if(Yi(ot,rt))I[ht]=ot,I[Y]=rt,ht=Y;else break t}}return W}function i(I,W){var rt=I.sortIndex-W.sortIndex;return rt!==0?rt:I.id-W.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,u=o.now();e.unstable_now=function(){return o.now()-u}}var c=[],h=[],g=1,B=null,m=3,v=!1,b=!1,y=!1,_=!1,C=typeof setTimeout=="function"?setTimeout:null,x=typeof clearTimeout=="function"?clearTimeout:null,E=typeof setImmediate<"u"?setImmediate:null;function O(I){for(var W=A(h);W!==null;){if(W.callback===null)n(h);else if(W.startTime<=I)n(h),W.sortIndex=W.expirationTime,t(c,W);else break;W=A(h)}}function F(I){if(y=!1,O(I),!b)if(A(c)!==null)b=!0,T||(T=!0,nt());else{var W=A(h);W!==null&&ut(F,W.startTime-I)}}var T=!1,k=-1,P=5,N=-1;function J(){return _?!0:!(e.unstable_now()-NI&&J());){var ht=B.callback;if(typeof ht=="function"){B.callback=null,m=B.priorityLevel;var H=ht(B.expirationTime<=I);if(I=e.unstable_now(),typeof H=="function"){B.callback=H,O(I),W=!0;break e}B===A(c)&&n(c),O(I)}else n(c);B=A(c)}if(B!==null)W=!0;else{var X=A(h);X!==null&&ut(F,X.startTime-I),W=!1}}break t}finally{B=null,m=rt,v=!1}W=void 0}}finally{W?nt():T=!1}}}var nt;if(typeof E=="function")nt=function(){E(et)};else if(typeof MessageChannel<"u"){var ct=new MessageChannel,bt=ct.port2;ct.port1.onmessage=et,nt=function(){bt.postMessage(null)}}else nt=function(){C(et,0)};function ut(I,W){k=C(function(){I(e.unstable_now())},W)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(I){I.callback=null},e.unstable_forceFrameRate=function(I){0>I||125ht?(I.sortIndex=rt,t(h,I),A(c)===null&&I===A(h)&&(y?(x(k),k=-1):y=!0,ut(F,rt-ht))):(I.sortIndex=H,t(c,I),b||v||(b=!0,T||(T=!0,nt()))),I},e.unstable_shouldYield=J,e.unstable_wrapCallback=function(I){var W=m;return function(){var rt=m;m=W;try{return I.apply(this,arguments)}finally{m=rt}}}}(xg)),xg}var fb;function h1(){return fb||(fb=1,Ug.exports=f1()),Ug.exports}var Fg={exports:{}},Pe={};/** + */var cb;function d1(){return cb||(cb=1,function(e){function t(I,W){var rt=I.length;I.push(W);t:for(;0>>1,H=I[ht];if(0>>1;hti(q,rt))Yi(ot,q)?(I[ht]=ot,I[Y]=rt,ht=Y):(I[ht]=q,I[tt]=rt,ht=tt);else if(Yi(ot,rt))I[ht]=ot,I[Y]=rt,ht=Y;else break t}}return W}function i(I,W){var rt=I.sortIndex-W.sortIndex;return rt!==0?rt:I.id-W.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,u=o.now();e.unstable_now=function(){return o.now()-u}}var c=[],h=[],g=1,B=null,m=3,v=!1,b=!1,y=!1,_=!1,C=typeof setTimeout=="function"?setTimeout:null,x=typeof clearTimeout=="function"?clearTimeout:null,F=typeof setImmediate<"u"?setImmediate:null;function O(I){for(var W=A(h);W!==null;){if(W.callback===null)n(h);else if(W.startTime<=I)n(h),W.sortIndex=W.expirationTime,t(c,W);else break;W=A(h)}}function E(I){if(y=!1,O(I),!b)if(A(c)!==null)b=!0,T||(T=!0,nt());else{var W=A(h);W!==null&&ct(E,W.startTime-I)}}var T=!1,k=-1,P=5,N=-1;function J(){return _?!0:!(e.unstable_now()-NI&&J());){var ht=B.callback;if(typeof ht=="function"){B.callback=null,m=B.priorityLevel;var H=ht(B.expirationTime<=I);if(I=e.unstable_now(),typeof H=="function"){B.callback=H,O(I),W=!0;break e}B===A(c)&&n(c),O(I)}else n(c);B=A(c)}if(B!==null)W=!0;else{var X=A(h);X!==null&&ct(E,X.startTime-I),W=!1}}break t}finally{B=null,m=rt,v=!1}W=void 0}}finally{W?nt():T=!1}}}var nt;if(typeof F=="function")nt=function(){F(et)};else if(typeof MessageChannel<"u"){var ft=new MessageChannel,bt=ft.port2;ft.port1.onmessage=et,nt=function(){bt.postMessage(null)}}else nt=function(){C(et,0)};function ct(I,W){k=C(function(){I(e.unstable_now())},W)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(I){I.callback=null},e.unstable_forceFrameRate=function(I){0>I||125ht?(I.sortIndex=rt,t(h,I),A(c)===null&&I===A(h)&&(y?(x(k),k=-1):y=!0,ct(E,rt-ht))):(I.sortIndex=H,t(c,I),b||v||(b=!0,T||(T=!0,nt()))),I},e.unstable_shouldYield=J,e.unstable_wrapCallback=function(I){var W=m;return function(){var rt=m;m=W;try{return I.apply(this,arguments)}finally{m=rt}}}}(xg)),xg}var fb;function g1(){return fb||(fb=1,Ug.exports=d1()),Ug.exports}var Eg={exports:{}},je={};/** * @license React * react-dom.production.js * @@ -30,7 +30,7 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var hb;function d1(){if(hb)return Pe;hb=1;var e=Hf();function t(c){var h="https://react.dev/errors/"+c;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),Fg.exports=d1(),Fg.exports}/** + */var hb;function p1(){if(hb)return je;hb=1;var e=Hf();function t(c){var h="https://react.dev/errors/"+c;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),Eg.exports=p1(),Eg.exports}/** * @license React * react-dom-client.production.js * @@ -38,15 +38,15 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var gb;function g1(){if(gb)return go;gb=1;var e=h1(),t=Hf(),A=W_();function n(r){var s="https://react.dev/errors/"+r;if(1H||(r.current=ht[H],ht[H]=null,H--)}function q(r,s){H++,ht[H]=r.current,r.current=s}var Y=X(null),ot=X(null),st=X(null),be=X(null);function qt(r,s){switch(q(st,s),q(ot,r),q(Y,null),s.nodeType){case 9:case 11:r=(r=s.documentElement)&&(r=r.namespaceURI)?Mw(r):0;break;default:if(r=s.tagName,s=s.namespaceURI)s=Mw(s),r=Lw(s,r);else switch(r){case"svg":r=1;break;case"math":r=2;break;default:r=0}}tt(Y),q(Y,r)}function FA(){tt(Y),tt(ot),tt(st)}function da(r){r.memoizedState!==null&&q(be,r);var s=Y.current,l=Lw(s,r.type);s!==l&&(q(ot,r),q(Y,l))}function $r(r){ot.current===r&&(tt(Y),tt(ot)),be.current===r&&(tt(be),oo._currentValue=rt)}var ui=Object.prototype.hasOwnProperty,ci=e.unstable_scheduleCallback,ga=e.unstable_cancelCallback,dm=e.unstable_shouldYield,zF=e.unstable_requestPaint,an=e.unstable_now,VF=e.unstable_getCurrentPriorityLevel,gm=e.unstable_ImmediatePriority,pm=e.unstable_UserBlockingPriority,xl=e.unstable_NormalPriority,PF=e.unstable_LowPriority,Bm=e.unstable_IdlePriority,jF=e.log,GF=e.unstable_setDisableYieldValue,pa=null,hA=null;function fi(r){if(typeof jF=="function"&&GF(r),hA&&typeof hA.setStrictMode=="function")try{hA.setStrictMode(pa,r)}catch{}}var dA=Math.clz32?Math.clz32:YF,XF=Math.log,ZF=Math.LN2;function YF(r){return r>>>=0,r===0?32:31-(XF(r)/ZF|0)|0}var Fl=256,El=4194304;function nr(r){var s=r&42;if(s!==0)return s;switch(r&-r){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:case 262144:case 524288:case 1048576:case 2097152:return r&4194048;case 4194304:case 8388608:case 16777216:case 33554432:return r&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return r}}function Sl(r,s,l){var f=r.pendingLanes;if(f===0)return 0;var d=0,p=r.suspendedLanes,w=r.pingedLanes;r=r.warmLanes;var Q=f&134217727;return Q!==0?(f=Q&~p,f!==0?d=nr(f):(w&=Q,w!==0?d=nr(w):l||(l=Q&~r,l!==0&&(d=nr(l))))):(Q=f&~p,Q!==0?d=nr(Q):w!==0?d=nr(w):l||(l=f&~r,l!==0&&(d=nr(l)))),d===0?0:s!==0&&s!==d&&(s&p)===0&&(p=d&-d,l=s&-s,p>=l||p===32&&(l&4194048)!==0)?s:d}function Ba(r,s){return(r.pendingLanes&~(r.suspendedLanes&~r.pingedLanes)&s)===0}function WF(r,s){switch(r){case 1:case 2:case 4:case 8:case 64:return s+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 s+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 mm(){var r=Fl;return Fl<<=1,(Fl&4194048)===0&&(Fl=256),r}function vm(){var r=El;return El<<=1,(El&62914560)===0&&(El=4194304),r}function fh(r){for(var s=[],l=0;31>l;l++)s.push(r);return s}function ma(r,s){r.pendingLanes|=s,s!==268435456&&(r.suspendedLanes=0,r.pingedLanes=0,r.warmLanes=0)}function $F(r,s,l,f,d,p){var w=r.pendingLanes;r.pendingLanes=l,r.suspendedLanes=0,r.pingedLanes=0,r.warmLanes=0,r.expiredLanes&=l,r.entangledLanes&=l,r.errorRecoveryDisabledLanes&=l,r.shellSuspendCounter=0;var Q=r.entanglements,S=r.expirationTimes,K=r.hiddenUpdates;for(l=w&~l;0H||(r.current=ht[H],ht[H]=null,H--)}function q(r,s){H++,ht[H]=r.current,r.current=s}var Y=X(null),ot=X(null),st=X(null),be=X(null);function qt(r,s){switch(q(st,s),q(ot,r),q(Y,null),s.nodeType){case 9:case 11:r=(r=s.documentElement)&&(r=r.namespaceURI)?Mw(r):0;break;default:if(r=s.tagName,s=s.namespaceURI)s=Mw(s),r=Lw(s,r);else switch(r){case"svg":r=1;break;case"math":r=2;break;default:r=0}}tt(Y),q(Y,r)}function EA(){tt(Y),tt(ot),tt(st)}function da(r){r.memoizedState!==null&&q(be,r);var s=Y.current,l=Lw(s,r.type);s!==l&&(q(ot,r),q(Y,l))}function $r(r){ot.current===r&&(tt(Y),tt(ot)),be.current===r&&(tt(be),oo._currentValue=rt)}var ui=Object.prototype.hasOwnProperty,ci=e.unstable_scheduleCallback,ga=e.unstable_cancelCallback,dm=e.unstable_shouldYield,PE=e.unstable_requestPaint,an=e.unstable_now,jE=e.unstable_getCurrentPriorityLevel,gm=e.unstable_ImmediatePriority,pm=e.unstable_UserBlockingPriority,xl=e.unstable_NormalPriority,GE=e.unstable_LowPriority,Bm=e.unstable_IdlePriority,XE=e.log,ZE=e.unstable_setDisableYieldValue,pa=null,hA=null;function fi(r){if(typeof XE=="function"&&ZE(r),hA&&typeof hA.setStrictMode=="function")try{hA.setStrictMode(pa,r)}catch{}}var dA=Math.clz32?Math.clz32:$E,YE=Math.log,WE=Math.LN2;function $E(r){return r>>>=0,r===0?32:31-(YE(r)/WE|0)|0}var El=256,Fl=4194304;function ir(r){var s=r&42;if(s!==0)return s;switch(r&-r){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:case 262144:case 524288:case 1048576:case 2097152:return r&4194048;case 4194304:case 8388608:case 16777216:case 33554432:return r&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return r}}function Sl(r,s,l){var f=r.pendingLanes;if(f===0)return 0;var d=0,p=r.suspendedLanes,w=r.pingedLanes;r=r.warmLanes;var Q=f&134217727;return Q!==0?(f=Q&~p,f!==0?d=ir(f):(w&=Q,w!==0?d=ir(w):l||(l=Q&~r,l!==0&&(d=ir(l))))):(Q=f&~p,Q!==0?d=ir(Q):w!==0?d=ir(w):l||(l=f&~r,l!==0&&(d=ir(l)))),d===0?0:s!==0&&s!==d&&(s&p)===0&&(p=d&-d,l=s&-s,p>=l||p===32&&(l&4194048)!==0)?s:d}function Ba(r,s){return(r.pendingLanes&~(r.suspendedLanes&~r.pingedLanes)&s)===0}function JE(r,s){switch(r){case 1:case 2:case 4:case 8:case 64:return s+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 s+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 mm(){var r=El;return El<<=1,(El&4194048)===0&&(El=256),r}function vm(){var r=Fl;return Fl<<=1,(Fl&62914560)===0&&(Fl=4194304),r}function fh(r){for(var s=[],l=0;31>l;l++)s.push(r);return s}function ma(r,s){r.pendingLanes|=s,s!==268435456&&(r.suspendedLanes=0,r.pingedLanes=0,r.warmLanes=0)}function qE(r,s,l,f,d,p){var w=r.pendingLanes;r.pendingLanes=l,r.suspendedLanes=0,r.pingedLanes=0,r.warmLanes=0,r.expiredLanes&=l,r.entangledLanes&=l,r.errorRecoveryDisabledLanes&=l,r.shellSuspendCounter=0;var Q=r.entanglements,S=r.expirationTimes,K=r.hiddenUpdates;for(l=w&~l;0)":-1d||S[f]!==K[d]){var j=` -`+S[f].replace(" at new "," at ");return r.displayName&&j.includes("")&&(j=j.replace("",r.displayName)),j}while(1<=f&&0<=d);break}}}finally{mh=!1,Error.prepareStackTrace=l}return(l=r?r.displayName||r.name:"")?ns(l):""}function nE(r){switch(r.tag){case 26:case 27:case 5:return ns(r.type);case 16:return ns("Lazy");case 13:return ns("Suspense");case 19:return ns("SuspenseList");case 0:case 15:return vh(r.type,!1);case 11:return vh(r.type.render,!1);case 1:return vh(r.type,!0);case 31:return ns("Activity");default:return""}}function Em(r){try{var s="";do s+=nE(r),r=r.return;while(r);return s}catch(l){return` +`+S[f].replace(" at new "," at ");return r.displayName&&j.includes("")&&(j=j.replace("",r.displayName)),j}while(1<=f&&0<=d);break}}}finally{mh=!1,Error.prepareStackTrace=l}return(l=r?r.displayName||r.name:"")?ns(l):""}function rF(r){switch(r.tag){case 26:case 27:case 5:return ns(r.type);case 16:return ns("Lazy");case 13:return ns("Suspense");case 19:return ns("SuspenseList");case 0:case 15:return vh(r.type,!1);case 11:return vh(r.type.render,!1);case 1:return vh(r.type,!0);case 31:return ns("Activity");default:return""}}function Fm(r){try{var s="";do s+=rF(r),r=r.return;while(r);return s}catch(l){return` Error generating stack: `+l.message+` -`+l.stack}}function EA(r){switch(typeof r){case"bigint":case"boolean":case"number":case"string":case"undefined":return r;case"object":return r;default:return""}}function Sm(r){var s=r.type;return(r=r.nodeName)&&r.toLowerCase()==="input"&&(s==="checkbox"||s==="radio")}function iE(r){var s=Sm(r)?"checked":"value",l=Object.getOwnPropertyDescriptor(r.constructor.prototype,s),f=""+r[s];if(!r.hasOwnProperty(s)&&typeof l<"u"&&typeof l.get=="function"&&typeof l.set=="function"){var d=l.get,p=l.set;return Object.defineProperty(r,s,{configurable:!0,get:function(){return d.call(this)},set:function(w){f=""+w,p.call(this,w)}}),Object.defineProperty(r,s,{enumerable:l.enumerable}),{getValue:function(){return f},setValue:function(w){f=""+w},stopTracking:function(){r._valueTracker=null,delete r[s]}}}}function Tl(r){r._valueTracker||(r._valueTracker=iE(r))}function Hm(r){if(!r)return!1;var s=r._valueTracker;if(!s)return!0;var l=s.getValue(),f="";return r&&(f=Sm(r)?r.checked?"true":"false":r.value),r=f,r!==l?(s.setValue(r),!0):!1}function Dl(r){if(r=r||(typeof document<"u"?document:void 0),typeof r>"u")return null;try{return r.activeElement||r.body}catch{return r.body}}var rE=/[\n"\\]/g;function SA(r){return r.replace(rE,function(s){return"\\"+s.charCodeAt(0).toString(16)+" "})}function wh(r,s,l,f,d,p,w,Q){r.name="",w!=null&&typeof w!="function"&&typeof w!="symbol"&&typeof w!="boolean"?r.type=w:r.removeAttribute("type"),s!=null?w==="number"?(s===0&&r.value===""||r.value!=s)&&(r.value=""+EA(s)):r.value!==""+EA(s)&&(r.value=""+EA(s)):w!=="submit"&&w!=="reset"||r.removeAttribute("value"),s!=null?bh(r,w,EA(s)):l!=null?bh(r,w,EA(l)):f!=null&&r.removeAttribute("value"),d==null&&p!=null&&(r.defaultChecked=!!p),d!=null&&(r.checked=d&&typeof d!="function"&&typeof d!="symbol"),Q!=null&&typeof Q!="function"&&typeof Q!="symbol"&&typeof Q!="boolean"?r.name=""+EA(Q):r.removeAttribute("name")}function Om(r,s,l,f,d,p,w,Q){if(p!=null&&typeof p!="function"&&typeof p!="symbol"&&typeof p!="boolean"&&(r.type=p),s!=null||l!=null){if(!(p!=="submit"&&p!=="reset"||s!=null))return;l=l!=null?""+EA(l):"",s=s!=null?""+EA(s):l,Q||s===r.value||(r.value=s),r.defaultValue=s}f=f??d,f=typeof f!="function"&&typeof f!="symbol"&&!!f,r.checked=Q?r.checked:!!f,r.defaultChecked=!!f,w!=null&&typeof w!="function"&&typeof w!="symbol"&&typeof w!="boolean"&&(r.name=w)}function bh(r,s,l){s==="number"&&Dl(r.ownerDocument)===r||r.defaultValue===""+l||(r.defaultValue=""+l)}function is(r,s,l,f){if(r=r.options,s){s={};for(var d=0;d"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Uh=!1;if(Fn)try{var ya={};Object.defineProperty(ya,"passive",{get:function(){Uh=!0}}),window.addEventListener("test",ya,ya),window.removeEventListener("test",ya,ya)}catch{Uh=!1}var di=null,xh=null,Ll=null;function Nm(){if(Ll)return Ll;var r,s=xh,l=s.length,f,d="value"in di?di.value:di.textContent,p=d.length;for(r=0;r=Qa),jm=" ",Gm=!1;function Xm(r,s){switch(r){case"keyup":return TE.indexOf(s.keyCode)!==-1;case"keydown":return s.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Zm(r){return r=r.detail,typeof r=="object"&&"data"in r?r.data:null}var os=!1;function ME(r,s){switch(r){case"compositionend":return Zm(s);case"keypress":return s.which!==32?null:(Gm=!0,jm);case"textInput":return r=s.data,r===jm&&Gm?null:r;default:return null}}function LE(r,s){if(os)return r==="compositionend"||!Oh&&Xm(r,s)?(r=Nm(),Ll=xh=di=null,os=!1,r):null;switch(r){case"paste":return null;case"keypress":if(!(s.ctrlKey||s.altKey||s.metaKey)||s.ctrlKey&&s.altKey){if(s.char&&1=s)return{node:l,offset:s-r};r=f}t:{for(;l;){if(l.nextSibling){l=l.nextSibling;break t}l=l.parentNode}l=void 0}l=A0(l)}}function i0(r,s){return r&&s?r===s?!0:r&&r.nodeType===3?!1:s&&s.nodeType===3?i0(r,s.parentNode):"contains"in r?r.contains(s):r.compareDocumentPosition?!!(r.compareDocumentPosition(s)&16):!1:!1}function r0(r){r=r!=null&&r.ownerDocument!=null&&r.ownerDocument.defaultView!=null?r.ownerDocument.defaultView:window;for(var s=Dl(r.document);s instanceof r.HTMLIFrameElement;){try{var l=typeof s.contentWindow.location.href=="string"}catch{l=!1}if(l)r=s.contentWindow;else break;s=Dl(r.document)}return s}function Mh(r){var s=r&&r.nodeName&&r.nodeName.toLowerCase();return s&&(s==="input"&&(r.type==="text"||r.type==="search"||r.type==="tel"||r.type==="url"||r.type==="password")||s==="textarea"||r.contentEditable==="true")}var PE=Fn&&"documentMode"in document&&11>=document.documentMode,ls=null,Lh=null,Ea=null,Ih=!1;function s0(r,s,l){var f=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;Ih||ls==null||ls!==Dl(f)||(f=ls,"selectionStart"in f&&Mh(f)?f={start:f.selectionStart,end:f.selectionEnd}:(f=(f.ownerDocument&&f.ownerDocument.defaultView||window).getSelection(),f={anchorNode:f.anchorNode,anchorOffset:f.anchorOffset,focusNode:f.focusNode,focusOffset:f.focusOffset}),Ea&&Fa(Ea,f)||(Ea=f,f=Uu(Lh,"onSelect"),0>=w,d-=w,Sn=1<<32-dA(s)+d|l<p?p:8;var w=I.T,Q={};I.T=Q,yd(r,!1,s,l);try{var S=d(),K=I.S;if(K!==null&&K(Q,S),S!==null&&typeof S=="object"&&typeof S.then=="function"){var j=qE(S,f);Pa(r,s,j,wA(r))}else Pa(r,s,f,wA(r))}catch($){Pa(r,s,{then:function(){},status:"rejected",reason:$},wA())}finally{W.p=p,I.T=w}}function iS(){}function wd(r,s,l,f){if(r.tag!==5)throw Error(n(476));var d=av(r).queue;sv(r,d,s,rt,l===null?iS:function(){return ov(r),l(f)})}function av(r){var s=r.memoizedState;if(s!==null)return s;s={memoizedState:rt,baseState:rt,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Dn,lastRenderedState:rt},next:null};var l={};return s.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Dn,lastRenderedState:l},next:null},r.memoizedState=s,r=r.alternate,r!==null&&(r.memoizedState=s),s}function ov(r){var s=av(r).next.queue;Pa(r,s,{},wA())}function bd(){return Ve(oo)}function lv(){return Ce().memoizedState}function uv(){return Ce().memoizedState}function rS(r){for(var s=r.return;s!==null;){switch(s.tag){case 24:case 3:var l=wA();r=Bi(l);var f=mi(s,r,l);f!==null&&(bA(f,s,l),Ra(f,s,l)),s={cache:$h()},r.payload=s;return}s=s.return}}function sS(r,s,l){var f=wA();l={lane:f,revertLane:0,action:l,hasEagerState:!1,eagerState:null,next:null},su(r)?fv(s,l):(l=kh(r,s,l,f),l!==null&&(bA(l,r,f),hv(l,s,f)))}function cv(r,s,l){var f=wA();Pa(r,s,l,f)}function Pa(r,s,l,f){var d={lane:f,revertLane:0,action:l,hasEagerState:!1,eagerState:null,next:null};if(su(r))fv(s,d);else{var p=r.alternate;if(r.lanes===0&&(p===null||p.lanes===0)&&(p=s.lastRenderedReducer,p!==null))try{var w=s.lastRenderedState,Q=p(w,l);if(d.hasEagerState=!0,d.eagerState=Q,gA(Q,w))return Vl(r,s,d,0),Yt===null&&zl(),!1}catch{}finally{}if(l=kh(r,s,d,f),l!==null)return bA(l,r,f),hv(l,s,f),!0}return!1}function yd(r,s,l,f){if(f={lane:2,revertLane:tg(),action:f,hasEagerState:!1,eagerState:null,next:null},su(r)){if(s)throw Error(n(479))}else s=kh(r,l,f,2),s!==null&&bA(s,r,2)}function su(r){var s=r.alternate;return r===_t||s!==null&&s===_t}function fv(r,s){vs=tu=!0;var l=r.pending;l===null?s.next=s:(s.next=l.next,l.next=s),r.pending=s}function hv(r,s,l){if((l&4194048)!==0){var f=s.lanes;f&=r.pendingLanes,l|=f,s.lanes=l,bm(r,l)}}var au={readContext:Ve,use:Au,useCallback:pe,useContext:pe,useEffect:pe,useImperativeHandle:pe,useLayoutEffect:pe,useInsertionEffect:pe,useMemo:pe,useReducer:pe,useRef:pe,useState:pe,useDebugValue:pe,useDeferredValue:pe,useTransition:pe,useSyncExternalStore:pe,useId:pe,useHostTransitionStatus:pe,useFormState:pe,useActionState:pe,useOptimistic:pe,useMemoCache:pe,useCacheRefresh:pe},dv={readContext:Ve,use:Au,useCallback:function(r,s){return iA().memoizedState=[r,s===void 0?null:s],r},useContext:Ve,useEffect:$0,useImperativeHandle:function(r,s,l){l=l!=null?l.concat([r]):null,ru(4194308,4,ev.bind(null,s,r),l)},useLayoutEffect:function(r,s){return ru(4194308,4,r,s)},useInsertionEffect:function(r,s){ru(4,2,r,s)},useMemo:function(r,s){var l=iA();s=s===void 0?null:s;var f=r();if(pr){fi(!0);try{r()}finally{fi(!1)}}return l.memoizedState=[f,s],f},useReducer:function(r,s,l){var f=iA();if(l!==void 0){var d=l(s);if(pr){fi(!0);try{l(s)}finally{fi(!1)}}}else d=s;return f.memoizedState=f.baseState=d,r={pending:null,lanes:0,dispatch:null,lastRenderedReducer:r,lastRenderedState:d},f.queue=r,r=r.dispatch=sS.bind(null,_t,r),[f.memoizedState,r]},useRef:function(r){var s=iA();return r={current:r},s.memoizedState=r},useState:function(r){r=pd(r);var s=r.queue,l=cv.bind(null,_t,s);return s.dispatch=l,[r.memoizedState,l]},useDebugValue:md,useDeferredValue:function(r,s){var l=iA();return vd(l,r,s)},useTransition:function(){var r=pd(!1);return r=sv.bind(null,_t,r.queue,!0,!1),iA().memoizedState=r,[!1,r]},useSyncExternalStore:function(r,s,l){var f=_t,d=iA();if(Lt){if(l===void 0)throw Error(n(407));l=l()}else{if(l=s(),Yt===null)throw Error(n(349));(Ht&124)!==0||M0(f,s,l)}d.memoizedState=l;var p={value:l,getSnapshot:s};return d.queue=p,$0(I0.bind(null,f,p,r),[r]),f.flags|=2048,bs(9,iu(),L0.bind(null,f,p,l,s),null),l},useId:function(){var r=iA(),s=Yt.identifierPrefix;if(Lt){var l=Hn,f=Sn;l=(f&~(1<<32-dA(f)-1)).toString(32)+l,s="«"+s+"R"+l,l=eu++,0mt?(He=pt,pt=null):He=pt.sibling;var Tt=z(L,pt,R[mt],Z);if(Tt===null){pt===null&&(pt=He);break}r&&pt&&Tt.alternate===null&&s(L,pt),D=p(Tt,D,mt),Qt===null?lt=Tt:Qt.sibling=Tt,Qt=Tt,pt=He}if(mt===R.length)return l(L,pt),Lt&&ur(L,mt),lt;if(pt===null){for(;mtmt?(He=pt,pt=null):He=pt.sibling;var Mi=z(L,pt,Tt.value,Z);if(Mi===null){pt===null&&(pt=He);break}r&&pt&&Mi.alternate===null&&s(L,pt),D=p(Mi,D,mt),Qt===null?lt=Mi:Qt.sibling=Mi,Qt=Mi,pt=He}if(Tt.done)return l(L,pt),Lt&&ur(L,mt),lt;if(pt===null){for(;!Tt.done;mt++,Tt=R.next())Tt=$(L,Tt.value,Z),Tt!==null&&(D=p(Tt,D,mt),Qt===null?lt=Tt:Qt.sibling=Tt,Qt=Tt);return Lt&&ur(L,mt),lt}for(pt=f(pt);!Tt.done;mt++,Tt=R.next())Tt=V(pt,L,mt,Tt.value,Z),Tt!==null&&(r&&Tt.alternate!==null&&pt.delete(Tt.key===null?mt:Tt.key),D=p(Tt,D,mt),Qt===null?lt=Tt:Qt.sibling=Tt,Qt=Tt);return r&&pt.forEach(function(o1){return s(L,o1)}),Lt&&ur(L,mt),lt}function Vt(L,D,R,Z){if(typeof R=="object"&&R!==null&&R.type===b&&R.key===null&&(R=R.props.children),typeof R=="object"&&R!==null){switch(R.$$typeof){case m:t:{for(var lt=R.key;D!==null;){if(D.key===lt){if(lt=R.type,lt===b){if(D.tag===7){l(L,D.sibling),Z=d(D,R.props.children),Z.return=L,L=Z;break t}}else if(D.elementType===lt||typeof lt=="object"&<!==null&<.$$typeof===P&&pv(lt)===D.type){l(L,D.sibling),Z=d(D,R.props),Ga(Z,R),Z.return=L,L=Z;break t}l(L,D);break}else s(L,D);D=D.sibling}R.type===b?(Z=or(R.props.children,L.mode,Z,R.key),Z.return=L,L=Z):(Z=jl(R.type,R.key,R.props,null,L.mode,Z),Ga(Z,R),Z.return=L,L=Z)}return w(L);case v:t:{for(lt=R.key;D!==null;){if(D.key===lt)if(D.tag===4&&D.stateNode.containerInfo===R.containerInfo&&D.stateNode.implementation===R.implementation){l(L,D.sibling),Z=d(D,R.children||[]),Z.return=L,L=Z;break t}else{l(L,D);break}else s(L,D);D=D.sibling}Z=Ph(R,L.mode,Z),Z.return=L,L=Z}return w(L);case P:return lt=R._init,R=lt(R._payload),Vt(L,D,R,Z)}if(ut(R))return vt(L,D,R,Z);if(nt(R)){if(lt=nt(R),typeof lt!="function")throw Error(n(150));return R=lt.call(R),Bt(L,D,R,Z)}if(typeof R.then=="function")return Vt(L,D,ou(R),Z);if(R.$$typeof===E)return Vt(L,D,Yl(L,R),Z);lu(L,R)}return typeof R=="string"&&R!==""||typeof R=="number"||typeof R=="bigint"?(R=""+R,D!==null&&D.tag===6?(l(L,D.sibling),Z=d(D,R),Z.return=L,L=Z):(l(L,D),Z=Vh(R,L.mode,Z),Z.return=L,L=Z),w(L)):l(L,D)}return function(L,D,R,Z){try{ja=0;var lt=Vt(L,D,R,Z);return ys=null,lt}catch(pt){if(pt===La||pt===$l)throw pt;var Qt=pA(29,pt,null,L.mode);return Qt.lanes=Z,Qt.return=L,Qt}finally{}}}var Cs=Bv(!0),mv=Bv(!1),MA=X(null),ln=null;function wi(r){var s=r.alternate;q(Qe,Qe.current&1),q(MA,r),ln===null&&(s===null||ms.current!==null||s.memoizedState!==null)&&(ln=r)}function vv(r){if(r.tag===22){if(q(Qe,Qe.current),q(MA,r),ln===null){var s=r.alternate;s!==null&&s.memoizedState!==null&&(ln=r)}}else bi()}function bi(){q(Qe,Qe.current),q(MA,MA.current)}function Mn(r){tt(MA),ln===r&&(ln=null),tt(Qe)}var Qe=X(0);function uu(r){for(var s=r;s!==null;){if(s.tag===13){var l=s.memoizedState;if(l!==null&&(l=l.dehydrated,l===null||l.data==="$?"||fg(l)))return s}else if(s.tag===19&&s.memoizedProps.revealOrder!==void 0){if((s.flags&128)!==0)return s}else if(s.child!==null){s.child.return=s,s=s.child;continue}if(s===r)break;for(;s.sibling===null;){if(s.return===null||s.return===r)return null;s=s.return}s.sibling.return=s.return,s=s.sibling}return null}function Cd(r,s,l,f){s=r.memoizedState,l=l(f,s),l=l==null?s:g({},s,l),r.memoizedState=l,r.lanes===0&&(r.updateQueue.baseState=l)}var _d={enqueueSetState:function(r,s,l){r=r._reactInternals;var f=wA(),d=Bi(f);d.payload=s,l!=null&&(d.callback=l),s=mi(r,d,f),s!==null&&(bA(s,r,f),Ra(s,r,f))},enqueueReplaceState:function(r,s,l){r=r._reactInternals;var f=wA(),d=Bi(f);d.tag=1,d.payload=s,l!=null&&(d.callback=l),s=mi(r,d,f),s!==null&&(bA(s,r,f),Ra(s,r,f))},enqueueForceUpdate:function(r,s){r=r._reactInternals;var l=wA(),f=Bi(l);f.tag=2,s!=null&&(f.callback=s),s=mi(r,f,l),s!==null&&(bA(s,r,l),Ra(s,r,l))}};function wv(r,s,l,f,d,p,w){return r=r.stateNode,typeof r.shouldComponentUpdate=="function"?r.shouldComponentUpdate(f,p,w):s.prototype&&s.prototype.isPureReactComponent?!Fa(l,f)||!Fa(d,p):!0}function bv(r,s,l,f){r=s.state,typeof s.componentWillReceiveProps=="function"&&s.componentWillReceiveProps(l,f),typeof s.UNSAFE_componentWillReceiveProps=="function"&&s.UNSAFE_componentWillReceiveProps(l,f),s.state!==r&&_d.enqueueReplaceState(s,s.state,null)}function Br(r,s){var l=s;if("ref"in s){l={};for(var f in s)f!=="ref"&&(l[f]=s[f])}if(r=r.defaultProps){l===s&&(l=g({},l));for(var d in r)l[d]===void 0&&(l[d]=r[d])}return l}var cu=typeof reportError=="function"?reportError:function(r){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var s=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof r=="object"&&r!==null&&typeof r.message=="string"?String(r.message):String(r),error:r});if(!window.dispatchEvent(s))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",r);return}console.error(r)};function yv(r){cu(r)}function Cv(r){console.error(r)}function _v(r){cu(r)}function fu(r,s){try{var l=r.onUncaughtError;l(s.value,{componentStack:s.stack})}catch(f){setTimeout(function(){throw f})}}function Qv(r,s,l){try{var f=r.onCaughtError;f(l.value,{componentStack:l.stack,errorBoundary:s.tag===1?s.stateNode:null})}catch(d){setTimeout(function(){throw d})}}function Qd(r,s,l){return l=Bi(l),l.tag=3,l.payload={element:null},l.callback=function(){fu(r,s)},l}function Uv(r){return r=Bi(r),r.tag=3,r}function xv(r,s,l,f){var d=l.type.getDerivedStateFromError;if(typeof d=="function"){var p=f.value;r.payload=function(){return d(p)},r.callback=function(){Qv(s,l,f)}}var w=l.stateNode;w!==null&&typeof w.componentDidCatch=="function"&&(r.callback=function(){Qv(s,l,f),typeof d!="function"&&(xi===null?xi=new Set([this]):xi.add(this));var Q=f.stack;this.componentDidCatch(f.value,{componentStack:Q!==null?Q:""})})}function oS(r,s,l,f,d){if(l.flags|=32768,f!==null&&typeof f=="object"&&typeof f.then=="function"){if(s=l.alternate,s!==null&&Ta(s,l,d,!0),l=MA.current,l!==null){switch(l.tag){case 13:return ln===null?Yd():l.alternate===null&&he===0&&(he=3),l.flags&=-257,l.flags|=65536,l.lanes=d,f===td?l.flags|=16384:(s=l.updateQueue,s===null?l.updateQueue=new Set([f]):s.add(f),$d(r,f,d)),!1;case 22:return l.flags|=65536,f===td?l.flags|=16384:(s=l.updateQueue,s===null?(s={transitions:null,markerInstances:null,retryQueue:new Set([f])},l.updateQueue=s):(l=s.retryQueue,l===null?s.retryQueue=new Set([f]):l.add(f)),$d(r,f,d)),!1}throw Error(n(435,l.tag))}return $d(r,f,d),Yd(),!1}if(Lt)return s=MA.current,s!==null?((s.flags&65536)===0&&(s.flags|=256),s.flags|=65536,s.lanes=d,f!==Xh&&(r=Error(n(422),{cause:f}),Oa(HA(r,l)))):(f!==Xh&&(s=Error(n(423),{cause:f}),Oa(HA(s,l))),r=r.current.alternate,r.flags|=65536,d&=-d,r.lanes|=d,f=HA(f,l),d=Qd(r.stateNode,f,d),nd(r,d),he!==4&&(he=2)),!1;var p=Error(n(520),{cause:f});if(p=HA(p,l),qa===null?qa=[p]:qa.push(p),he!==4&&(he=2),s===null)return!0;f=HA(f,l),l=s;do{switch(l.tag){case 3:return l.flags|=65536,r=d&-d,l.lanes|=r,r=Qd(l.stateNode,f,r),nd(l,r),!1;case 1:if(s=l.type,p=l.stateNode,(l.flags&128)===0&&(typeof s.getDerivedStateFromError=="function"||p!==null&&typeof p.componentDidCatch=="function"&&(xi===null||!xi.has(p))))return l.flags|=65536,d&=-d,l.lanes|=d,d=Uv(d),xv(d,r,l,f),nd(l,d),!1}l=l.return}while(l!==null);return!1}var Fv=Error(n(461)),Ee=!1;function Me(r,s,l,f){s.child=r===null?mv(s,null,l,f):Cs(s,r.child,l,f)}function Ev(r,s,l,f,d){l=l.render;var p=s.ref;if("ref"in f){var w={};for(var Q in f)Q!=="ref"&&(w[Q]=f[Q])}else w=f;return dr(s),f=od(r,s,l,w,p,d),Q=ld(),r!==null&&!Ee?(ud(r,s,d),Ln(r,s,d)):(Lt&&Q&&jh(s),s.flags|=1,Me(r,s,f,d),s.child)}function Sv(r,s,l,f,d){if(r===null){var p=l.type;return typeof p=="function"&&!zh(p)&&p.defaultProps===void 0&&l.compare===null?(s.tag=15,s.type=p,Hv(r,s,p,f,d)):(r=jl(l.type,null,f,s,s.mode,d),r.ref=s.ref,r.return=s,s.child=r)}if(p=r.child,!Td(r,d)){var w=p.memoizedProps;if(l=l.compare,l=l!==null?l:Fa,l(w,f)&&r.ref===s.ref)return Ln(r,s,d)}return s.flags|=1,r=En(p,f),r.ref=s.ref,r.return=s,s.child=r}function Hv(r,s,l,f,d){if(r!==null){var p=r.memoizedProps;if(Fa(p,f)&&r.ref===s.ref)if(Ee=!1,s.pendingProps=f=p,Td(r,d))(r.flags&131072)!==0&&(Ee=!0);else return s.lanes=r.lanes,Ln(r,s,d)}return Ud(r,s,l,f,d)}function Ov(r,s,l){var f=s.pendingProps,d=f.children,p=r!==null?r.memoizedState:null;if(f.mode==="hidden"){if((s.flags&128)!==0){if(f=p!==null?p.baseLanes|l:l,r!==null){for(d=s.child=r.child,p=0;d!==null;)p=p|d.lanes|d.childLanes,d=d.sibling;s.childLanes=p&~f}else s.childLanes=0,s.child=null;return Tv(r,s,f,l)}if((l&536870912)!==0)s.memoizedState={baseLanes:0,cachePool:null},r!==null&&Wl(s,p!==null?p.cachePool:null),p!==null?H0(s,p):rd(),vv(s);else return s.lanes=s.childLanes=536870912,Tv(r,s,p!==null?p.baseLanes|l:l,l)}else p!==null?(Wl(s,p.cachePool),H0(s,p),bi(),s.memoizedState=null):(r!==null&&Wl(s,null),rd(),bi());return Me(r,s,d,l),s.child}function Tv(r,s,l,f){var d=qh();return d=d===null?null:{parent:_e._currentValue,pool:d},s.memoizedState={baseLanes:l,cachePool:d},r!==null&&Wl(s,null),rd(),vv(s),r!==null&&Ta(r,s,f,!0),null}function hu(r,s){var l=s.ref;if(l===null)r!==null&&r.ref!==null&&(s.flags|=4194816);else{if(typeof l!="function"&&typeof l!="object")throw Error(n(284));(r===null||r.ref!==l)&&(s.flags|=4194816)}}function Ud(r,s,l,f,d){return dr(s),l=od(r,s,l,f,void 0,d),f=ld(),r!==null&&!Ee?(ud(r,s,d),Ln(r,s,d)):(Lt&&f&&jh(s),s.flags|=1,Me(r,s,l,d),s.child)}function Dv(r,s,l,f,d,p){return dr(s),s.updateQueue=null,l=T0(s,f,l,d),O0(r),f=ld(),r!==null&&!Ee?(ud(r,s,p),Ln(r,s,p)):(Lt&&f&&jh(s),s.flags|=1,Me(r,s,l,p),s.child)}function Mv(r,s,l,f,d){if(dr(s),s.stateNode===null){var p=hs,w=l.contextType;typeof w=="object"&&w!==null&&(p=Ve(w)),p=new l(f,p),s.memoizedState=p.state!==null&&p.state!==void 0?p.state:null,p.updater=_d,s.stateNode=p,p._reactInternals=s,p=s.stateNode,p.props=f,p.state=s.memoizedState,p.refs={},ed(s),w=l.contextType,p.context=typeof w=="object"&&w!==null?Ve(w):hs,p.state=s.memoizedState,w=l.getDerivedStateFromProps,typeof w=="function"&&(Cd(s,l,w,f),p.state=s.memoizedState),typeof l.getDerivedStateFromProps=="function"||typeof p.getSnapshotBeforeUpdate=="function"||typeof p.UNSAFE_componentWillMount!="function"&&typeof p.componentWillMount!="function"||(w=p.state,typeof p.componentWillMount=="function"&&p.componentWillMount(),typeof p.UNSAFE_componentWillMount=="function"&&p.UNSAFE_componentWillMount(),w!==p.state&&_d.enqueueReplaceState(p,p.state,null),Ka(s,f,p,d),Na(),p.state=s.memoizedState),typeof p.componentDidMount=="function"&&(s.flags|=4194308),f=!0}else if(r===null){p=s.stateNode;var Q=s.memoizedProps,S=Br(l,Q);p.props=S;var K=p.context,j=l.contextType;w=hs,typeof j=="object"&&j!==null&&(w=Ve(j));var $=l.getDerivedStateFromProps;j=typeof $=="function"||typeof p.getSnapshotBeforeUpdate=="function",Q=s.pendingProps!==Q,j||typeof p.UNSAFE_componentWillReceiveProps!="function"&&typeof p.componentWillReceiveProps!="function"||(Q||K!==w)&&bv(s,p,f,w),pi=!1;var z=s.memoizedState;p.state=z,Ka(s,f,p,d),Na(),K=s.memoizedState,Q||z!==K||pi?(typeof $=="function"&&(Cd(s,l,$,f),K=s.memoizedState),(S=pi||wv(s,l,S,f,z,K,w))?(j||typeof p.UNSAFE_componentWillMount!="function"&&typeof p.componentWillMount!="function"||(typeof p.componentWillMount=="function"&&p.componentWillMount(),typeof p.UNSAFE_componentWillMount=="function"&&p.UNSAFE_componentWillMount()),typeof p.componentDidMount=="function"&&(s.flags|=4194308)):(typeof p.componentDidMount=="function"&&(s.flags|=4194308),s.memoizedProps=f,s.memoizedState=K),p.props=f,p.state=K,p.context=w,f=S):(typeof p.componentDidMount=="function"&&(s.flags|=4194308),f=!1)}else{p=s.stateNode,Ad(r,s),w=s.memoizedProps,j=Br(l,w),p.props=j,$=s.pendingProps,z=p.context,K=l.contextType,S=hs,typeof K=="object"&&K!==null&&(S=Ve(K)),Q=l.getDerivedStateFromProps,(K=typeof Q=="function"||typeof p.getSnapshotBeforeUpdate=="function")||typeof p.UNSAFE_componentWillReceiveProps!="function"&&typeof p.componentWillReceiveProps!="function"||(w!==$||z!==S)&&bv(s,p,f,S),pi=!1,z=s.memoizedState,p.state=z,Ka(s,f,p,d),Na();var V=s.memoizedState;w!==$||z!==V||pi||r!==null&&r.dependencies!==null&&Zl(r.dependencies)?(typeof Q=="function"&&(Cd(s,l,Q,f),V=s.memoizedState),(j=pi||wv(s,l,j,f,z,V,S)||r!==null&&r.dependencies!==null&&Zl(r.dependencies))?(K||typeof p.UNSAFE_componentWillUpdate!="function"&&typeof p.componentWillUpdate!="function"||(typeof p.componentWillUpdate=="function"&&p.componentWillUpdate(f,V,S),typeof p.UNSAFE_componentWillUpdate=="function"&&p.UNSAFE_componentWillUpdate(f,V,S)),typeof p.componentDidUpdate=="function"&&(s.flags|=4),typeof p.getSnapshotBeforeUpdate=="function"&&(s.flags|=1024)):(typeof p.componentDidUpdate!="function"||w===r.memoizedProps&&z===r.memoizedState||(s.flags|=4),typeof p.getSnapshotBeforeUpdate!="function"||w===r.memoizedProps&&z===r.memoizedState||(s.flags|=1024),s.memoizedProps=f,s.memoizedState=V),p.props=f,p.state=V,p.context=S,f=j):(typeof p.componentDidUpdate!="function"||w===r.memoizedProps&&z===r.memoizedState||(s.flags|=4),typeof p.getSnapshotBeforeUpdate!="function"||w===r.memoizedProps&&z===r.memoizedState||(s.flags|=1024),f=!1)}return p=f,hu(r,s),f=(s.flags&128)!==0,p||f?(p=s.stateNode,l=f&&typeof l.getDerivedStateFromError!="function"?null:p.render(),s.flags|=1,r!==null&&f?(s.child=Cs(s,r.child,null,d),s.child=Cs(s,null,l,d)):Me(r,s,l,d),s.memoizedState=p.state,r=s.child):r=Ln(r,s,d),r}function Lv(r,s,l,f){return Ha(),s.flags|=256,Me(r,s,l,f),s.child}var xd={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function Fd(r){return{baseLanes:r,cachePool:C0()}}function Ed(r,s,l){return r=r!==null?r.childLanes&~l:0,s&&(r|=LA),r}function Iv(r,s,l){var f=s.pendingProps,d=!1,p=(s.flags&128)!==0,w;if((w=p)||(w=r!==null&&r.memoizedState===null?!1:(Qe.current&2)!==0),w&&(d=!0,s.flags&=-129),w=(s.flags&32)!==0,s.flags&=-33,r===null){if(Lt){if(d?wi(s):bi(),Lt){var Q=fe,S;if(S=Q){t:{for(S=Q,Q=on;S.nodeType!==8;){if(!Q){Q=null;break t}if(S=ZA(S.nextSibling),S===null){Q=null;break t}}Q=S}Q!==null?(s.memoizedState={dehydrated:Q,treeContext:lr!==null?{id:Sn,overflow:Hn}:null,retryLane:536870912,hydrationErrors:null},S=pA(18,null,null,0),S.stateNode=Q,S.return=s,s.child=S,Je=s,fe=null,S=!0):S=!1}S||fr(s)}if(Q=s.memoizedState,Q!==null&&(Q=Q.dehydrated,Q!==null))return fg(Q)?s.lanes=32:s.lanes=536870912,null;Mn(s)}return Q=f.children,f=f.fallback,d?(bi(),d=s.mode,Q=du({mode:"hidden",children:Q},d),f=or(f,d,l,null),Q.return=s,f.return=s,Q.sibling=f,s.child=Q,d=s.child,d.memoizedState=Fd(l),d.childLanes=Ed(r,w,l),s.memoizedState=xd,f):(wi(s),Sd(s,Q))}if(S=r.memoizedState,S!==null&&(Q=S.dehydrated,Q!==null)){if(p)s.flags&256?(wi(s),s.flags&=-257,s=Hd(r,s,l)):s.memoizedState!==null?(bi(),s.child=r.child,s.flags|=128,s=null):(bi(),d=f.fallback,Q=s.mode,f=du({mode:"visible",children:f.children},Q),d=or(d,Q,l,null),d.flags|=2,f.return=s,d.return=s,f.sibling=d,s.child=f,Cs(s,r.child,null,l),f=s.child,f.memoizedState=Fd(l),f.childLanes=Ed(r,w,l),s.memoizedState=xd,s=d);else if(wi(s),fg(Q)){if(w=Q.nextSibling&&Q.nextSibling.dataset,w)var K=w.dgst;w=K,f=Error(n(419)),f.stack="",f.digest=w,Oa({value:f,source:null,stack:null}),s=Hd(r,s,l)}else if(Ee||Ta(r,s,l,!1),w=(l&r.childLanes)!==0,Ee||w){if(w=Yt,w!==null&&(f=l&-l,f=(f&42)!==0?1:hh(f),f=(f&(w.suspendedLanes|l))!==0?0:f,f!==0&&f!==S.retryLane))throw S.retryLane=f,fs(r,f),bA(w,r,f),Fv;Q.data==="$?"||Yd(),s=Hd(r,s,l)}else Q.data==="$?"?(s.flags|=192,s.child=r.child,s=null):(r=S.treeContext,fe=ZA(Q.nextSibling),Je=s,Lt=!0,cr=null,on=!1,r!==null&&(TA[DA++]=Sn,TA[DA++]=Hn,TA[DA++]=lr,Sn=r.id,Hn=r.overflow,lr=s),s=Sd(s,f.children),s.flags|=4096);return s}return d?(bi(),d=f.fallback,Q=s.mode,S=r.child,K=S.sibling,f=En(S,{mode:"hidden",children:f.children}),f.subtreeFlags=S.subtreeFlags&65011712,K!==null?d=En(K,d):(d=or(d,Q,l,null),d.flags|=2),d.return=s,f.return=s,f.sibling=d,s.child=f,f=d,d=s.child,Q=r.child.memoizedState,Q===null?Q=Fd(l):(S=Q.cachePool,S!==null?(K=_e._currentValue,S=S.parent!==K?{parent:K,pool:K}:S):S=C0(),Q={baseLanes:Q.baseLanes|l,cachePool:S}),d.memoizedState=Q,d.childLanes=Ed(r,w,l),s.memoizedState=xd,f):(wi(s),l=r.child,r=l.sibling,l=En(l,{mode:"visible",children:f.children}),l.return=s,l.sibling=null,r!==null&&(w=s.deletions,w===null?(s.deletions=[r],s.flags|=16):w.push(r)),s.child=l,s.memoizedState=null,l)}function Sd(r,s){return s=du({mode:"visible",children:s},r.mode),s.return=r,r.child=s}function du(r,s){return r=pA(22,r,null,s),r.lanes=0,r.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null},r}function Hd(r,s,l){return Cs(s,r.child,null,l),r=Sd(s,s.pendingProps.children),r.flags|=2,s.memoizedState=null,r}function Rv(r,s,l){r.lanes|=s;var f=r.alternate;f!==null&&(f.lanes|=s),Yh(r.return,s,l)}function Od(r,s,l,f,d){var p=r.memoizedState;p===null?r.memoizedState={isBackwards:s,rendering:null,renderingStartTime:0,last:f,tail:l,tailMode:d}:(p.isBackwards=s,p.rendering=null,p.renderingStartTime=0,p.last=f,p.tail=l,p.tailMode=d)}function Nv(r,s,l){var f=s.pendingProps,d=f.revealOrder,p=f.tail;if(Me(r,s,f.children,l),f=Qe.current,(f&2)!==0)f=f&1|2,s.flags|=128;else{if(r!==null&&(r.flags&128)!==0)t:for(r=s.child;r!==null;){if(r.tag===13)r.memoizedState!==null&&Rv(r,l,s);else if(r.tag===19)Rv(r,l,s);else if(r.child!==null){r.child.return=r,r=r.child;continue}if(r===s)break t;for(;r.sibling===null;){if(r.return===null||r.return===s)break t;r=r.return}r.sibling.return=r.return,r=r.sibling}f&=1}switch(q(Qe,f),d){case"forwards":for(l=s.child,d=null;l!==null;)r=l.alternate,r!==null&&uu(r)===null&&(d=l),l=l.sibling;l=d,l===null?(d=s.child,s.child=null):(d=l.sibling,l.sibling=null),Od(s,!1,d,l,p);break;case"backwards":for(l=null,d=s.child,s.child=null;d!==null;){if(r=d.alternate,r!==null&&uu(r)===null){s.child=d;break}r=d.sibling,d.sibling=l,l=d,d=r}Od(s,!0,l,null,p);break;case"together":Od(s,!1,null,null,void 0);break;default:s.memoizedState=null}return s.child}function Ln(r,s,l){if(r!==null&&(s.dependencies=r.dependencies),Ui|=s.lanes,(l&s.childLanes)===0)if(r!==null){if(Ta(r,s,l,!1),(l&s.childLanes)===0)return null}else return null;if(r!==null&&s.child!==r.child)throw Error(n(153));if(s.child!==null){for(r=s.child,l=En(r,r.pendingProps),s.child=l,l.return=s;r.sibling!==null;)r=r.sibling,l=l.sibling=En(r,r.pendingProps),l.return=s;l.sibling=null}return s.child}function Td(r,s){return(r.lanes&s)!==0?!0:(r=r.dependencies,!!(r!==null&&Zl(r)))}function lS(r,s,l){switch(s.tag){case 3:qt(s,s.stateNode.containerInfo),gi(s,_e,r.memoizedState.cache),Ha();break;case 27:case 5:da(s);break;case 4:qt(s,s.stateNode.containerInfo);break;case 10:gi(s,s.type,s.memoizedProps.value);break;case 13:var f=s.memoizedState;if(f!==null)return f.dehydrated!==null?(wi(s),s.flags|=128,null):(l&s.child.childLanes)!==0?Iv(r,s,l):(wi(s),r=Ln(r,s,l),r!==null?r.sibling:null);wi(s);break;case 19:var d=(r.flags&128)!==0;if(f=(l&s.childLanes)!==0,f||(Ta(r,s,l,!1),f=(l&s.childLanes)!==0),d){if(f)return Nv(r,s,l);s.flags|=128}if(d=s.memoizedState,d!==null&&(d.rendering=null,d.tail=null,d.lastEffect=null),q(Qe,Qe.current),f)break;return null;case 22:case 23:return s.lanes=0,Ov(r,s,l);case 24:gi(s,_e,r.memoizedState.cache)}return Ln(r,s,l)}function Kv(r,s,l){if(r!==null)if(r.memoizedProps!==s.pendingProps)Ee=!0;else{if(!Td(r,l)&&(s.flags&128)===0)return Ee=!1,lS(r,s,l);Ee=(r.flags&131072)!==0}else Ee=!1,Lt&&(s.flags&1048576)!==0&&p0(s,Xl,s.index);switch(s.lanes=0,s.tag){case 16:t:{r=s.pendingProps;var f=s.elementType,d=f._init;if(f=d(f._payload),s.type=f,typeof f=="function")zh(f)?(r=Br(f,r),s.tag=1,s=Mv(null,s,f,r,l)):(s.tag=0,s=Ud(null,s,f,r,l));else{if(f!=null){if(d=f.$$typeof,d===O){s.tag=11,s=Ev(null,s,f,r,l);break t}else if(d===k){s.tag=14,s=Sv(null,s,f,r,l);break t}}throw s=bt(f)||f,Error(n(306,s,""))}}return s;case 0:return Ud(r,s,s.type,s.pendingProps,l);case 1:return f=s.type,d=Br(f,s.pendingProps),Mv(r,s,f,d,l);case 3:t:{if(qt(s,s.stateNode.containerInfo),r===null)throw Error(n(387));f=s.pendingProps;var p=s.memoizedState;d=p.element,Ad(r,s),Ka(s,f,null,l);var w=s.memoizedState;if(f=w.cache,gi(s,_e,f),f!==p.cache&&Wh(s,[_e],l,!0),Na(),f=w.element,p.isDehydrated)if(p={element:f,isDehydrated:!1,cache:w.cache},s.updateQueue.baseState=p,s.memoizedState=p,s.flags&256){s=Lv(r,s,f,l);break t}else if(f!==d){d=HA(Error(n(424)),s),Oa(d),s=Lv(r,s,f,l);break t}else{switch(r=s.stateNode.containerInfo,r.nodeType){case 9:r=r.body;break;default:r=r.nodeName==="HTML"?r.ownerDocument.body:r}for(fe=ZA(r.firstChild),Je=s,Lt=!0,cr=null,on=!0,l=mv(s,null,f,l),s.child=l;l;)l.flags=l.flags&-3|4096,l=l.sibling}else{if(Ha(),f===d){s=Ln(r,s,l);break t}Me(r,s,f,l)}s=s.child}return s;case 26:return hu(r,s),r===null?(l=Pw(s.type,null,s.pendingProps,null))?s.memoizedState=l:Lt||(l=s.type,r=s.pendingProps,f=Fu(st.current).createElement(l),f[ze]=s,f[AA]=r,Ie(f,l,r),Fe(f),s.stateNode=f):s.memoizedState=Pw(s.type,r.memoizedProps,s.pendingProps,r.memoizedState),null;case 27:return da(s),r===null&&Lt&&(f=s.stateNode=kw(s.type,s.pendingProps,st.current),Je=s,on=!0,d=fe,Si(s.type)?(hg=d,fe=ZA(f.firstChild)):fe=d),Me(r,s,s.pendingProps.children,l),hu(r,s),r===null&&(s.flags|=4194304),s.child;case 5:return r===null&&Lt&&((d=f=fe)&&(f=IS(f,s.type,s.pendingProps,on),f!==null?(s.stateNode=f,Je=s,fe=ZA(f.firstChild),on=!1,d=!0):d=!1),d||fr(s)),da(s),d=s.type,p=s.pendingProps,w=r!==null?r.memoizedProps:null,f=p.children,lg(d,p)?f=null:w!==null&&lg(d,w)&&(s.flags|=32),s.memoizedState!==null&&(d=od(r,s,eS,null,null,l),oo._currentValue=d),hu(r,s),Me(r,s,f,l),s.child;case 6:return r===null&&Lt&&((r=l=fe)&&(l=RS(l,s.pendingProps,on),l!==null?(s.stateNode=l,Je=s,fe=null,r=!0):r=!1),r||fr(s)),null;case 13:return Iv(r,s,l);case 4:return qt(s,s.stateNode.containerInfo),f=s.pendingProps,r===null?s.child=Cs(s,null,f,l):Me(r,s,f,l),s.child;case 11:return Ev(r,s,s.type,s.pendingProps,l);case 7:return Me(r,s,s.pendingProps,l),s.child;case 8:return Me(r,s,s.pendingProps.children,l),s.child;case 12:return Me(r,s,s.pendingProps.children,l),s.child;case 10:return f=s.pendingProps,gi(s,s.type,f.value),Me(r,s,f.children,l),s.child;case 9:return d=s.type._context,f=s.pendingProps.children,dr(s),d=Ve(d),f=f(d),s.flags|=1,Me(r,s,f,l),s.child;case 14:return Sv(r,s,s.type,s.pendingProps,l);case 15:return Hv(r,s,s.type,s.pendingProps,l);case 19:return Nv(r,s,l);case 31:return f=s.pendingProps,l=s.mode,f={mode:f.mode,children:f.children},r===null?(l=du(f,l),l.ref=s.ref,s.child=l,l.return=s,s=l):(l=En(r.child,f),l.ref=s.ref,s.child=l,l.return=s,s=l),s;case 22:return Ov(r,s,l);case 24:return dr(s),f=Ve(_e),r===null?(d=qh(),d===null&&(d=Yt,p=$h(),d.pooledCache=p,p.refCount++,p!==null&&(d.pooledCacheLanes|=l),d=p),s.memoizedState={parent:f,cache:d},ed(s),gi(s,_e,d)):((r.lanes&l)!==0&&(Ad(r,s),Ka(s,null,null,l),Na()),d=r.memoizedState,p=s.memoizedState,d.parent!==f?(d={parent:f,cache:f},s.memoizedState=d,s.lanes===0&&(s.memoizedState=s.updateQueue.baseState=d),gi(s,_e,f)):(f=p.cache,gi(s,_e,f),f!==d.cache&&Wh(s,[_e],l,!0))),Me(r,s,s.pendingProps.children,l),s.child;case 29:throw s.pendingProps}throw Error(n(156,s.tag))}function In(r){r.flags|=4}function kv(r,s){if(s.type!=="stylesheet"||(s.state.loading&4)!==0)r.flags&=-16777217;else if(r.flags|=16777216,!Yw(s)){if(s=MA.current,s!==null&&((Ht&4194048)===Ht?ln!==null:(Ht&62914560)!==Ht&&(Ht&536870912)===0||s!==ln))throw Ia=td,_0;r.flags|=8192}}function gu(r,s){s!==null&&(r.flags|=4),r.flags&16384&&(s=r.tag!==22?vm():536870912,r.lanes|=s,xs|=s)}function Xa(r,s){if(!Lt)switch(r.tailMode){case"hidden":s=r.tail;for(var l=null;s!==null;)s.alternate!==null&&(l=s),s=s.sibling;l===null?r.tail=null:l.sibling=null;break;case"collapsed":l=r.tail;for(var f=null;l!==null;)l.alternate!==null&&(f=l),l=l.sibling;f===null?s||r.tail===null?r.tail=null:r.tail.sibling=null:f.sibling=null}}function le(r){var s=r.alternate!==null&&r.alternate.child===r.child,l=0,f=0;if(s)for(var d=r.child;d!==null;)l|=d.lanes|d.childLanes,f|=d.subtreeFlags&65011712,f|=d.flags&65011712,d.return=r,d=d.sibling;else for(d=r.child;d!==null;)l|=d.lanes|d.childLanes,f|=d.subtreeFlags,f|=d.flags,d.return=r,d=d.sibling;return r.subtreeFlags|=f,r.childLanes=l,s}function uS(r,s,l){var f=s.pendingProps;switch(Gh(s),s.tag){case 31:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return le(s),null;case 1:return le(s),null;case 3:return l=s.stateNode,f=null,r!==null&&(f=r.memoizedState.cache),s.memoizedState.cache!==f&&(s.flags|=2048),Tn(_e),FA(),l.pendingContext&&(l.context=l.pendingContext,l.pendingContext=null),(r===null||r.child===null)&&(Sa(s)?In(s):r===null||r.memoizedState.isDehydrated&&(s.flags&256)===0||(s.flags|=1024,v0())),le(s),null;case 26:return l=s.memoizedState,r===null?(In(s),l!==null?(le(s),kv(s,l)):(le(s),s.flags&=-16777217)):l?l!==r.memoizedState?(In(s),le(s),kv(s,l)):(le(s),s.flags&=-16777217):(r.memoizedProps!==f&&In(s),le(s),s.flags&=-16777217),null;case 27:$r(s),l=st.current;var d=s.type;if(r!==null&&s.stateNode!=null)r.memoizedProps!==f&&In(s);else{if(!f){if(s.stateNode===null)throw Error(n(166));return le(s),null}r=Y.current,Sa(s)?B0(s):(r=kw(d,f,l),s.stateNode=r,In(s))}return le(s),null;case 5:if($r(s),l=s.type,r!==null&&s.stateNode!=null)r.memoizedProps!==f&&In(s);else{if(!f){if(s.stateNode===null)throw Error(n(166));return le(s),null}if(r=Y.current,Sa(s))B0(s);else{switch(d=Fu(st.current),r){case 1:r=d.createElementNS("http://www.w3.org/2000/svg",l);break;case 2:r=d.createElementNS("http://www.w3.org/1998/Math/MathML",l);break;default:switch(l){case"svg":r=d.createElementNS("http://www.w3.org/2000/svg",l);break;case"math":r=d.createElementNS("http://www.w3.org/1998/Math/MathML",l);break;case"script":r=d.createElement("div"),r.innerHTML=" + diff --git a/vite-app/src/App.tsx b/vite-app/src/App.tsx index bfdeb141..f322333d 100644 --- a/vite-app/src/App.tsx +++ b/vite-app/src/App.tsx @@ -150,7 +150,11 @@ const App = observer(() => {