VYPR
High severityNVD Advisory· Published Aug 25, 2025· Updated Aug 25, 2025

Langflow Vulnerable to Privilege Escalation via CLI Superuser Creation

CVE-2025-57760

Description

Langflow is a tool for building and deploying AI-powered agents and workflows. A privilege escalation vulnerability exists in Langflow containers where an authenticated user with RCE access can invoke the internal CLI command langflow superuser to create a new administrative user. This results in full superuser access, even if the user initially registered through the UI as a regular (non-admin) account. A patched version has not been made public at this time.

AI Insight

LLM-synthesized narrative grounded in this CVE's description and references.

Langflow containers allow authenticated users with RCE to create a superuser via the internal CLI, bypassing role enforcement and leading to full admin takeover.

Vulnerability

Overview

CVE-2025-57760 is a privilege escalation vulnerability in Langflow, a platform for building AI-powered agents and workflows. The issue resides in the Docker container's internal CLI command langflow superuser, which can create a new administrative user without verifying whether a superuser already exists or requiring proper authentication [4]. This command is exposed at /app/.venv/bin/langflow inside the container [4].

Exploitation

Path

An authenticated user who achieves remote code execution (RCE) — for example, via the /api/v1/validate/code endpoint — can invoke the CLI command to create a superuser account [4]. No additional authentication is needed for the CLI command itself; the attacker simply executes /app/.venv/bin/langflow superuser from the reverse shell [4]. The attacker then logs into the UI with the newly created superuser credentials, bypassing the frontend role enforcement that initially assigned them a non-admin role [4].

Impact

Impact

Successful exploitation grants the attacker full superuser privileges over the Langflow instance. This includes access to all user data, flows, stored credentials, and configuration, as well as the ability to extract third-party API keys and environment variables [4]. The attacker can also run additional Langflow instances inside the container, potentially causing resource exhaustion and service degradation [4].

Mitigation

Status

A fix has been proposed in pull request #9152, which enforces authentication for the superuser CLI command and adds configuration options to disable the command in production environments [1][2]. However, as of the publication date, a patched version has not been publicly released [4]. Users are advised to restrict network access to the Langflow container and monitor for unauthorized RCE attempts until an official patch is available.

AI Insight generated on May 19, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
langflowPyPI
< 1.5.11.5.1
langflow-basePyPI
< 0.5.10.5.1

Affected products

2

Patches

1
c188ec113c9c

fix: enforce authentication for superuser cli command (#9152)

https://github.com/langflow-ai/langflowJordan FrazierAug 14, 2025via ghsa
8 files changed · +357 116
  • .env.example+6 2 modified
    @@ -79,12 +79,16 @@ LANGFLOW_REMOVE_API_KEYS=
     # LANGFLOW_REDIS_CACHE_EXPIRE (default: 3600)
     LANGFLOW_CACHE_TYPE=
     
    -# Set AUTO_LOGIN to false if you want to disable auto login
    +# Set LANGFLOW_AUTO_LOGIN to false if you want to disable auto login
     # and use the login form to login. LANGFLOW_SUPERUSER and LANGFLOW_SUPERUSER_PASSWORD
     # must be set if AUTO_LOGIN is set to false
     # Values: true, false
     LANGFLOW_AUTO_LOGIN=
     
    +# SET LANGFLOW_ENABLE_SUPERUSER_CLI to false to disable
    +# superuser creation via the CLI
    +LANGFLOW_ENABLE_SUPERUSER_CLI=
    +
     # Superuser username
     # Example: LANGFLOW_SUPERUSER=admin
     LANGFLOW_SUPERUSER=
    @@ -111,4 +115,4 @@ LANGFLOW_STORE_ENVIRONMENT_VARIABLES=
     
     # Value must finish with slash /
     #BACKEND_URL=http://localhost:7860/
    -BACKEND_URL=
    \ No newline at end of file
    +BACKEND_URL=
    
  • SECURITY.md+33 1 modified
    @@ -59,4 +59,36 @@ Setting `LANGFLOW_SKIP_AUTH_AUTO_LOGIN=true` and `LANGFLOW_AUTO_LOGIN=true` skip
     
     `LANGFLOW_SKIP_AUTH_AUTO_LOGIN=true` is the default behavior, so users do not need to change existing workflows in 1.5. To update your workflows to require authentication, set `LANGFLOW_SKIP_AUTH_AUTO_LOGIN=false`.
     
    -For more information, see [API keys and authentication](https://docs.langflow.org/api-keys-and-authentication).
    \ No newline at end of file
    +For more information, see [API keys and authentication](https://docs.langflow.org/api-keys-and-authentication).
    +
    +## Security Configuration Guidelines
    +
    +### Superuser Creation Security
    +
    +The `langflow superuser` CLI command can present a privilege escalation risk if not properly secured.
    +
    +#### Security Measures
    +
    +1. **Authentication Required in Production**
    +   - When `LANGFLOW_AUTO_LOGIN=false`, superuser creation requires authentication
    +   - Use `--auth-token` parameter with a valid superuser API key or JWT token
    +
    +2. **Disable CLI Superuser Creation**
    +   - Set `LANGFLOW_ENABLE_SUPERUSER_CLI=false` to disable the command entirely
    +   - Strongly recommended for production environments
    +
    +3. **Secure AUTO_LOGIN Setting**
    +   - Default is `true` for <=1.5. This may change in a future release.
    +   - When `true`, creates default superuser `langflow/langflow` - **ONLY USE IN DEVELOPMENT**
    +
    +#### Production Security Configuration
    +
    +```bash
    +# Recommended production settings
    +export LANGFLOW_AUTO_LOGIN=false
    +export LANGFLOW_ENABLE_SUPERUSER_CLI=false
    +export LANGFLOW_SUPERUSER="<your-superuser-username>"
    +export LANGFLOW_SUPERUSER_PASSWORD="<your-superuser-password>"
    +export LANGFLOW_DATABASE_URL="<your-production-database-url>" # e.g. "postgresql+psycopg://langflow:secure_pass@db.internal:5432/langflow"
    +export LANGFLOW_SECRET_KEY="your-strong-random-secret-key"
    +```
    
  • src/backend/base/langflow/__main__.py+130 30 modified
    @@ -15,7 +15,9 @@
     import httpx
     import typer
     from dotenv import load_dotenv
    +from fastapi import HTTPException
     from httpx import HTTPError
    +from jose import JWTError
     from multiprocess import cpu_count
     from multiprocess.context import Process
     from packaging import version as pkg_version
    @@ -29,9 +31,9 @@
     from langflow.initial_setup.setup import get_or_create_default_folder
     from langflow.logging.logger import configure, logger
     from langflow.main import setup_app
    -from langflow.services.database.utils import session_getter
    +from langflow.services.auth.utils import check_key, get_current_user_by_jwt
     from langflow.services.deps import get_db_service, get_settings_service, session_scope
    -from langflow.services.settings.constants import DEFAULT_SUPERUSER
    +from langflow.services.settings.constants import DEFAULT_SUPERUSER, DEFAULT_SUPERUSER_PASSWORD
     from langflow.services.utils import initialize_services
     from langflow.utils.version import fetch_latest_version, get_version_info
     from langflow.utils.version import is_pre_release as langflow_is_pre_release
    @@ -632,41 +634,138 @@ def print_banner(host: str, port: int, protocol: str) -> None:
     
     @app.command()
     def superuser(
    -    username: str = typer.Option(..., prompt=True, help="Username for the superuser."),
    -    password: str = typer.Option(..., prompt=True, hide_input=True, help="Password for the superuser."),
    +    username: str = typer.Option(
    +        None, help="Username for the superuser. Defaults to 'langflow' when AUTO_LOGIN is enabled."
    +    ),
    +    password: str = typer.Option(
    +        None, help="Password for the superuser. Defaults to 'langflow' when AUTO_LOGIN is enabled."
    +    ),
         log_level: str = typer.Option("error", help="Logging level.", envvar="LANGFLOW_LOG_LEVEL"),
    +    auth_token: str = typer.Option(
    +        None, help="Authentication token of existing superuser.", envvar="LANGFLOW_SUPERUSER_TOKEN"
    +    ),
     ) -> None:
    -    """Create a superuser."""
    +    """Create a superuser.
    +
    +    When AUTO_LOGIN is enabled, uses default credentials.
    +    In production mode, requires authentication.
    +    """
         configure(log_level=log_level)
    -    db_service = get_db_service()
     
    -    async def _create_superuser():
    -        await initialize_services()
    -        async with session_getter(db_service) as session:
    -            from langflow.services.auth.utils import create_super_user
    -
    -            if await create_super_user(db=session, username=username, password=password):
    -                # Verify that the superuser was created
    -                from langflow.services.database.models.user.model import User
    -
    -                stmt = select(User).where(User.username == username)
    -                user: User = (await session.exec(stmt)).first()
    -                if user is None or not user.is_superuser:
    -                    typer.echo("Superuser creation failed.")
    -                    return
    -                # Now create the first folder for the user
    -                result = await get_or_create_default_folder(session, user.id)
    -                if result:
    -                    typer.echo("Default folder created successfully.")
    -                else:
    -                    msg = "Could not create default folder."
    -                    raise RuntimeError(msg)
    -                typer.echo("Superuser created successfully.")
    +    asyncio.run(_create_superuser(username, password, auth_token))
     
    -            else:
    +
    +async def _create_superuser(username: str, password: str, auth_token: str | None):
    +    """Create a superuser."""
    +    await initialize_services()
    +
    +    settings_service = get_settings_service()
    +    # Check if superuser creation via CLI is enabled
    +    if not settings_service.auth_settings.ENABLE_SUPERUSER_CLI:
    +        typer.echo("Error: Superuser creation via CLI is disabled.")
    +        typer.echo("Set LANGFLOW_ENABLE_SUPERUSER_CLI=true to enable this feature.")
    +        raise typer.Exit(1)
    +
    +    if settings_service.auth_settings.AUTO_LOGIN:
    +        # Force default credentials for AUTO_LOGIN mode
    +        username = DEFAULT_SUPERUSER
    +        password = DEFAULT_SUPERUSER_PASSWORD
    +    else:
    +        # Production mode - prompt for credentials if not provided
    +        if not username:
    +            username = typer.prompt("Username")
    +        if not password:
    +            password = typer.prompt("Password", hide_input=True)
    +
    +    from langflow.services.database.models.user.crud import get_all_superusers
    +
    +    existing_superusers = []
    +    async with session_scope() as session:
    +        # Note that the default superuser is created by the initialize_services() function,
    +        # but leaving this check here in case we change that behavior
    +        existing_superusers = await get_all_superusers(session)
    +    is_first_setup = len(existing_superusers) == 0
    +
    +    # If AUTO_LOGIN is true, only allow default superuser creation
    +    if settings_service.auth_settings.AUTO_LOGIN:
    +        if not is_first_setup:
    +            typer.echo("Error: Cannot create additional superusers when AUTO_LOGIN is enabled.")
    +            typer.echo("AUTO_LOGIN mode is for development with only the default superuser.")
    +            typer.echo("To create additional superusers:")
    +            typer.echo("1. Set LANGFLOW_AUTO_LOGIN=false")
    +            typer.echo("2. Run this command again with --auth-token")
    +            raise typer.Exit(1)
    +
    +        typer.echo(f"AUTO_LOGIN enabled. Creating default superuser '{username}'...")
    +        typer.echo(f"Note: Default credentials are {DEFAULT_SUPERUSER}/{DEFAULT_SUPERUSER_PASSWORD}")
    +    # AUTO_LOGIN is false - production mode
    +    elif is_first_setup:
    +        typer.echo("No superusers found. Creating first superuser...")
    +    else:
    +        # Authentication is required in production mode
    +        if not auth_token:
    +            typer.echo("Error: Creating a superuser requires authentication.")
    +            typer.echo("Please provide --auth-token with a valid superuser API key or JWT token.")
    +            typer.echo("To get a token, use: `uv run langflow api_key`")
    +            raise typer.Exit(1)
    +
    +        # Validate the auth token
    +        try:
    +            auth_user = None
    +            async with session_scope() as session:
    +                # Try JWT first
    +                user = None
    +                try:
    +                    user = await get_current_user_by_jwt(auth_token, session)
    +                except (JWTError, HTTPException):
    +                    # Try API key
    +                    api_key_result = await check_key(session, auth_token)
    +                    if api_key_result and hasattr(api_key_result, "is_superuser"):
    +                        user = api_key_result
    +                auth_user = user
    +
    +            if not auth_user or not auth_user.is_superuser:
    +                typer.echo(
    +                    "Error: Invalid token or insufficient privileges. Only superusers can create other superusers."
    +                )
    +                raise typer.Exit(1)
    +        except typer.Exit:
    +            raise  # Re-raise typer.Exit without wrapping
    +        except Exception as e:  # noqa: BLE001
    +            typer.echo(f"Error: Authentication failed - {e!s}")
    +            raise typer.Exit(1) from None
    +
    +    # Auth complete, create the superuser
    +    async with session_scope() as session:
    +        from langflow.services.auth.utils import create_super_user
    +
    +        if await create_super_user(db=session, username=username, password=password):
    +            # Verify that the superuser was created
    +            from langflow.services.database.models.user.model import User
    +
    +            stmt = select(User).where(User.username == username)
    +            created_user: User = (await session.exec(stmt)).first()
    +            if created_user is None or not created_user.is_superuser:
                     typer.echo("Superuser creation failed.")
    +                return
    +            # Now create the first folder for the user
    +            result = await get_or_create_default_folder(session, created_user.id)
    +            if result:
    +                typer.echo("Default folder created successfully.")
    +            else:
    +                msg = "Could not create default folder."
    +                raise RuntimeError(msg)
     
    -    asyncio.run(_create_superuser())
    +            # Log the superuser creation for audit purposes
    +            logger.warning(
    +                f"SECURITY AUDIT: New superuser '{username}' created via CLI command"
    +                + (" by authenticated user" if auth_token else " (first-time setup)")
    +            )
    +            typer.echo("Superuser created successfully.")
    +
    +        else:
    +            logger.error(f"SECURITY AUDIT: Failed attempt to create superuser '{username}' via CLI")
    +            typer.echo("Superuser creation failed.")
     
     
     # command to copy the langflow database from the cache to the current directory
    @@ -749,6 +848,7 @@ async def aapi_key():
             settings_service = get_settings_service()
             auth_settings = settings_service.auth_settings
             if not auth_settings.AUTO_LOGIN:
    +            # TODO: Allow non-auto-login users to create API keys via CLI
                 typer.echo("Auto login is disabled. API keys cannot be created through the CLI.")
                 return None
     
    
  • src/backend/base/langflow/services/database/models/user/crud.py+7 0 modified
    @@ -60,3 +60,10 @@ async def update_user_last_login_at(user_id: UUID, db: AsyncSession):
             return await update_user(user, user_data, db)
         except Exception as e:  # noqa: BLE001
             logger.error(f"Error updating user last login at: {e!s}")
    +
    +
    +async def get_all_superusers(db: AsyncSession) -> list[User]:
    +    """Get all superuser accounts from the database."""
    +    stmt = select(User).where(User.is_superuser == True)  # noqa: E712
    +    result = await db.exec(stmt)
    +    return list(result.all())
    
  • src/backend/base/langflow/services/settings/auth.py+14 1 modified
    @@ -27,12 +27,25 @@ class AuthSettings(BaseSettings):
         API_KEY_ALGORITHM: str = "HS256"
         API_V1_STR: str = "/api/v1"
     
    -    AUTO_LOGIN: bool = True
    +    AUTO_LOGIN: bool = Field(
    +        default=True,  # TODO: Set to False in v1.6
    +        description=(
    +            "Enable automatic login with default credentials. "
    +            "SECURITY WARNING: This bypasses authentication and should only be used in development environments. "
    +            "Set to False in production."
    +        ),
    +    )
         """If True, the application will attempt to log in automatically as a super user."""
         skip_auth_auto_login: bool = True
         """If True, the application will skip authentication when AUTO_LOGIN is enabled.
         This will be removed in v1.6"""
     
    +    ENABLE_SUPERUSER_CLI: bool = Field(
    +        default=True,
    +        description="Allow creation of superusers via CLI. Set to False in production for security.",
    +    )
    +    """If True, allows creation of superusers via the CLI 'langflow superuser' command."""
    +
         NEW_USER_IS_ACTIVE: bool = False
         SUPERUSER: str = DEFAULT_SUPERUSER
         SUPERUSER_PASSWORD: str = DEFAULT_SUPERUSER_PASSWORD
    
  • src/backend/base/langflow/services/utils.py+8 3 modified
    @@ -68,15 +68,20 @@ async def get_or_create_super_user(session: AsyncSession, username, password, is
         return await create_super_user(username, password, db=session)
     
     
    -async def setup_superuser(settings_service, session: AsyncSession) -> None:
    +async def setup_superuser(settings_service: SettingsService, session: AsyncSession) -> None:
         if settings_service.auth_settings.AUTO_LOGIN:
             logger.debug("AUTO_LOGIN is set to True. Creating default superuser.")
    +        username = DEFAULT_SUPERUSER
    +        password = DEFAULT_SUPERUSER_PASSWORD
         else:
             # Remove the default superuser if it exists
             await teardown_superuser(settings_service, session)
    +        username = settings_service.auth_settings.SUPERUSER
    +        password = settings_service.auth_settings.SUPERUSER_PASSWORD
     
    -    username = settings_service.auth_settings.SUPERUSER
    -    password = settings_service.auth_settings.SUPERUSER_PASSWORD
    +    if not username or not password:
    +        msg = "Username and password must be set"
    +        raise ValueError(msg)
     
         is_default = (username == DEFAULT_SUPERUSER) and (password == DEFAULT_SUPERUSER_PASSWORD)
     
    
  • src/backend/tests/unit/test_cli.py+89 5 modified
    @@ -1,9 +1,11 @@
     import socket
     import threading
     import time
    +from unittest.mock import patch
     
     import pytest
    -from langflow.__main__ import app
    +import typer
    +from langflow.__main__ import _create_superuser, app
     from langflow.services import deps
     
     
    @@ -57,7 +59,89 @@ def test_components_path(runner, default_settings, tmp_path):
         assert str(temp_dir) in settings_service.settings.components_path
     
     
    -def test_superuser(runner):
    -    result = runner.invoke(app, ["superuser"], input="admin\nadmin\n")
    -    assert result.exit_code == 0, result.stdout
    -    assert "Superuser created successfully." in result.stdout
    +@pytest.mark.xdist_group(name="serial-superuser-tests")
    +class TestSuperuserCommand:
    +    """Deterministic tests for the superuser CLI command."""
    +
    +    @pytest.mark.asyncio
    +    async def test_additional_superuser_requires_auth_production(self, client, active_super_user):  # noqa: ARG002
    +        """Test additional superuser creation requires authentication in production."""
    +        # We already have active_super_user from the fixture, so we're not in first setup
    +        with (
    +            patch("langflow.services.deps.get_settings_service") as mock_settings,
    +            patch("langflow.__main__.get_settings_service") as mock_settings2,
    +        ):
    +            # Configure settings for production mode (AUTO_LOGIN=False)
    +            mock_auth_settings = type("MockAuthSettings", (), {"AUTO_LOGIN": False, "ENABLE_SUPERUSER_CLI": True})()
    +            mock_settings.return_value.auth_settings = mock_auth_settings
    +            mock_settings2.return_value.auth_settings = mock_auth_settings
    +
    +            # Try to create a superuser without auth - should fail
    +            with pytest.raises(typer.Exit) as exc_info:
    +                await _create_superuser("newuser", "newpass", None)
    +
    +            assert exc_info.value.exit_code == 1
    +
    +    @pytest.mark.asyncio
    +    async def test_additional_superuser_blocked_in_auto_login_mode(self, client, active_super_user):  # noqa: ARG002
    +        """Test additional superuser creation blocked when AUTO_LOGIN=true."""
    +        # We already have active_super_user from the fixture, so we're not in first setup
    +        with (
    +            patch("langflow.services.deps.get_settings_service") as mock_settings,
    +            patch("langflow.__main__.get_settings_service") as mock_settings2,
    +        ):
    +            # Configure settings for AUTO_LOGIN mode
    +            mock_auth_settings = type("MockAuthSettings", (), {"AUTO_LOGIN": True, "ENABLE_SUPERUSER_CLI": True})()
    +            mock_settings.return_value.auth_settings = mock_auth_settings
    +            mock_settings2.return_value.auth_settings = mock_auth_settings
    +
    +            # Try to create a superuser - should fail
    +            with pytest.raises(typer.Exit) as exc_info:
    +                await _create_superuser("newuser", "newpass", None)
    +
    +            assert exc_info.value.exit_code == 1
    +
    +    @pytest.mark.asyncio
    +    async def test_cli_disabled_blocks_creation(self, client):  # noqa: ARG002
    +        """Test ENABLE_SUPERUSER_CLI=false blocks superuser creation."""
    +        with (
    +            patch("langflow.services.deps.get_settings_service") as mock_settings,
    +            patch("langflow.__main__.get_settings_service") as mock_settings2,
    +        ):
    +            mock_auth_settings = type("MockAuthSettings", (), {"AUTO_LOGIN": True, "ENABLE_SUPERUSER_CLI": False})()
    +            mock_settings.return_value.auth_settings = mock_auth_settings
    +            mock_settings2.return_value.auth_settings = mock_auth_settings
    +
    +            # Try to create a superuser - should fail
    +            with pytest.raises(typer.Exit) as exc_info:
    +                await _create_superuser("admin", "password", None)
    +
    +            assert exc_info.value.exit_code == 1
    +
    +    @pytest.mark.skip(reason="Skip -- default superuser is created by initialize_services() function")
    +    @pytest.mark.asyncio
    +    async def test_auto_login_forces_default_credentials(self, client):
    +        """Test AUTO_LOGIN=true forces default credentials."""
    +        # Since client fixture already creates default user, we need to test in a clean DB scenario
    +        # But that's why this test is skipped - the behavior is already handled by initialize_services
    +
    +    @pytest.mark.asyncio
    +    async def test_failed_auth_token_validation(self, client, active_super_user):  # noqa: ARG002
    +        """Test failed superuser creation with invalid auth token."""
    +        # We already have active_super_user from the fixture, so we're not in first setup
    +        with (
    +            patch("langflow.services.deps.get_settings_service") as mock_settings,
    +            patch("langflow.__main__.get_settings_service") as mock_settings2,
    +            patch("langflow.__main__.get_current_user_by_jwt", side_effect=Exception("Invalid token")),
    +            patch("langflow.__main__.check_key", return_value=None),
    +        ):
    +            # Configure settings for production mode (AUTO_LOGIN=False)
    +            mock_auth_settings = type("MockAuthSettings", (), {"AUTO_LOGIN": False, "ENABLE_SUPERUSER_CLI": True})()
    +            mock_settings.return_value.auth_settings = mock_auth_settings
    +            mock_settings2.return_value.auth_settings = mock_auth_settings
    +
    +            # Try to create a superuser with invalid token - should fail
    +            with pytest.raises(typer.Exit) as exc_info:
    +                await _create_superuser("newuser", "newpass", "invalid-token")
    +
    +            assert exc_info.value.exit_code == 1
    
  • uv.lock+70 74 modified
    @@ -1220,7 +1220,7 @@ wheels = [
     
     [[package]]
     name = "codeflash"
    -version = "0.15.5"
    +version = "0.15.6"
     source = { registry = "https://pypi.org/simple" }
     dependencies = [
         { name = "click" },
    @@ -1250,7 +1250,7 @@ dependencies = [
         { name = "unidiff" },
         { name = "unittest-xml-reporting" },
     ]
    -sdist = { url = "https://files.pythonhosted.org/packages/23/a2/f431963f72a45b50865607b929570a7727b2e9f5cb484f706bb79203d1aa/codeflash-0.15.5.tar.gz", hash = "sha256:331df47373af93341a952320fbee0be2e882f6b5cd293f8c090a87715522e733", size = 181261, upload-time = "2025-07-14T04:37:52.297Z" }
    +sdist = { url = "https://files.pythonhosted.org/packages/ff/63/157d025e8af6a7347880b5c407f49962c084e5f84c2dca56893fcce8cacc/codeflash-0.15.6.tar.gz", hash = "sha256:d0e51bd6a3c0e20fe65320651404749bce381186e6427f728b19a664ffa882b7", size = 181650, upload-time = "2025-07-24T21:09:01.826Z" }
     
     [[package]]
     name = "cohere"
    @@ -1308,14 +1308,11 @@ wheels = [
     
     [[package]]
     name = "comm"
    -version = "0.2.2"
    +version = "0.2.3"
     source = { registry = "https://pypi.org/simple" }
    -dependencies = [
    -    { name = "traitlets" },
    -]
    -sdist = { url = "https://files.pythonhosted.org/packages/e9/a8/fb783cb0abe2b5fded9f55e5703015cdf1c9c85b3669087c538dd15a6a86/comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e", size = 6210, upload-time = "2024-03-12T16:53:41.133Z" }
    +sdist = { url = "https://files.pythonhosted.org/packages/4c/13/7d740c5849255756bc17888787313b61fd38a0a8304fc4f073dfc46122aa/comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971", size = 6319, upload-time = "2025-07-25T14:02:04.452Z" }
     wheels = [
    -    { url = "https://files.pythonhosted.org/packages/e6/75/49e5bfe642f71f272236b5b2d2691cf915a7283cc0ceda56357b61daa538/comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3", size = 7180, upload-time = "2024-03-12T16:53:39.226Z" },
    +    { url = "https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417", size = 7294, upload-time = "2025-07-25T14:02:02.896Z" },
     ]
     
     [[package]]
    @@ -1414,66 +1411,65 @@ wheels = [
     
     [[package]]
     name = "coverage"
    -version = "7.9.2"
    -source = { registry = "https://pypi.org/simple" }
    -sdist = { url = "https://files.pythonhosted.org/packages/04/b7/c0465ca253df10a9e8dae0692a4ae6e9726d245390aaef92360e1d6d3832/coverage-7.9.2.tar.gz", hash = "sha256:997024fa51e3290264ffd7492ec97d0690293ccd2b45a6cd7d82d945a4a80c8b", size = 813556, upload-time = "2025-07-03T10:54:15.101Z" }
    -wheels = [
    -    { url = "https://files.pythonhosted.org/packages/a1/0d/5c2114fd776c207bd55068ae8dc1bef63ecd1b767b3389984a8e58f2b926/coverage-7.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:66283a192a14a3854b2e7f3418d7db05cdf411012ab7ff5db98ff3b181e1f912", size = 212039, upload-time = "2025-07-03T10:52:38.955Z" },
    -    { url = "https://files.pythonhosted.org/packages/cf/ad/dc51f40492dc2d5fcd31bb44577bc0cc8920757d6bc5d3e4293146524ef9/coverage-7.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4e01d138540ef34fcf35c1aa24d06c3de2a4cffa349e29a10056544f35cca15f", size = 212428, upload-time = "2025-07-03T10:52:41.36Z" },
    -    { url = "https://files.pythonhosted.org/packages/a2/a3/55cb3ff1b36f00df04439c3993d8529193cdf165a2467bf1402539070f16/coverage-7.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f22627c1fe2745ee98d3ab87679ca73a97e75ca75eb5faee48660d060875465f", size = 241534, upload-time = "2025-07-03T10:52:42.956Z" },
    -    { url = "https://files.pythonhosted.org/packages/eb/c9/a8410b91b6be4f6e9c2e9f0dce93749b6b40b751d7065b4410bf89cb654b/coverage-7.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b1c2d8363247b46bd51f393f86c94096e64a1cf6906803fa8d5a9d03784bdbf", size = 239408, upload-time = "2025-07-03T10:52:44.199Z" },
    -    { url = "https://files.pythonhosted.org/packages/ff/c4/6f3e56d467c612b9070ae71d5d3b114c0b899b5788e1ca3c93068ccb7018/coverage-7.9.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c10c882b114faf82dbd33e876d0cbd5e1d1ebc0d2a74ceef642c6152f3f4d547", size = 240552, upload-time = "2025-07-03T10:52:45.477Z" },
    -    { url = "https://files.pythonhosted.org/packages/fd/20/04eda789d15af1ce79bce5cc5fd64057c3a0ac08fd0576377a3096c24663/coverage-7.9.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:de3c0378bdf7066c3988d66cd5232d161e933b87103b014ab1b0b4676098fa45", size = 240464, upload-time = "2025-07-03T10:52:46.809Z" },
    -    { url = "https://files.pythonhosted.org/packages/a9/5a/217b32c94cc1a0b90f253514815332d08ec0812194a1ce9cca97dda1cd20/coverage-7.9.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1e2f097eae0e5991e7623958a24ced3282676c93c013dde41399ff63e230fcf2", size = 239134, upload-time = "2025-07-03T10:52:48.149Z" },
    -    { url = "https://files.pythonhosted.org/packages/34/73/1d019c48f413465eb5d3b6898b6279e87141c80049f7dbf73fd020138549/coverage-7.9.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28dc1f67e83a14e7079b6cea4d314bc8b24d1aed42d3582ff89c0295f09b181e", size = 239405, upload-time = "2025-07-03T10:52:49.687Z" },
    -    { url = "https://files.pythonhosted.org/packages/49/6c/a2beca7aa2595dad0c0d3f350382c381c92400efe5261e2631f734a0e3fe/coverage-7.9.2-cp310-cp310-win32.whl", hash = "sha256:bf7d773da6af9e10dbddacbf4e5cab13d06d0ed93561d44dae0188a42c65be7e", size = 214519, upload-time = "2025-07-03T10:52:51.036Z" },
    -    { url = "https://files.pythonhosted.org/packages/fc/c8/91e5e4a21f9a51e2c7cdd86e587ae01a4fcff06fc3fa8cde4d6f7cf68df4/coverage-7.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:0c0378ba787681ab1897f7c89b415bd56b0b2d9a47e5a3d8dc0ea55aac118d6c", size = 215400, upload-time = "2025-07-03T10:52:52.313Z" },
    -    { url = "https://files.pythonhosted.org/packages/39/40/916786453bcfafa4c788abee4ccd6f592b5b5eca0cd61a32a4e5a7ef6e02/coverage-7.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a7a56a2964a9687b6aba5b5ced6971af308ef6f79a91043c05dd4ee3ebc3e9ba", size = 212152, upload-time = "2025-07-03T10:52:53.562Z" },
    -    { url = "https://files.pythonhosted.org/packages/9f/66/cc13bae303284b546a030762957322bbbff1ee6b6cb8dc70a40f8a78512f/coverage-7.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:123d589f32c11d9be7fe2e66d823a236fe759b0096f5db3fb1b75b2fa414a4fa", size = 212540, upload-time = "2025-07-03T10:52:55.196Z" },
    -    { url = "https://files.pythonhosted.org/packages/0f/3c/d56a764b2e5a3d43257c36af4a62c379df44636817bb5f89265de4bf8bd7/coverage-7.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:333b2e0ca576a7dbd66e85ab402e35c03b0b22f525eed82681c4b866e2e2653a", size = 245097, upload-time = "2025-07-03T10:52:56.509Z" },
    -    { url = "https://files.pythonhosted.org/packages/b1/46/bd064ea8b3c94eb4ca5d90e34d15b806cba091ffb2b8e89a0d7066c45791/coverage-7.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:326802760da234baf9f2f85a39e4a4b5861b94f6c8d95251f699e4f73b1835dc", size = 242812, upload-time = "2025-07-03T10:52:57.842Z" },
    -    { url = "https://files.pythonhosted.org/packages/43/02/d91992c2b29bc7afb729463bc918ebe5f361be7f1daae93375a5759d1e28/coverage-7.9.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19e7be4cfec248df38ce40968c95d3952fbffd57b400d4b9bb580f28179556d2", size = 244617, upload-time = "2025-07-03T10:52:59.239Z" },
    -    { url = "https://files.pythonhosted.org/packages/b7/4f/8fadff6bf56595a16d2d6e33415841b0163ac660873ed9a4e9046194f779/coverage-7.9.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0b4a4cb73b9f2b891c1788711408ef9707666501ba23684387277ededab1097c", size = 244263, upload-time = "2025-07-03T10:53:00.601Z" },
    -    { url = "https://files.pythonhosted.org/packages/9b/d2/e0be7446a2bba11739edb9f9ba4eff30b30d8257370e237418eb44a14d11/coverage-7.9.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:2c8937fa16c8c9fbbd9f118588756e7bcdc7e16a470766a9aef912dd3f117dbd", size = 242314, upload-time = "2025-07-03T10:53:01.932Z" },
    -    { url = "https://files.pythonhosted.org/packages/9d/7d/dcbac9345000121b8b57a3094c2dfcf1ccc52d8a14a40c1d4bc89f936f80/coverage-7.9.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:42da2280c4d30c57a9b578bafd1d4494fa6c056d4c419d9689e66d775539be74", size = 242904, upload-time = "2025-07-03T10:53:03.478Z" },
    -    { url = "https://files.pythonhosted.org/packages/41/58/11e8db0a0c0510cf31bbbdc8caf5d74a358b696302a45948d7c768dfd1cf/coverage-7.9.2-cp311-cp311-win32.whl", hash = "sha256:14fa8d3da147f5fdf9d298cacc18791818f3f1a9f542c8958b80c228320e90c6", size = 214553, upload-time = "2025-07-03T10:53:05.174Z" },
    -    { url = "https://files.pythonhosted.org/packages/3a/7d/751794ec8907a15e257136e48dc1021b1f671220ecccfd6c4eaf30802714/coverage-7.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:549cab4892fc82004f9739963163fd3aac7a7b0df430669b75b86d293d2df2a7", size = 215441, upload-time = "2025-07-03T10:53:06.472Z" },
    -    { url = "https://files.pythonhosted.org/packages/62/5b/34abcedf7b946c1c9e15b44f326cb5b0da852885312b30e916f674913428/coverage-7.9.2-cp311-cp311-win_arm64.whl", hash = "sha256:c2667a2b913e307f06aa4e5677f01a9746cd08e4b35e14ebcde6420a9ebb4c62", size = 213873, upload-time = "2025-07-03T10:53:07.699Z" },
    -    { url = "https://files.pythonhosted.org/packages/53/d7/7deefc6fd4f0f1d4c58051f4004e366afc9e7ab60217ac393f247a1de70a/coverage-7.9.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ae9eb07f1cfacd9cfe8eaee6f4ff4b8a289a668c39c165cd0c8548484920ffc0", size = 212344, upload-time = "2025-07-03T10:53:09.3Z" },
    -    { url = "https://files.pythonhosted.org/packages/95/0c/ee03c95d32be4d519e6a02e601267769ce2e9a91fc8faa1b540e3626c680/coverage-7.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9ce85551f9a1119f02adc46d3014b5ee3f765deac166acf20dbb851ceb79b6f3", size = 212580, upload-time = "2025-07-03T10:53:11.52Z" },
    -    { url = "https://files.pythonhosted.org/packages/8b/9f/826fa4b544b27620086211b87a52ca67592622e1f3af9e0a62c87aea153a/coverage-7.9.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8f6389ac977c5fb322e0e38885fbbf901743f79d47f50db706e7644dcdcb6e1", size = 246383, upload-time = "2025-07-03T10:53:13.134Z" },
    -    { url = "https://files.pythonhosted.org/packages/7f/b3/4477aafe2a546427b58b9c540665feff874f4db651f4d3cb21b308b3a6d2/coverage-7.9.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff0d9eae8cdfcd58fe7893b88993723583a6ce4dfbfd9f29e001922544f95615", size = 243400, upload-time = "2025-07-03T10:53:14.614Z" },
    -    { url = "https://files.pythonhosted.org/packages/f8/c2/efffa43778490c226d9d434827702f2dfbc8041d79101a795f11cbb2cf1e/coverage-7.9.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fae939811e14e53ed8a9818dad51d434a41ee09df9305663735f2e2d2d7d959b", size = 245591, upload-time = "2025-07-03T10:53:15.872Z" },
    -    { url = "https://files.pythonhosted.org/packages/c6/e7/a59888e882c9a5f0192d8627a30ae57910d5d449c80229b55e7643c078c4/coverage-7.9.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:31991156251ec202c798501e0a42bbdf2169dcb0f137b1f5c0f4267f3fc68ef9", size = 245402, upload-time = "2025-07-03T10:53:17.124Z" },
    -    { url = "https://files.pythonhosted.org/packages/92/a5/72fcd653ae3d214927edc100ce67440ed8a0a1e3576b8d5e6d066ed239db/coverage-7.9.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d0d67963f9cbfc7c7f96d4ac74ed60ecbebd2ea6eeb51887af0f8dce205e545f", size = 243583, upload-time = "2025-07-03T10:53:18.781Z" },
    -    { url = "https://files.pythonhosted.org/packages/5c/f5/84e70e4df28f4a131d580d7d510aa1ffd95037293da66fd20d446090a13b/coverage-7.9.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:49b752a2858b10580969ec6af6f090a9a440a64a301ac1528d7ca5f7ed497f4d", size = 244815, upload-time = "2025-07-03T10:53:20.168Z" },
    -    { url = "https://files.pythonhosted.org/packages/39/e7/d73d7cbdbd09fdcf4642655ae843ad403d9cbda55d725721965f3580a314/coverage-7.9.2-cp312-cp312-win32.whl", hash = "sha256:88d7598b8ee130f32f8a43198ee02edd16d7f77692fa056cb779616bbea1b355", size = 214719, upload-time = "2025-07-03T10:53:21.521Z" },
    -    { url = "https://files.pythonhosted.org/packages/9f/d6/7486dcc3474e2e6ad26a2af2db7e7c162ccd889c4c68fa14ea8ec189c9e9/coverage-7.9.2-cp312-cp312-win_amd64.whl", hash = "sha256:9dfb070f830739ee49d7c83e4941cc767e503e4394fdecb3b54bfdac1d7662c0", size = 215509, upload-time = "2025-07-03T10:53:22.853Z" },
    -    { url = "https://files.pythonhosted.org/packages/b7/34/0439f1ae2593b0346164d907cdf96a529b40b7721a45fdcf8b03c95fcd90/coverage-7.9.2-cp312-cp312-win_arm64.whl", hash = "sha256:4e2c058aef613e79df00e86b6d42a641c877211384ce5bd07585ed7ba71ab31b", size = 213910, upload-time = "2025-07-03T10:53:24.472Z" },
    -    { url = "https://files.pythonhosted.org/packages/94/9d/7a8edf7acbcaa5e5c489a646226bed9591ee1c5e6a84733c0140e9ce1ae1/coverage-7.9.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:985abe7f242e0d7bba228ab01070fde1d6c8fa12f142e43debe9ed1dde686038", size = 212367, upload-time = "2025-07-03T10:53:25.811Z" },
    -    { url = "https://files.pythonhosted.org/packages/e8/9e/5cd6f130150712301f7e40fb5865c1bc27b97689ec57297e568d972eec3c/coverage-7.9.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82c3939264a76d44fde7f213924021ed31f55ef28111a19649fec90c0f109e6d", size = 212632, upload-time = "2025-07-03T10:53:27.075Z" },
    -    { url = "https://files.pythonhosted.org/packages/a8/de/6287a2c2036f9fd991c61cefa8c64e57390e30c894ad3aa52fac4c1e14a8/coverage-7.9.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae5d563e970dbe04382f736ec214ef48103d1b875967c89d83c6e3f21706d5b3", size = 245793, upload-time = "2025-07-03T10:53:28.408Z" },
    -    { url = "https://files.pythonhosted.org/packages/06/cc/9b5a9961d8160e3cb0b558c71f8051fe08aa2dd4b502ee937225da564ed1/coverage-7.9.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bdd612e59baed2a93c8843c9a7cb902260f181370f1d772f4842987535071d14", size = 243006, upload-time = "2025-07-03T10:53:29.754Z" },
    -    { url = "https://files.pythonhosted.org/packages/49/d9/4616b787d9f597d6443f5588619c1c9f659e1f5fc9eebf63699eb6d34b78/coverage-7.9.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:256ea87cb2a1ed992bcdfc349d8042dcea1b80436f4ddf6e246d6bee4b5d73b6", size = 244990, upload-time = "2025-07-03T10:53:31.098Z" },
    -    { url = "https://files.pythonhosted.org/packages/48/83/801cdc10f137b2d02b005a761661649ffa60eb173dcdaeb77f571e4dc192/coverage-7.9.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f44ae036b63c8ea432f610534a2668b0c3aee810e7037ab9d8ff6883de480f5b", size = 245157, upload-time = "2025-07-03T10:53:32.717Z" },
    -    { url = "https://files.pythonhosted.org/packages/c8/a4/41911ed7e9d3ceb0ffb019e7635468df7499f5cc3edca5f7dfc078e9c5ec/coverage-7.9.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:82d76ad87c932935417a19b10cfe7abb15fd3f923cfe47dbdaa74ef4e503752d", size = 243128, upload-time = "2025-07-03T10:53:34.009Z" },
    -    { url = "https://files.pythonhosted.org/packages/10/41/344543b71d31ac9cb00a664d5d0c9ef134a0fe87cb7d8430003b20fa0b7d/coverage-7.9.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:619317bb86de4193debc712b9e59d5cffd91dc1d178627ab2a77b9870deb2868", size = 244511, upload-time = "2025-07-03T10:53:35.434Z" },
    -    { url = "https://files.pythonhosted.org/packages/d5/81/3b68c77e4812105e2a060f6946ba9e6f898ddcdc0d2bfc8b4b152a9ae522/coverage-7.9.2-cp313-cp313-win32.whl", hash = "sha256:0a07757de9feb1dfafd16ab651e0f628fd7ce551604d1bf23e47e1ddca93f08a", size = 214765, upload-time = "2025-07-03T10:53:36.787Z" },
    -    { url = "https://files.pythonhosted.org/packages/06/a2/7fac400f6a346bb1a4004eb2a76fbff0e242cd48926a2ce37a22a6a1d917/coverage-7.9.2-cp313-cp313-win_amd64.whl", hash = "sha256:115db3d1f4d3f35f5bb021e270edd85011934ff97c8797216b62f461dd69374b", size = 215536, upload-time = "2025-07-03T10:53:38.188Z" },
    -    { url = "https://files.pythonhosted.org/packages/08/47/2c6c215452b4f90d87017e61ea0fd9e0486bb734cb515e3de56e2c32075f/coverage-7.9.2-cp313-cp313-win_arm64.whl", hash = "sha256:48f82f889c80af8b2a7bb6e158d95a3fbec6a3453a1004d04e4f3b5945a02694", size = 213943, upload-time = "2025-07-03T10:53:39.492Z" },
    -    { url = "https://files.pythonhosted.org/packages/a3/46/e211e942b22d6af5e0f323faa8a9bc7c447a1cf1923b64c47523f36ed488/coverage-7.9.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:55a28954545f9d2f96870b40f6c3386a59ba8ed50caf2d949676dac3ecab99f5", size = 213088, upload-time = "2025-07-03T10:53:40.874Z" },
    -    { url = "https://files.pythonhosted.org/packages/d2/2f/762551f97e124442eccd907bf8b0de54348635b8866a73567eb4e6417acf/coverage-7.9.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cdef6504637731a63c133bb2e6f0f0214e2748495ec15fe42d1e219d1b133f0b", size = 213298, upload-time = "2025-07-03T10:53:42.218Z" },
    -    { url = "https://files.pythonhosted.org/packages/7a/b7/76d2d132b7baf7360ed69be0bcab968f151fa31abe6d067f0384439d9edb/coverage-7.9.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bcd5ebe66c7a97273d5d2ddd4ad0ed2e706b39630ed4b53e713d360626c3dbb3", size = 256541, upload-time = "2025-07-03T10:53:43.823Z" },
    -    { url = "https://files.pythonhosted.org/packages/a0/17/392b219837d7ad47d8e5974ce5f8dc3deb9f99a53b3bd4d123602f960c81/coverage-7.9.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9303aed20872d7a3c9cb39c5d2b9bdbe44e3a9a1aecb52920f7e7495410dfab8", size = 252761, upload-time = "2025-07-03T10:53:45.19Z" },
    -    { url = "https://files.pythonhosted.org/packages/d5/77/4256d3577fe1b0daa8d3836a1ebe68eaa07dd2cbaf20cf5ab1115d6949d4/coverage-7.9.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc18ea9e417a04d1920a9a76fe9ebd2f43ca505b81994598482f938d5c315f46", size = 254917, upload-time = "2025-07-03T10:53:46.931Z" },
    -    { url = "https://files.pythonhosted.org/packages/53/99/fc1a008eef1805e1ddb123cf17af864743354479ea5129a8f838c433cc2c/coverage-7.9.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6406cff19880aaaadc932152242523e892faff224da29e241ce2fca329866584", size = 256147, upload-time = "2025-07-03T10:53:48.289Z" },
    -    { url = "https://files.pythonhosted.org/packages/92/c0/f63bf667e18b7f88c2bdb3160870e277c4874ced87e21426128d70aa741f/coverage-7.9.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2d0d4f6ecdf37fcc19c88fec3e2277d5dee740fb51ffdd69b9579b8c31e4232e", size = 254261, upload-time = "2025-07-03T10:53:49.99Z" },
    -    { url = "https://files.pythonhosted.org/packages/8c/32/37dd1c42ce3016ff8ec9e4b607650d2e34845c0585d3518b2a93b4830c1a/coverage-7.9.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c33624f50cf8de418ab2b4d6ca9eda96dc45b2c4231336bac91454520e8d1fac", size = 255099, upload-time = "2025-07-03T10:53:51.354Z" },
    -    { url = "https://files.pythonhosted.org/packages/da/2e/af6b86f7c95441ce82f035b3affe1cd147f727bbd92f563be35e2d585683/coverage-7.9.2-cp313-cp313t-win32.whl", hash = "sha256:1df6b76e737c6a92210eebcb2390af59a141f9e9430210595251fbaf02d46926", size = 215440, upload-time = "2025-07-03T10:53:52.808Z" },
    -    { url = "https://files.pythonhosted.org/packages/4d/bb/8a785d91b308867f6b2e36e41c569b367c00b70c17f54b13ac29bcd2d8c8/coverage-7.9.2-cp313-cp313t-win_amd64.whl", hash = "sha256:f5fd54310b92741ebe00d9c0d1d7b2b27463952c022da6d47c175d246a98d1bd", size = 216537, upload-time = "2025-07-03T10:53:54.273Z" },
    -    { url = "https://files.pythonhosted.org/packages/1d/a0/a6bffb5e0f41a47279fd45a8f3155bf193f77990ae1c30f9c224b61cacb0/coverage-7.9.2-cp313-cp313t-win_arm64.whl", hash = "sha256:c48c2375287108c887ee87d13b4070a381c6537d30e8487b24ec721bf2a781cb", size = 214398, upload-time = "2025-07-03T10:53:56.715Z" },
    -    { url = "https://files.pythonhosted.org/packages/d7/85/f8bbefac27d286386961c25515431482a425967e23d3698b75a250872924/coverage-7.9.2-pp39.pp310.pp311-none-any.whl", hash = "sha256:8a1166db2fb62473285bcb092f586e081e92656c7dfa8e9f62b4d39d7e6b5050", size = 204013, upload-time = "2025-07-03T10:54:12.084Z" },
    -    { url = "https://files.pythonhosted.org/packages/3c/38/bbe2e63902847cf79036ecc75550d0698af31c91c7575352eb25190d0fb3/coverage-7.9.2-py3-none-any.whl", hash = "sha256:e425cd5b00f6fc0ed7cdbd766c70be8baab4b7839e4d4fe5fac48581dd968ea4", size = 204005, upload-time = "2025-07-03T10:54:13.491Z" },
    +version = "7.10.1"
    +source = { registry = "https://pypi.org/simple" }
    +sdist = { url = "https://files.pythonhosted.org/packages/87/0e/66dbd4c6a7f0758a8d18044c048779ba21fb94856e1edcf764bd5403e710/coverage-7.10.1.tar.gz", hash = "sha256:ae2b4856f29ddfe827106794f3589949a57da6f0d38ab01e24ec35107979ba57", size = 819938, upload-time = "2025-07-27T14:13:39.045Z" }
    +wheels = [
    +    { url = "https://files.pythonhosted.org/packages/ef/e7/0f4e35a15361337529df88151bddcac8e8f6d6fd01da94a4b7588901c2fe/coverage-7.10.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1c86eb388bbd609d15560e7cc0eb936c102b6f43f31cf3e58b4fd9afe28e1372", size = 214627, upload-time = "2025-07-27T14:11:01.211Z" },
    +    { url = "https://files.pythonhosted.org/packages/e0/fd/17872e762c408362072c936dbf3ca28c67c609a1f5af434b1355edcb7e12/coverage-7.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6b4ba0f488c1bdb6bd9ba81da50715a372119785458831c73428a8566253b86b", size = 215015, upload-time = "2025-07-27T14:11:03.988Z" },
    +    { url = "https://files.pythonhosted.org/packages/54/50/c9d445ba38ee5f685f03876c0f8223469e2e46c5d3599594dca972b470c8/coverage-7.10.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:083442ecf97d434f0cb3b3e3676584443182653da08b42e965326ba12d6b5f2a", size = 241995, upload-time = "2025-07-27T14:11:05.983Z" },
    +    { url = "https://files.pythonhosted.org/packages/cc/83/4ae6e0f60376af33de543368394d21b9ac370dc86434039062ef171eebf8/coverage-7.10.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c1a40c486041006b135759f59189385da7c66d239bad897c994e18fd1d0c128f", size = 243253, upload-time = "2025-07-27T14:11:07.424Z" },
    +    { url = "https://files.pythonhosted.org/packages/49/90/17a4d9ac7171be364ce8c0bb2b6da05e618ebfe1f11238ad4f26c99f5467/coverage-7.10.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3beb76e20b28046989300c4ea81bf690df84ee98ade4dc0bbbf774a28eb98440", size = 245110, upload-time = "2025-07-27T14:11:09.152Z" },
    +    { url = "https://files.pythonhosted.org/packages/e1/f7/edc3f485d536ed417f3af2b4969582bcb5fab456241721825fa09354161e/coverage-7.10.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:bc265a7945e8d08da28999ad02b544963f813a00f3ed0a7a0ce4165fd77629f8", size = 243056, upload-time = "2025-07-27T14:11:10.586Z" },
    +    { url = "https://files.pythonhosted.org/packages/58/2c/c4c316a57718556b8d0cc8304437741c31b54a62934e7c8c551a7915c2f4/coverage-7.10.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:47c91f32ba4ac46f1e224a7ebf3f98b4b24335bad16137737fe71a5961a0665c", size = 241731, upload-time = "2025-07-27T14:11:12.145Z" },
    +    { url = "https://files.pythonhosted.org/packages/f7/93/c78e144c6f086043d0d7d9237c5b880e71ac672ed2712c6f8cca5544481f/coverage-7.10.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1a108dd78ed185020f66f131c60078f3fae3f61646c28c8bb4edd3fa121fc7fc", size = 242023, upload-time = "2025-07-27T14:11:13.573Z" },
    +    { url = "https://files.pythonhosted.org/packages/8f/e1/34e8505ca81fc144a612e1cc79fadd4a78f42e96723875f4e9f1f470437e/coverage-7.10.1-cp310-cp310-win32.whl", hash = "sha256:7092cc82382e634075cc0255b0b69cb7cada7c1f249070ace6a95cb0f13548ef", size = 217130, upload-time = "2025-07-27T14:11:15.11Z" },
    +    { url = "https://files.pythonhosted.org/packages/75/2b/82adfce6edffc13d804aee414e64c0469044234af9296e75f6d13f92f6a2/coverage-7.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:ac0c5bba938879c2fc0bc6c1b47311b5ad1212a9dcb8b40fe2c8110239b7faed", size = 218015, upload-time = "2025-07-27T14:11:16.836Z" },
    +    { url = "https://files.pythonhosted.org/packages/20/8e/ef088112bd1b26e2aa931ee186992b3e42c222c64f33e381432c8ee52aae/coverage-7.10.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b45e2f9d5b0b5c1977cb4feb5f594be60eb121106f8900348e29331f553a726f", size = 214747, upload-time = "2025-07-27T14:11:18.217Z" },
    +    { url = "https://files.pythonhosted.org/packages/2d/76/a1e46f3c6e0897758eb43af88bb3c763cb005f4950769f7b553e22aa5f89/coverage-7.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a7a4d74cb0f5e3334f9aa26af7016ddb94fb4bfa11b4a573d8e98ecba8c34f1", size = 215128, upload-time = "2025-07-27T14:11:19.706Z" },
    +    { url = "https://files.pythonhosted.org/packages/78/4d/903bafb371a8c887826ecc30d3977b65dfad0e1e66aa61b7e173de0828b0/coverage-7.10.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:d4b0aab55ad60ead26159ff12b538c85fbab731a5e3411c642b46c3525863437", size = 245140, upload-time = "2025-07-27T14:11:21.261Z" },
    +    { url = "https://files.pythonhosted.org/packages/55/f1/1f8f09536f38394a8698dd08a0e9608a512eacee1d3b771e2d06397f77bf/coverage-7.10.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:dcc93488c9ebd229be6ee1f0d9aad90da97b33ad7e2912f5495804d78a3cd6b7", size = 246977, upload-time = "2025-07-27T14:11:23.15Z" },
    +    { url = "https://files.pythonhosted.org/packages/57/cc/ed6bbc5a3bdb36ae1bca900bbbfdcb23b260ef2767a7b2dab38b92f61adf/coverage-7.10.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa309df995d020f3438407081b51ff527171cca6772b33cf8f85344b8b4b8770", size = 249140, upload-time = "2025-07-27T14:11:24.743Z" },
    +    { url = "https://files.pythonhosted.org/packages/10/f5/e881ade2d8e291b60fa1d93d6d736107e940144d80d21a0d4999cff3642f/coverage-7.10.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cfb8b9d8855c8608f9747602a48ab525b1d320ecf0113994f6df23160af68262", size = 246869, upload-time = "2025-07-27T14:11:26.156Z" },
    +    { url = "https://files.pythonhosted.org/packages/53/b9/6a5665cb8996e3cd341d184bb11e2a8edf01d8dadcf44eb1e742186cf243/coverage-7.10.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:320d86da829b012982b414c7cdda65f5d358d63f764e0e4e54b33097646f39a3", size = 244899, upload-time = "2025-07-27T14:11:27.622Z" },
    +    { url = "https://files.pythonhosted.org/packages/27/11/24156776709c4e25bf8a33d6bb2ece9a9067186ddac19990f6560a7f8130/coverage-7.10.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:dc60ddd483c556590da1d9482a4518292eec36dd0e1e8496966759a1f282bcd0", size = 245507, upload-time = "2025-07-27T14:11:29.544Z" },
    +    { url = "https://files.pythonhosted.org/packages/43/db/a6f0340b7d6802a79928659c9a32bc778ea420e87a61b568d68ac36d45a8/coverage-7.10.1-cp311-cp311-win32.whl", hash = "sha256:4fcfe294f95b44e4754da5b58be750396f2b1caca8f9a0e78588e3ef85f8b8be", size = 217167, upload-time = "2025-07-27T14:11:31.349Z" },
    +    { url = "https://files.pythonhosted.org/packages/f5/6f/1990eb4fd05cea4cfabdf1d587a997ac5f9a8bee883443a1d519a2a848c9/coverage-7.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:efa23166da3fe2915f8ab452dde40319ac84dc357f635737174a08dbd912980c", size = 218054, upload-time = "2025-07-27T14:11:33.202Z" },
    +    { url = "https://files.pythonhosted.org/packages/b4/4d/5e061d6020251b20e9b4303bb0b7900083a1a384ec4e5db326336c1c4abd/coverage-7.10.1-cp311-cp311-win_arm64.whl", hash = "sha256:d12b15a8c3759e2bb580ffa423ae54be4f184cf23beffcbd641f4fe6e1584293", size = 216483, upload-time = "2025-07-27T14:11:34.663Z" },
    +    { url = "https://files.pythonhosted.org/packages/a5/3f/b051feeb292400bd22d071fdf933b3ad389a8cef5c80c7866ed0c7414b9e/coverage-7.10.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6b7dc7f0a75a7eaa4584e5843c873c561b12602439d2351ee28c7478186c4da4", size = 214934, upload-time = "2025-07-27T14:11:36.096Z" },
    +    { url = "https://files.pythonhosted.org/packages/f8/e4/a61b27d5c4c2d185bdfb0bfe9d15ab4ac4f0073032665544507429ae60eb/coverage-7.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:607f82389f0ecafc565813aa201a5cade04f897603750028dd660fb01797265e", size = 215173, upload-time = "2025-07-27T14:11:38.005Z" },
    +    { url = "https://files.pythonhosted.org/packages/8a/01/40a6ee05b60d02d0bc53742ad4966e39dccd450aafb48c535a64390a3552/coverage-7.10.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f7da31a1ba31f1c1d4d5044b7c5813878adae1f3af8f4052d679cc493c7328f4", size = 246190, upload-time = "2025-07-27T14:11:39.887Z" },
    +    { url = "https://files.pythonhosted.org/packages/11/ef/a28d64d702eb583c377255047281305dc5a5cfbfb0ee36e721f78255adb6/coverage-7.10.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:51fe93f3fe4f5d8483d51072fddc65e717a175490804e1942c975a68e04bf97a", size = 248618, upload-time = "2025-07-27T14:11:41.841Z" },
    +    { url = "https://files.pythonhosted.org/packages/6a/ad/73d018bb0c8317725370c79d69b5c6e0257df84a3b9b781bda27a438a3be/coverage-7.10.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3e59d00830da411a1feef6ac828b90bbf74c9b6a8e87b8ca37964925bba76dbe", size = 250081, upload-time = "2025-07-27T14:11:43.705Z" },
    +    { url = "https://files.pythonhosted.org/packages/2d/dd/496adfbbb4503ebca5d5b2de8bed5ec00c0a76558ffc5b834fd404166bc9/coverage-7.10.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:924563481c27941229cb4e16eefacc35da28563e80791b3ddc5597b062a5c386", size = 247990, upload-time = "2025-07-27T14:11:45.244Z" },
    +    { url = "https://files.pythonhosted.org/packages/18/3c/a9331a7982facfac0d98a4a87b36ae666fe4257d0f00961a3a9ef73e015d/coverage-7.10.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:ca79146ee421b259f8131f153102220b84d1a5e6fb9c8aed13b3badfd1796de6", size = 246191, upload-time = "2025-07-27T14:11:47.093Z" },
    +    { url = "https://files.pythonhosted.org/packages/62/0c/75345895013b83f7afe92ec595e15a9a525ede17491677ceebb2ba5c3d85/coverage-7.10.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2b225a06d227f23f386fdc0eab471506d9e644be699424814acc7d114595495f", size = 247400, upload-time = "2025-07-27T14:11:48.643Z" },
    +    { url = "https://files.pythonhosted.org/packages/e2/a9/98b268cfc5619ef9df1d5d34fee408ecb1542d9fd43d467e5c2f28668cd4/coverage-7.10.1-cp312-cp312-win32.whl", hash = "sha256:5ba9a8770effec5baaaab1567be916c87d8eea0c9ad11253722d86874d885eca", size = 217338, upload-time = "2025-07-27T14:11:50.258Z" },
    +    { url = "https://files.pythonhosted.org/packages/fe/31/22a5440e4d1451f253c5cd69fdcead65e92ef08cd4ec237b8756dc0b20a7/coverage-7.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:9eb245a8d8dd0ad73b4062135a251ec55086fbc2c42e0eb9725a9b553fba18a3", size = 218125, upload-time = "2025-07-27T14:11:52.034Z" },
    +    { url = "https://files.pythonhosted.org/packages/d6/2b/40d9f0ce7ee839f08a43c5bfc9d05cec28aaa7c9785837247f96cbe490b9/coverage-7.10.1-cp312-cp312-win_arm64.whl", hash = "sha256:7718060dd4434cc719803a5e526838a5d66e4efa5dc46d2b25c21965a9c6fcc4", size = 216523, upload-time = "2025-07-27T14:11:53.965Z" },
    +    { url = "https://files.pythonhosted.org/packages/ef/72/135ff5fef09b1ffe78dbe6fcf1e16b2e564cd35faeacf3d63d60d887f12d/coverage-7.10.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ebb08d0867c5a25dffa4823377292a0ffd7aaafb218b5d4e2e106378b1061e39", size = 214960, upload-time = "2025-07-27T14:11:55.959Z" },
    +    { url = "https://files.pythonhosted.org/packages/b1/aa/73a5d1a6fc08ca709a8177825616aa95ee6bf34d522517c2595484a3e6c9/coverage-7.10.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f32a95a83c2e17422f67af922a89422cd24c6fa94041f083dd0bb4f6057d0bc7", size = 215220, upload-time = "2025-07-27T14:11:57.899Z" },
    +    { url = "https://files.pythonhosted.org/packages/8d/40/3124fdd45ed3772a42fc73ca41c091699b38a2c3bd4f9cb564162378e8b6/coverage-7.10.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c4c746d11c8aba4b9f58ca8bfc6fbfd0da4efe7960ae5540d1a1b13655ee8892", size = 245772, upload-time = "2025-07-27T14:12:00.422Z" },
    +    { url = "https://files.pythonhosted.org/packages/42/62/a77b254822efa8c12ad59e8039f2bc3df56dc162ebda55e1943e35ba31a5/coverage-7.10.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7f39edd52c23e5c7ed94e0e4bf088928029edf86ef10b95413e5ea670c5e92d7", size = 248116, upload-time = "2025-07-27T14:12:03.099Z" },
    +    { url = "https://files.pythonhosted.org/packages/1d/01/8101f062f472a3a6205b458d18ef0444a63ae5d36a8a5ed5dd0f6167f4db/coverage-7.10.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ab6e19b684981d0cd968906e293d5628e89faacb27977c92f3600b201926b994", size = 249554, upload-time = "2025-07-27T14:12:04.668Z" },
    +    { url = "https://files.pythonhosted.org/packages/8f/7b/e51bc61573e71ff7275a4f167aecbd16cb010aefdf54bcd8b0a133391263/coverage-7.10.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5121d8cf0eacb16133501455d216bb5f99899ae2f52d394fe45d59229e6611d0", size = 247766, upload-time = "2025-07-27T14:12:06.234Z" },
    +    { url = "https://files.pythonhosted.org/packages/4b/71/1c96d66a51d4204a9d6d12df53c4071d87e110941a2a1fe94693192262f5/coverage-7.10.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:df1c742ca6f46a6f6cbcaef9ac694dc2cb1260d30a6a2f5c68c5f5bcfee1cfd7", size = 245735, upload-time = "2025-07-27T14:12:08.305Z" },
    +    { url = "https://files.pythonhosted.org/packages/13/d5/efbc2ac4d35ae2f22ef6df2ca084c60e13bd9378be68655e3268c80349ab/coverage-7.10.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:40f9a38676f9c073bf4b9194707aa1eb97dca0e22cc3766d83879d72500132c7", size = 247118, upload-time = "2025-07-27T14:12:09.903Z" },
    +    { url = "https://files.pythonhosted.org/packages/d1/22/073848352bec28ca65f2b6816b892fcf9a31abbef07b868487ad15dd55f1/coverage-7.10.1-cp313-cp313-win32.whl", hash = "sha256:2348631f049e884839553b9974f0821d39241c6ffb01a418efce434f7eba0fe7", size = 217381, upload-time = "2025-07-27T14:12:11.535Z" },
    +    { url = "https://files.pythonhosted.org/packages/b7/df/df6a0ff33b042f000089bd11b6bb034bab073e2ab64a56e78ed882cba55d/coverage-7.10.1-cp313-cp313-win_amd64.whl", hash = "sha256:4072b31361b0d6d23f750c524f694e1a417c1220a30d3ef02741eed28520c48e", size = 218152, upload-time = "2025-07-27T14:12:13.182Z" },
    +    { url = "https://files.pythonhosted.org/packages/30/e3/5085ca849a40ed6b47cdb8f65471c2f754e19390b5a12fa8abd25cbfaa8f/coverage-7.10.1-cp313-cp313-win_arm64.whl", hash = "sha256:3e31dfb8271937cab9425f19259b1b1d1f556790e98eb266009e7a61d337b6d4", size = 216559, upload-time = "2025-07-27T14:12:14.807Z" },
    +    { url = "https://files.pythonhosted.org/packages/cc/93/58714efbfdeb547909feaabe1d67b2bdd59f0597060271b9c548d5efb529/coverage-7.10.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:1c4f679c6b573a5257af6012f167a45be4c749c9925fd44d5178fd641ad8bf72", size = 215677, upload-time = "2025-07-27T14:12:16.68Z" },
    +    { url = "https://files.pythonhosted.org/packages/c0/0c/18eaa5897e7e8cb3f8c45e563e23e8a85686b4585e29d53cacb6bc9cb340/coverage-7.10.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:871ebe8143da284bd77b84a9136200bd638be253618765d21a1fce71006d94af", size = 215899, upload-time = "2025-07-27T14:12:18.758Z" },
    +    { url = "https://files.pythonhosted.org/packages/84/c1/9d1affacc3c75b5a184c140377701bbf14fc94619367f07a269cd9e4fed6/coverage-7.10.1-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:998c4751dabf7d29b30594af416e4bf5091f11f92a8d88eb1512c7ba136d1ed7", size = 257140, upload-time = "2025-07-27T14:12:20.357Z" },
    +    { url = "https://files.pythonhosted.org/packages/3d/0f/339bc6b8fa968c346df346068cca1f24bdea2ddfa93bb3dc2e7749730962/coverage-7.10.1-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:780f750a25e7749d0af6b3631759c2c14f45de209f3faaa2398312d1c7a22759", size = 259005, upload-time = "2025-07-27T14:12:22.007Z" },
    +    { url = "https://files.pythonhosted.org/packages/c8/22/89390864b92ea7c909079939b71baba7e5b42a76bf327c1d615bd829ba57/coverage-7.10.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:590bdba9445df4763bdbebc928d8182f094c1f3947a8dc0fc82ef014dbdd8324", size = 261143, upload-time = "2025-07-27T14:12:23.746Z" },
    +    { url = "https://files.pythonhosted.org/packages/2c/56/3d04d89017c0c41c7a71bd69b29699d919b6bbf2649b8b2091240b97dd6a/coverage-7.10.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b2df80cb6a2af86d300e70acb82e9b79dab2c1e6971e44b78dbfc1a1e736b53", size = 258735, upload-time = "2025-07-27T14:12:25.73Z" },
    +    { url = "https://files.pythonhosted.org/packages/cb/40/312252c8afa5ca781063a09d931f4b9409dc91526cd0b5a2b84143ffafa2/coverage-7.10.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:d6a558c2725bfb6337bf57c1cd366c13798bfd3bfc9e3dd1f4a6f6fc95a4605f", size = 256871, upload-time = "2025-07-27T14:12:27.767Z" },
    +    { url = "https://files.pythonhosted.org/packages/1f/2b/564947d5dede068215aaddb9e05638aeac079685101462218229ddea9113/coverage-7.10.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e6150d167f32f2a54690e572e0a4c90296fb000a18e9b26ab81a6489e24e78dd", size = 257692, upload-time = "2025-07-27T14:12:29.347Z" },
    +    { url = "https://files.pythonhosted.org/packages/93/1b/c8a867ade85cb26d802aea2209b9c2c80613b9c122baa8c8ecea6799648f/coverage-7.10.1-cp313-cp313t-win32.whl", hash = "sha256:d946a0c067aa88be4a593aad1236493313bafaa27e2a2080bfe88db827972f3c", size = 218059, upload-time = "2025-07-27T14:12:31.076Z" },
    +    { url = "https://files.pythonhosted.org/packages/a1/fe/cd4ab40570ae83a516bf5e754ea4388aeedd48e660e40c50b7713ed4f930/coverage-7.10.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e37c72eaccdd5ed1130c67a92ad38f5b2af66eeff7b0abe29534225db2ef7b18", size = 219150, upload-time = "2025-07-27T14:12:32.746Z" },
    +    { url = "https://files.pythonhosted.org/packages/8d/16/6e5ed5854be6d70d0c39e9cb9dd2449f2c8c34455534c32c1a508c7dbdb5/coverage-7.10.1-cp313-cp313t-win_arm64.whl", hash = "sha256:89ec0ffc215c590c732918c95cd02b55c7d0f569d76b90bb1a5e78aa340618e4", size = 217014, upload-time = "2025-07-27T14:12:34.406Z" },
    +    { url = "https://files.pythonhosted.org/packages/0f/64/922899cff2c0fd3496be83fa8b81230f5a8d82a2ad30f98370b133c2c83b/coverage-7.10.1-py3-none-any.whl", hash = "sha256:fa2a258aa6bf188eb9a8948f7102a83da7c430a0dce918dbd8b60ef8fcb772d7", size = 206597, upload-time = "2025-07-27T14:13:37.221Z" },
     ]
     
     [package.optional-dependencies]
    @@ -3682,16 +3678,16 @@ wheels = [
     
     [[package]]
     name = "hypothesis"
    -version = "6.136.3"
    +version = "6.136.5"
     source = { registry = "https://pypi.org/simple" }
     dependencies = [
         { name = "attrs" },
         { name = "exceptiongroup", marker = "python_full_version < '3.11'" },
         { name = "sortedcontainers" },
     ]
    -sdist = { url = "https://files.pythonhosted.org/packages/84/cd/714955a6ac2f4b786483a38f0b13e37e7efad37d23a2dc465b91a9fe2db0/hypothesis-6.136.3.tar.gz", hash = "sha256:89baa2bfc5af38f939e83b62f9f0e7e6407e81cade29cfcb3eafbc661177c2bd", size = 457758, upload-time = "2025-07-23T13:53:25.8Z" }
    +sdist = { url = "https://files.pythonhosted.org/packages/ee/ec/83b5a33cef752a883048c1b1a3c3416abd0fdec0d11f3517ef82283873ef/hypothesis-6.136.5.tar.gz", hash = "sha256:590e9b986882d145c84490b64318d07439e81b06bd150164e197e1eb6a09bf7e", size = 457866, upload-time = "2025-07-28T04:30:17.591Z" }
     wheels = [
    -    { url = "https://files.pythonhosted.org/packages/f9/de/d2145a3c329751b13fcfddfe119e5ec72e263c2766d1f655dedc3ed33a0d/hypothesis-6.136.3-py3-none-any.whl", hash = "sha256:88163307c625688317bc5f3c7bd88f18b4d5c7cd773c784e3c4182eed2ae1b3d", size = 524703, upload-time = "2025-07-23T13:53:22.384Z" },
    +    { url = "https://files.pythonhosted.org/packages/22/ce/3a7a8b22e16b767aa7861d0cf57ac12d21fef31c10cbb492a48c873dd962/hypothesis-6.136.5-py3-none-any.whl", hash = "sha256:101ff06e31f5f97c82a7829bc7682093c06b964a17779fa8c4ae9c72d7a860af", size = 524756, upload-time = "2025-07-28T04:30:13.858Z" },
     ]
     
     [[package]]
    @@ -11038,11 +11034,11 @@ wheels = [
     
     [[package]]
     name = "types-pywin32"
    -version = "311.0.0.20250723"
    +version = "311.0.0.20250728"
     source = { registry = "https://pypi.org/simple" }
    -sdist = { url = "https://files.pythonhosted.org/packages/fa/14/3f12d6d6b4bf9699b6b2988dece12f1d7f065d21c80e4be565410028f7da/types_pywin32-311.0.0.20250723.tar.gz", hash = "sha256:95c28cae88d3a229b5793c9d2d5661c2da6f4dde8ad73ff243934e84371d3c0f", size = 328590, upload-time = "2025-07-23T03:24:08.044Z" }
    +sdist = { url = "https://files.pythonhosted.org/packages/3a/b8/790e266e88b3b408b2910d7e4859c2820a16629130585fe05b833bcb5eda/types_pywin32-311.0.0.20250728.tar.gz", hash = "sha256:babee600f62c742306e4a9d4621f1cbfe44d57f904148b5cd363cced8b268d3f", size = 328445, upload-time = "2025-07-28T03:29:12.28Z" }
     wheels = [
    -    { url = "https://files.pythonhosted.org/packages/de/35/c5358b61cafc9394c919120d588f94ddfd2f9bcb7b486fce6466a7044904/types_pywin32-311.0.0.20250723-py3-none-any.whl", hash = "sha256:9c969fc4e4a0bdab61035c72baaef2ec64c2ada9cdcebe46af38ef5139f07434", size = 390486, upload-time = "2025-07-23T03:24:06.592Z" },
    +    { url = "https://files.pythonhosted.org/packages/b3/9c/e8ad1e7b0e041858320197a8fa9dcc354ac1ad859985d6a461d33bdc91fa/types_pywin32-311.0.0.20250728-py3-none-any.whl", hash = "sha256:a7a241447aecaf4623ca230c7bd664463bed1d6db0dde8329d615f076fb80761", size = 390427, upload-time = "2025-07-28T03:29:10.909Z" },
     ]
     
     [[package]]
    

Vulnerability mechanics

Generated on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

5

News mentions

0

No linked articles in our index yet.