chore(classic): remove unneeded files and add CLAUDE.md docs

- Remove deprecated Flutter frontend (replaced by autogpt_platform)
- Remove shell scripts (run, setup, autogpt.sh, etc.)
- Remove tutorials (outdated)
- Remove CLI-USAGE.md and FORGE-QUICKSTART.md
- Add CLAUDE.md files for Claude Code guidance

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Nicholas Tindle
2026-01-18 16:17:35 -06:00
parent ae2cc97dc4
commit fd66be2aaa
283 changed files with 895 additions and 159339 deletions

View File

@@ -0,0 +1,8 @@
{
"permissions": {
"allow": [
"Bash(tree:*)",
"Bash(grep:*)"
]
}
}

122
classic/CLAUDE.md Normal file
View File

@@ -0,0 +1,122 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
AutoGPT Classic is an experimental, **unsupported** project demonstrating autonomous GPT-4 operation. Dependencies will not be updated, and the codebase contains known vulnerabilities. This is preserved for educational/historical purposes.
## Repository Structure
```
/forge - Core autonomous agent framework (main library)
/original_autogpt - Original AutoGPT implementation (depends on forge)
/benchmark - Performance testing/benchmarking tools
```
Each Python subproject has its own `pyproject.toml` and uses Poetry for dependency management.
## Common Commands
### Setup & Install
```bash
# Install forge (core library)
cd forge && poetry install
# Install original_autogpt (includes forge as dependency)
cd original_autogpt && poetry install
# Install benchmark
cd benchmark && poetry install
# Install with benchmark support (optional extra)
cd forge && poetry install --extras benchmark
cd original_autogpt && poetry install --extras benchmark
```
### Running Agents
```bash
# Run forge agent (from forge directory)
cd forge && poetry run python -m forge
# Run original autogpt (from original_autogpt directory)
cd original_autogpt && poetry run serve --debug
# Run autogpt CLI
cd original_autogpt && poetry run autogpt
```
Agents run on `http://localhost:8000` by default.
### Benchmarking
```bash
# Run benchmarks against an agent
cd benchmark && poetry run agbenchmark
# Or from forge/original_autogpt with benchmark extra installed
cd forge && poetry run agbenchmark
cd original_autogpt && poetry run agbenchmark
```
### Testing
```bash
cd forge && poetry run pytest # All tests
cd forge && poetry run pytest tests/ # Tests directory only
cd forge && poetry run pytest -k test_name # Single test by name
cd forge && poetry run pytest path/to/test.py # Specific test file
cd forge && poetry run pytest --cov # With coverage
```
### Linting & Formatting
```bash
poetry run black . # Format code
poetry run isort . # Sort imports
poetry run flake8 # Lint
poetry run pyright # Type check
```
## Architecture
### Forge (Core Framework)
The `forge` package is the foundation that other components depend on:
- `forge/agent/` - Agent implementation and protocols
- `forge/llm/` - Multi-provider LLM integrations (OpenAI, Anthropic, Groq, LiteLLM)
- `forge/components/` - Reusable agent components
- `forge/file_storage/` - File system abstraction
- `forge/config/` - Configuration management
### Original AutoGPT
Depends on forge via local path (`autogpt-forge = { path = "../forge" }`):
- `autogpt/app/` - CLI application entry points
- `autogpt/agents/` - Agent implementations
- `autogpt/agent_factory/` - Agent creation logic
### Benchmark
Independent testing framework for evaluating agent performance:
- `agbenchmark/challenges/` - Test cases organized by category (code, retrieval, memory, etc.)
- `agbenchmark/reports/` - Benchmark result reporting
### Dependency Chain
`original_autogpt``forge``benchmark` (optional extra)
## Code Style
- Python 3.10 target
- Line length: 88 characters (Black default)
- Black for formatting, isort for imports (profile="black")
- Type hints with Pyright checking
## Testing Patterns
- VCR cassettes in `/forge/tests/vcr_cassettes/` for HTTP mocking
- Async support via pytest-asyncio
- Fixtures defined in `conftest.py` files provide: `tmp_project_root`, `storage`, `config`, `llm_provider`, `agent`
- Tests require `OPENAI_API_KEY` environment variable (defaults to "sk-dummy" for mocked tests)
## Environment Setup
Copy `.env.example` to `.env` in the relevant directory and add your API keys:
```bash
cp .env.example .env
# Edit .env with your OPENAI_API_KEY, etc.
```

View File

@@ -1,182 +0,0 @@
## CLI Documentation
This document describes how to interact with the project's CLI (Command Line Interface). It includes the types of outputs you can expect from each command. Note that the `agents stop` command will terminate any process running on port 8000.
### 1. Entry Point for the CLI
Running the `./run` command without any parameters will display the help message, which provides a list of available commands and options. Additionally, you can append `--help` to any command to view help information specific to that command.
```sh
./run
```
**Output**:
```
Usage: cli.py [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
agent Commands to create, start and stop agents
benchmark Commands to start the benchmark and list tests and categories
setup Installs dependencies needed for your system.
```
If you need assistance with any command, simply add the `--help` parameter to the end of your command, like so:
```sh
./run COMMAND --help
```
This will display a detailed help message regarding that specific command, including a list of any additional options and arguments it accepts.
### 2. Setup Command
```sh
./run setup
```
**Output**:
```
Setup initiated
Installation has been completed.
```
This command initializes the setup of the project.
### 3. Agents Commands
**a. List All Agents**
```sh
./run agent list
```
**Output**:
```
Available agents: 🤖
🐙 forge
🐙 autogpt
```
Lists all the available agents.
**b. Create a New Agent**
```sh
./run agent create my_agent
```
**Output**:
```
🎉 New agent 'my_agent' created and switched to the new directory in agents folder.
```
Creates a new agent named 'my_agent'.
**c. Start an Agent**
```sh
./run agent start my_agent
```
**Output**:
```
... (ASCII Art representing the agent startup)
[Date and Time] [forge.sdk.db] [DEBUG] 🐛 Initializing AgentDB with database_string: sqlite:///agent.db
[Date and Time] [forge.sdk.agent] [INFO] 📝 Agent server starting on http://0.0.0.0:8000
```
Starts the 'my_agent' and displays startup ASCII art and logs.
**d. Stop an Agent**
```sh
./run agent stop
```
**Output**:
```
Agent stopped
```
Stops the running agent.
### 4. Benchmark Commands
**a. List Benchmark Categories**
```sh
./run benchmark categories list
```
**Output**:
```
Available categories: 📚
📖 code
📖 safety
📖 memory
... (and so on)
```
Lists all available benchmark categories.
**b. List Benchmark Tests**
```sh
./run benchmark tests list
```
**Output**:
```
Available tests: 📚
📖 interface
🔬 Search - TestSearch
🔬 Write File - TestWriteFile
... (and so on)
```
Lists all available benchmark tests.
**c. Show Details of a Benchmark Test**
```sh
./run benchmark tests details TestWriteFile
```
**Output**:
```
TestWriteFile
-------------
Category: interface
Task: Write the word 'Washington' to a .txt file
... (and other details)
```
Displays the details of the 'TestWriteFile' benchmark test.
**d. Start Benchmark for the Agent**
```sh
./run benchmark start my_agent
```
**Output**:
```
(more details about the testing process shown whilst the test are running)
============= 13 failed, 1 passed in 0.97s ============...
```
Displays the results of the benchmark tests on 'my_agent'.

View File

@@ -1,173 +0,0 @@
# Quickstart Guide
> For the complete getting started [tutorial series](https://aiedge.medium.com/autogpt-forge-e3de53cc58ec) <- click here
Welcome to the Quickstart Guide! This guide will walk you through setting up, building, and running your own AutoGPT agent. Whether you're a seasoned AI developer or just starting out, this guide will provide you with the steps to jumpstart your journey in AI development with AutoGPT.
## System Requirements
This project supports Linux (Debian-based), Mac, and Windows Subsystem for Linux (WSL). If you use a Windows system, you must install WSL. You can find the installation instructions for WSL [here](https://learn.microsoft.com/en-us/windows/wsl/).
## Getting Setup
1. **Fork the Repository**
To fork the repository, follow these steps:
- Navigate to the main page of the repository.
![Repository](../docs/content/imgs/quickstart/001_repo.png)
- In the top-right corner of the page, click Fork.
![Create Fork UI](../docs/content/imgs/quickstart/002_fork.png)
- On the next page, select your GitHub account to create the fork.
- Wait for the forking process to complete. You now have a copy of the repository in your GitHub account.
2. **Clone the Repository**
To clone the repository, you need to have Git installed on your system. If you don't have Git installed, download it from [here](https://git-scm.com/downloads). Once you have Git installed, follow these steps:
- Open your terminal.
- Navigate to the directory where you want to clone the repository.
- Run the git clone command for the fork you just created
![Clone the Repository](../docs/content/imgs/quickstart/003_clone.png)
- Then open your project in your ide
![Open the Project in your IDE](../docs/content/imgs/quickstart/004_ide.png)
4. **Setup the Project**
Next, we need to set up the required dependencies. We have a tool to help you perform all the tasks on the repo.
It can be accessed by running the `run` command by typing `./run` in the terminal.
The first command you need to use is `./run setup.` This will guide you through setting up your system.
Initially, you will get instructions for installing Flutter and Chrome and setting up your GitHub access token like the following image:
![Setup the Project](../docs/content/imgs/quickstart/005_setup.png)
### For Windows Users
If you're a Windows user and experience issues after installing WSL, follow the steps below to resolve them.
#### Update WSL
Run the following command in Powershell or Command Prompt:
1. Enable the optional WSL and Virtual Machine Platform components.
2. Download and install the latest Linux kernel.
3. Set WSL 2 as the default.
4. Download and install the Ubuntu Linux distribution (a reboot may be required).
```shell
wsl --install
```
For more detailed information and additional steps, refer to [Microsoft's WSL Setup Environment Documentation](https://learn.microsoft.com/en-us/windows/wsl/setup/environment).
#### Resolve FileNotFoundError or "No such file or directory" Errors
When you run `./run setup`, if you encounter errors like `No such file or directory` or `FileNotFoundError`, it might be because Windows-style line endings (CRLF - Carriage Return Line Feed) are not compatible with Unix/Linux style line endings (LF - Line Feed).
To resolve this, you can use the `dos2unix` utility to convert the line endings in your script from CRLF to LF. Heres how to install and run `dos2unix` on the script:
```shell
sudo apt update
sudo apt install dos2unix
dos2unix ./run
```
After executing the above commands, running `./run setup` should work successfully.
#### Store Project Files within the WSL File System
If you continue to experience issues, consider storing your project files within the WSL file system instead of the Windows file system. This method avoids path translations and permissions issues and provides a more consistent development environment.
You can keep running the command to get feedback on where you are up to with your setup.
When setup has been completed, the command will return an output like this:
![Setup Complete](../docs/content/imgs/quickstart/006_setup_complete.png)
## Creating Your Agent
After completing the setup, the next step is to create your agent template.
Execute the command `./run agent create YOUR_AGENT_NAME`, where `YOUR_AGENT_NAME` should be replaced with your chosen name.
Tips for naming your agent:
* Give it its own unique name, or name it after yourself
* Include an important aspect of your agent in the name, such as its purpose
Examples: `SwiftyosAssistant`, `PwutsPRAgent`, `MySuperAgent`
![Create an Agent](../docs/content/imgs/quickstart/007_create_agent.png)
## Running your Agent
Your agent can be started using the command: `./run agent start YOUR_AGENT_NAME`
This starts the agent on the URL: `http://localhost:8000/`
![Start the Agent](../docs/content/imgs/quickstart/009_start_agent.png)
The front end can be accessed from `http://localhost:8000/`; first, you must log in using either a Google account or your GitHub account.
![Login](../docs/content/imgs/quickstart/010_login.png)
Upon logging in, you will get a page that looks something like this: your task history down the left-hand side of the page, and the 'chat' window to send tasks to your agent.
![Login](../docs/content/imgs/quickstart/011_home.png)
When you have finished with your agent or just need to restart it, use Ctl-C to end the session. Then, you can re-run the start command.
If you are having issues and want to ensure the agent has been stopped, there is a `./run agent stop` command, which will kill the process using port 8000, which should be the agent.
## Benchmarking your Agent
The benchmarking system can also be accessed using the CLI too:
```bash
agpt % ./run benchmark
Usage: cli.py benchmark [OPTIONS] COMMAND [ARGS]...
Commands to start the benchmark and list tests and categories
Options:
--help Show this message and exit.
Commands:
categories Benchmark categories group command
start Starts the benchmark command
tests Benchmark tests group command
agpt % ./run benchmark categories
Usage: cli.py benchmark categories [OPTIONS] COMMAND [ARGS]...
Benchmark categories group command
Options:
--help Show this message and exit.
Commands:
list List benchmark categories command
agpt % ./run benchmark tests
Usage: cli.py benchmark tests [OPTIONS] COMMAND [ARGS]...
Benchmark tests group command
Options:
--help Show this message and exit.
Commands:
details Benchmark test details command
list List benchmark tests command
```
The benchmark has been split into different categories of skills you can test your agent on. You can see what categories are available with
```bash
./run benchmark categories list
# And what tests are available with
./run benchmark tests list
```
![Login](../docs/content/imgs/quickstart/012_tests.png)
Finally, you can run the benchmark with
```bash
./run benchmark start YOUR_AGENT_NAME
```
>

View File

@@ -4,7 +4,7 @@ AutoGPT Classic was an experimental project to demonstrate autonomous GPT-4 oper
## Project Status
⚠️ **This project is unsupported, and dependencies will not be updated. It was an experiment that has concluded its initial research phase. If you want to use AutoGPT, you should use the [AutoGPT Platform](/autogpt_platform)**
**This project is unsupported, and dependencies will not be updated.** It was an experiment that has concluded its initial research phase. If you want to use AutoGPT, you should use the [AutoGPT Platform](/autogpt_platform).
For those interested in autonomous AI agents, we recommend exploring more actively maintained alternatives or referring to this codebase for educational purposes only.
@@ -16,37 +16,76 @@ AutoGPT Classic was one of the first implementations of autonomous AI agents - A
- Learn from the results and adjust its approach
- Chain multiple actions together to achieve an objective
## Key Features
- 🔄 Autonomous task chaining
- 🛠 Tool and API integration capabilities
- 💾 Memory management for context retention
- 🔍 Web browsing and information gathering
- 📝 File operations and content creation
- 🔄 Self-prompting and task breakdown
## Structure
The project is organized into several key components:
- `/benchmark` - Performance testing tools
- `/forge` - Core autonomous agent framework
- `/frontend` - User interface components
- `/original_autogpt` - Original implementation
## Getting Started
While this project is no longer actively maintained, you can still explore the codebase:
### Prerequisites
- Python 3.10+
- [Poetry](https://python-poetry.org/docs/#installation)
### Installation
1. Clone the repository:
```bash
# Clone the repository
git clone https://github.com/Significant-Gravitas/AutoGPT.git
cd classic
# Install forge (core library)
cd forge && poetry install
# Or install original_autogpt (includes forge as dependency)
cd original_autogpt && poetry install
# Install benchmark (optional)
cd benchmark && poetry install
```
2. Review the documentation:
- For reference, see the [documentation](https://docs.agpt.co). You can browse at the same point in time as this commit so the docs don't change.
- Check `CLI-USAGE.md` for command-line interface details
- Refer to `TROUBLESHOOTING.md` for common issues
### Configuration
Copy the example environment file and add your API keys:
```bash
cp .env.example .env
# Edit .env with your OPENAI_API_KEY, etc.
```
### Running
```bash
# Run forge agent
cd forge && poetry run python -m forge
# Run original autogpt server
cd original_autogpt && poetry run serve --debug
# Run autogpt CLI
cd original_autogpt && poetry run autogpt
```
Agents run on `http://localhost:8000` by default.
### Benchmarking
```bash
cd benchmark && poetry run agbenchmark
```
### Testing
```bash
cd forge && poetry run pytest
cd original_autogpt && poetry run pytest
```
## Security Notice
This codebase has **known vulnerabilities** and issues with its dependencies. It will not be updated to new dependencies. Use for educational purposes only.
## License
@@ -55,27 +94,3 @@ This project segment is licensed under the MIT License - see the [LICENSE](LICEN
## Documentation
Please refer to the [documentation](https://docs.agpt.co) for more detailed information about the project's architecture and concepts.
You can browse at the same point in time as this commit so the docs don't change.
## Historical Impact
AutoGPT Classic played a significant role in advancing the field of autonomous AI agents:
- Demonstrated practical implementation of AI autonomy
- Inspired numerous derivative projects and research
- Contributed to the development of AI agent architectures
- Helped identify key challenges in AI autonomy
## Security Notice
If you're studying this codebase, please understand this has KNOWN vulnerabilities and issues with its dependencies. It will not be updated to new dependencies.
## Community & Support
While active development has concluded:
- The codebase remains available for study and reference
- Historical discussions can be found in project issues
- Related research and developments continue in the broader AI agent community
## Acknowledgments
Thanks to all contributors who participated in this experimental project and helped advance the field of autonomous AI agents.

View File

@@ -1,18 +0,0 @@
# poetry install
# poetry shell
# cp .env.example .env
# fill out OpenAI Key
# git submodule update --init --remote --recursive
# cd backend
# pip install -r requirement.txt
# uvicorn main:app --reload
# cd ..
# cd frontend
# npm install
# npm run dev
# localhost:3000

View File

@@ -1,511 +0,0 @@
"""
This is a minimal file intended to be run by users to help them manage the autogpt projects.
If you want to contribute, please use only libraries that come as part of Python.
To ensure efficiency, add the imports to the functions so only what is needed is imported.
"""
try:
import click
except ImportError:
import os
os.system("pip3 install click")
import click
@click.group()
def cli():
pass
@cli.command()
def setup():
"""Installs dependencies needed for your system. Works with Linux, MacOS and Windows WSL."""
import os
import subprocess
click.echo(
click.style(
"""
d8888 888 .d8888b. 8888888b. 88888888888
d88888 888 d88P Y88b 888 Y88b 888
d88P888 888 888 888 888 888 888
d88P 888 888 888 888888 .d88b. 888 888 d88P 888
d88P 888 888 888 888 d88""88b 888 88888 8888888P" 888
d88P 888 888 888 888 888 888 888 888 888 888
d8888888888 Y88b 888 Y88b. Y88..88P Y88b d88P 888 888
d88P 888 "Y88888 "Y888 "Y88P" "Y8888P88 888 888
""",
fg="green",
)
)
script_dir = os.path.dirname(os.path.realpath(__file__))
setup_script = os.path.join(script_dir, "setup.sh")
install_error = False
if os.path.exists(setup_script):
click.echo(click.style("🚀 Setup initiated...\n", fg="green"))
try:
subprocess.check_call([setup_script], cwd=script_dir)
except subprocess.CalledProcessError:
click.echo(
click.style("❌ There was an issue with the installation.", fg="red")
)
install_error = True
else:
click.echo(
click.style(
"❌ Error: setup.sh does not exist in the current directory.", fg="red"
)
)
install_error = True
if install_error:
click.echo(
click.style(
"\n\n🔴 If you need help, please raise a ticket on GitHub at https://github.com/Significant-Gravitas/AutoGPT/issues\n\n",
fg="magenta",
bold=True,
)
)
else:
click.echo(click.style("🎉 Setup completed!\n", fg="green"))
@cli.group()
def agent():
"""Commands to create, start and stop agents"""
pass
@agent.command()
@click.argument("agent_name")
def create(agent_name: str):
"""Create's a new agent with the agent name provided"""
import os
import re
import shutil
if not re.match(r"\w*$", agent_name):
click.echo(
click.style(
f"😞 Agent name '{agent_name}' is not valid. It should not contain spaces or special characters other than -_",
fg="red",
)
)
return
try:
new_agent_dir = f"./agents/{agent_name}"
new_agent_name = f"{agent_name.lower()}.json"
if not os.path.exists(new_agent_dir):
shutil.copytree("./forge", new_agent_dir)
click.echo(
click.style(
f"🎉 New agent '{agent_name}' created. The code for your new agent is in: agents/{agent_name}",
fg="green",
)
)
else:
click.echo(
click.style(
f"😞 Agent '{agent_name}' already exists. Enter a different name for your agent, the name needs to be unique regardless of case",
fg="red",
)
)
except Exception as e:
click.echo(click.style(f"😢 An error occurred: {e}", fg="red"))
@agent.command()
@click.argument("agent_name")
@click.option(
"--no-setup",
is_flag=True,
help="Disables running the setup script before starting the agent",
)
def start(agent_name: str, no_setup: bool):
"""Start agent command"""
import os
import subprocess
script_dir = os.path.dirname(os.path.realpath(__file__))
agent_dir = os.path.join(
script_dir,
f"agents/{agent_name}"
if agent_name not in ["original_autogpt", "forge"]
else agent_name,
)
run_command = os.path.join(agent_dir, "run")
run_bench_command = os.path.join(agent_dir, "run_benchmark")
if (
os.path.exists(agent_dir)
and os.path.isfile(run_command)
and os.path.isfile(run_bench_command)
):
os.chdir(agent_dir)
if not no_setup:
click.echo(f"⌛ Running setup for agent '{agent_name}'...")
setup_process = subprocess.Popen(["./setup"], cwd=agent_dir)
setup_process.wait()
click.echo()
# FIXME: Doesn't work: Command not found: agbenchmark
# subprocess.Popen(["./run_benchmark", "serve"], cwd=agent_dir)
# click.echo("⌛ (Re)starting benchmark server...")
# wait_until_conn_ready(8080)
# click.echo()
subprocess.Popen(["./run"], cwd=agent_dir)
click.echo(f"⌛ (Re)starting agent '{agent_name}'...")
wait_until_conn_ready(8000)
click.echo("✅ Agent application started and available on port 8000")
elif not os.path.exists(agent_dir):
click.echo(
click.style(
f"😞 Agent '{agent_name}' does not exist. Please create the agent first.",
fg="red",
)
)
else:
click.echo(
click.style(
f"😞 Run command does not exist in the agent '{agent_name}' directory.",
fg="red",
)
)
@agent.command()
def stop():
"""Stop agent command"""
import os
import signal
import subprocess
try:
pids = subprocess.check_output(["lsof", "-t", "-i", ":8000"]).split()
if isinstance(pids, int):
os.kill(int(pids), signal.SIGTERM)
else:
for pid in pids:
os.kill(int(pid), signal.SIGTERM)
except subprocess.CalledProcessError:
click.echo("No process is running on port 8000")
try:
pids = int(subprocess.check_output(["lsof", "-t", "-i", ":8080"]))
if isinstance(pids, int):
os.kill(int(pids), signal.SIGTERM)
else:
for pid in pids:
os.kill(int(pid), signal.SIGTERM)
except subprocess.CalledProcessError:
click.echo("No process is running on port 8080")
@agent.command()
def list():
"""List agents command"""
import os
try:
agents_dir = "./agents"
agents_list = [
d
for d in os.listdir(agents_dir)
if os.path.isdir(os.path.join(agents_dir, d))
]
if os.path.isdir("./original_autogpt"):
agents_list.append("original_autogpt")
if agents_list:
click.echo(click.style("Available agents: 🤖", fg="green"))
for agent in agents_list:
click.echo(click.style(f"\t🐙 {agent}", fg="blue"))
else:
click.echo(click.style("No agents found 😞", fg="red"))
except FileNotFoundError:
click.echo(click.style("The agents directory does not exist 😢", fg="red"))
except Exception as e:
click.echo(click.style(f"An error occurred: {e} 😢", fg="red"))
@cli.group()
def benchmark():
"""Commands to start the benchmark and list tests and categories"""
pass
@benchmark.command(
context_settings=dict(
ignore_unknown_options=True,
)
)
@click.argument("agent_name")
@click.argument("subprocess_args", nargs=-1, type=click.UNPROCESSED)
def start(agent_name, subprocess_args):
"""Starts the benchmark command"""
import os
import subprocess
script_dir = os.path.dirname(os.path.realpath(__file__))
agent_dir = os.path.join(
script_dir,
f"agents/{agent_name}"
if agent_name not in ["original_autogpt", "forge"]
else agent_name,
)
benchmark_script = os.path.join(agent_dir, "run_benchmark")
if os.path.exists(agent_dir) and os.path.isfile(benchmark_script):
os.chdir(agent_dir)
subprocess.Popen([benchmark_script, *subprocess_args], cwd=agent_dir)
click.echo(
click.style(
f"🚀 Running benchmark for '{agent_name}' with subprocess arguments: {' '.join(subprocess_args)}",
fg="green",
)
)
else:
click.echo(
click.style(
f"😞 Agent '{agent_name}' does not exist. Please create the agent first.",
fg="red",
)
)
@benchmark.group(name="categories")
def benchmark_categories():
"""Benchmark categories group command"""
pass
@benchmark_categories.command(name="list")
def benchmark_categories_list():
"""List benchmark categories command"""
import glob
import json
import os
categories = set()
# Get the directory of this file
this_dir = os.path.dirname(os.path.abspath(__file__))
glob_path = os.path.join(
this_dir,
"./benchmark/agbenchmark/challenges/**/[!deprecated]*/data.json",
)
# Use it as the base for the glob pattern, excluding 'deprecated' directory
for data_file in glob.glob(glob_path, recursive=True):
if "deprecated" not in data_file:
with open(data_file, "r") as f:
try:
data = json.load(f)
categories.update(data.get("category", []))
except json.JSONDecodeError:
print(f"Error: {data_file} is not a valid JSON file.")
continue
except IOError:
print(f"IOError: file could not be read: {data_file}")
continue
if categories:
click.echo(click.style("Available categories: 📚", fg="green"))
for category in categories:
click.echo(click.style(f"\t📖 {category}", fg="blue"))
else:
click.echo(click.style("No categories found 😞", fg="red"))
@benchmark.group(name="tests")
def benchmark_tests():
"""Benchmark tests group command"""
pass
@benchmark_tests.command(name="list")
def benchmark_tests_list():
"""List benchmark tests command"""
import glob
import json
import os
import re
tests = {}
# Get the directory of this file
this_dir = os.path.dirname(os.path.abspath(__file__))
glob_path = os.path.join(
this_dir,
"./benchmark/agbenchmark/challenges/**/[!deprecated]*/data.json",
)
# Use it as the base for the glob pattern, excluding 'deprecated' directory
for data_file in glob.glob(glob_path, recursive=True):
if "deprecated" not in data_file:
with open(data_file, "r") as f:
try:
data = json.load(f)
category = data.get("category", [])
test_name = data.get("name", "")
if category and test_name:
if category[0] not in tests:
tests[category[0]] = []
tests[category[0]].append(test_name)
except json.JSONDecodeError:
print(f"Error: {data_file} is not a valid JSON file.")
continue
except IOError:
print(f"IOError: file could not be read: {data_file}")
continue
if tests:
click.echo(click.style("Available tests: 📚", fg="green"))
for category, test_list in tests.items():
click.echo(click.style(f"\t📖 {category}", fg="blue"))
for test in sorted(test_list):
test_name = (
" ".join(word for word in re.split("([A-Z][a-z]*)", test) if word)
.replace("_", "")
.replace("C L I", "CLI")
.replace(" ", " ")
)
test_name_padded = f"{test_name:<40}"
click.echo(click.style(f"\t\t🔬 {test_name_padded} - {test}", fg="cyan"))
else:
click.echo(click.style("No tests found 😞", fg="red"))
@benchmark_tests.command(name="details")
@click.argument("test_name")
def benchmark_tests_details(test_name):
"""Benchmark test details command"""
import glob
import json
import os
# Get the directory of this file
this_dir = os.path.dirname(os.path.abspath(__file__))
glob_path = os.path.join(
this_dir,
"./benchmark/agbenchmark/challenges/**/[!deprecated]*/data.json",
)
# Use it as the base for the glob pattern, excluding 'deprecated' directory
for data_file in glob.glob(glob_path, recursive=True):
with open(data_file, "r") as f:
try:
data = json.load(f)
if data.get("name") == test_name:
click.echo(
click.style(
f"\n{data.get('name')}\n{'-'*len(data.get('name'))}\n",
fg="blue",
)
)
click.echo(
click.style(
f"\tCategory: {', '.join(data.get('category'))}",
fg="green",
)
)
click.echo(click.style(f"\tTask: {data.get('task')}", fg="green"))
click.echo(
click.style(
f"\tDependencies: {', '.join(data.get('dependencies')) if data.get('dependencies') else 'None'}",
fg="green",
)
)
click.echo(
click.style(f"\tCutoff: {data.get('cutoff')}\n", fg="green")
)
click.echo(
click.style("\tTest Conditions\n\t-------", fg="magenta")
)
click.echo(
click.style(
f"\t\tAnswer: {data.get('ground').get('answer')}",
fg="magenta",
)
)
click.echo(
click.style(
f"\t\tShould Contain: {', '.join(data.get('ground').get('should_contain'))}",
fg="magenta",
)
)
click.echo(
click.style(
f"\t\tShould Not Contain: {', '.join(data.get('ground').get('should_not_contain'))}",
fg="magenta",
)
)
click.echo(
click.style(
f"\t\tFiles: {', '.join(data.get('ground').get('files'))}",
fg="magenta",
)
)
click.echo(
click.style(
f"\t\tEval: {data.get('ground').get('eval').get('type')}\n",
fg="magenta",
)
)
click.echo(click.style("\tInfo\n\t-------", fg="yellow"))
click.echo(
click.style(
f"\t\tDifficulty: {data.get('info').get('difficulty')}",
fg="yellow",
)
)
click.echo(
click.style(
f"\t\tDescription: {data.get('info').get('description')}",
fg="yellow",
)
)
click.echo(
click.style(
f"\t\tSide Effects: {', '.join(data.get('info').get('side_effects'))}",
fg="yellow",
)
)
break
except json.JSONDecodeError:
print(f"Error: {data_file} is not a valid JSON file.")
continue
except IOError:
print(f"IOError: file could not be read: {data_file}")
continue
def wait_until_conn_ready(port: int = 8000, timeout: int = 30):
"""
Polls localhost:{port} until it is available for connections
Params:
port: The port for which to wait until it opens
timeout: Timeout in seconds; maximum amount of time to wait
Raises:
TimeoutError: If the timeout (seconds) expires before the port opens
"""
import socket
import time
start = time.time()
while True:
time.sleep(0.5)
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
if s.connect_ex(("localhost", port)) == 0:
break
if time.time() > start + timeout:
raise TimeoutError(f"Port {port} did not open within {timeout} seconds")
if __name__ == "__main__":
cli()

424
classic/forge/CLAUDE.md Normal file
View File

@@ -0,0 +1,424 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Quick Reference
```bash
# Run forge agent server (port 8000)
poetry run python -m forge
# Run tests
poetry run pytest
poetry run pytest --cov=forge
poetry run pytest -k test_name
```
## Entry Point
`__main__.py` → loads `.env` → configures logging → starts Uvicorn with hot-reload on port 8000
The app is created in `app.py`:
```python
agent = ForgeAgent(database=database, workspace=workspace)
app = agent.get_agent_app()
```
## Directory Structure
```
forge/
├── __main__.py # Entry: uvicorn server startup
├── app.py # FastAPI app creation
├── agent/ # Core agent framework
│ ├── base.py # BaseAgent abstract class
│ ├── forge_agent.py # Reference implementation
│ ├── components.py # AgentComponent base classes
│ └── protocols.py # Protocol interfaces
├── agent_protocol/ # Agent Protocol standard
│ ├── agent.py # ProtocolAgent mixin
│ ├── api_router.py # FastAPI routes
│ └── database/ # Task/step persistence
├── command/ # Command system
│ ├── command.py # Command class
│ ├── decorator.py # @command decorator
│ └── parameter.py # CommandParameter
├── components/ # Built-in components
│ ├── action_history/ # Track & summarize actions
│ ├── code_executor/ # Python & shell execution
│ ├── context/ # File/folder context
│ ├── file_manager/ # File operations
│ ├── git_operations/ # Git commands
│ ├── image_gen/ # DALL-E & SD
│ ├── system/ # Core directives + finish
│ ├── user_interaction/ # User prompts
│ ├── watchdog/ # Loop detection
│ └── web/ # Search & Selenium
├── config/ # Configuration models
├── llm/ # LLM integration
│ └── providers/ # OpenAI, Anthropic, Groq, etc.
├── file_storage/ # Storage abstraction
│ ├── base.py # FileStorage ABC
│ ├── local.py # LocalFileStorage
│ ├── s3.py # S3FileStorage
│ └── gcs.py # GCSFileStorage
├── models/ # Core data models
├── content_processing/ # Text/HTML utilities
├── logging/ # Structured logging
└── json/ # JSON parsing utilities
```
## Core Abstractions
### BaseAgent (`agent/base.py`)
Abstract base for all agents. Generic over proposal type.
```python
class BaseAgent(Generic[AnyProposal], metaclass=AgentMeta):
def __init__(self, settings: BaseAgentSettings)
```
**Must Override:**
```python
async def propose_action(self) -> AnyProposal
async def execute(self, proposal: AnyProposal, user_feedback: str) -> ActionResult
async def do_not_execute(self, denied_proposal: AnyProposal, user_feedback: str) -> ActionResult
```
**Key Methods:**
```python
async def run_pipeline(protocol_method, *args, retry_limit=3) -> list
# Executes protocol across all matching components with retry logic
def dump_component_configs(self) -> str # Serialize configs to JSON
def load_component_configs(self, json: str) # Restore configs
```
**Configuration (`BaseAgentConfiguration`):**
```python
fast_llm: ModelName = "gpt-3.5-turbo-16k"
smart_llm: ModelName = "gpt-4"
big_brain: bool = True # Use smart_llm
cycle_budget: Optional[int] = 1 # Steps before approval needed
send_token_limit: Optional[int] # Prompt token budget
use_functions_api: bool = False
```
### Component System (`agent/components.py`)
**AgentComponent** - Base for all components:
```python
class AgentComponent(ABC):
_run_after: list[type[AgentComponent]] = []
_enabled: bool | Callable[[], bool] = True
_disabled_reason: str = ""
def run_after(self, *components) -> Self # Set execution order
def enabled(self) -> bool # Check if active
```
**ConfigurableComponent** - Components with Pydantic config:
```python
class ConfigurableComponent(Generic[BM]):
config_class: ClassVar[type[BM]] # Set in subclass
@property
def config(self) -> BM # Get/create config from env
```
**Component Discovery:**
1. Agent assigns components: `self.foo = FooComponent()`
2. `AgentMeta.__call__` triggers `_collect_components()`
3. Components are topologically sorted by `run_after` dependencies
4. Disabled components skipped during pipeline execution
### Protocols (`agent/protocols.py`)
Protocols define what components CAN do:
```python
class DirectiveProvider(AgentComponent):
def get_constraints(self) -> Iterator[str]
def get_resources(self) -> Iterator[str]
def get_best_practices(self) -> Iterator[str]
class CommandProvider(AgentComponent):
def get_commands(self) -> Iterator[Command]
class MessageProvider(AgentComponent):
def get_messages(self) -> Iterator[ChatMessage]
class AfterParse(AgentComponent, Generic[AnyProposal]):
def after_parse(self, result: AnyProposal) -> None
class AfterExecute(AgentComponent):
def after_execute(self, result: ActionResult) -> None
class ExecutionFailure(AgentComponent):
def execution_failure(self, error: Exception) -> None
```
**Pipeline execution:**
```python
results = await self.run_pipeline(CommandProvider.get_commands)
# Iterates all components implementing CommandProvider
# Collects all yielded Commands
# Handles retries on ComponentEndpointError
```
## LLM Providers (`llm/providers/`)
### MultiProvider
Routes to correct provider based on model name:
```python
class MultiProvider:
async def create_chat_completion(
self,
model_prompt: list[ChatMessage],
model_name: ModelName,
**kwargs
) -> ChatModelResponse
async def get_available_chat_models(self) -> Sequence[ChatModelInfo]
```
### Supported Models
```python
# OpenAI
OpenAIModelName.GPT3, GPT3_16k, GPT4, GPT4_32k, GPT4_TURBO, GPT4_O
# Anthropic
AnthropicModelName.CLAUDE3_OPUS, CLAUDE3_SONNET, CLAUDE3_HAIKU
AnthropicModelName.CLAUDE3_5_SONNET, CLAUDE3_5_SONNET_v2, CLAUDE3_5_HAIKU
AnthropicModelName.CLAUDE4_SONNET, CLAUDE4_OPUS, CLAUDE4_5_OPUS
# Groq
GroqModelName.LLAMA3_8B, LLAMA3_70B, MIXTRAL_8X7B
```
### Key Types
```python
class ChatMessage(BaseModel):
role: Role # USER, SYSTEM, ASSISTANT, TOOL, FUNCTION
content: str
class AssistantFunctionCall(BaseModel):
name: str
arguments: dict[str, Any]
class ChatModelResponse(BaseModel):
completion_text: str
function_calls: list[AssistantFunctionCall]
```
## File Storage (`file_storage/`)
Abstract interface for file operations:
```python
class FileStorage(ABC):
def open_file(self, path, mode="r", binary=False) -> IO
def read_file(self, path, binary=False) -> str | bytes
async def write_file(self, path, content) -> None
def list_files(self, path=".") -> list[Path]
def list_folders(self, path=".", recursive=False) -> list[Path]
def delete_file(self, path) -> None
def exists(self, path) -> bool
def clone_with_subroot(self, subroot) -> FileStorage
```
**Implementations:** `LocalFileStorage`, `S3FileStorage`, `GCSFileStorage`
## Command System (`command/`)
### @command Decorator
```python
@command(
names=["greet", "hello"],
description="Greet a user",
parameters={
"name": JSONSchema(type=JSONSchema.Type.STRING, required=True),
"greeting": JSONSchema(type=JSONSchema.Type.STRING, required=False),
},
)
def greet(self, name: str, greeting: str = "Hello") -> str:
return f"{greeting}, {name}!"
```
### Providing Commands
```python
class MyComponent(CommandProvider):
def get_commands(self) -> Iterator[Command]:
yield self.greet # Decorated method becomes Command
```
## Built-in Components
| Component | Protocols | Purpose |
|-----------|-----------|---------|
| `SystemComponent` | DirectiveProvider, MessageProvider, CommandProvider | Core directives, `finish` command |
| `FileManagerComponent` | DirectiveProvider, CommandProvider | read/write/list files |
| `CodeExecutorComponent` | CommandProvider | Python & shell execution (Docker) |
| `WebSearchComponent` | DirectiveProvider, CommandProvider | DuckDuckGo & Google search |
| `WebSeleniumComponent` | CommandProvider | Browser automation |
| `ActionHistoryComponent` | MessageProvider, AfterParse, AfterExecute | Track & summarize history |
| `WatchdogComponent` | AfterParse | Loop detection, LLM switching |
| `ContextComponent` | MessageProvider, CommandProvider | Keep files in prompt context |
| `ImageGeneratorComponent` | CommandProvider | DALL-E, Stable Diffusion |
| `GitOperationsComponent` | CommandProvider | Git commands |
| `UserInteractionComponent` | CommandProvider | `ask_user` command |
## Configuration
### BaseAgentSettings
```python
class BaseAgentSettings(SystemSettings):
agent_id: str
ai_profile: AIProfile # name, role, goals
directives: AIDirectives # constraints, resources, best_practices
task: str
config: BaseAgentConfiguration
```
### UserConfigurable Fields
```python
class MyConfig(SystemConfiguration):
api_key: SecretStr = UserConfigurable(from_env="API_KEY", exclude=True)
max_retries: int = UserConfigurable(default=3, from_env="MAX_RETRIES")
config = MyConfig.from_env() # Load from environment
```
## Agent Protocol (`agent_protocol/`)
REST API for task-based interaction:
```
POST /ap/v1/agent/tasks # Create task
GET /ap/v1/agent/tasks # List tasks
GET /ap/v1/agent/tasks/{id} # Get task
POST /ap/v1/agent/tasks/{id}/steps # Execute step
GET /ap/v1/agent/tasks/{id}/steps # List steps
GET /ap/v1/agent/tasks/{id}/artifacts # List artifacts
```
**ProtocolAgent mixin** provides these endpoints + database persistence.
## Testing
**Fixtures** (`conftest.py`):
- `storage` - Temporary LocalFileStorage
- VCR cassettes in `tests/vcr_cassettes/`
```bash
poetry run pytest # All tests
poetry run pytest --cov=forge # With coverage
poetry run pytest --record-mode=all # Record HTTP cassettes
```
## Creating a Custom Component
```python
from forge.agent.components import AgentComponent, ConfigurableComponent
from forge.agent.protocols import CommandProvider
from forge.command import command
from forge.models.json_schema import JSONSchema
class MyConfig(BaseModel):
setting: str = "default"
class MyComponent(CommandProvider, ConfigurableComponent[MyConfig]):
config_class = MyConfig
def get_commands(self) -> Iterator[Command]:
yield self.my_command
@command(
names=["mycmd"],
description="Do something",
parameters={"arg": JSONSchema(type=JSONSchema.Type.STRING, required=True)},
)
def my_command(self, arg: str) -> str:
return f"Result: {arg}"
```
## Creating a Custom Agent
```python
from forge.agent.forge_agent import ForgeAgent
class MyAgent(ForgeAgent):
def __init__(self, database, workspace):
super().__init__(database, workspace)
self.my_component = MyComponent()
async def propose_action(self) -> ActionProposal:
# 1. Collect directives
constraints = await self.run_pipeline(DirectiveProvider.get_constraints)
resources = await self.run_pipeline(DirectiveProvider.get_resources)
# 2. Collect commands
commands = await self.run_pipeline(CommandProvider.get_commands)
# 3. Collect messages
messages = await self.run_pipeline(MessageProvider.get_messages)
# 4. Build prompt and call LLM
response = await self.llm_provider.create_chat_completion(
model_prompt=messages,
model_name=self.config.smart_llm,
functions=function_specs_from_commands(commands),
)
# 5. Parse and return proposal
return ActionProposal(
thoughts=response.completion_text,
use_tool=response.function_calls[0],
raw_message=AssistantChatMessage(content=response.completion_text),
)
```
## Key Patterns
### Component Ordering
```python
self.component_a = ComponentA()
self.component_b = ComponentB().run_after(self.component_a)
```
### Conditional Enabling
```python
self.search = WebSearchComponent()
self.search._enabled = bool(os.getenv("GOOGLE_API_KEY"))
self.search._disabled_reason = "No Google API key"
```
### Pipeline Retry Logic
- `ComponentEndpointError` → retry same component (3x)
- `EndpointPipelineError` → restart all components (3x)
- `ComponentSystemError` → restart all pipelines
## Key Files Reference
| Purpose | Location |
|---------|----------|
| Entry point | `__main__.py` |
| FastAPI app | `app.py` |
| Base agent | `agent/base.py` |
| Reference agent | `agent/forge_agent.py` |
| Components base | `agent/components.py` |
| Protocols | `agent/protocols.py` |
| LLM providers | `llm/providers/` |
| File storage | `file_storage/` |
| Commands | `command/` |
| Built-in components | `components/` |
| Agent Protocol | `agent_protocol/` |

View File

@@ -1,9 +0,0 @@
#!/bin/bash
kill $(lsof -t -i :8000)
if [ ! -f .env ]; then
cp .env.example .env
echo "Please add your api keys to the .env file."
fi
poetry run python -m forge

View File

@@ -1,9 +0,0 @@
#!/bin/bash
# Kill processes using port 8080 if any.
if lsof -t -i :8080; then
kill $(lsof -t -i :8080)
fi
# This is the cli entry point for the benchmarking tool.
# To run this in server mode pass in `serve` as the first argument.
poetry run agbenchmark "$@"

View File

@@ -1,17 +0,0 @@
#!/bin/bash
ENV_PATH=$(poetry env info --path)
if [ -d "$ENV_PATH" ]; then
if [ -e delete ]; then
rm -rf "$ENV_PATH" || { echo "Please manually remove $ENV_PATH"; exit 1; }
else
echo "Press ENTER to remove $ENV_PATH"
read && { rm -r "$ENV_PATH" && echo "Removed the poetry environment at $ENV_PATH."; } || { echo "Please manually remove $ENV_PATH."; exit 1; }
fi
else
echo "No poetry environment found."
fi
poetry install --extras benchmark
echo "Setup completed successfully."
exit 0

View File

@@ -1,120 +0,0 @@
## [AutoGPT Forge Part 1: A Comprehensive Guide to Your First Steps](https://aiedge.medium.com/autogpt-forge-a-comprehensive-guide-to-your-first-steps-a1dfdf46e3b4)
![Header](..%2F..%2F..%2Fdocs/content/imgs/quickstart/000_header_img.png)
**Written by Craig Swift & [Ryan Brandt](https://github.com/paperMoose)**
Welcome to the getting started Tutorial! This tutorial is designed to walk you through the process of setting up and running your own AutoGPT agent in the Forge environment. Whether you are a seasoned AI developer or just starting out, this guide will equip you with the necessary steps to jumpstart your journey in the world of AI development with AutoGPT.
## Section 1: Understanding the Forge
The Forge serves as a comprehensive template for building your own AutoGPT agent. It not only provides the setting for setting up, creating, and running your agent, but also includes the benchmarking system and the frontend for testing it. We'll touch more on those later! For now just think of the forge as a way to easily generate your boilerplate in a standardized way.
## Section 2: Setting up the Forge Environment
To begin, you need to fork the [repository](https://github.com/Significant-Gravitas/AutoGPT) by navigating to the main page of the repository and clicking **Fork** in the top-right corner.
![The Github repository](..%2F..%2F..%2Fdocs/content/imgs/quickstart/001_repo.png)
Follow the on-screen instructions to complete the process.
![Create Fork Page](..%2F..%2F..%2Fdocs/content/imgs/quickstart/002_fork.png)
### Cloning the Repository
Next, clone your newly forked repository to your local system. Ensure you have Git installed to proceed with this step. You can download Git from [here](https://git-scm.com/downloads). Then clone the repo using the following command and the url for your repo. You can find the correct url by clicking on the green Code button on your repos main page.
![img_1.png](..%2F..%2F..%2Fdocs/content/imgs/quickstart/003A_clone.png)
```bash
# replace the url with the one for your forked repo
git clone https://github.com/<YOUR REPO PATH HERE>
```
![Clone the Repository](..%2F..%2F..%2Fdocs/content/imgs/quickstart/003_clone.png)
### Setting up the Project
Once you have clone the project change your directory to the newly cloned project:
```bash
# The name of the directory will match the name you gave your fork. The default is AutoGPT
cd AutoGPT
```
To set up the project, utilize the `./run setup` command in the terminal. Follow the instructions to install necessary dependencies and set up your GitHub access token.
![Setup the Project](..%2F..%2F..%2Fdocs/content/imgs/quickstart/005_setup.png)
![Setup Complete](..%2F..%2F..%2Fdocs/content/imgs/quickstart/006_setup_complete.png)
## Section 3: Creating Your Agent
Choose a suitable name for your agent. It should be unique and descriptive. Examples of valid names include swiftyosgpt, SwiftyosAgent, or swiftyos_agent.
Create your agent template using the command:
```bash
./run agent create YOUR_AGENT_NAME
```
Replacing YOUR_AGENT_NAME with the name you chose in the previous step.
![Create an Agent](..%2F..%2F..%2Fdocs/content/imgs/quickstart/007_create_agent.png)
## Section 4: Running Your Agent
Begin by starting your agent using the command:
```bash
./run agent start YOUR_AGENT_NAME
```
This will initiate the agent on `http://localhost:8000/`.
![Start the Agent](..%2F..%2F..%2Fdocs/content/imgs/quickstart/009_start_agent.png)
### Logging in and Sending Tasks to Your Agent
Access the frontend at `http://localhost:8000/` and log in using a Google or GitHub account. Once you're logged you'll see the agent tasking interface! However... the agent won't do anything yet. We'll implement the logic for our agent to run tasks in the upcoming tutorial chapters.
![Login](..%2F..%2F..%2Fdocs/content/imgs/quickstart/010_login.png)
![Home](..%2F..%2F..%2Fdocs/content/imgs/quickstart/011_home.png)
### Stopping and Restarting Your Agent
When needed, use Ctrl+C to end the session or use the stop command:
```bash
./run agent stop
```
This command forcefully stops the agent. You can also restart it using the start command.
## To Recap
- We've forked the AutoGPT repo and cloned it locally on your machine.
- we connected the library with our personal github access token as part of the setup.
- We've run the agent and its tasking server successfully without an error.
- We've logged into the server site at localhost:8000 using our github account.
Make sure you've completed every step successfully before moving on :).
### Next Steps: Building and Enhancing Your Agent
With our foundation set, you are now ready to build and enhance your agent! The next tutorial will look into the anatomy of an agent and how to add basic functionality.
## Additional Resources
### Links to Documentation and Community Forums
- [Windows Subsystem for Linux (WSL) Installation](https://learn.microsoft.com/en-us/windows/wsl/)
- [Git Download](https://git-scm.com/downloads)
## Appendix
### Troubleshooting Common Issues
- Ensure Git is correctly installed before cloning the repository.
- Follow the setup instructions carefully to avoid issues during project setup.
- If encountering issues during agent creation, refer to the guide for naming conventions.
- make sure your github token has the `repo` scopes toggled.
### Glossary of Terms
- **Repository**: A storage space where your project resides.
- **Forking**: Creating a copy of a repository under your GitHub account.
- **Cloning**: Making a local copy of a repository on your system.
- **Agent**: The AutoGPT you will be creating and developing in this project.
- **Benchmarking**: The process of testing your agent's skills in various categories using the Forge's integrated benchmarking system.
- **Forge**: The comprehensive template for building your AutoGPT agent, including the setting for setup, creation, running, and benchmarking your agent.
- **Frontend**: The user interface where you can log in, send tasks to your agent, and view the task history.
### System Requirements
This project supports Linux (Debian based), Mac, and Windows Subsystem for Linux (WSL). If you are using a Windows system, you will need to install WSL. You can find the installation instructions for WSL [here](https://learn.microsoft.com/en-us/windows/wsl/).

View File

@@ -1,147 +0,0 @@
# AutoGPT Forge Part 2: The Blueprint of an AI Agent
**Written by Craig Swift & [Ryan Brandt](https://github.com/paperMoose)**
*8 min read*
---
![Header](..%2F..%2Fdocs/content/imgs/quickstart/t2_01.png)
## What are LLM-Based AI Agents?
Before we add logic to our new agent, we have to understand what an agent actually IS.
Large Language Models (LLMs) are state-of-the-art machine learning models that harness vast amounts of web knowledge. But what happens when you give the LLM the ability to use tools based on it's output? You get LLM-based AI agents — a new breed of artificial intelligence that promises more human-like decision-making in the real world.
Traditional autonomous agents operated with limited knowledge, often confined to specific tasks or environments. They were like calculators — efficient but limited to predefined functions. LLM-based agents, on the other hand dont just compute; they understand, reason, and then act, drawing from a vast reservoir of information.
![AI visualising AI researchers hard at work](..%2F..%2Fdocs/content/imgs/quickstart/t2_02.png)
## The Anatomy of an LLM-Based AI Agent
Diving deep into the core of an LLM-based AI agent, we find its structured much like a human, with distinct components akin to personality, memory, thought process, and abilities. Lets break these down:
![The Github repository](..%2F..%2Fdocs/content/imgs/quickstart/t2_03.png)
Anatomy of an Agent from the Agent Landscape Survey
### **Profile**
Humans naturally adapt our mindset based on the tasks we're tackling, whether it's writing, cooking, or playing sports. Similarly, agents can be conditioned or "profiled" to specialize in specific tasks.
The profile of an agent is its personality, mindset, and high-level instructions. Research indicates that merely informing an agent that it's an expert in a certain domain can boost its performance.
| **Potential Applications of Profiling** | **Description** |
|-----------------------------------------|----------------------------------------------------------------------------------------------------------|
| **Prompt Engineering** | Tailoring agent prompts for better results. |
| **Memory Adjustments** | Modifying how an agent recalls or prioritizes information. |
| **Action Selection** | Influencing the set of actions an agent might consider. |
| **Driving Mechanism** | Potentially tweaking the underlying large language model (LLM) that powers the agent. |
#### Example Agent Profile: Weather Expert
- **Profile Name:** Weather Specialist
- **Purpose:** Provide detailed and accurate weather information.
- **Preferred Memory Sources:** Meteorological databases, recent weather news, and scientific journals.
- **Action Set:** Fetching weather data, analyzing weather patterns, and providing forecasts.
- **Base Model Tweaks:** Prioritize meteorological terminology and understanding.
### **Memory**
Just as our memories shape our decisions, reactions, and identities, an agent's memory is the cornerstone of its identity and capabilities. Memory is fundamental for an agent to learn and adapt. At a high level, agents possess two core types of memories: long-term and short-term.
| | **Long-Term Memory** | **Short-Term (Working) Memory** |
|-------------------|-------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------|
| **Purpose** | Serves as the agent's foundational knowledge base. | Handles recent or transient memories, much like our recollection of events from the past few days. |
| **What it Stores**| Historical data and interactions that have taken place over extended periods. | Immediate experiences and interactions. |
| **Role** | Guides the agent's core behaviors and understanding, acting as a vast reservoir of accumulated knowledge. | Essential for real-time tasks and decision-making. Not all these memories transition into long-term storage. |
### **Planning**
Planning is essential for agents to systematically tackle challenges, mirroring how humans break down complex problems into smaller tasks.
#### **1. What is Planning?**
- **Concept:** It's the agent's strategy for problem-solving, ensuring solutions are both comprehensive and systematic.
- **Human Analogy:** Just like humans split challenges into smaller, more manageable tasks, agents adopt a similar methodical approach.
#### **2. Key Planning Strategies**
| **Strategy** | **Description** |
|----------------------------|----------------------------------------------------------------------------------------------------------|
| **Planning with Feedback** | An adaptive approach where agents refine their strategy based on outcomes, similar to iterative design processes.|
| **Planning without Feedback** | The agent acts as a strategist, using only its existing knowledge. It's like playing chess, anticipating challenges and planning several moves ahead. |
### **Action**
After the introspection of memory and the strategizing of planning, comes the finale: Action. This is where the agents cognitive processes manifest into tangible outcomes using the agents Abilities. Every decision, every thought, culminates in the action phase, translating abstract concepts into definitive results.
Whether its penning a response, saving a file, or initiating a new process, the action component is the culmination of the agents decision-making journey. Its the bridge between digital cognition and real-world impact, turning the agents electronic impulses into meaningful and purposeful outcomes.
![t2_agent_flow.png](..%2F..%2F..%2Fdocs%2Fcontent%2Fimgs%2Fquickstart%2Ft2_agent_flow.png)
An example of how a basic agent works
## The Agent Protocol: The Linguistics of AI Communication
After diving deep into the anatomy of an agent, understanding its core components, there emerges a pivotal question: How do we effectively communicate with these diverse, intricately-designed agents? The answer lies in the Agent Protocol.
### Understanding the Agent Protocol
At its essence, the Agent Protocol is a standardized communication interface, a universal “language” that every AI agent, regardless of its underlying structure or design, can comprehend. Think of it as the diplomatic envoy that ensures smooth conversations between agents and their developers, tools, or even other agents.
In an ecosystem where every developer might have their unique approach to crafting agents, the Agent Protocol acts as a unifying bridge. Its akin to a standardized plug fitting into any socket or a universal translator decoding myriad languages.
## AutoGPT Forge: A Peek Inside the LLM Agent Template
Now we understand the architecture of an agent lets look inside the Forge. Its a well-organized template, meticulously architected to cater to the needs of agent developers.
#### Forges Project Structure: A Birds-Eye View
![t2_diagram.png](..%2F..%2F..%2Fdocs%2Fcontent%2Fimgs%2Fquickstart%2Ft2_diagram.png)
The Forge's agent directory structure consists of three parts:
- **agent.py**: The heart of the Forge, where the agent's actual business logic is.
- **prompts**: A directory of prompts used in agent.py's LLM logic.
- **sdk**: The boilerplate code and the lower level APIs of the Forge.
Lets break them down.
#### Understanding the SDK
The SDK is the main directory for the Forge. Here's a breakdown:
- **Core Components**: These are key parts of the Forge including Memory, Abilities, and Planning. They help the agent think and act.
- **Agent Protocol Routes**: In the routes sub-directory, you'll see the Agent Protocol. This is how the agent communicates.
- **Database (db.py)**: This is where the agent stores its data like experiences and learnings.
- **Prompting Engine (prompting.py)**: This tool uses templates to ask questions to the LLM for consistent interactions.
- **Agent Class**: This connects the agent's actions with the Agent Protocol routes.
#### Configurations and Environment
Configuration is key to ensuring our agent runs seamlessly. The .env.example file provides a template for setting up the necessary environment variables. Before diving into the Forge, developers need to copy this to a new .env file and adjust the settings:
- **API Key**: `OPENAI_API_KEY` is where you plug in your OpenAI API key.
- **Log Level**: With `LOG_LEVEL`, control the verbosity of the logs.
- **Database Connection**: `DATABASE_STRING` determines where and how the agent's data gets stored.
- **Port**: `PORT` specifies the listening port for the agent's server.
- **Workspace**: `AGENT_WORKSPACE` points to the agent's working directory.
## To Recap
- **LLM-Based AI Agents**:
- LLMs are machine learning models with vast knowledge. When equipped with tools to utilize their outputs, they evolve into LLM-based AI agents, enabling human-like decision-making.
- **Anatomy of an Agent**:
- **Profile**: Sets an agent's personality and specialization.
- **Memory**: Encompasses the agent's long-term and short-term memory, storing both historical data and recent interactions.
- **Planning**: The strategy the agent employs to tackle problems.
- **Action**: The stage where the agent's decisions translate to tangible results.
- **Agent Protocol**:
- A uniform communication interface ensuring smooth interactions between agents and their developers.
- **AutoGPT Forge**:
- A foundational template for creating agents. Components include:
- **agent.py**: Houses the agent's core logic.
- **prompts**: Directory of templates aiding LLM logic.
- **sdk**: Boilerplate code and essential APIs.
Let's put this blueprint into practice in part 3!

View File

@@ -1,513 +0,0 @@
# AutoGPT Forge: Crafting Intelligent Agent Logic
![Header](..%2F..%2F..%2Fdocs/content/imgs/quickstart/t3_01.png)
**By Craig Swift & [Ryan Brandt](https://github.com/paperMoose)**
Hey there! Ready for part 3 of our AutoGPT Forge tutorial series? If you missed the earlier parts, catch up here:
- [Getting Started](001_getting_started.md)
- [Blueprint of an Agent](002_blueprint_of_an_agent.md)
Now, let's get hands-on! We'll use an LLM to power our agent and complete a task. The challenge? Making the agent write "Washington" to a .txt file. We won't give it step-by-step instructions—just the task. Let's see our agent in action and watch it figure out the steps on its own!
## Get Your Smart Agent Project Ready
Make sure you've set up your project and created an agent as described in our initial guide. If you skipped that part, [click here](#) to get started. Once you're done, come back, and we'll move forward.
In the image below, you'll see my "SmartAgent" and the agent.py file inside the 'forge' folder. That's where we'll be adding our LLM-based logic. If you're unsure about the project structure or agent functions from our last guide, don't worry. We'll cover the basics as we go!
![SmartAgent](..%2F..%2F..%2Fdocs/content/imgs/quickstart/t3_02.png)
---
## The Task Lifecycle
The lifecycle of a task, from its creation to execution, is outlined in the agent protocol. In simple terms: a task is initiated, its steps are systematically executed, and it concludes once completed.
Want your agent to perform an action? Start by dispatching a create_task request. This crucial step involves specifying the task details, much like how you'd send a prompt to ChatGPT, using the input field. If you're giving this a shot on your own, the UI is your best friend; it effortlessly handles all the API calls on your behalf.
When the agent gets this, it runs the create_task function. The code `super().create_task(task_request)` takes care of protocol steps. It then logs the task's start. For this guide, you don't need to change this function.
```python
async def create_task(self, task_request: TaskRequestBody) -> Task:
"""
The agent protocol, which is the core of the Forge, works by creating a task and then
executing steps for that task. This method is called when the agent is asked to create
a task.
We are hooking into function to add a custom log message. Though you can do anything you
want here.
"""
task = await super().create_task(task_request)
LOG.info(
f"📦 Task created: {task.task_id} input: {task.input[:40]}{'...' if len(task.input) > 40 else ''}"
)
return task
```
After starting a task, the `execute_step` function runs until all steps are done. Here's a basic view of `execute_step`. I've left out the detailed comments for simplicity, but you'll find them in your project.
```python
async def execute_step(self, task_id: str, step_request: StepRequestBody) -> Step:
# An example that
step = await self.db.create_step(
task_id=task_id, input=step_request, is_last=True
)
self.workspace.write(task_id=task_id, path="output.txt", data=b"Washington D.C")
await self.db.create_artifact(
task_id=task_id,
step_id=step.step_id,
file_name="output.txt",
relative_path="",
agent_created=True,
)
step.output = "Washington D.C"
LOG.info(f"\t✅ Final Step completed: {step.step_id}")
return step
```
Here's the breakdown of the 'write file' process in four steps:
1. **Database Step Creation**: The first stage is all about creating a step within the database, an essential aspect of the agent protocol. You'll observe that while setting up this step, we've flagged it with `is_last=True`. This signals to the agent protocol that no more steps are pending. For the purpose of this guide, let's work under the assumption that our agent will only tackle single-step tasks. However, hang tight for future tutorials, where we'll level up and let the agent determine its completion point.
2. **File Writing**: Next, we pen down "Washington D.C." using the workspace.write function.
3. **Artifact Database Update**: After writing, we record the file in the agent's artifact database.
4. **Step Output & Logging**: Finally, we set the step output to match the file content, log the executed step, and use the step object.
With the 'write file' process clear, let's make our agent smarter and more autonomous. Ready to dive in?
---
## Building the Foundations For Our Smart Agent
First, we need to update the `execute_step()` function. Instead of a fixed solution, it should use the given request.
To do this, we'll fetch the task details using the provided `task_id`:
```python
task = await self.db.get_task(task_id)
```
Next, remember to create a database record and mark it as a single-step task with `is_last=True`:
```python
step = await self.db.create_step(
task_id=task_id, input=step_request, is_last=True
)
```
Your updated `execute_step` function will look like this:
```python
async def execute_step(self, task_id: str, step_request: StepRequestBody) -> Step:
# Get the task details
task = await self.db.get_task(task_id)
# Add a new step to the database
step = await self.db.create_step(
task_id=task_id, input=step_request, is_last=True
)
return step
```
Now that we've set this up, let's move to the next exciting part: The PromptEngine.
---
**The Art of Prompting**
![Prompting 101](..%2F..%2F..%2Fdocs/content/imgs/quickstart/t3_03.png)
Prompting is like shaping messages for powerful language models like ChatGPT. Since these models respond to input details, creating the right prompt can be a challenge. That's where the **PromptEngine** comes in.
The "PromptEngine" helps you store prompts in text files, specifically in Jinja2 templates. This means you can change the prompts without changing the code. It also lets you adjust prompts for different LLMs. Here's how to use it:
First, add the PromptEngine from the SDK:
```python
from .sdk import PromptEngine
```
In your `execute_step` function, set up the engine for the `gpt-3.5-turbo` LLM:
```python
prompt_engine = PromptEngine("gpt-3.5-turbo")
```
Loading a prompt is straightforward. For instance, loading the `system-format` prompt, which dictates the response format from the LLM, is as easy as:
```python
system_prompt = prompt_engine.load_prompt("system-format")
```
For intricate use cases, like the `task-step` prompt which requires parameters, employ the following method:
```python
# Define the task parameters
task_kwargs = {
"task": task.input,
"abilities": self.abilities.list_abilities_for_prompt(),
}
# Load the task prompt with those parameters
task_prompt = prompt_engine.load_prompt("task-step", **task_kwargs)
```
Delving deeper, let's look at the `task-step` prompt template in `prompts/gpt-3.5-turbo/task-step.j2`:
```jinja
{% extends "techniques/expert.j2" %}
{% block expert %}Planner{% endblock %}
{% block prompt %}
Your task is:
{{ task }}
Ensure to respond in the given format. Always make autonomous decisions, devoid of user guidance. Harness the power of your LLM, opting for straightforward tactics sans any legal entanglements.
{% if constraints %}
## Constraints
Operate under these confines:
{% for constraint in constraints %}
- {{ constraint }}
{% endfor %}
{% endif %}
{% if resources %}
## Resources
Utilize these resources:
{% for resource in resources %}
- {{ resource }}
{% endfor %}
{% endif %}
{% if abilities %}
## Abilities
Summon these abilities:
{% for ability in abilities %}
- {{ ability }}
{% endfor %}
{% endif %}
{% if abilities %}
## Abilities
Use these abilities:
{% for ability in abilities %}
- {{ ability }}
{% endfor %}
{% endif %}
{% if best_practices %}
## Best Practices
{% for best_practice in best_practices %}
- {{ best_practice }}
{% endfor %}
{% endif %}
{% endblock %}
```
This template is modular. It uses the `extends` directive to build on the `expert.j2` template. The different sections like constraints, resources, abilities, and best practices make the prompt dynamic. It guides the LLM in understanding the task and using resources and abilities.
The PromptEngine equips us with a potent tool to converse seamlessly with large language models. By externalizing prompts and using templates, we can ensure that our agent remains agile, adapting to new challenges without a code overhaul. As we march forward, keep this foundation in mind—it's the bedrock of our agent's intelligence.
---
## Engaging with your LLM
To make the most of the LLM, you'll send a series of organized instructions, not just one prompt. Structure your prompts as a list of messages for the LLM. Using the `system_prompt` and `task_prompt` from before, create the `messages` list:
```python
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": task_prompt}
]
```
With the prompt set, send it to the LLM. This step involves foundational code, focusing on the `chat_completion_request`. This function gives the LLM your prompt, and then gets the LLM's output. The other code sets up our request and interprets the feedback:
```python
try:
# Set the parameters for the chat completion
chat_completion_kwargs = {
"messages": messages,
"model": "gpt-3.5-turbo",
}
# Get the LLM's response and interpret it
chat_response = await chat_completion_request(**chat_completion_kwargs)
answer = json.loads(chat_response.choices[0].message.content)
# Log the answer for reference
LOG.info(pprint.pformat(answer))
except json.JSONDecodeError as e:
# Handle JSON decoding errors
LOG.error(f"Can't decode chat response: {chat_response}")
except Exception as e:
# Handle other errors
LOG.error(f"Can't get chat response: {e}")
```
Extracting clear messages from LLM outputs can be complex. Our method is simple and works with GPT-3.5 and GPT-4. Future guides will show more ways to interpret LLM outputs. The goal? To go beyond JSON, as some LLMs work best with other response types. Stay tuned!
---
## Using and Creating Abilities
Abilities are the gears and levers that enable the agent to interact with tasks at hand. Let's unpack the mechanisms behind these abilities and how you can harness, and even extend, them.
In the Forge folder, there's a `actions` folder containing `registry.py`, `finish.py`, and a `file_system` subfolder. You can also add your own abilities here. `registry.py` is the main file for abilities. It contains the `@action` decorator and the `ActionRegister` class. This class actively tracks abilities and outlines their function. The base Agent class includes a default Action register available via `self.abilities`. It looks like this:
```python
self.abilities = ActionRegister(self)
```
The `ActionRegister` has two key methods. `list_abilities_for_prompt` prepares abilities for prompts. `run_action` makes the ability work. An ability is a function with the `@action` decorator. It must have specific parameters, including the agent and `task_id`.
```python
@action(
name="write_file",
description="Write data to a file",
parameters=[
{
"name": "file_path",
"description": "Path to the file",
"type": "string",
"required": True,
},
{
"name": "data",
"description": "Data to write to the file",
"type": "bytes",
"required": True,
},
],
output_type="None",
)
async def write_file(agent, task_id: str, file_path: str, data: bytes) -> None:
pass
```
The `@action` decorator defines the ability's details, like its identity (name), functionality (description), and operational parameters.
## Example of a Custom Ability: Webpage Fetcher
```python
import requests
@action(
name="fetch_webpage",
description="Retrieve the content of a webpage",
parameters=[
{
"name": "url",
"description": "Webpage URL",
"type": "string",
"required": True,
}
],
output_type="string",
)
async def fetch_webpage(agent, task_id: str, url: str) -> str:
response = requests.get(url)
return response.text
```
This ability, `fetch_webpage`, accepts a URL as input and returns the HTML content of the webpage as a string. Custom abilities let you add more features to your agent. They can integrate other tools and libraries to enhance its functions. To make a custom ability, you need to understand the structure and add technical details. With abilities like "fetch_webpage", your agent can handle complex tasks efficiently.
## Running an Ability
Now that you understand abilities and how to create them, let's use them. The last piece is the `execute_step` function. Our goal is to understand the agent's response, find the ability, and use it.
First, we get the ability details from the agent's answer:
```python
# Extract the ability from the answer
ability = answer["ability"]
```
With the ability details, we use it. We call the `run_ability` function:
```python
# Run the ability and get the output
# We don't actually use the output in this example
output = await self.abilities.run_action(
task_id, ability["name"], **ability["args"]
)
```
Here, were invoking the specified ability. The task_id ensures continuity, ability['name'] pinpoints the exact function, and the arguments (ability["args"]) provide necessary context.
Finally, we make the step's output show the agent's thinking:
```python
# Set the step output to the "speak" part of the answer
step.output = answer["thoughts"]["speak"]
# Return the completed step
return step
```
And there you have it! Your first Smart Agent, sculpted with precision and purpose, stands ready to take on challenges. The stage is set. Its showtime!
Here is what your function should look like:
```python
async def execute_step(self, task_id: str, step_request: StepRequestBody) -> Step:
# Firstly we get the task this step is for so we can access the task input
task = await self.db.get_task(task_id)
# Create a new step in the database
step = await self.db.create_step(
task_id=task_id, input=step_request, is_last=True
)
# Log the message
LOG.info(f"\t✅ Final Step completed: {step.step_id} input: {step.input[:19]}")
# Initialize the PromptEngine with the "gpt-3.5-turbo" model
prompt_engine = PromptEngine("gpt-3.5-turbo")
# Load the system and task prompts
system_prompt = prompt_engine.load_prompt("system-format")
# Initialize the messages list with the system prompt
messages = [
{"role": "system", "content": system_prompt},
]
# Define the task parameters
task_kwargs = {
"task": task.input,
"abilities": self.abilities.list_abilities_for_prompt(),
}
# Load the task prompt with the defined task parameters
task_prompt = prompt_engine.load_prompt("task-step", **task_kwargs)
# Append the task prompt to the messages list
messages.append({"role": "user", "content": task_prompt})
try:
# Define the parameters for the chat completion request
chat_completion_kwargs = {
"messages": messages,
"model": "gpt-3.5-turbo",
}
# Make the chat completion request and parse the response
chat_response = await chat_completion_request(**chat_completion_kwargs)
answer = json.loads(chat_response.choices[0].message.content)
# Log the answer for debugging purposes
LOG.info(pprint.pformat(answer))
except json.JSONDecodeError as e:
# Handle JSON decoding errors
LOG.error(f"Unable to decode chat response: {chat_response}")
except Exception as e:
# Handle other exceptions
LOG.error(f"Unable to generate chat response: {e}")
# Extract the ability from the answer
ability = answer["ability"]
# Run the ability and get the output
# We don't actually use the output in this example
output = await self.abilities.run_action(
task_id, ability["name"], **ability["args"]
)
# Set the step output to the "speak" part of the answer
step.output = answer["thoughts"]["speak"]
# Return the completed step
return step
```
## Interacting with your Agent
> ⚠️ Heads up: The UI and benchmark are still in the oven, so they might be a tad glitchy.
With the heavy lifting of crafting our Smart Agent behind us, its high time to see it in action. Kick things off by firing up the agent with this command:
```bash
./run agent start SmartAgent.
```
Once your digital playground is all set, your terminal should light up with:
```bash
d8888 888 .d8888b. 8888888b. 88888888888
d88888 888 d88P Y88b 888 Y88b 888
d88P888 888 888 888 888 888 888
d88P 888 888 888 888888 .d88b. 888 888 d88P 888
d88P 888 888 888 888 d88""88b 888 88888 8888888P" 888
d88P 888 888 888 888 888 888 888 888 888 888
d8888888888 Y88b 888 Y88b. Y88..88P Y88b d88P 888 888
d88P 888 "Y88888 "Y888 "Y88P" "Y8888P88 888 888
8888888888
888
888
8888888 .d88b. 888d888 .d88b. .d88b.
888 d88""88b 888P" d88P"88b d8P Y8b
888 888 888 888 888 888 88888888
888 Y88..88P 888 Y88b 888 Y8b.
888 "Y88P" 888 "Y88888 "Y8888
888
Y8b d88P
"Y88P" v0.2.0
[2023-09-27 15:39:07,832] [forge.sdk.agent] [INFO] 📝 Agent server starting on http://localhost:8000
```
1. **Get Started**
- Click the link to access the AutoGPT Agent UI.
2. **Login**
- Log in using your Gmail or Github credentials.
3. **Navigate to Benchmarking**
- Look to the left, and you'll spot a trophy icon. Click it to enter the benchmarking arena.
![Benchmarking page of the AutoGPT UI](..%2F..%2F..%2Fdocs/content/imgs/quickstart/t3_04.png)
4. **Select the 'WriteFile' Test**
- Choose the 'WriteFile' test from the available options.
5. **Initiate the Test Suite**
- Hit 'Initiate test suite' to start the benchmarking process.
6. **Monitor in Real-Time**
- Keep your eyes on the right panel as it displays real-time output.
7. **Check the Console**
- For additional information, you can also monitor your console for progress updates and messages.
```bash
📝 📦 Task created: 70518b75-0104-49b0-923e-f607719d042b input: Write the word 'Washington' to a .txt fi...
📝 ✅ Final Step completed: a736c45f-65a5-4c44-a697-f1d6dcd94d5c input: y
```
If you see this, you've done it!
8. **Troubleshooting**
- If you encounter any issues or see cryptic error messages, don't worry. Just hit the retry button. Remember, LLMs are powerful but may occasionally need some guidance.
## Wrap Up
- Stay tuned for our next tutorial, where we'll enhance the agent's capabilities by adding memory!
## Keep Exploring
- Keep experimenting and pushing the boundaries of AI. Happy coding! 🚀
## Wrap Up
In our next tutorial, well further refine this process, enhancing the agents capabilities, through the addition of memory!
Until then, keep experimenting and pushing the boundaries of AI. Happy coding! 🚀

View File

@@ -1,75 +0,0 @@
# Memory Integration: Enabling Your Agent to Remember and Learn
## Introduction
- Importance of Memory Integration in AI Agents
- Overview of Memory Mechanisms in AutoGPT
## Section 1: Understanding Memory Integration
- Concept of Memory in AI Agents
- Types of Memory: Short-term vs. Long-term
## Section 2: Implementing Memory in Your Agent
- Setting up Memory Structures in the Forge Environment
- Utilizing Agent Protocol for Memory Integration
## Section 3: Developing Learning Mechanisms
- Creating Learning Algorithms for Your Agent
- Implementing Learning Mechanisms using Task and Artifact Schemas
## Section 4: Testing and Optimizing Memory Integration
- Employing AGBenchmark for Memory Testing
- Optimizing Memory for Enhanced Performance and Efficiency
## Section 5: Best Practices in Memory Integration
- Tips and Strategies for Effective Memory Integration
- Avoiding Common Pitfalls in Memory Development
## Conclusion
- Recap of the Tutorial
- Future Directions in Memory Integration
## Additional Resources
From **The Rise and Potential of Large Language Model Based Agents: A Survey** *Zhiheng Xi (Fudan University) et al. arXiv.* [[paper](https://arxiv.org/abs/2305.14497)] [[code](https://github.com/woooodyy/llm-agent-paper-list)]
##### Memory capability
###### Raising the length limit of Transformers
- [2023/05] **Randomized Positional Encodings Boost Length Generalization of Transformers.** *Anian Ruoss (DeepMind) et al. arXiv.* [[paper](https://arxiv.org/abs/2305.16843)] [[code](https://github.com/google-deepmind/randomized_positional_encodings)]
- [2023-03] **CoLT5: Faster Long-Range Transformers with Conditional Computation.** *Joshua Ainslie (Google Research) et al. arXiv.* [[paper](https://arxiv.org/abs/2303.09752)]
- [2022/03] **Efficient Classification of Long Documents Using Transformers.** *Hyunji Hayley Park (Illinois University) et al. arXiv.* [[paper](https://arxiv.org/abs/2203.11258)] [[code](https://github.com/amazon-science/efficient-longdoc-classification)]
- [2021/12] **LongT5: Efficient Text-To-Text Transformer for Long Sequences.** *Mandy Guo (Google Research) et al. arXiv.* [[paper](https://arxiv.org/abs/2112.07916)] [[code](https://github.com/google-research/longt5)]
- [2019/10] **BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension.** *Michael Lewis(Facebook AI) et al. arXiv.* [[paper](https://arxiv.org/abs/1910.13461)] [[code](https://github.com/huggingface/transformers/tree/main/src/transformers/models/bart)]
###### Summarizing memory
- [2023/08] **ExpeL: LLM Agents Are Experiential Learners.** *Andrew Zhao (Tsinghua University) et al. arXiv.* [[paper](https://arxiv.org/abs/2308.10144)] [[code]([https://github.com/thunlp/ChatEval](https://github.com/Andrewzh112/ExpeL))]
- [2023/08] **ChatEval: Towards Better LLM-based Evaluators through Multi-Agent Debate.** *Chi-Min Chan (Tsinghua University) et al. arXiv.* [[paper](https://arxiv.org/abs/2308.07201)] [[code](https://github.com/thunlp/ChatEval)]
- [2023/05] **MemoryBank: Enhancing Large Language Models with Long-Term Memory.** *Wanjun Zhong (Harbin Institute of Technology) et al. arXiv.* [[paper](https://arxiv.org/abs/2305.10250)] [[code](https://github.com/zhongwanjun/memorybank-siliconfriend)]
- [2023/04] **Generative Agents: Interactive Simulacra of Human Behavior.** *Joon Sung Park (Stanford University) et al. arXiv.* [[paper](https://arxiv.org/abs/2304.03442)] [[code](https://github.com/joonspk-research/generative_agents)]
- [2023/04] **Unleashing Infinite-Length Input Capacity for Large-scale Language Models with Self-Controlled Memory System.** *Xinnian Liang(Beihang University) et al. arXiv.* [[paper](https://arxiv.org/abs/2304.13343)] [[code](https://github.com/wbbeyourself/scm4llms)]
- [2023/03] **Reflexion: Language Agents with Verbal Reinforcement Learning.** *Noah Shinn (Northeastern University) et al. arXiv.* [[paper](https://arxiv.org/abs/2303.11366)] [[code](https://github.com/noahshinn024/reflexion)]
- [2023/05] **RecurrentGPT: Interactive Generation of (Arbitrarily) Long Text.** Wangchunshu Zhou (AIWaves) et al. arXiv.* [[paper](https://arxiv.org/pdf/2305.13304.pdf)] [[code](https://github.com/aiwaves-cn/RecurrentGPT)]
###### Compressing memories with vectors or data structures
- [2023/07] **Communicative Agents for Software Development.** *Chen Qian (Tsinghua University) et al. arXiv.* [[paper](https://arxiv.org/abs/2307.07924)] [[code](https://github.com/openbmb/chatdev)]
- [2023/06] **ChatDB: Augmenting LLMs with Databases as Their Symbolic Memory.** *Chenxu Hu(Tsinghua University) et al. arXiv.* [[paper](https://arxiv.org/abs/2306.03901)] [[code](https://github.com/huchenxucs/ChatDB)]
- [2023/05] **Ghost in the Minecraft: Generally Capable Agents for Open-World Environments via Large Language Models with Text-based Knowledge and Memory.** *Xizhou Zhu (Tsinghua University) et al. arXiv.* [[paper](https://arxiv.org/abs/2305.17144)] [[code](https://github.com/OpenGVLab/GITM)]
- [2023/05] **RET-LLM: Towards a General Read-Write Memory for Large Language Models.** *Ali Modarressi (LMU Munich) et al. arXiv.* [[paper](https://arxiv.org/abs/2305.14322)] [[code](https://github.com/tloen/alpaca-lora)]
- [2023/05] **RecurrentGPT: Interactive Generation of (Arbitrarily) Long Text.** Wangchunshu Zhou (AIWaves) et al. arXiv.* [[paper](https://arxiv.org/pdf/2305.13304.pdf)] [[code](https://github.com/aiwaves-cn/RecurrentGPT)]
##### Memory retrieval
- [2023/08] **Memory Sandbox: Transparent and Interactive Memory Management for Conversational Agents.** *Ziheng Huang(University of California—San Diego) et al. arXiv.* [[paper](https://arxiv.org/abs/2308.01542)]
- [2023/08] **AgentSims: An Open-Source Sandbox for Large Language Model Evaluation.** *Jiaju Lin (PTA Studio) et al. arXiv.* [[paper](https://arxiv.org/abs/2308.04026)] [[project page](https://www.agentsims.com/)] [[code](https://github.com/py499372727/AgentSims/)]
- [2023/06] **ChatDB: Augmenting LLMs with Databases as Their Symbolic Memory.** *Chenxu Hu(Tsinghua University) et al. arXiv.* [[paper](https://arxiv.org/abs/2306.03901)] [[code](https://github.com/huchenxucs/ChatDB)]
- [2023/05] **MemoryBank: Enhancing Large Language Models with Long-Term Memory.** *Wanjun Zhong (Harbin Institute of Technology) et al. arXiv.* [[paper](https://arxiv.org/abs/2305.10250)] [[code](https://github.com/zhongwanjun/memorybank-siliconfriend)]
- [2023/04] **Generative Agents: Interactive Simulacra of Human Behavior.** *Joon Sung Park (Stanford) et al. arXiv.* [[paper](https://arxiv.org/abs/2304.03442)] [[code](https://github.com/joonspk-research/generative_agents)]
- [2023/05] **RecurrentGPT: Interactive Generation of (Arbitrarily) Long Text.** Wangchunshu Zhou (AIWaves) et al. arXiv.* [[paper](https://arxiv.org/pdf/2305.13304.pdf)] [[code](https://github.com/aiwaves-cn/RecurrentGPT)]
## Appendix
- Examples of Memory Integration Implementations
- Glossary of Memory-Related Terms

View File

@@ -1,45 +0,0 @@
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/
migrate_working_dir/
# IntelliJ related
*.iml
*.ipr
*.iws
.idea/
# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/
# Flutter/Dart/Pub related
**/doc/api/
**/ios/Flutter/.last_build_id
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.packages
.pub-cache/
.pub/
/build/*
!/build/web/
# Symbolication related
app.*.symbols
# Obfuscation related
app.*.map.json
# Android Studio will place build artifacts here
/android/app/debug
/android/app/profile
/android/app/release

View File

@@ -1,45 +0,0 @@
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled.
version:
revision: d11aff97d2df15a076d285f6ad18da75c0d75ddd
channel: beta
project_type: app
# Tracks metadata for the flutter migrate command
migration:
platforms:
- platform: root
create_revision: d11aff97d2df15a076d285f6ad18da75c0d75ddd
base_revision: d11aff97d2df15a076d285f6ad18da75c0d75ddd
- platform: android
create_revision: d11aff97d2df15a076d285f6ad18da75c0d75ddd
base_revision: d11aff97d2df15a076d285f6ad18da75c0d75ddd
- platform: ios
create_revision: d11aff97d2df15a076d285f6ad18da75c0d75ddd
base_revision: d11aff97d2df15a076d285f6ad18da75c0d75ddd
- platform: linux
create_revision: d11aff97d2df15a076d285f6ad18da75c0d75ddd
base_revision: d11aff97d2df15a076d285f6ad18da75c0d75ddd
- platform: macos
create_revision: d11aff97d2df15a076d285f6ad18da75c0d75ddd
base_revision: d11aff97d2df15a076d285f6ad18da75c0d75ddd
- platform: web
create_revision: d11aff97d2df15a076d285f6ad18da75c0d75ddd
base_revision: d11aff97d2df15a076d285f6ad18da75c0d75ddd
- platform: windows
create_revision: d11aff97d2df15a076d285f6ad18da75c0d75ddd
base_revision: d11aff97d2df15a076d285f6ad18da75c0d75ddd
# User provided section
# List of Local paths (relative to this file) that should be
# ignored by the migrate tool.
#
# Files that are not part of the templates will be ignored by default.
unmanaged_files:
- 'lib/main.dart'
- 'ios/Runner.xcodeproj/project.pbxproj'

View File

@@ -1,64 +0,0 @@
# AutoGPT Flutter Client
## Description
This repository contains the Flutter client for the AutoGPT project. The application facilitates users in discussing various tasks with a single agent. The app is built to be cross-platform and runs on Web, Android, iOS, Windows, and Mac.
## Features
- List and manage multiple tasks.
- Engage in chat conversations related to selected tasks.
## Design document
The design document for this project provides a detailed outline of the architecture, components, and other important aspects of this application. Please note that this is a living, growing document and it is subject to change as the project evolves.
You can access the design document [here](https://docs.google.com/document/d/1S-o2np1gq5JwFq40wPHDUVLi-mylz4WMvCB8psOUjc8/).
## Requirements
- Flutter 3.x
- Dart 3.x
Flutter comes with Dart, to install Flutter, follow the instructions here: https://docs.flutter.dev/get-started/install
## Installation
1. **Clone the repo:**
```
git clone https://github.com/Significant-Gravitas/AutoGPT.git
```
2. **Navigate to the project directory:**
```
cd AutoGPT/frontend
```
3. **Get Flutter packages:**
```
flutter pub get
```
4. **Run the app:**
```
#For chromium users on linux:
#export CHROME_EXECUTABLE=/usr/bin/chromium
flutter run -d chrome --web-port 5000
```
## Project Structure
- `lib/`: Contains the main source code for the application.
- `models/`: Data models that define the structure of the objects used in the app.
- `views/`: The UI components of the application.
- `viewmodels/`: The business logic and data handling for the views.
- `services/`: Contains the service classes that handle communication with backend APIs and other external data sources. These services are used to fetch and update data that the app uses, and they are consumed by the ViewModels.
- `test/`: Contains the test files for unit and widget tests.
## Responsive Design
The app features a responsive design that adapts to different screen sizes and orientations. On larger screens (Web, Windows, Mac), views are displayed side by side horizontally. On smaller screens (Android, iOS), views are displayed in a tab bar controller layout.
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

View File

@@ -1,29 +0,0 @@
# This file configures the analyzer, which statically analyzes Dart code to
# check for errors, warnings, and lints.
#
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
# invoked from the command line by running `flutter analyze`.
# The following line activates a set of recommended lints for Flutter apps,
# packages, and plugins designed to encourage good coding practices.
include: package:flutter_lints/flutter.yaml
linter:
# The lint rules applied to this project can be customized in the
# section below to disable rules from the `package:flutter_lints/flutter.yaml`
# included above or to enable additional rules. A list of all available lints
# and their documentation is published at
# https://dart-lang.github.io/linter/lints/index.html.
#
# Instead of disabling a lint rule for the entire project in the
# section below, it can also be suppressed for a single line of code
# or a specific dart file by using the `// ignore: name_of_lint` and
# `// ignore_for_file: name_of_lint` syntax on the line or in the file
# producing the lint.
rules:
# avoid_print: false # Uncomment to disable the `avoid_print` rule
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
# Additional information about this file can be found at
# https://dart.dev/guides/language/analysis-options

View File

@@ -1,13 +0,0 @@
gradle-wrapper.jar
/.gradle
/captures/
/gradlew
/gradlew.bat
/local.properties
GeneratedPluginRegistrant.java
# Remember to never publicly share your keystore.
# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
key.properties
**/*.keystore
**/*.jks

View File

@@ -1,72 +0,0 @@
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '1.0'
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
namespace "com.example.auto_gpt_flutter_client"
compileSdkVersion flutter.compileSdkVersion
ndkVersion flutter.ndkVersion
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.example.auto_gpt_flutter_client"
// You can update the following values to match your application needs.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
minSdkVersion flutter.minSdkVersion
targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.debug
}
}
}
flutter {
source '../..'
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}

View File

@@ -1,39 +0,0 @@
{
"project_info": {
"project_number": "387936576242",
"project_id": "prod-auto-gpt",
"storage_bucket": "prod-auto-gpt.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:387936576242:android:dad0614943c3242ad7a66b",
"android_client_info": {
"package_name": "com.example.auto_gpt_flutter_client"
}
},
"oauth_client": [
{
"client_id": "387936576242-iejdacrjljds7hf99q0p6eqna8rju3sb.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyBvDJ9m38ZgRGquV3ZoTaldQTFCxFHdkiI"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "387936576242-9a68qea5415i71e4mk545pdee92k9kfo.apps.googleusercontent.com",
"client_type": 3
}
]
}
}
}
],
"configuration_version": "1"
}

View File

@@ -1,7 +0,0 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>

View File

@@ -1,33 +0,0 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:label="auto_gpt_flutter_client"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<!-- Specifies an Android theme to apply to this Activity as soon as
the Android process has started. This theme is visible to the user
while the Flutter UI initializes. After that, this theme continues
to determine the Window background behind the Flutter UI. -->
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"
/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</application>
</manifest>

View File

@@ -1,6 +0,0 @@
package com.example.auto_gpt_flutter_client
import io.flutter.embedding.android.FlutterActivity
class MainActivity: FlutterActivity() {
}

View File

@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="?android:colorBackground" />
<!-- You can insert your own image assets here -->
<!-- <item>
<bitmap
android:gravity="center"
android:src="@mipmap/launch_image" />
</item> -->
</layer-list>

View File

@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/white" />
<!-- You can insert your own image assets here -->
<!-- <item>
<bitmap
android:gravity="center"
android:src="@mipmap/launch_image" />
</item> -->
</layer-list>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 544 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 442 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 721 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -1,18 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
the Flutter engine draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>

View File

@@ -1,18 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
the Flutter engine draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>

View File

@@ -1,7 +0,0 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>

View File

@@ -1,31 +0,0 @@
buildscript {
ext.kotlin_version = '1.7.10'
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.3.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(':app')
}
tasks.register("clean", Delete) {
delete rootProject.buildDir
}

View File

@@ -1,3 +0,0 @@
org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true

View File

@@ -1,5 +0,0 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip

View File

@@ -1,11 +0,0 @@
include ':app'
def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
def properties = new Properties()
assert localPropertiesFile.exists()
localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
def flutterSdkPath = properties.getProperty("flutter.sdk")
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"

File diff suppressed because one or more lines are too long

View File

@@ -1,360 +0,0 @@
{
"edges": [
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestWriteFile::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestWriteFile::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestReadFile::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestReadFile::test_method[challenge_data0]"
},
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestAnswerQuestionSmallCsv::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestAnswerQuestionSmallCsv::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestAnswerQuestionCsv::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestAnswerQuestionCsv::test_method[challenge_data0]"
},
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestReadFile::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestReadFile::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestAnswerQuestionSmallCsv::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestAnswerQuestionSmallCsv::test_method[challenge_data0]"
},
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestAnswerQuestionCsv::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestAnswerQuestionCsv::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestAnswerQuestionCombineCsv::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestAnswerQuestionCombineCsv::test_method[challenge_data0]"
},
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestCombineCsv::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestCombineCsv::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestAnswerQuestionCombineCsv::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestAnswerQuestionCombineCsv::test_method[challenge_data0]"
},
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestLabelCsv::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestLabelCsv::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestCombineCsv::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestCombineCsv::test_method[challenge_data0]"
},
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestSortCsv::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestSortCsv::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestLabelCsv::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestLabelCsv::test_method[challenge_data0]"
},
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestReadFile::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestReadFile::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestSortCsv::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestSortCsv::test_method[challenge_data0]"
}
],
"nodes": [
{
"color": "grey",
"data": {
"category": [
"general",
"coding",
"scrape_synthesize",
"data"
],
"cutoff": 60,
"dependencies": [
"TestWriteFile"
],
"eval_id": "f219f3d3-a41b-45a9-a3d0-389832086ee8",
"ground": {
"answer": "The content of output.txt should be 'Hello World!'",
"eval": {
"type": "file"
},
"files": [
"output.txt"
],
"should_contain": [
"Hello World!"
]
},
"info": {
"description": "Tests if the agent can read a file.",
"difficulty": "interface",
"side_effects": [
""
]
},
"name": "TestReadFile",
"task": "Read the file called file_to_read.txt and write its content to a file called output.txt"
},
"id": "agbenchmark/generate_test.py::TestReadFile::test_method[challenge_data0]",
"label": "ReadFile",
"shape": "dot"
},
{
"color": "grey",
"data": {
"category": [
"general",
"coding",
"scrape_synthesize",
"data"
],
"cutoff": 60,
"dependencies": [],
"eval_id": "021c695a-6cc4-46c2-b93a-f3a9b0f4d123",
"ground": {
"answer": "The word 'Washington', printed to a .txt file named anything",
"eval": {
"type": "file"
},
"files": [
".txt"
],
"should_contain": [
"Washington"
],
"should_not_contain": []
},
"info": {
"description": "Tests if the agent can write a file",
"difficulty": "interface",
"side_effects": [
""
]
},
"name": "TestWriteFile",
"task": "Write the word 'Washington' to a .txt file"
},
"id": "agbenchmark/generate_test.py::TestWriteFile::test_method[challenge_data0]",
"label": "WriteFile",
"shape": "dot"
},
{
"color": "grey",
"data": {
"category": [
"data"
],
"cutoff": 90,
"dependencies": [
"TestAnswerQuestionSmallCsv"
],
"eval_id": "bb6e0a4b-7faf-4aa6-a524-548cddbc2732",
"ground": {
"answer": "The correct amount spent on utilities.",
"eval": {
"type": "file"
},
"files": [
"output.txt"
],
"should_contain": [
"1861"
]
},
"info": {
"description": "Tests if the agent can answer a question from a csv",
"difficulty": "intermediate",
"side_effects": [
""
]
},
"name": "TestAnswerQuestionCsv",
"task": "How much was spent on utilities in total ? Write the answer in an output.txt file."
},
"id": "agbenchmark/generate_test.py::TestAnswerQuestionCsv::test_method[challenge_data0]",
"label": "AnswerQuestionCsv",
"shape": "dot"
},
{
"color": "grey",
"data": {
"category": [
"data",
"general"
],
"cutoff": 60,
"dependencies": [
"TestReadFile"
],
"eval_id": "9df3f07a-5047-488f-b788-1e1f57eba970",
"ground": {
"answer": "The correct amount spent on utilities.",
"eval": {
"type": "file"
},
"files": [
"output.txt"
],
"should_contain": [
"84"
]
},
"info": {
"description": "Tests if the agent can answer a question from a small csv",
"difficulty": "intermediate",
"side_effects": [
""
]
},
"name": "TestAnswerQuestionSmallCsv",
"task": "How much was spent on utilities in total ? Write the answer in an output.txt file."
},
"id": "agbenchmark/generate_test.py::TestAnswerQuestionSmallCsv::test_method[challenge_data0]",
"label": "AnswerQuestionSmallCsv",
"shape": "dot"
},
{
"color": "grey",
"data": {
"category": [
"data",
"general"
],
"cutoff": 120,
"dependencies": [
"TestAnswerQuestionCsv",
"TestCombineCsv"
],
"eval_id": "b1bb61cd-3d09-4a69-bb2a-9dbb3c477589",
"ground": {
"answer": "The correct amount spent on utilities.",
"eval": {
"type": "file"
},
"files": [
"output.txt"
],
"should_contain": [
"1861"
]
},
"info": {
"description": "Tests if the agent can answer a question from a csv",
"difficulty": "intermediate",
"side_effects": [
""
]
},
"name": "TestAnswerQuestionCombineCsv",
"task": "How much was spent on utilities in total ? Write the answer in an output.txt file."
},
"id": "agbenchmark/generate_test.py::TestAnswerQuestionCombineCsv::test_method[challenge_data0]",
"label": "AnswerQuestionCombineCsv",
"shape": "dot"
},
{
"color": "grey",
"data": {
"category": [
"data",
"general"
],
"cutoff": 60,
"dependencies": [
"TestLabelCsv"
],
"eval_id": "52467beb-b951-4356-9776-9a0ae46bb33b",
"ground": {
"answer": "The csv data is combined",
"eval": {
"type": "file"
},
"files": [
"output.csv"
],
"should_contain": [
"Age,ID,Name,Occupation,Salary\n28,101,John,Engineer,80000\n34,102,Alice,Doctor,120000\n45,103,Bob,Lawyer,95000"
]
},
"info": {
"description": "Tests if the agent can combine data from a csv",
"difficulty": "intermediate",
"side_effects": [
""
]
},
"name": "TestCombineCsv",
"task": "The csvs 'file1.csv' and 'file2.csv' both have a column 'ID'. Combine these 2 csvs using the 'ID' column. Sort the rows by ID in ascending order and the columns alphabetically. Write the output in output.csv"
},
"id": "agbenchmark/generate_test.py::TestCombineCsv::test_method[challenge_data0]",
"label": "CombineCsv",
"shape": "dot"
},
{
"color": "grey",
"data": {
"category": [
"data"
],
"cutoff": 60,
"dependencies": [
"TestSortCsv"
],
"eval_id": "6e2bf1f0-6842-4704-8ed1-b17c2065bbac",
"ground": {
"answer": "The csv labelled",
"eval": {
"type": "file"
},
"files": [
"output.csv"
],
"should_contain": [
"Item,Color\nBanana,yellow\nLeaf,green\nSky,blue\nSunflower,yellow\nGrass,green\nJeans,blue\nLemon,yellow\nTree,green\nOcean,blue\nDaisy,yellow\nFern,green"
]
},
"info": {
"description": "Tests if the agent can label data in a csv",
"difficulty": "basic",
"side_effects": [
""
]
},
"name": "TestLabelCsv",
"task": "The csv 'input.csv' has many items. create a 'Color' column for these items and classify them as either 'blue', 'green', or 'yellow' depending on what the most likely color is. Preserve the order of the rows. The color column should be the second column. Write the output in output.csv"
},
"id": "agbenchmark/generate_test.py::TestLabelCsv::test_method[challenge_data0]",
"label": "LabelCsv",
"shape": "dot"
},
{
"color": "grey",
"data": {
"category": [
"data",
"general"
],
"cutoff": 60,
"dependencies": [
"TestReadFile"
],
"eval_id": "d59ec964-6f67-4b3d-a4de-c4436fc76f95",
"ground": {
"answer": "The csv sorted by date",
"eval": {
"type": "file"
},
"files": [
"output.csv"
],
"should_contain": [
"id,name,timestamp\n1,Bob,2023-09-24 12:05:00\n2,Charlie,2023-09-24 12:10:00\n3,Alice,2023-09-25 14:10:00\n4,David,2023-09-26 16:20:00"
]
},
"info": {
"description": "Tests if the agent can sort a csv",
"difficulty": "basic",
"side_effects": [
""
]
},
"name": "TestSortCsv",
"task": "Sort the input.csv by the 'timestamp' column and write the new csv in the output.csv file. The order of the columns should be preserved."
},
"id": "agbenchmark/generate_test.py::TestSortCsv::test_method[challenge_data0]",
"label": "SortCsv",
"shape": "dot"
}
]
}

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -1,375 +0,0 @@
{
"edges": [
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestWriteFile::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestWriteFile::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestReadFile::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestReadFile::test_method[challenge_data0]"
},
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestSearch::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestSearch::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestBasicRetrieval::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestBasicRetrieval::test_method[challenge_data0]"
},
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestWriteFile::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestWriteFile::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestSearch::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestSearch::test_method[challenge_data0]"
},
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestRevenueRetrieval2::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestRevenueRetrieval2::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestTestGetInformation::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestTestGetInformation::test_method[challenge_data0]"
},
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestRevenueRetrieval::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestRevenueRetrieval::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestRevenueRetrieval2::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestRevenueRetrieval2::test_method[challenge_data0]"
},
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestBasicRetrieval::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestBasicRetrieval::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestRevenueRetrieval::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestRevenueRetrieval::test_method[challenge_data0]"
},
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestReadFile::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestReadFile::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestSynthesizeInfo::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestSynthesizeInfo::test_method[challenge_data0]"
}
],
"nodes": [
{
"color": "grey",
"data": {
"category": [
"general",
"coding",
"scrape_synthesize",
"data"
],
"cutoff": 60,
"dependencies": [
"TestWriteFile"
],
"eval_id": "f219f3d3-a41b-45a9-a3d0-389832086ee8",
"ground": {
"answer": "The content of output.txt should be 'Hello World!'",
"eval": {
"type": "file"
},
"files": [
"output.txt"
],
"should_contain": [
"Hello World!"
]
},
"info": {
"description": "Tests if the agent can read a file.",
"difficulty": "interface",
"side_effects": [
""
]
},
"name": "TestReadFile",
"task": "Read the file called file_to_read.txt and write its content to a file called output.txt"
},
"id": "agbenchmark/generate_test.py::TestReadFile::test_method[challenge_data0]",
"label": "ReadFile",
"shape": "dot"
},
{
"color": "grey",
"data": {
"category": [
"general",
"coding",
"scrape_synthesize",
"data"
],
"cutoff": 60,
"dependencies": [],
"eval_id": "021c695a-6cc4-46c2-b93a-f3a9b0f4d123",
"ground": {
"answer": "The word 'Washington', printed to a .txt file named anything",
"eval": {
"type": "file"
},
"files": [
".txt"
],
"should_contain": [
"Washington"
],
"should_not_contain": []
},
"info": {
"description": "Tests if the agent can write a file",
"difficulty": "interface",
"side_effects": [
""
]
},
"name": "TestWriteFile",
"task": "Write the word 'Washington' to a .txt file"
},
"id": "agbenchmark/generate_test.py::TestWriteFile::test_method[challenge_data0]",
"label": "WriteFile",
"shape": "dot"
},
{
"color": "grey",
"data": {
"category": [
"scrape_synthesize",
"general"
],
"cutoff": 60,
"dependencies": [
"TestSearch"
],
"eval_id": "cd96e6b2-779d-4a4a-8367-d520023e27ae",
"ground": {
"answer": "\u00a325.89",
"eval": {
"type": "file"
},
"files": [
".txt"
],
"should_contain": [
"25.89"
],
"should_not_contain": []
},
"info": {
"description": "Tests if the agent can retrieve a specific information from a website.",
"difficulty": "basic",
"side_effects": []
},
"name": "TestBasicRetrieval",
"task": "Write the price of the book in this url 'http://books.toscrape.com/catalogue/meditations_33/index.html' to a .txt file."
},
"id": "agbenchmark/generate_test.py::TestBasicRetrieval::test_method[challenge_data0]",
"label": "BasicRetrieval",
"shape": "dot"
},
{
"color": "grey",
"data": {
"category": [
"general",
"scrape_synthesize"
],
"cutoff": 120,
"dependencies": [
"TestWriteFile"
],
"eval_id": "0bb23182-b434-402b-a73e-9c226469b959",
"ground": {
"answer": "This is a Heading\nThis is a paragraph.",
"eval": {
"type": "file"
},
"files": [
".txt"
],
"should_contain": [
"Heading",
"paragraph"
],
"should_not_contain": [
"The",
"the"
]
},
"info": {
"description": "Tests if the agent can search.",
"difficulty": "interface",
"side_effects": [
""
]
},
"name": "TestSearch",
"task": "Open 'https://silennaihin.com/random/plain.html' and paste all of the text on the page in a .txt file"
},
"id": "agbenchmark/generate_test.py::TestSearch::test_method[challenge_data0]",
"label": "Search",
"shape": "dot"
},
{
"color": "grey",
"data": {
"category": [
"scrape_synthesize",
"general"
],
"cutoff": 60,
"dependencies": [
"TestRevenueRetrieval2"
],
"eval_id": "1758058c-f726-484f-96fa-f05e278e5ff5",
"ground": {
"answer": "The twitter handles of the two hosts of Latent Space.",
"eval": {
"type": "file"
},
"files": [
"output.txt"
],
"should_contain": [
"swyx",
"FanaHOVA"
],
"should_not_contain": []
},
"info": {
"description": "Tests if the agent can retrieve twitter handles given a vague description.",
"difficulty": "intermediate",
"side_effects": [
""
]
},
"name": "TestTestGetInformation",
"task": "Write the twitter handle of the two hosts of Latent Space to a file called output.txt"
},
"id": "agbenchmark/generate_test.py::TestTestGetInformation::test_method[challenge_data0]",
"label": "TestGetInformation",
"shape": "dot"
},
{
"color": "grey",
"data": {
"category": [
"scrape_synthesize"
],
"cutoff": 60,
"dependencies": [
"TestRevenueRetrieval"
],
"eval_id": "552bdf23-db40-4bd1-b123-4ed820886cc1",
"ground": {
"answer": "15 Millions\n112 Millions\n117 Millions\n204 Millions\n413 Millions\n2,014 Millions\n3,198 Millions\n4,046 Millions\n7,000 Millions\n11,759 Millions\n21,461 Millions\n24,578 Millions\n31,536 Millions\n53,823 Millions\n81,462 Millions",
"eval": {
"type": "file"
},
"files": [
".txt"
],
"should_contain": [
"15",
"112",
"117",
"204",
"413",
"2,014",
"3,198",
"4,046",
"7,000",
"11,759",
"21,461",
"24,578",
"31,536",
"53,823",
"81,462"
],
"should_not_contain": []
},
"info": {
"description": "Tests if the agent can retrieve all the revenues of Tesla since its creation.",
"difficulty": "intermediate",
"side_effects": [
"tests if there is in fact an LLM attached"
]
},
"name": "TestRevenueRetrieval2",
"task": "Write tesla's revenue every year since its creation into a .txt file. Use the US notation, with a precision rounded to the nearest million dollars (for instance, $31,578 million)."
},
"id": "agbenchmark/generate_test.py::TestRevenueRetrieval2::test_method[challenge_data0]",
"label": "RevenueRetrieval2",
"shape": "dot"
},
{
"color": "grey",
"data": {
"category": [
"scrape_synthesize",
"general"
],
"cutoff": 60,
"dependencies": [
"TestBasicRetrieval"
],
"eval_id": "dc2114d7-1597-4c9b-bed0-a97937ad977f",
"ground": {
"answer": "It was $81.462 billion in 2022. In millions the answer is 81,462.",
"eval": {
"type": "file"
},
"files": [
".txt"
],
"should_contain": [
"81,462"
],
"should_not_contain": []
},
"info": {
"description": "Tests if the agent can retrieve Tesla's revenue in 2022.",
"difficulty": "intermediate",
"side_effects": []
},
"name": "TestRevenueRetrieval",
"task": "Write tesla's exact revenue in 2022 into a .txt file. Use the US notation, with a precision rounded to the nearest million dollars (for instance, $31,578 million)."
},
"id": "agbenchmark/generate_test.py::TestRevenueRetrieval::test_method[challenge_data0]",
"label": "RevenueRetrieval",
"shape": "dot"
},
{
"color": "grey",
"data": {
"category": [
"scrape_synthesize",
"general"
],
"cutoff": 240,
"dependencies": [
"TestReadFile"
],
"eval_id": "895ae28a-4513-44ea-a872-0164771d1597",
"ground": {
"answer": "A report highlighting elements from the 2 files.",
"eval": {
"scoring": "binary",
"template": "question",
"type": "llm"
},
"files": [
"output.txt"
],
"should_contain": [
"Is the company mentioned in the output actively addressing or capitalizing on the challenges or trends listed?"
],
"should_not_contain": []
},
"info": {
"description": "Tests if the agent can generate content based on the content of 2 files.",
"difficulty": "basic",
"side_effects": []
},
"name": "TestSynthesizeInfo",
"task": "Create a brief report or summary highlighting how one or more companies from companies.txt are addressing or capitalizing on challenges or trends from challenges.txt. Write a file called output.txt."
},
"id": "agbenchmark/generate_test.py::TestSynthesizeInfo::test_method[challenge_data0]",
"label": "SynthesizeInfo",
"shape": "dot"
}
]
}

File diff suppressed because one or more lines are too long

View File

@@ -1,3 +0,0 @@
#!/bin/bash
flutter build web --base-href /app/

View File

@@ -1 +0,0 @@
6abcb290e8313be91f131a45ee22b413

View File

@@ -1 +0,0 @@

View File

@@ -1 +0,0 @@
{"assets/coding_tree_structure.json":["assets/coding_tree_structure.json"],"assets/data_tree_structure.json":["assets/data_tree_structure.json"],"assets/general_tree_structure.json":["assets/general_tree_structure.json"],"assets/images/autogpt_logo.png":["assets/images/autogpt_logo.png"],"assets/images/discord_logo.png":["assets/images/discord_logo.png"],"assets/images/github_logo.svg.png":["assets/images/github_logo.svg.png"],"assets/images/google_logo.svg.png":["assets/images/google_logo.svg.png"],"assets/images/twitter_logo.png":["assets/images/twitter_logo.png"],"assets/scrape_synthesize_tree_structure.json":["assets/scrape_synthesize_tree_structure.json"],"assets/tree_structure.json":["assets/tree_structure.json"],"packages/cupertino_icons/assets/CupertinoIcons.ttf":["packages/cupertino_icons/assets/CupertinoIcons.ttf"],"packages/fluttertoast/assets/toastify.css":["packages/fluttertoast/assets/toastify.css"],"packages/fluttertoast/assets/toastify.js":["packages/fluttertoast/assets/toastify.js"]}

View File

@@ -1 +0,0 @@
[{"family":"MaterialIcons","fonts":[{"asset":"fonts/MaterialIcons-Regular.otf"}]},{"family":"packages/cupertino_icons/CupertinoIcons","fonts":[{"asset":"packages/cupertino_icons/assets/CupertinoIcons.ttf"}]}]

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -1,360 +0,0 @@
{
"edges": [
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestWriteFile::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestWriteFile::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestReadFile::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestReadFile::test_method[challenge_data0]"
},
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestAnswerQuestionSmallCsv::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestAnswerQuestionSmallCsv::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestAnswerQuestionCsv::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestAnswerQuestionCsv::test_method[challenge_data0]"
},
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestReadFile::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestReadFile::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestAnswerQuestionSmallCsv::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestAnswerQuestionSmallCsv::test_method[challenge_data0]"
},
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestAnswerQuestionCsv::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestAnswerQuestionCsv::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestAnswerQuestionCombineCsv::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestAnswerQuestionCombineCsv::test_method[challenge_data0]"
},
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestCombineCsv::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestCombineCsv::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestAnswerQuestionCombineCsv::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestAnswerQuestionCombineCsv::test_method[challenge_data0]"
},
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestLabelCsv::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestLabelCsv::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestCombineCsv::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestCombineCsv::test_method[challenge_data0]"
},
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestSortCsv::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestSortCsv::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestLabelCsv::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestLabelCsv::test_method[challenge_data0]"
},
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestReadFile::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestReadFile::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestSortCsv::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestSortCsv::test_method[challenge_data0]"
}
],
"nodes": [
{
"color": "grey",
"data": {
"category": [
"general",
"coding",
"scrape_synthesize",
"data"
],
"cutoff": 60,
"dependencies": [
"TestWriteFile"
],
"eval_id": "f219f3d3-a41b-45a9-a3d0-389832086ee8",
"ground": {
"answer": "The content of output.txt should be 'Hello World!'",
"eval": {
"type": "file"
},
"files": [
"output.txt"
],
"should_contain": [
"Hello World!"
]
},
"info": {
"description": "Tests if the agent can read a file.",
"difficulty": "interface",
"side_effects": [
""
]
},
"name": "TestReadFile",
"task": "Read the file called file_to_read.txt and write its content to a file called output.txt"
},
"id": "agbenchmark/generate_test.py::TestReadFile::test_method[challenge_data0]",
"label": "ReadFile",
"shape": "dot"
},
{
"color": "grey",
"data": {
"category": [
"general",
"coding",
"scrape_synthesize",
"data"
],
"cutoff": 60,
"dependencies": [],
"eval_id": "021c695a-6cc4-46c2-b93a-f3a9b0f4d123",
"ground": {
"answer": "The word 'Washington', printed to a .txt file named anything",
"eval": {
"type": "file"
},
"files": [
".txt"
],
"should_contain": [
"Washington"
],
"should_not_contain": []
},
"info": {
"description": "Tests if the agent can write a file",
"difficulty": "interface",
"side_effects": [
""
]
},
"name": "TestWriteFile",
"task": "Write the word 'Washington' to a .txt file"
},
"id": "agbenchmark/generate_test.py::TestWriteFile::test_method[challenge_data0]",
"label": "WriteFile",
"shape": "dot"
},
{
"color": "grey",
"data": {
"category": [
"data"
],
"cutoff": 90,
"dependencies": [
"TestAnswerQuestionSmallCsv"
],
"eval_id": "bb6e0a4b-7faf-4aa6-a524-548cddbc2732",
"ground": {
"answer": "The correct amount spent on utilities.",
"eval": {
"type": "file"
},
"files": [
"output.txt"
],
"should_contain": [
"1861"
]
},
"info": {
"description": "Tests if the agent can answer a question from a csv",
"difficulty": "intermediate",
"side_effects": [
""
]
},
"name": "TestAnswerQuestionCsv",
"task": "How much was spent on utilities in total ? Write the answer in an output.txt file."
},
"id": "agbenchmark/generate_test.py::TestAnswerQuestionCsv::test_method[challenge_data0]",
"label": "AnswerQuestionCsv",
"shape": "dot"
},
{
"color": "grey",
"data": {
"category": [
"data",
"general"
],
"cutoff": 60,
"dependencies": [
"TestReadFile"
],
"eval_id": "9df3f07a-5047-488f-b788-1e1f57eba970",
"ground": {
"answer": "The correct amount spent on utilities.",
"eval": {
"type": "file"
},
"files": [
"output.txt"
],
"should_contain": [
"84"
]
},
"info": {
"description": "Tests if the agent can answer a question from a small csv",
"difficulty": "intermediate",
"side_effects": [
""
]
},
"name": "TestAnswerQuestionSmallCsv",
"task": "How much was spent on utilities in total ? Write the answer in an output.txt file."
},
"id": "agbenchmark/generate_test.py::TestAnswerQuestionSmallCsv::test_method[challenge_data0]",
"label": "AnswerQuestionSmallCsv",
"shape": "dot"
},
{
"color": "grey",
"data": {
"category": [
"data",
"general"
],
"cutoff": 120,
"dependencies": [
"TestAnswerQuestionCsv",
"TestCombineCsv"
],
"eval_id": "b1bb61cd-3d09-4a69-bb2a-9dbb3c477589",
"ground": {
"answer": "The correct amount spent on utilities.",
"eval": {
"type": "file"
},
"files": [
"output.txt"
],
"should_contain": [
"1861"
]
},
"info": {
"description": "Tests if the agent can answer a question from a csv",
"difficulty": "intermediate",
"side_effects": [
""
]
},
"name": "TestAnswerQuestionCombineCsv",
"task": "How much was spent on utilities in total ? Write the answer in an output.txt file."
},
"id": "agbenchmark/generate_test.py::TestAnswerQuestionCombineCsv::test_method[challenge_data0]",
"label": "AnswerQuestionCombineCsv",
"shape": "dot"
},
{
"color": "grey",
"data": {
"category": [
"data",
"general"
],
"cutoff": 60,
"dependencies": [
"TestLabelCsv"
],
"eval_id": "52467beb-b951-4356-9776-9a0ae46bb33b",
"ground": {
"answer": "The csv data is combined",
"eval": {
"type": "file"
},
"files": [
"output.csv"
],
"should_contain": [
"Age,ID,Name,Occupation,Salary\n28,101,John,Engineer,80000\n34,102,Alice,Doctor,120000\n45,103,Bob,Lawyer,95000"
]
},
"info": {
"description": "Tests if the agent can combine data from a csv",
"difficulty": "intermediate",
"side_effects": [
""
]
},
"name": "TestCombineCsv",
"task": "The csvs 'file1.csv' and 'file2.csv' both have a column 'ID'. Combine these 2 csvs using the 'ID' column. Sort the rows by ID in ascending order and the columns alphabetically. Write the output in output.csv"
},
"id": "agbenchmark/generate_test.py::TestCombineCsv::test_method[challenge_data0]",
"label": "CombineCsv",
"shape": "dot"
},
{
"color": "grey",
"data": {
"category": [
"data"
],
"cutoff": 60,
"dependencies": [
"TestSortCsv"
],
"eval_id": "6e2bf1f0-6842-4704-8ed1-b17c2065bbac",
"ground": {
"answer": "The csv labelled",
"eval": {
"type": "file"
},
"files": [
"output.csv"
],
"should_contain": [
"Item,Color\nBanana,yellow\nLeaf,green\nSky,blue\nSunflower,yellow\nGrass,green\nJeans,blue\nLemon,yellow\nTree,green\nOcean,blue\nDaisy,yellow\nFern,green"
]
},
"info": {
"description": "Tests if the agent can label data in a csv",
"difficulty": "basic",
"side_effects": [
""
]
},
"name": "TestLabelCsv",
"task": "The csv 'input.csv' has many items. create a 'Color' column for these items and classify them as either 'blue', 'green', or 'yellow' depending on what the most likely color is. Preserve the order of the rows. The color column should be the second column. Write the output in output.csv"
},
"id": "agbenchmark/generate_test.py::TestLabelCsv::test_method[challenge_data0]",
"label": "LabelCsv",
"shape": "dot"
},
{
"color": "grey",
"data": {
"category": [
"data",
"general"
],
"cutoff": 60,
"dependencies": [
"TestReadFile"
],
"eval_id": "d59ec964-6f67-4b3d-a4de-c4436fc76f95",
"ground": {
"answer": "The csv sorted by date",
"eval": {
"type": "file"
},
"files": [
"output.csv"
],
"should_contain": [
"id,name,timestamp\n1,Bob,2023-09-24 12:05:00\n2,Charlie,2023-09-24 12:10:00\n3,Alice,2023-09-25 14:10:00\n4,David,2023-09-26 16:20:00"
]
},
"info": {
"description": "Tests if the agent can sort a csv",
"difficulty": "basic",
"side_effects": [
""
]
},
"name": "TestSortCsv",
"task": "Sort the input.csv by the 'timestamp' column and write the new csv in the output.csv file. The order of the columns should be preserved."
},
"id": "agbenchmark/generate_test.py::TestSortCsv::test_method[challenge_data0]",
"label": "SortCsv",
"shape": "dot"
}
]
}

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -1,375 +0,0 @@
{
"edges": [
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestWriteFile::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestWriteFile::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestReadFile::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestReadFile::test_method[challenge_data0]"
},
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestSearch::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestSearch::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestBasicRetrieval::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestBasicRetrieval::test_method[challenge_data0]"
},
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestWriteFile::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestWriteFile::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestSearch::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestSearch::test_method[challenge_data0]"
},
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestRevenueRetrieval2::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestRevenueRetrieval2::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestTestGetInformation::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestTestGetInformation::test_method[challenge_data0]"
},
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestRevenueRetrieval::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestRevenueRetrieval::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestRevenueRetrieval2::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestRevenueRetrieval2::test_method[challenge_data0]"
},
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestBasicRetrieval::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestBasicRetrieval::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestRevenueRetrieval::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestRevenueRetrieval::test_method[challenge_data0]"
},
{
"arrows": "to",
"from": "agbenchmark/generate_test.py::TestReadFile::test_method[challenge_data0]",
"id": "agbenchmark/generate_test.py::TestReadFile::test_method[challenge_data0]_to_agbenchmark/generate_test.py::TestSynthesizeInfo::test_method[challenge_data0]",
"to": "agbenchmark/generate_test.py::TestSynthesizeInfo::test_method[challenge_data0]"
}
],
"nodes": [
{
"color": "grey",
"data": {
"category": [
"general",
"coding",
"scrape_synthesize",
"data"
],
"cutoff": 60,
"dependencies": [
"TestWriteFile"
],
"eval_id": "f219f3d3-a41b-45a9-a3d0-389832086ee8",
"ground": {
"answer": "The content of output.txt should be 'Hello World!'",
"eval": {
"type": "file"
},
"files": [
"output.txt"
],
"should_contain": [
"Hello World!"
]
},
"info": {
"description": "Tests if the agent can read a file.",
"difficulty": "interface",
"side_effects": [
""
]
},
"name": "TestReadFile",
"task": "Read the file called file_to_read.txt and write its content to a file called output.txt"
},
"id": "agbenchmark/generate_test.py::TestReadFile::test_method[challenge_data0]",
"label": "ReadFile",
"shape": "dot"
},
{
"color": "grey",
"data": {
"category": [
"general",
"coding",
"scrape_synthesize",
"data"
],
"cutoff": 60,
"dependencies": [],
"eval_id": "021c695a-6cc4-46c2-b93a-f3a9b0f4d123",
"ground": {
"answer": "The word 'Washington', printed to a .txt file named anything",
"eval": {
"type": "file"
},
"files": [
".txt"
],
"should_contain": [
"Washington"
],
"should_not_contain": []
},
"info": {
"description": "Tests if the agent can write a file",
"difficulty": "interface",
"side_effects": [
""
]
},
"name": "TestWriteFile",
"task": "Write the word 'Washington' to a .txt file"
},
"id": "agbenchmark/generate_test.py::TestWriteFile::test_method[challenge_data0]",
"label": "WriteFile",
"shape": "dot"
},
{
"color": "grey",
"data": {
"category": [
"scrape_synthesize",
"general"
],
"cutoff": 60,
"dependencies": [
"TestSearch"
],
"eval_id": "cd96e6b2-779d-4a4a-8367-d520023e27ae",
"ground": {
"answer": "\u00a325.89",
"eval": {
"type": "file"
},
"files": [
".txt"
],
"should_contain": [
"25.89"
],
"should_not_contain": []
},
"info": {
"description": "Tests if the agent can retrieve a specific information from a website.",
"difficulty": "basic",
"side_effects": []
},
"name": "TestBasicRetrieval",
"task": "Write the price of the book in this url 'http://books.toscrape.com/catalogue/meditations_33/index.html' to a .txt file."
},
"id": "agbenchmark/generate_test.py::TestBasicRetrieval::test_method[challenge_data0]",
"label": "BasicRetrieval",
"shape": "dot"
},
{
"color": "grey",
"data": {
"category": [
"general",
"scrape_synthesize"
],
"cutoff": 120,
"dependencies": [
"TestWriteFile"
],
"eval_id": "0bb23182-b434-402b-a73e-9c226469b959",
"ground": {
"answer": "This is a Heading\nThis is a paragraph.",
"eval": {
"type": "file"
},
"files": [
".txt"
],
"should_contain": [
"Heading",
"paragraph"
],
"should_not_contain": [
"The",
"the"
]
},
"info": {
"description": "Tests if the agent can search.",
"difficulty": "interface",
"side_effects": [
""
]
},
"name": "TestSearch",
"task": "Open 'https://silennaihin.com/random/plain.html' and paste all of the text on the page in a .txt file"
},
"id": "agbenchmark/generate_test.py::TestSearch::test_method[challenge_data0]",
"label": "Search",
"shape": "dot"
},
{
"color": "grey",
"data": {
"category": [
"scrape_synthesize",
"general"
],
"cutoff": 60,
"dependencies": [
"TestRevenueRetrieval2"
],
"eval_id": "1758058c-f726-484f-96fa-f05e278e5ff5",
"ground": {
"answer": "The twitter handles of the two hosts of Latent Space.",
"eval": {
"type": "file"
},
"files": [
"output.txt"
],
"should_contain": [
"swyx",
"FanaHOVA"
],
"should_not_contain": []
},
"info": {
"description": "Tests if the agent can retrieve twitter handles given a vague description.",
"difficulty": "intermediate",
"side_effects": [
""
]
},
"name": "TestTestGetInformation",
"task": "Write the twitter handle of the two hosts of Latent Space to a file called output.txt"
},
"id": "agbenchmark/generate_test.py::TestTestGetInformation::test_method[challenge_data0]",
"label": "TestGetInformation",
"shape": "dot"
},
{
"color": "grey",
"data": {
"category": [
"scrape_synthesize"
],
"cutoff": 60,
"dependencies": [
"TestRevenueRetrieval"
],
"eval_id": "552bdf23-db40-4bd1-b123-4ed820886cc1",
"ground": {
"answer": "15 Millions\n112 Millions\n117 Millions\n204 Millions\n413 Millions\n2,014 Millions\n3,198 Millions\n4,046 Millions\n7,000 Millions\n11,759 Millions\n21,461 Millions\n24,578 Millions\n31,536 Millions\n53,823 Millions\n81,462 Millions",
"eval": {
"type": "file"
},
"files": [
".txt"
],
"should_contain": [
"15",
"112",
"117",
"204",
"413",
"2,014",
"3,198",
"4,046",
"7,000",
"11,759",
"21,461",
"24,578",
"31,536",
"53,823",
"81,462"
],
"should_not_contain": []
},
"info": {
"description": "Tests if the agent can retrieve all the revenues of Tesla since its creation.",
"difficulty": "intermediate",
"side_effects": [
"tests if there is in fact an LLM attached"
]
},
"name": "TestRevenueRetrieval2",
"task": "Write tesla's revenue every year since its creation into a .txt file. Use the US notation, with a precision rounded to the nearest million dollars (for instance, $31,578 million)."
},
"id": "agbenchmark/generate_test.py::TestRevenueRetrieval2::test_method[challenge_data0]",
"label": "RevenueRetrieval2",
"shape": "dot"
},
{
"color": "grey",
"data": {
"category": [
"scrape_synthesize",
"general"
],
"cutoff": 60,
"dependencies": [
"TestBasicRetrieval"
],
"eval_id": "dc2114d7-1597-4c9b-bed0-a97937ad977f",
"ground": {
"answer": "It was $81.462 billion in 2022. In millions the answer is 81,462.",
"eval": {
"type": "file"
},
"files": [
".txt"
],
"should_contain": [
"81,462"
],
"should_not_contain": []
},
"info": {
"description": "Tests if the agent can retrieve Tesla's revenue in 2022.",
"difficulty": "intermediate",
"side_effects": []
},
"name": "TestRevenueRetrieval",
"task": "Write tesla's exact revenue in 2022 into a .txt file. Use the US notation, with a precision rounded to the nearest million dollars (for instance, $31,578 million)."
},
"id": "agbenchmark/generate_test.py::TestRevenueRetrieval::test_method[challenge_data0]",
"label": "RevenueRetrieval",
"shape": "dot"
},
{
"color": "grey",
"data": {
"category": [
"scrape_synthesize",
"general"
],
"cutoff": 240,
"dependencies": [
"TestReadFile"
],
"eval_id": "895ae28a-4513-44ea-a872-0164771d1597",
"ground": {
"answer": "A report highlighting elements from the 2 files.",
"eval": {
"scoring": "binary",
"template": "question",
"type": "llm"
},
"files": [
"output.txt"
],
"should_contain": [
"Is the company mentioned in the output actively addressing or capitalizing on the challenges or trends listed?"
],
"should_not_contain": []
},
"info": {
"description": "Tests if the agent can generate content based on the content of 2 files.",
"difficulty": "basic",
"side_effects": []
},
"name": "TestSynthesizeInfo",
"task": "Create a brief report or summary highlighting how one or more companies from companies.txt are addressing or capitalizing on challenges or trends from challenges.txt. Write a file called output.txt."
},
"id": "agbenchmark/generate_test.py::TestSynthesizeInfo::test_method[challenge_data0]",
"label": "SynthesizeInfo",
"shape": "dot"
}
]
}

File diff suppressed because one or more lines are too long

View File

@@ -1,14 +0,0 @@
/**
* Minified by jsDelivr using clean-css v4.2.3.
* Original file: /npm/toastify-js@1.9.3/src/toastify.css
*
* Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
*/
/*!
* Toastify js 1.9.3
* https://github.com/apvarun/toastify-js
* @license MIT licensed
*
* Copyright (C) 2018 Varun A P
*/
.toastify{padding:12px 20px;color:#fff;display:inline-block;box-shadow:0 3px 6px -1px rgba(0,0,0,.12),0 10px 36px -4px rgba(77,96,232,.3);background:-webkit-linear-gradient(315deg,#73a5ff,#5477f5);background:linear-gradient(135deg,#73a5ff,#5477f5);position:fixed;opacity:0;transition:all .4s cubic-bezier(.215,.61,.355,1);border-radius:2px;cursor:pointer;text-decoration:none;max-width:calc(50% - 20px);z-index:2147483647}.toastify.on{opacity:1}.toast-close{opacity:.4;padding:0 5px}.toastify-right{right:15px}.toastify-left{left:15px}.toastify-top{top:-150px}.toastify-bottom{bottom:-150px}.toastify-rounded{border-radius:25px}.toastify-avatar{width:1.5em;height:1.5em;margin:-7px 5px;border-radius:2px}.toastify-center{margin-left:auto;margin-right:auto;left:0;right:0;max-width:fit-content;max-width:-moz-fit-content}@media only screen and (max-width:360px){.toastify-left,.toastify-right{margin-left:auto;margin-right:auto;left:0;right:0;max-width:fit-content}}

View File

@@ -1,14 +0,0 @@
/**
* Minified by jsDelivr using Terser v5.3.0.
* Original file: /npm/toastify-js@1.9.3/src/toastify.js
*
* Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
*/
/*!
* Toastify js 1.9.3
* https://github.com/apvarun/toastify-js
* @license MIT licensed
*
* Copyright (C) 2018 Varun A P
*/
!function(t,o){"object"==typeof module && module && module.exports?module.exports=o():t.Toastify=o()}(this,(function(t){var o=function(t){return new o.lib.init(t)};function i(t,o){return o.offset[t]?isNaN(o.offset[t])?o.offset[t]:o.offset[t]+"px":"0px"}function s(t,o){return!(!t||"string"!=typeof o)&&!!(t.className&&t.className.trim().split(/\s+/gi).indexOf(o)>-1)}return o.lib=o.prototype={toastify:"1.9.3",constructor:o,init:function(t){return t||(t={}),this.options={},this.toastElement=null,this.options.text=t.text||"Hi there!",this.options.node=t.node,this.options.duration=0===t.duration?0:t.duration||3e3,this.options.selector=t.selector,this.options.callback=t.callback||function(){},this.options.destination=t.destination,this.options.newWindow=t.newWindow||!1,this.options.close=t.close||!1,this.options.gravity="bottom"===t.gravity?"toastify-bottom":"toastify-top",this.options.positionLeft=t.positionLeft||!1,this.options.position=t.position||"",this.options.backgroundColor=t.backgroundColor,this.options.avatar=t.avatar||"",this.options.className=t.className||"",this.options.stopOnFocus=void 0===t.stopOnFocus||t.stopOnFocus,this.options.onClick=t.onClick,this.options.offset=t.offset||{x:0,y:0},this},buildToast:function(){if(!this.options)throw"Toastify is not initialized";var t=document.createElement("div");if(t.className="toastify on "+this.options.className,this.options.position?t.className+=" toastify-"+this.options.position:!0===this.options.positionLeft?(t.className+=" toastify-left",console.warn("Property `positionLeft` will be depreciated in further versions. Please use `position` instead.")):t.className+=" toastify-right",t.className+=" "+this.options.gravity,this.options.backgroundColor&&(t.style.background=this.options.backgroundColor),this.options.node&&this.options.node.nodeType===Node.ELEMENT_NODE)t.appendChild(this.options.node);else if(t.innerHTML=this.options.text,""!==this.options.avatar){var o=document.createElement("img");o.src=this.options.avatar,o.className="toastify-avatar","left"==this.options.position||!0===this.options.positionLeft?t.appendChild(o):t.insertAdjacentElement("afterbegin",o)}if(!0===this.options.close){var s=document.createElement("span");s.innerHTML="&#10006;",s.className="toast-close",s.addEventListener("click",function(t){t.stopPropagation(),this.removeElement(this.toastElement),window.clearTimeout(this.toastElement.timeOutValue)}.bind(this));var n=window.innerWidth>0?window.innerWidth:screen.width;("left"==this.options.position||!0===this.options.positionLeft)&&n>360?t.insertAdjacentElement("afterbegin",s):t.appendChild(s)}if(this.options.stopOnFocus&&this.options.duration>0){var e=this;t.addEventListener("mouseover",(function(o){window.clearTimeout(t.timeOutValue)})),t.addEventListener("mouseleave",(function(){t.timeOutValue=window.setTimeout((function(){e.removeElement(t)}),e.options.duration)}))}if(void 0!==this.options.destination&&t.addEventListener("click",function(t){t.stopPropagation(),!0===this.options.newWindow?window.open(this.options.destination,"_blank"):window.location=this.options.destination}.bind(this)),"function"==typeof this.options.onClick&&void 0===this.options.destination&&t.addEventListener("click",function(t){t.stopPropagation(),this.options.onClick()}.bind(this)),"object"==typeof this.options.offset){var a=i("x",this.options),p=i("y",this.options),r="left"==this.options.position?a:"-"+a,l="toastify-top"==this.options.gravity?p:"-"+p;t.style.transform="translate("+r+","+l+")"}return t},showToast:function(){var t;if(this.toastElement=this.buildToast(),!(t=void 0===this.options.selector?document.body:document.getElementById(this.options.selector)))throw"Root element is not defined";return t.insertBefore(this.toastElement,t.firstChild),o.reposition(),this.options.duration>0&&(this.toastElement.timeOutValue=window.setTimeout(function(){this.removeElement(this.toastElement)}.bind(this),this.options.duration)),this},hideToast:function(){this.toastElement.timeOutValue&&clearTimeout(this.toastElement.timeOutValue),this.removeElement(this.toastElement)},removeElement:function(t){t.className=t.className.replace(" on",""),window.setTimeout(function(){this.options.node&&this.options.node.parentNode&&this.options.node.parentNode.removeChild(this.options.node),t.parentNode&&t.parentNode.removeChild(t),this.options.callback.call(t),o.reposition()}.bind(this),400)}},o.reposition=function(){for(var t,o={top:15,bottom:15},i={top:15,bottom:15},n={top:15,bottom:15},e=document.getElementsByClassName("toastify"),a=0;a<e.length;a++){t=!0===s(e[a],"toastify-top")?"toastify-top":"toastify-bottom";var p=e[a].offsetHeight;t=t.substr(9,t.length-1);(window.innerWidth>0?window.innerWidth:screen.width)<=360?(e[a].style[t]=n[t]+"px",n[t]+=p+15):!0===s(e[a],"toastify-left")?(e[a].style[t]=o[t]+"px",o[t]+=p+15):(e[a].style[t]=i[t]+"px",i[t]+=p+15)}return this},o.lib.init.prototype=o.lib,o}));

File diff suppressed because one or more lines are too long

View File

@@ -1,222 +0,0 @@
var CanvasKitInit = (() => {
var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;
if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename;
return (
function(CanvasKitInit = {}) {
var r;r||(r=typeof CanvasKitInit !== 'undefined' ? CanvasKitInit : {});var aa,ba;r.ready=new Promise(function(a,b){aa=a;ba=b});
(function(a){a.Nd=a.Nd||[];a.Nd.push(function(){a.MakeSWCanvasSurface=function(b){var c=b,e="undefined"!==typeof OffscreenCanvas&&c instanceof OffscreenCanvas;if(!("undefined"!==typeof HTMLCanvasElement&&c instanceof HTMLCanvasElement||e||(c=document.getElementById(b),c)))throw"Canvas with id "+b+" was not found";if(b=a.MakeSurface(c.width,c.height))b.ke=c;return b};a.MakeCanvasSurface||(a.MakeCanvasSurface=a.MakeSWCanvasSurface);a.MakeSurface=function(b,c){var e={width:b,height:c,colorType:a.ColorType.RGBA_8888,
alphaType:a.AlphaType.Unpremul,colorSpace:a.ColorSpace.SRGB},f=b*c*4,k=a._malloc(f);if(e=a.Surface._makeRasterDirect(e,k,4*b))e.ke=null,e.Ve=b,e.Se=c,e.Te=f,e.ue=k,e.getCanvas().clear(a.TRANSPARENT);return e};a.MakeRasterDirectSurface=function(b,c,e){return a.Surface._makeRasterDirect(b,c.byteOffset,e)};a.Surface.prototype.flush=function(b){a.Kd(this.Jd);this._flush();if(this.ke){var c=new Uint8ClampedArray(a.HEAPU8.buffer,this.ue,this.Te);c=new ImageData(c,this.Ve,this.Se);b?this.ke.getContext("2d").putImageData(c,
0,0,b[0],b[1],b[2]-b[0],b[3]-b[1]):this.ke.getContext("2d").putImageData(c,0,0)}};a.Surface.prototype.dispose=function(){this.ue&&a._free(this.ue);this.delete()};a.Kd=a.Kd||function(){};a.le=a.le||function(){return null}})})(r);
(function(a){a.Nd=a.Nd||[];a.Nd.push(function(){function b(l,q,x){return l&&l.hasOwnProperty(q)?l[q]:x}function c(l){var q=ca(ea);ea[q]=l;return q}function e(l){return l.naturalHeight||l.videoHeight||l.displayHeight||l.height}function f(l){return l.naturalWidth||l.videoWidth||l.displayWidth||l.width}function k(l,q,x,y){l.bindTexture(l.TEXTURE_2D,q);y||x.alphaType!==a.AlphaType.Premul||l.pixelStorei(l.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0);return q}function m(l,q,x){x||q.alphaType!==a.AlphaType.Premul||
l.pixelStorei(l.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1);l.bindTexture(l.TEXTURE_2D,null)}a.GetWebGLContext=function(l,q){if(!l)throw"null canvas passed into makeWebGLContext";var x={alpha:b(q,"alpha",1),depth:b(q,"depth",1),stencil:b(q,"stencil",8),antialias:b(q,"antialias",0),premultipliedAlpha:b(q,"premultipliedAlpha",1),preserveDrawingBuffer:b(q,"preserveDrawingBuffer",0),preferLowPowerToHighPerformance:b(q,"preferLowPowerToHighPerformance",0),failIfMajorPerformanceCaveat:b(q,"failIfMajorPerformanceCaveat",
0),enableExtensionsByDefault:b(q,"enableExtensionsByDefault",1),explicitSwapControl:b(q,"explicitSwapControl",0),renderViaOffscreenBackBuffer:b(q,"renderViaOffscreenBackBuffer",0)};x.majorVersion=q&&q.majorVersion?q.majorVersion:"undefined"!==typeof WebGL2RenderingContext?2:1;if(x.explicitSwapControl)throw"explicitSwapControl is not supported";l=fa(l,x);if(!l)return 0;ha(l);u.Ud.getExtension("WEBGL_debug_renderer_info");return l};a.deleteContext=function(l){u===ia[l]&&(u=null);"object"==typeof JSEvents&&
JSEvents.Af(ia[l].Ud.canvas);ia[l]&&ia[l].Ud.canvas&&(ia[l].Ud.canvas.Ke=void 0);ia[l]=null};a._setTextureCleanup({deleteTexture:function(l,q){var x=ea[q];x&&ia[l].Ud.deleteTexture(x);ea[q]=null}});a.MakeWebGLContext=function(l){if(!this.Kd(l))return null;var q=this._MakeGrContext();if(!q)return null;q.Jd=l;var x=q.delete.bind(q);q["delete"]=function(){a.Kd(this.Jd);x()}.bind(q);return u.we=q};a.MakeGrContext=a.MakeWebGLContext;a.GrDirectContext.prototype.getResourceCacheLimitBytes=function(){a.Kd(this.Jd);
this._getResourceCacheLimitBytes()};a.GrDirectContext.prototype.getResourceCacheUsageBytes=function(){a.Kd(this.Jd);this._getResourceCacheUsageBytes()};a.GrDirectContext.prototype.releaseResourcesAndAbandonContext=function(){a.Kd(this.Jd);this._releaseResourcesAndAbandonContext()};a.GrDirectContext.prototype.setResourceCacheLimitBytes=function(l){a.Kd(this.Jd);this._setResourceCacheLimitBytes(l)};a.MakeOnScreenGLSurface=function(l,q,x,y,B,D){if(!this.Kd(l.Jd))return null;q=void 0===B||void 0===D?
this._MakeOnScreenGLSurface(l,q,x,y):this._MakeOnScreenGLSurface(l,q,x,y,B,D);if(!q)return null;q.Jd=l.Jd;return q};a.MakeRenderTarget=function(){var l=arguments[0];if(!this.Kd(l.Jd))return null;if(3===arguments.length){var q=this._MakeRenderTargetWH(l,arguments[1],arguments[2]);if(!q)return null}else if(2===arguments.length){if(q=this._MakeRenderTargetII(l,arguments[1]),!q)return null}else return null;q.Jd=l.Jd;return q};a.MakeWebGLCanvasSurface=function(l,q,x){q=q||null;var y=l,B="undefined"!==
typeof OffscreenCanvas&&y instanceof OffscreenCanvas;if(!("undefined"!==typeof HTMLCanvasElement&&y instanceof HTMLCanvasElement||B||(y=document.getElementById(l),y)))throw"Canvas with id "+l+" was not found";l=this.GetWebGLContext(y,x);if(!l||0>l)throw"failed to create webgl context: err "+l;l=this.MakeWebGLContext(l);q=this.MakeOnScreenGLSurface(l,y.width,y.height,q);return q?q:(q=y.cloneNode(!0),y.parentNode.replaceChild(q,y),q.classList.add("ck-replaced"),a.MakeSWCanvasSurface(q))};a.MakeCanvasSurface=
a.MakeWebGLCanvasSurface;a.Surface.prototype.makeImageFromTexture=function(l,q){a.Kd(this.Jd);l=c(l);if(q=this._makeImageFromTexture(this.Jd,l,q))q.ge=l;return q};a.Surface.prototype.makeImageFromTextureSource=function(l,q,x){q||(q={height:e(l),width:f(l),colorType:a.ColorType.RGBA_8888,alphaType:x?a.AlphaType.Premul:a.AlphaType.Unpremul});q.colorSpace||(q.colorSpace=a.ColorSpace.SRGB);a.Kd(this.Jd);var y=u.Ud;x=k(y,y.createTexture(),q,x);2===u.version?y.texImage2D(y.TEXTURE_2D,0,y.RGBA,q.width,q.height,
0,y.RGBA,y.UNSIGNED_BYTE,l):y.texImage2D(y.TEXTURE_2D,0,y.RGBA,y.RGBA,y.UNSIGNED_BYTE,l);m(y,q);this._resetContext();return this.makeImageFromTexture(x,q)};a.Surface.prototype.updateTextureFromSource=function(l,q,x){if(l.ge){a.Kd(this.Jd);var y=l.getImageInfo(),B=u.Ud,D=k(B,ea[l.ge],y,x);2===u.version?B.texImage2D(B.TEXTURE_2D,0,B.RGBA,f(q),e(q),0,B.RGBA,B.UNSIGNED_BYTE,q):B.texImage2D(B.TEXTURE_2D,0,B.RGBA,B.RGBA,B.UNSIGNED_BYTE,q);m(B,y,x);this._resetContext();ea[l.ge]=null;l.ge=c(D);y.colorSpace=
l.getColorSpace();q=this._makeImageFromTexture(this.Jd,l.ge,y);x=l.kd.Ld;B=l.kd.Qd;l.kd.Ld=q.kd.Ld;l.kd.Qd=q.kd.Qd;q.kd.Ld=x;q.kd.Qd=B;q.delete();y.colorSpace.delete()}};a.MakeLazyImageFromTextureSource=function(l,q,x){q||(q={height:e(l),width:f(l),colorType:a.ColorType.RGBA_8888,alphaType:x?a.AlphaType.Premul:a.AlphaType.Unpremul});q.colorSpace||(q.colorSpace=a.ColorSpace.SRGB);var y={makeTexture:function(){var B=u,D=B.Ud,v=k(D,D.createTexture(),q,x);2===B.version?D.texImage2D(D.TEXTURE_2D,0,D.RGBA,
q.width,q.height,0,D.RGBA,D.UNSIGNED_BYTE,l):D.texImage2D(D.TEXTURE_2D,0,D.RGBA,D.RGBA,D.UNSIGNED_BYTE,l);m(D,q,x);return c(v)},freeSrc:function(){}};"VideoFrame"===l.constructor.name&&(y.freeSrc=function(){l.close()});return a.Image._makeFromGenerator(q,y)};a.Kd=function(l){return l?ha(l):!1};a.le=function(){return u&&u.we&&!u.we.isDeleted()?u.we:null}})})(r);
(function(a){function b(g){return(f(255*g[3])<<24|f(255*g[0])<<16|f(255*g[1])<<8|f(255*g[2])<<0)>>>0}function c(g){if(g&&g._ck)return g;if(g instanceof Float32Array){for(var d=Math.floor(g.length/4),h=new Uint32Array(d),n=0;n<d;n++)h[n]=b(g.slice(4*n,4*(n+1)));return h}if(g instanceof Uint32Array)return g;if(g instanceof Array&&g[0]instanceof Float32Array)return g.map(b)}function e(g){if(void 0===g)return 1;var d=parseFloat(g);return g&&-1!==g.indexOf("%")?d/100:d}function f(g){return Math.round(Math.max(0,
Math.min(g||0,255)))}function k(g,d){d&&d._ck||a._free(g)}function m(g,d,h){if(!g||!g.length)return M;if(g&&g._ck)return g.byteOffset;var n=a[d].BYTES_PER_ELEMENT;h||(h=a._malloc(g.length*n));a[d].set(g,h/n);return h}function l(g){var d={Rd:M,count:g.length,colorType:a.ColorType.RGBA_F32};if(g instanceof Float32Array)d.Rd=m(g,"HEAPF32"),d.count=g.length/4;else if(g instanceof Uint32Array)d.Rd=m(g,"HEAPU32"),d.colorType=a.ColorType.RGBA_8888;else if(g instanceof Array){if(g&&g.length){for(var h=a._malloc(16*
g.length),n=0,t=h/4,w=0;w<g.length;w++)for(var z=0;4>z;z++)a.HEAPF32[t+n]=g[w][z],n++;g=h}else g=M;d.Rd=g}else throw"Invalid argument to copyFlexibleColorArray, Not a color array "+typeof g;return d}function q(g){if(!g)return M;var d=S.toTypedArray();if(g.length){if(6===g.length||9===g.length)return m(g,"HEAPF32",H),6===g.length&&a.HEAPF32.set(dd,6+H/4),H;if(16===g.length)return d[0]=g[0],d[1]=g[1],d[2]=g[3],d[3]=g[4],d[4]=g[5],d[5]=g[7],d[6]=g[12],d[7]=g[13],d[8]=g[15],H;throw"invalid matrix size";
}if(void 0===g.m11)throw"invalid matrix argument";d[0]=g.m11;d[1]=g.m21;d[2]=g.m41;d[3]=g.m12;d[4]=g.m22;d[5]=g.m42;d[6]=g.m14;d[7]=g.m24;d[8]=g.m44;return H}function x(g){if(!g)return M;var d=da.toTypedArray();if(g.length){if(16!==g.length&&6!==g.length&&9!==g.length)throw"invalid matrix size";if(16===g.length)return m(g,"HEAPF32",Y);d.fill(0);d[0]=g[0];d[1]=g[1];d[3]=g[2];d[4]=g[3];d[5]=g[4];d[7]=g[5];d[10]=1;d[12]=g[6];d[13]=g[7];d[15]=g[8];6===g.length&&(d[12]=0,d[13]=0,d[15]=1);return Y}if(void 0===
g.m11)throw"invalid matrix argument";d[0]=g.m11;d[1]=g.m21;d[2]=g.m31;d[3]=g.m41;d[4]=g.m12;d[5]=g.m22;d[6]=g.m32;d[7]=g.m42;d[8]=g.m13;d[9]=g.m23;d[10]=g.m33;d[11]=g.m43;d[12]=g.m14;d[13]=g.m24;d[14]=g.m34;d[15]=g.m44;return Y}function y(g,d){return m(g,"HEAPF32",d||ua)}function B(g,d,h,n){var t=La.toTypedArray();t[0]=g;t[1]=d;t[2]=h;t[3]=n;return ua}function D(g){for(var d=new Float32Array(4),h=0;4>h;h++)d[h]=a.HEAPF32[g/4+h];return d}function v(g,d){return m(g,"HEAPF32",d||V)}function E(g,d){return m(g,
"HEAPF32",d||Cb)}a.Color=function(g,d,h,n){void 0===n&&(n=1);return a.Color4f(f(g)/255,f(d)/255,f(h)/255,n)};a.ColorAsInt=function(g,d,h,n){void 0===n&&(n=255);return(f(n)<<24|f(g)<<16|f(d)<<8|f(h)<<0&268435455)>>>0};a.Color4f=function(g,d,h,n){void 0===n&&(n=1);return Float32Array.of(g,d,h,n)};Object.defineProperty(a,"TRANSPARENT",{get:function(){return a.Color4f(0,0,0,0)}});Object.defineProperty(a,"BLACK",{get:function(){return a.Color4f(0,0,0,1)}});Object.defineProperty(a,"WHITE",{get:function(){return a.Color4f(1,
1,1,1)}});Object.defineProperty(a,"RED",{get:function(){return a.Color4f(1,0,0,1)}});Object.defineProperty(a,"GREEN",{get:function(){return a.Color4f(0,1,0,1)}});Object.defineProperty(a,"BLUE",{get:function(){return a.Color4f(0,0,1,1)}});Object.defineProperty(a,"YELLOW",{get:function(){return a.Color4f(1,1,0,1)}});Object.defineProperty(a,"CYAN",{get:function(){return a.Color4f(0,1,1,1)}});Object.defineProperty(a,"MAGENTA",{get:function(){return a.Color4f(1,0,1,1)}});a.getColorComponents=function(g){return[Math.floor(255*
g[0]),Math.floor(255*g[1]),Math.floor(255*g[2]),g[3]]};a.parseColorString=function(g,d){g=g.toLowerCase();if(g.startsWith("#")){d=255;switch(g.length){case 9:d=parseInt(g.slice(7,9),16);case 7:var h=parseInt(g.slice(1,3),16);var n=parseInt(g.slice(3,5),16);var t=parseInt(g.slice(5,7),16);break;case 5:d=17*parseInt(g.slice(4,5),16);case 4:h=17*parseInt(g.slice(1,2),16),n=17*parseInt(g.slice(2,3),16),t=17*parseInt(g.slice(3,4),16)}return a.Color(h,n,t,d/255)}return g.startsWith("rgba")?(g=g.slice(5,
-1),g=g.split(","),a.Color(+g[0],+g[1],+g[2],e(g[3]))):g.startsWith("rgb")?(g=g.slice(4,-1),g=g.split(","),a.Color(+g[0],+g[1],+g[2],e(g[3]))):g.startsWith("gray(")||g.startsWith("hsl")||!d||(g=d[g],void 0===g)?a.BLACK:g};a.multiplyByAlpha=function(g,d){g=g.slice();g[3]=Math.max(0,Math.min(g[3]*d,1));return g};a.Malloc=function(g,d){var h=a._malloc(d*g.BYTES_PER_ELEMENT);return{_ck:!0,length:d,byteOffset:h,ae:null,subarray:function(n,t){n=this.toTypedArray().subarray(n,t);n._ck=!0;return n},toTypedArray:function(){if(this.ae&&
this.ae.length)return this.ae;this.ae=new g(a.HEAPU8.buffer,h,d);this.ae._ck=!0;return this.ae}}};a.Free=function(g){a._free(g.byteOffset);g.byteOffset=M;g.toTypedArray=null;g.ae=null};var H=M,S,Y=M,da,ua=M,La,ma,V=M,gc,Aa=M,hc,Db=M,ic,Eb=M,Fb,gb=M,jc,Cb=M,kc,lc=M,dd=Float32Array.of(0,0,1),M=0;a.onRuntimeInitialized=function(){function g(d,h,n,t,w,z,F){z||(z=4*t.width,t.colorType===a.ColorType.RGBA_F16?z*=2:t.colorType===a.ColorType.RGBA_F32&&(z*=4));var K=z*t.height;var I=w?w.byteOffset:a._malloc(K);
if(F?!d._readPixels(t,I,z,h,n,F):!d._readPixels(t,I,z,h,n))return w||a._free(I),null;if(w)return w.toTypedArray();switch(t.colorType){case a.ColorType.RGBA_8888:case a.ColorType.RGBA_F16:d=(new Uint8Array(a.HEAPU8.buffer,I,K)).slice();break;case a.ColorType.RGBA_F32:d=(new Float32Array(a.HEAPU8.buffer,I,K)).slice();break;default:return null}a._free(I);return d}La=a.Malloc(Float32Array,4);ua=La.byteOffset;da=a.Malloc(Float32Array,16);Y=da.byteOffset;S=a.Malloc(Float32Array,9);H=S.byteOffset;jc=a.Malloc(Float32Array,
12);Cb=jc.byteOffset;kc=a.Malloc(Float32Array,12);lc=kc.byteOffset;ma=a.Malloc(Float32Array,4);V=ma.byteOffset;gc=a.Malloc(Float32Array,4);Aa=gc.byteOffset;hc=a.Malloc(Float32Array,3);Db=hc.byteOffset;ic=a.Malloc(Float32Array,3);Eb=ic.byteOffset;Fb=a.Malloc(Int32Array,4);gb=Fb.byteOffset;a.ColorSpace.SRGB=a.ColorSpace._MakeSRGB();a.ColorSpace.DISPLAY_P3=a.ColorSpace._MakeDisplayP3();a.ColorSpace.ADOBE_RGB=a.ColorSpace._MakeAdobeRGB();a.GlyphRunFlags={IsWhiteSpace:a._GlyphRunFlags_isWhiteSpace};a.Path.MakeFromCmds=
function(d){var h=m(d,"HEAPF32"),n=a.Path._MakeFromCmds(h,d.length);k(h,d);return n};a.Path.MakeFromVerbsPointsWeights=function(d,h,n){var t=m(d,"HEAPU8"),w=m(h,"HEAPF32"),z=m(n,"HEAPF32"),F=a.Path._MakeFromVerbsPointsWeights(t,d.length,w,h.length,z,n&&n.length||0);k(t,d);k(w,h);k(z,n);return F};a.Path.prototype.addArc=function(d,h,n){d=v(d);this._addArc(d,h,n);return this};a.Path.prototype.addCircle=function(d,h,n,t){this._addCircle(d,h,n,!!t);return this};a.Path.prototype.addOval=function(d,h,n){void 0===
n&&(n=1);d=v(d);this._addOval(d,!!h,n);return this};a.Path.prototype.addPath=function(){var d=Array.prototype.slice.call(arguments),h=d[0],n=!1;"boolean"===typeof d[d.length-1]&&(n=d.pop());if(1===d.length)this._addPath(h,1,0,0,0,1,0,0,0,1,n);else if(2===d.length)d=d[1],this._addPath(h,d[0],d[1],d[2],d[3],d[4],d[5],d[6]||0,d[7]||0,d[8]||1,n);else if(7===d.length||10===d.length)this._addPath(h,d[1],d[2],d[3],d[4],d[5],d[6],d[7]||0,d[8]||0,d[9]||1,n);else return null;return this};a.Path.prototype.addPoly=
function(d,h){var n=m(d,"HEAPF32");this._addPoly(n,d.length/2,h);k(n,d);return this};a.Path.prototype.addRect=function(d,h){d=v(d);this._addRect(d,!!h);return this};a.Path.prototype.addRRect=function(d,h){d=E(d);this._addRRect(d,!!h);return this};a.Path.prototype.addVerbsPointsWeights=function(d,h,n){var t=m(d,"HEAPU8"),w=m(h,"HEAPF32"),z=m(n,"HEAPF32");this._addVerbsPointsWeights(t,d.length,w,h.length,z,n&&n.length||0);k(t,d);k(w,h);k(z,n)};a.Path.prototype.arc=function(d,h,n,t,w,z){d=a.LTRBRect(d-
n,h-n,d+n,h+n);w=(w-t)/Math.PI*180-360*!!z;z=new a.Path;z.addArc(d,t/Math.PI*180,w);this.addPath(z,!0);z.delete();return this};a.Path.prototype.arcToOval=function(d,h,n,t){d=v(d);this._arcToOval(d,h,n,t);return this};a.Path.prototype.arcToRotated=function(d,h,n,t,w,z,F){this._arcToRotated(d,h,n,!!t,!!w,z,F);return this};a.Path.prototype.arcToTangent=function(d,h,n,t,w){this._arcToTangent(d,h,n,t,w);return this};a.Path.prototype.close=function(){this._close();return this};a.Path.prototype.conicTo=
function(d,h,n,t,w){this._conicTo(d,h,n,t,w);return this};a.Path.prototype.computeTightBounds=function(d){this._computeTightBounds(V);var h=ma.toTypedArray();return d?(d.set(h),d):h.slice()};a.Path.prototype.cubicTo=function(d,h,n,t,w,z){this._cubicTo(d,h,n,t,w,z);return this};a.Path.prototype.dash=function(d,h,n){return this._dash(d,h,n)?this:null};a.Path.prototype.getBounds=function(d){this._getBounds(V);var h=ma.toTypedArray();return d?(d.set(h),d):h.slice()};a.Path.prototype.lineTo=function(d,
h){this._lineTo(d,h);return this};a.Path.prototype.moveTo=function(d,h){this._moveTo(d,h);return this};a.Path.prototype.offset=function(d,h){this._transform(1,0,d,0,1,h,0,0,1);return this};a.Path.prototype.quadTo=function(d,h,n,t){this._quadTo(d,h,n,t);return this};a.Path.prototype.rArcTo=function(d,h,n,t,w,z,F){this._rArcTo(d,h,n,t,w,z,F);return this};a.Path.prototype.rConicTo=function(d,h,n,t,w){this._rConicTo(d,h,n,t,w);return this};a.Path.prototype.rCubicTo=function(d,h,n,t,w,z){this._rCubicTo(d,
h,n,t,w,z);return this};a.Path.prototype.rLineTo=function(d,h){this._rLineTo(d,h);return this};a.Path.prototype.rMoveTo=function(d,h){this._rMoveTo(d,h);return this};a.Path.prototype.rQuadTo=function(d,h,n,t){this._rQuadTo(d,h,n,t);return this};a.Path.prototype.stroke=function(d){d=d||{};d.width=d.width||1;d.miter_limit=d.miter_limit||4;d.cap=d.cap||a.StrokeCap.Butt;d.join=d.join||a.StrokeJoin.Miter;d.precision=d.precision||1;return this._stroke(d)?this:null};a.Path.prototype.transform=function(){if(1===
arguments.length){var d=arguments[0];this._transform(d[0],d[1],d[2],d[3],d[4],d[5],d[6]||0,d[7]||0,d[8]||1)}else if(6===arguments.length||9===arguments.length)d=arguments,this._transform(d[0],d[1],d[2],d[3],d[4],d[5],d[6]||0,d[7]||0,d[8]||1);else throw"transform expected to take 1 or 9 arguments. Got "+arguments.length;return this};a.Path.prototype.trim=function(d,h,n){return this._trim(d,h,!!n)?this:null};a.Image.prototype.encodeToBytes=function(d,h){var n=a.le();d=d||a.ImageFormat.PNG;h=h||100;
return n?this._encodeToBytes(d,h,n):this._encodeToBytes(d,h)};a.Image.prototype.makeShaderCubic=function(d,h,n,t,w){w=q(w);return this._makeShaderCubic(d,h,n,t,w)};a.Image.prototype.makeShaderOptions=function(d,h,n,t,w){w=q(w);return this._makeShaderOptions(d,h,n,t,w)};a.Image.prototype.readPixels=function(d,h,n,t,w){var z=a.le();return g(this,d,h,n,t,w,z)};a.Canvas.prototype.clear=function(d){a.Kd(this.Jd);d=y(d);this._clear(d)};a.Canvas.prototype.clipRRect=function(d,h,n){a.Kd(this.Jd);d=E(d);this._clipRRect(d,
h,n)};a.Canvas.prototype.clipRect=function(d,h,n){a.Kd(this.Jd);d=v(d);this._clipRect(d,h,n)};a.Canvas.prototype.concat=function(d){a.Kd(this.Jd);d=x(d);this._concat(d)};a.Canvas.prototype.drawArc=function(d,h,n,t,w){a.Kd(this.Jd);d=v(d);this._drawArc(d,h,n,t,w)};a.Canvas.prototype.drawAtlas=function(d,h,n,t,w,z,F){if(d&&t&&h&&n&&h.length===n.length){a.Kd(this.Jd);w||(w=a.BlendMode.SrcOver);var K=m(h,"HEAPF32"),I=m(n,"HEAPF32"),T=n.length/4,p=m(c(z),"HEAPU32");if(F&&"B"in F&&"C"in F)this._drawAtlasCubic(d,
I,K,p,T,w,F.B,F.C,t);else{let A=a.FilterMode.Linear,L=a.MipmapMode.None;F&&(A=F.filter,"mipmap"in F&&(L=F.mipmap));this._drawAtlasOptions(d,I,K,p,T,w,A,L,t)}k(K,h);k(I,n);k(p,z)}};a.Canvas.prototype.drawCircle=function(d,h,n,t){a.Kd(this.Jd);this._drawCircle(d,h,n,t)};a.Canvas.prototype.drawColor=function(d,h){a.Kd(this.Jd);d=y(d);void 0!==h?this._drawColor(d,h):this._drawColor(d)};a.Canvas.prototype.drawColorInt=function(d,h){a.Kd(this.Jd);this._drawColorInt(d,h||a.BlendMode.SrcOver)};a.Canvas.prototype.drawColorComponents=
function(d,h,n,t,w){a.Kd(this.Jd);d=B(d,h,n,t);void 0!==w?this._drawColor(d,w):this._drawColor(d)};a.Canvas.prototype.drawDRRect=function(d,h,n){a.Kd(this.Jd);d=E(d,Cb);h=E(h,lc);this._drawDRRect(d,h,n)};a.Canvas.prototype.drawImage=function(d,h,n,t){a.Kd(this.Jd);this._drawImage(d,h,n,t||null)};a.Canvas.prototype.drawImageCubic=function(d,h,n,t,w,z){a.Kd(this.Jd);this._drawImageCubic(d,h,n,t,w,z||null)};a.Canvas.prototype.drawImageOptions=function(d,h,n,t,w,z){a.Kd(this.Jd);this._drawImageOptions(d,
h,n,t,w,z||null)};a.Canvas.prototype.drawImageNine=function(d,h,n,t,w){a.Kd(this.Jd);h=m(h,"HEAP32",gb);n=v(n);this._drawImageNine(d,h,n,t,w||null)};a.Canvas.prototype.drawImageRect=function(d,h,n,t,w){a.Kd(this.Jd);v(h,V);v(n,Aa);this._drawImageRect(d,V,Aa,t,!!w)};a.Canvas.prototype.drawImageRectCubic=function(d,h,n,t,w,z){a.Kd(this.Jd);v(h,V);v(n,Aa);this._drawImageRectCubic(d,V,Aa,t,w,z||null)};a.Canvas.prototype.drawImageRectOptions=function(d,h,n,t,w,z){a.Kd(this.Jd);v(h,V);v(n,Aa);this._drawImageRectOptions(d,
V,Aa,t,w,z||null)};a.Canvas.prototype.drawLine=function(d,h,n,t,w){a.Kd(this.Jd);this._drawLine(d,h,n,t,w)};a.Canvas.prototype.drawOval=function(d,h){a.Kd(this.Jd);d=v(d);this._drawOval(d,h)};a.Canvas.prototype.drawPaint=function(d){a.Kd(this.Jd);this._drawPaint(d)};a.Canvas.prototype.drawParagraph=function(d,h,n){a.Kd(this.Jd);this._drawParagraph(d,h,n)};a.Canvas.prototype.drawPatch=function(d,h,n,t,w){if(24>d.length)throw"Need 12 cubic points";if(h&&4>h.length)throw"Need 4 colors";if(n&&8>n.length)throw"Need 4 shader coordinates";
a.Kd(this.Jd);const z=m(d,"HEAPF32"),F=h?m(c(h),"HEAPU32"):M,K=n?m(n,"HEAPF32"):M;t||(t=a.BlendMode.Modulate);this._drawPatch(z,F,K,t,w);k(K,n);k(F,h);k(z,d)};a.Canvas.prototype.drawPath=function(d,h){a.Kd(this.Jd);this._drawPath(d,h)};a.Canvas.prototype.drawPicture=function(d){a.Kd(this.Jd);this._drawPicture(d)};a.Canvas.prototype.drawPoints=function(d,h,n){a.Kd(this.Jd);var t=m(h,"HEAPF32");this._drawPoints(d,t,h.length/2,n);k(t,h)};a.Canvas.prototype.drawRRect=function(d,h){a.Kd(this.Jd);d=E(d);
this._drawRRect(d,h)};a.Canvas.prototype.drawRect=function(d,h){a.Kd(this.Jd);d=v(d);this._drawRect(d,h)};a.Canvas.prototype.drawRect4f=function(d,h,n,t,w){a.Kd(this.Jd);this._drawRect4f(d,h,n,t,w)};a.Canvas.prototype.drawShadow=function(d,h,n,t,w,z,F){a.Kd(this.Jd);var K=m(w,"HEAPF32"),I=m(z,"HEAPF32");h=m(h,"HEAPF32",Db);n=m(n,"HEAPF32",Eb);this._drawShadow(d,h,n,t,K,I,F);k(K,w);k(I,z)};a.getShadowLocalBounds=function(d,h,n,t,w,z,F){d=q(d);n=m(n,"HEAPF32",Db);t=m(t,"HEAPF32",Eb);if(!this._getShadowLocalBounds(d,
h,n,t,w,z,V))return null;h=ma.toTypedArray();return F?(F.set(h),F):h.slice()};a.Canvas.prototype.drawTextBlob=function(d,h,n,t){a.Kd(this.Jd);this._drawTextBlob(d,h,n,t)};a.Canvas.prototype.drawVertices=function(d,h,n){a.Kd(this.Jd);this._drawVertices(d,h,n)};a.Canvas.prototype.getDeviceClipBounds=function(d){this._getDeviceClipBounds(gb);var h=Fb.toTypedArray();d?d.set(h):d=h.slice();return d};a.Canvas.prototype.getLocalToDevice=function(){this._getLocalToDevice(Y);for(var d=Y,h=Array(16),n=0;16>
n;n++)h[n]=a.HEAPF32[d/4+n];return h};a.Canvas.prototype.getTotalMatrix=function(){this._getTotalMatrix(H);for(var d=Array(9),h=0;9>h;h++)d[h]=a.HEAPF32[H/4+h];return d};a.Canvas.prototype.makeSurface=function(d){d=this._makeSurface(d);d.Jd=this.Jd;return d};a.Canvas.prototype.readPixels=function(d,h,n,t,w){a.Kd(this.Jd);return g(this,d,h,n,t,w)};a.Canvas.prototype.saveLayer=function(d,h,n,t){h=v(h);return this._saveLayer(d||null,h,n||null,t||0)};a.Canvas.prototype.writePixels=function(d,h,n,t,w,
z,F,K){if(d.byteLength%(h*n))throw"pixels length must be a multiple of the srcWidth * srcHeight";a.Kd(this.Jd);var I=d.byteLength/(h*n);z=z||a.AlphaType.Unpremul;F=F||a.ColorType.RGBA_8888;K=K||a.ColorSpace.SRGB;var T=I*h;I=m(d,"HEAPU8");h=this._writePixels({width:h,height:n,colorType:F,alphaType:z,colorSpace:K},I,T,t,w);k(I,d);return h};a.ColorFilter.MakeBlend=function(d,h,n){d=y(d);n=n||a.ColorSpace.SRGB;return a.ColorFilter._MakeBlend(d,h,n)};a.ColorFilter.MakeMatrix=function(d){if(!d||20!==d.length)throw"invalid color matrix";
var h=m(d,"HEAPF32"),n=a.ColorFilter._makeMatrix(h);k(h,d);return n};a.ContourMeasure.prototype.getPosTan=function(d,h){this._getPosTan(d,V);d=ma.toTypedArray();return h?(h.set(d),h):d.slice()};a.ImageFilter.MakeDropShadow=function(d,h,n,t,w,z){w=y(w,ua);return a.ImageFilter._MakeDropShadow(d,h,n,t,w,z)};a.ImageFilter.MakeDropShadowOnly=function(d,h,n,t,w,z){w=y(w,ua);return a.ImageFilter._MakeDropShadowOnly(d,h,n,t,w,z)};a.ImageFilter.MakeImage=function(d,h,n,t){n=v(n,V);t=v(t,Aa);if("B"in h&&"C"in
h)return a.ImageFilter._MakeImageCubic(d,h.B,h.C,n,t);const w=h.filter;let z=a.MipmapMode.None;"mipmap"in h&&(z=h.mipmap);return a.ImageFilter._MakeImageOptions(d,w,z,n,t)};a.ImageFilter.MakeMatrixTransform=function(d,h,n){d=q(d);if("B"in h&&"C"in h)return a.ImageFilter._MakeMatrixTransformCubic(d,h.B,h.C,n);const t=h.filter;let w=a.MipmapMode.None;"mipmap"in h&&(w=h.mipmap);return a.ImageFilter._MakeMatrixTransformOptions(d,t,w,n)};a.Paint.prototype.getColor=function(){this._getColor(ua);return D(ua)};
a.Paint.prototype.setColor=function(d,h){h=h||null;d=y(d);this._setColor(d,h)};a.Paint.prototype.setColorComponents=function(d,h,n,t,w){w=w||null;d=B(d,h,n,t);this._setColor(d,w)};a.Path.prototype.getPoint=function(d,h){this._getPoint(d,V);d=ma.toTypedArray();return h?(h[0]=d[0],h[1]=d[1],h):d.slice(0,2)};a.Picture.prototype.makeShader=function(d,h,n,t,w){t=q(t);w=v(w);return this._makeShader(d,h,n,t,w)};a.Picture.prototype.cullRect=function(d){this._cullRect(V);var h=ma.toTypedArray();return d?(d.set(h),
d):h.slice()};a.PictureRecorder.prototype.beginRecording=function(d,h){d=v(d);return this._beginRecording(d,!!h)};a.Surface.prototype.getCanvas=function(){var d=this._getCanvas();d.Jd=this.Jd;return d};a.Surface.prototype.makeImageSnapshot=function(d){a.Kd(this.Jd);d=m(d,"HEAP32",gb);return this._makeImageSnapshot(d)};a.Surface.prototype.makeSurface=function(d){a.Kd(this.Jd);d=this._makeSurface(d);d.Jd=this.Jd;return d};a.Surface.prototype.Ue=function(d,h){this.fe||(this.fe=this.getCanvas());return requestAnimationFrame(function(){a.Kd(this.Jd);
d(this.fe);this.flush(h)}.bind(this))};a.Surface.prototype.requestAnimationFrame||(a.Surface.prototype.requestAnimationFrame=a.Surface.prototype.Ue);a.Surface.prototype.Re=function(d,h){this.fe||(this.fe=this.getCanvas());requestAnimationFrame(function(){a.Kd(this.Jd);d(this.fe);this.flush(h);this.dispose()}.bind(this))};a.Surface.prototype.drawOnce||(a.Surface.prototype.drawOnce=a.Surface.prototype.Re);a.PathEffect.MakeDash=function(d,h){h||(h=0);if(!d.length||1===d.length%2)throw"Intervals array must have even length";
var n=m(d,"HEAPF32");h=a.PathEffect._MakeDash(n,d.length,h);k(n,d);return h};a.PathEffect.MakeLine2D=function(d,h){h=q(h);return a.PathEffect._MakeLine2D(d,h)};a.PathEffect.MakePath2D=function(d,h){d=q(d);return a.PathEffect._MakePath2D(d,h)};a.Shader.MakeColor=function(d,h){h=h||null;d=y(d);return a.Shader._MakeColor(d,h)};a.Shader.Blend=a.Shader.MakeBlend;a.Shader.Color=a.Shader.MakeColor;a.Shader.MakeLinearGradient=function(d,h,n,t,w,z,F,K){K=K||null;var I=l(n),T=m(t,"HEAPF32");F=F||0;z=q(z);var p=
ma.toTypedArray();p.set(d);p.set(h,2);d=a.Shader._MakeLinearGradient(V,I.Rd,I.colorType,T,I.count,w,F,z,K);k(I.Rd,n);t&&k(T,t);return d};a.Shader.MakeRadialGradient=function(d,h,n,t,w,z,F,K){K=K||null;var I=l(n),T=m(t,"HEAPF32");F=F||0;z=q(z);d=a.Shader._MakeRadialGradient(d[0],d[1],h,I.Rd,I.colorType,T,I.count,w,F,z,K);k(I.Rd,n);t&&k(T,t);return d};a.Shader.MakeSweepGradient=function(d,h,n,t,w,z,F,K,I,T){T=T||null;var p=l(n),A=m(t,"HEAPF32");F=F||0;K=K||0;I=I||360;z=q(z);d=a.Shader._MakeSweepGradient(d,
h,p.Rd,p.colorType,A,p.count,w,K,I,F,z,T);k(p.Rd,n);t&&k(A,t);return d};a.Shader.MakeTwoPointConicalGradient=function(d,h,n,t,w,z,F,K,I,T){T=T||null;var p=l(w),A=m(z,"HEAPF32");I=I||0;K=q(K);var L=ma.toTypedArray();L.set(d);L.set(n,2);d=a.Shader._MakeTwoPointConicalGradient(V,h,t,p.Rd,p.colorType,A,p.count,F,I,K,T);k(p.Rd,w);z&&k(A,z);return d};a.Vertices.prototype.bounds=function(d){this._bounds(V);var h=ma.toTypedArray();return d?(d.set(h),d):h.slice()};a.Nd&&a.Nd.forEach(function(d){d()})};a.computeTonalColors=
function(g){var d=m(g.ambient,"HEAPF32"),h=m(g.spot,"HEAPF32");this._computeTonalColors(d,h);var n={ambient:D(d),spot:D(h)};k(d,g.ambient);k(h,g.spot);return n};a.LTRBRect=function(g,d,h,n){return Float32Array.of(g,d,h,n)};a.XYWHRect=function(g,d,h,n){return Float32Array.of(g,d,g+h,d+n)};a.LTRBiRect=function(g,d,h,n){return Int32Array.of(g,d,h,n)};a.XYWHiRect=function(g,d,h,n){return Int32Array.of(g,d,g+h,d+n)};a.RRectXY=function(g,d,h){return Float32Array.of(g[0],g[1],g[2],g[3],d,h,d,h,d,h,d,h)};
a.MakeAnimatedImageFromEncoded=function(g){g=new Uint8Array(g);var d=a._malloc(g.byteLength);a.HEAPU8.set(g,d);return(g=a._decodeAnimatedImage(d,g.byteLength))?g:null};a.MakeImageFromEncoded=function(g){g=new Uint8Array(g);var d=a._malloc(g.byteLength);a.HEAPU8.set(g,d);return(g=a._decodeImage(d,g.byteLength))?g:null};var Ra=null;a.MakeImageFromCanvasImageSource=function(g){var d=g.width,h=g.height;Ra||(Ra=document.createElement("canvas"));Ra.width=d;Ra.height=h;var n=Ra.getContext("2d",{Cf:!0});
n.drawImage(g,0,0);g=n.getImageData(0,0,d,h);return a.MakeImage({width:d,height:h,alphaType:a.AlphaType.Unpremul,colorType:a.ColorType.RGBA_8888,colorSpace:a.ColorSpace.SRGB},g.data,4*d)};a.MakeImage=function(g,d,h){var n=a._malloc(d.length);a.HEAPU8.set(d,n);return a._MakeImage(g,n,d.length,h)};a.MakeVertices=function(g,d,h,n,t,w){var z=t&&t.length||0,F=0;h&&h.length&&(F|=1);n&&n.length&&(F|=2);void 0===w||w||(F|=4);g=new a._VerticesBuilder(g,d.length/2,z,F);m(d,"HEAPF32",g.positions());g.texCoords()&&
m(h,"HEAPF32",g.texCoords());g.colors()&&m(c(n),"HEAPU32",g.colors());g.indices()&&m(t,"HEAPU16",g.indices());return g.detach()};(function(g){g.Nd=g.Nd||[];g.Nd.push(function(){function d(p){if(!p||!p.length)return[];for(var A=[],L=0;L<p.length;L+=5){var W=g.LTRBRect(p[L],p[L+1],p[L+2],p[L+3]),xa=g.TextDirection.LTR;0===p[L+4]&&(xa=g.TextDirection.RTL);A.push({rect:W,dir:xa})}g._free(p.byteOffset);return A}function h(p){p=p||{};void 0===p.weight&&(p.weight=g.FontWeight.Normal);p.width=p.width||g.FontWidth.Normal;
p.slant=p.slant||g.FontSlant.Upright;return p}function n(p){if(!p||!p.length)return M;for(var A=[],L=0;L<p.length;L++){var W=t(p[L]);A.push(W)}return m(A,"HEAPU32")}function t(p){if(F[p])return F[p];var A=ja(p)+1,L=g._malloc(A);ka(p,C,L,A);return F[p]=L}function w(p){p._colorPtr=y(p.color);p._foregroundColorPtr=M;p._backgroundColorPtr=M;p._decorationColorPtr=M;p.foregroundColor&&(p._foregroundColorPtr=y(p.foregroundColor,K));p.backgroundColor&&(p._backgroundColorPtr=y(p.backgroundColor,I));p.decorationColor&&
(p._decorationColorPtr=y(p.decorationColor,T));Array.isArray(p.fontFamilies)&&p.fontFamilies.length?(p._fontFamiliesPtr=n(p.fontFamilies),p._fontFamiliesLen=p.fontFamilies.length):(p._fontFamiliesPtr=M,p._fontFamiliesLen=0);if(p.locale){var A=p.locale;p._localePtr=t(A);p._localeLen=ja(A)+1}else p._localePtr=M,p._localeLen=0;if(Array.isArray(p.shadows)&&p.shadows.length){A=p.shadows;var L=A.map(function(pa){return pa.color||g.BLACK}),W=A.map(function(pa){return pa.blurRadius||0});p._shadowLen=A.length;
for(var xa=g._malloc(8*A.length),Gb=xa/4,Hb=0;Hb<A.length;Hb++){var mc=A[Hb].offset||[0,0];g.HEAPF32[Gb]=mc[0];g.HEAPF32[Gb+1]=mc[1];Gb+=2}p._shadowColorsPtr=l(L).Rd;p._shadowOffsetsPtr=xa;p._shadowBlurRadiiPtr=m(W,"HEAPF32")}else p._shadowLen=0,p._shadowColorsPtr=M,p._shadowOffsetsPtr=M,p._shadowBlurRadiiPtr=M;Array.isArray(p.fontFeatures)&&p.fontFeatures.length?(A=p.fontFeatures,L=A.map(function(pa){return pa.name}),W=A.map(function(pa){return pa.value}),p._fontFeatureLen=A.length,p._fontFeatureNamesPtr=
n(L),p._fontFeatureValuesPtr=m(W,"HEAPU32")):(p._fontFeatureLen=0,p._fontFeatureNamesPtr=M,p._fontFeatureValuesPtr=M);Array.isArray(p.fontVariations)&&p.fontVariations.length?(A=p.fontVariations,L=A.map(function(pa){return pa.axis}),W=A.map(function(pa){return pa.value}),p._fontVariationLen=A.length,p._fontVariationAxesPtr=n(L),p._fontVariationValuesPtr=m(W,"HEAPF32")):(p._fontVariationLen=0,p._fontVariationAxesPtr=M,p._fontVariationValuesPtr=M)}function z(p){g._free(p._fontFamiliesPtr);g._free(p._shadowColorsPtr);
g._free(p._shadowOffsetsPtr);g._free(p._shadowBlurRadiiPtr);g._free(p._fontFeatureNamesPtr);g._free(p._fontFeatureValuesPtr);g._free(p._fontVariationAxesPtr);g._free(p._fontVariationValuesPtr)}g.Paragraph.prototype.getRectsForRange=function(p,A,L,W){p=this._getRectsForRange(p,A,L,W);return d(p)};g.Paragraph.prototype.getRectsForPlaceholders=function(){var p=this._getRectsForPlaceholders();return d(p)};g.TypefaceFontProvider.prototype.registerFont=function(p,A){p=g.Typeface.MakeFreeTypeFaceFromData(p);
if(!p)return null;A=t(A);this._registerFont(p,A)};g.ParagraphStyle=function(p){p.disableHinting=p.disableHinting||!1;if(p.ellipsis){var A=p.ellipsis;p._ellipsisPtr=t(A);p._ellipsisLen=ja(A)+1}else p._ellipsisPtr=M,p._ellipsisLen=0;null==p.heightMultiplier&&(p.heightMultiplier=-1);p.maxLines=p.maxLines||0;p.replaceTabCharacters=p.replaceTabCharacters||!1;A=(A=p.strutStyle)||{};A.strutEnabled=A.strutEnabled||!1;A.strutEnabled&&Array.isArray(A.fontFamilies)&&A.fontFamilies.length?(A._fontFamiliesPtr=
n(A.fontFamilies),A._fontFamiliesLen=A.fontFamilies.length):(A._fontFamiliesPtr=M,A._fontFamiliesLen=0);A.fontStyle=h(A.fontStyle);null==A.fontSize&&(A.fontSize=-1);null==A.heightMultiplier&&(A.heightMultiplier=-1);A.halfLeading=A.halfLeading||!1;A.leading=A.leading||0;A.forceStrutHeight=A.forceStrutHeight||!1;p.strutStyle=A;p.textAlign=p.textAlign||g.TextAlign.Start;p.textDirection=p.textDirection||g.TextDirection.LTR;p.textHeightBehavior=p.textHeightBehavior||g.TextHeightBehavior.All;p.textStyle=
g.TextStyle(p.textStyle);p.applyRoundingHack=!1!==p.applyRoundingHack;return p};g.TextStyle=function(p){p.color||(p.color=g.BLACK);p.decoration=p.decoration||0;p.decorationThickness=p.decorationThickness||0;p.decorationStyle=p.decorationStyle||g.DecorationStyle.Solid;p.textBaseline=p.textBaseline||g.TextBaseline.Alphabetic;null==p.fontSize&&(p.fontSize=-1);p.letterSpacing=p.letterSpacing||0;p.wordSpacing=p.wordSpacing||0;null==p.heightMultiplier&&(p.heightMultiplier=-1);p.halfLeading=p.halfLeading||
!1;p.fontStyle=h(p.fontStyle);return p};var F={},K=g._malloc(16),I=g._malloc(16),T=g._malloc(16);g.ParagraphBuilder.Make=function(p,A){w(p.textStyle);A=g.ParagraphBuilder._Make(p,A);z(p.textStyle);return A};g.ParagraphBuilder.MakeFromFontProvider=function(p,A){w(p.textStyle);A=g.ParagraphBuilder._MakeFromFontProvider(p,A);z(p.textStyle);return A};g.ParagraphBuilder.MakeFromFontCollection=function(p,A){w(p.textStyle);A=g.ParagraphBuilder._MakeFromFontCollection(p,A);z(p.textStyle);return A};g.ParagraphBuilder.ShapeText=
function(p,A,L){let W=0;for(const xa of A)W+=xa.length;if(W!==p.length)throw"Accumulated block lengths must equal text.length";return g.ParagraphBuilder._ShapeText(p,A,L)};g.ParagraphBuilder.prototype.pushStyle=function(p){w(p);this._pushStyle(p);z(p)};g.ParagraphBuilder.prototype.pushPaintStyle=function(p,A,L){w(p);this._pushPaintStyle(p,A,L);z(p)};g.ParagraphBuilder.prototype.addPlaceholder=function(p,A,L,W,xa){L=L||g.PlaceholderAlignment.Baseline;W=W||g.TextBaseline.Alphabetic;this._addPlaceholder(p||
0,A||0,L,W,xa||0)};g.ParagraphBuilder.prototype.setWordsUtf8=function(p){var A=m(p,"HEAPU32");this._setWordsUtf8(A,p&&p.length||0);k(A,p)};g.ParagraphBuilder.prototype.setWordsUtf16=function(p){var A=m(p,"HEAPU32");this._setWordsUtf16(A,p&&p.length||0);k(A,p)};g.ParagraphBuilder.prototype.setGraphemeBreaksUtf8=function(p){var A=m(p,"HEAPU32");this._setGraphemeBreaksUtf8(A,p&&p.length||0);k(A,p)};g.ParagraphBuilder.prototype.setGraphemeBreaksUtf16=function(p){var A=m(p,"HEAPU32");this._setGraphemeBreaksUtf16(A,
p&&p.length||0);k(A,p)};g.ParagraphBuilder.prototype.setLineBreaksUtf8=function(p){var A=m(p,"HEAPU32");this._setLineBreaksUtf8(A,p&&p.length||0);k(A,p)};g.ParagraphBuilder.prototype.setLineBreaksUtf16=function(p){var A=m(p,"HEAPU32");this._setLineBreaksUtf16(A,p&&p.length||0);k(A,p)}})})(r);a.Nd=a.Nd||[];a.Nd.push(function(){a.Path.prototype.op=function(g,d){return this._op(g,d)?this:null};a.Path.prototype.simplify=function(){return this._simplify()?this:null}});a.Nd=a.Nd||[];a.Nd.push(function(){a.Canvas.prototype.drawText=
function(g,d,h,n,t){var w=ja(g),z=a._malloc(w+1);ka(g,C,z,w+1);this._drawSimpleText(z,w,d,h,t,n);a._free(z)};a.Canvas.prototype.drawGlyphs=function(g,d,h,n,t,w){if(!(2*g.length<=d.length))throw"Not enough positions for the array of gyphs";a.Kd(this.Jd);const z=m(g,"HEAPU16"),F=m(d,"HEAPF32");this._drawGlyphs(g.length,z,F,h,n,t,w);k(F,d);k(z,g)};a.Font.prototype.getGlyphBounds=function(g,d,h){var n=m(g,"HEAPU16"),t=a._malloc(16*g.length);this._getGlyphWidthBounds(n,g.length,M,t,d||null);d=new Float32Array(a.HEAPU8.buffer,
t,4*g.length);k(n,g);if(h)return h.set(d),a._free(t),h;g=Float32Array.from(d);a._free(t);return g};a.Font.prototype.getGlyphIDs=function(g,d,h){d||(d=g.length);var n=ja(g)+1,t=a._malloc(n);ka(g,C,t,n);g=a._malloc(2*d);d=this._getGlyphIDs(t,n-1,d,g);a._free(t);if(0>d)return a._free(g),null;t=new Uint16Array(a.HEAPU8.buffer,g,d);if(h)return h.set(t),a._free(g),h;h=Uint16Array.from(t);a._free(g);return h};a.Font.prototype.getGlyphIntercepts=function(g,d,h,n){var t=m(g,"HEAPU16"),w=m(d,"HEAPF32");return this._getGlyphIntercepts(t,
g.length,!(g&&g._ck),w,d.length,!(d&&d._ck),h,n)};a.Font.prototype.getGlyphWidths=function(g,d,h){var n=m(g,"HEAPU16"),t=a._malloc(4*g.length);this._getGlyphWidthBounds(n,g.length,t,M,d||null);d=new Float32Array(a.HEAPU8.buffer,t,g.length);k(n,g);if(h)return h.set(d),a._free(t),h;g=Float32Array.from(d);a._free(t);return g};a.FontMgr.FromData=function(){if(!arguments.length)return null;var g=arguments;1===g.length&&Array.isArray(g[0])&&(g=arguments[0]);if(!g.length)return null;for(var d=[],h=[],n=
0;n<g.length;n++){var t=new Uint8Array(g[n]),w=m(t,"HEAPU8");d.push(w);h.push(t.byteLength)}d=m(d,"HEAPU32");h=m(h,"HEAPU32");g=a.FontMgr._fromData(d,h,g.length);a._free(d);a._free(h);return g};a.Typeface.MakeFreeTypeFaceFromData=function(g){g=new Uint8Array(g);var d=m(g,"HEAPU8");return(g=a.Typeface._MakeFreeTypeFaceFromData(d,g.byteLength))?g:null};a.Typeface.prototype.getGlyphIDs=function(g,d,h){d||(d=g.length);var n=ja(g)+1,t=a._malloc(n);ka(g,C,t,n);g=a._malloc(2*d);d=this._getGlyphIDs(t,n-1,
d,g);a._free(t);if(0>d)return a._free(g),null;t=new Uint16Array(a.HEAPU8.buffer,g,d);if(h)return h.set(t),a._free(g),h;h=Uint16Array.from(t);a._free(g);return h};a.TextBlob.MakeOnPath=function(g,d,h,n){if(g&&g.length&&d&&d.countPoints()){if(1===d.countPoints())return this.MakeFromText(g,h);n||(n=0);var t=h.getGlyphIDs(g);t=h.getGlyphWidths(t);var w=[];d=new a.ContourMeasureIter(d,!1,1);for(var z=d.next(),F=new Float32Array(4),K=0;K<g.length&&z;K++){var I=t[K];n+=I/2;if(n>z.length()){z.delete();z=
d.next();if(!z){g=g.substring(0,K);break}n=I/2}z.getPosTan(n,F);var T=F[2],p=F[3];w.push(T,p,F[0]-I/2*T,F[1]-I/2*p);n+=I/2}g=this.MakeFromRSXform(g,w,h);z&&z.delete();d.delete();return g}};a.TextBlob.MakeFromRSXform=function(g,d,h){var n=ja(g)+1,t=a._malloc(n);ka(g,C,t,n);g=m(d,"HEAPF32");h=a.TextBlob._MakeFromRSXform(t,n-1,g,h);a._free(t);return h?h:null};a.TextBlob.MakeFromRSXformGlyphs=function(g,d,h){var n=m(g,"HEAPU16");d=m(d,"HEAPF32");h=a.TextBlob._MakeFromRSXformGlyphs(n,2*g.length,d,h);k(n,
g);return h?h:null};a.TextBlob.MakeFromGlyphs=function(g,d){var h=m(g,"HEAPU16");d=a.TextBlob._MakeFromGlyphs(h,2*g.length,d);k(h,g);return d?d:null};a.TextBlob.MakeFromText=function(g,d){var h=ja(g)+1,n=a._malloc(h);ka(g,C,n,h);g=a.TextBlob._MakeFromText(n,h-1,d);a._free(n);return g?g:null};a.MallocGlyphIDs=function(g){return a.Malloc(Uint16Array,g)}});a.Nd=a.Nd||[];a.Nd.push(function(){a.MakePicture=function(g){g=new Uint8Array(g);var d=a._malloc(g.byteLength);a.HEAPU8.set(g,d);return(g=a._MakePicture(d,
g.byteLength))?g:null}});a.Nd=a.Nd||[];a.Nd.push(function(){a.RuntimeEffect.Make=function(g,d){return a.RuntimeEffect._Make(g,{onError:d||function(h){console.log("RuntimeEffect error",h)}})};a.RuntimeEffect.prototype.makeShader=function(g,d){var h=!g._ck,n=m(g,"HEAPF32");d=q(d);return this._makeShader(n,4*g.length,h,d)};a.RuntimeEffect.prototype.makeShaderWithChildren=function(g,d,h){var n=!g._ck,t=m(g,"HEAPF32");h=q(h);for(var w=[],z=0;z<d.length;z++)w.push(d[z].kd.Ld);d=m(w,"HEAPU32");return this._makeShaderWithChildren(t,
4*g.length,n,d,w.length,h)}})})(r);var la=Object.assign({},r),na="./this.program",oa=(a,b)=>{throw b;},qa="object"==typeof window,ra="function"==typeof importScripts,sa="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,ta="",va,wa,ya;
if(sa){var fs=require("fs"),za=require("path");ta=ra?za.dirname(ta)+"/":__dirname+"/";va=(a,b)=>{a=a.startsWith("file://")?new URL(a):za.normalize(a);return fs.readFileSync(a,b?void 0:"utf8")};ya=a=>{a=va(a,!0);a.buffer||(a=new Uint8Array(a));return a};wa=(a,b,c)=>{a=a.startsWith("file://")?new URL(a):za.normalize(a);fs.readFile(a,function(e,f){e?c(e):b(f.buffer)})};1<process.argv.length&&(na=process.argv[1].replace(/\\/g,"/"));process.argv.slice(2);if(15>process.versions.node.split(".")[0])process.on("unhandledRejection",
function(a){throw a;});oa=(a,b)=>{if(noExitRuntime)throw process.exitCode=a,b;if(!(b instanceof Ba)){var c=b;b&&"object"==typeof b&&b.stack&&(c=[b,b.stack]);Ca("exiting due to exception: "+c)}process.exit(a)};r.inspect=function(){return"[Emscripten Module object]"}}else if(qa||ra)ra?ta=self.location.href:"undefined"!=typeof document&&document.currentScript&&(ta=document.currentScript.src),_scriptDir&&(ta=_scriptDir),0!==ta.indexOf("blob:")?ta=ta.substr(0,ta.replace(/[?#].*/,"").lastIndexOf("/")+1):
ta="",va=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.send(null);return b.responseText},ra&&(ya=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)}),wa=(a,b,c)=>{var e=new XMLHttpRequest;e.open("GET",a,!0);e.responseType="arraybuffer";e.onload=()=>{200==e.status||0==e.status&&e.response?b(e.response):c()};e.onerror=c;e.send(null)};var Da=r.print||console.log.bind(console),Ca=r.printErr||console.warn.bind(console);
Object.assign(r,la);la=null;r.thisProgram&&(na=r.thisProgram);r.quit&&(oa=r.quit);var Ea;r.wasmBinary&&(Ea=r.wasmBinary);var noExitRuntime=r.noExitRuntime||!0;"object"!=typeof WebAssembly&&Fa("no native wasm support detected");var Ga,Ha=!1,Ia="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;
function Ja(a,b,c){var e=b+c;for(c=b;a[c]&&!(c>=e);)++c;if(16<c-b&&a.buffer&&Ia)return Ia.decode(a.subarray(b,c));for(e="";b<c;){var f=a[b++];if(f&128){var k=a[b++]&63;if(192==(f&224))e+=String.fromCharCode((f&31)<<6|k);else{var m=a[b++]&63;f=224==(f&240)?(f&15)<<12|k<<6|m:(f&7)<<18|k<<12|m<<6|a[b++]&63;65536>f?e+=String.fromCharCode(f):(f-=65536,e+=String.fromCharCode(55296|f>>10,56320|f&1023))}}else e+=String.fromCharCode(f)}return e}function Ka(a,b){return a?Ja(C,a,b):""}
function ka(a,b,c,e){if(!(0<e))return 0;var f=c;e=c+e-1;for(var k=0;k<a.length;++k){var m=a.charCodeAt(k);if(55296<=m&&57343>=m){var l=a.charCodeAt(++k);m=65536+((m&1023)<<10)|l&1023}if(127>=m){if(c>=e)break;b[c++]=m}else{if(2047>=m){if(c+1>=e)break;b[c++]=192|m>>6}else{if(65535>=m){if(c+2>=e)break;b[c++]=224|m>>12}else{if(c+3>=e)break;b[c++]=240|m>>18;b[c++]=128|m>>12&63}b[c++]=128|m>>6&63}b[c++]=128|m&63}}b[c]=0;return c-f}
function ja(a){for(var b=0,c=0;c<a.length;++c){var e=a.charCodeAt(c);127>=e?b++:2047>=e?b+=2:55296<=e&&57343>=e?(b+=4,++c):b+=3}return b}var Ma,C,Na,Oa,G,J,N,Pa;function Qa(){var a=Ga.buffer;r.HEAP8=Ma=new Int8Array(a);r.HEAP16=Na=new Int16Array(a);r.HEAP32=G=new Int32Array(a);r.HEAPU8=C=new Uint8Array(a);r.HEAPU16=Oa=new Uint16Array(a);r.HEAPU32=J=new Uint32Array(a);r.HEAPF32=N=new Float32Array(a);r.HEAPF64=Pa=new Float64Array(a)}var Sa,Ta=[],Ua=[],Va=[];
function Wa(){var a=r.preRun.shift();Ta.unshift(a)}var Xa=0,Ya=null,Za=null;function Fa(a){if(r.onAbort)r.onAbort(a);a="Aborted("+a+")";Ca(a);Ha=!0;a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");ba(a);throw a;}function $a(a){return a.startsWith("data:application/octet-stream;base64,")}var ab;ab="canvaskit.wasm";if(!$a(ab)){var bb=ab;ab=r.locateFile?r.locateFile(bb,ta):ta+bb}
function cb(a){try{if(a==ab&&Ea)return new Uint8Array(Ea);if(ya)return ya(a);throw"both async and sync fetching of the wasm failed";}catch(b){Fa(b)}}
function db(a){if(!Ea&&(qa||ra)){if("function"==typeof fetch&&!a.startsWith("file://"))return fetch(a,{credentials:"same-origin"}).then(function(b){if(!b.ok)throw"failed to load wasm binary file at '"+a+"'";return b.arrayBuffer()}).catch(function(){return cb(a)});if(wa)return new Promise(function(b,c){wa(a,function(e){b(new Uint8Array(e))},c)})}return Promise.resolve().then(function(){return cb(a)})}
function eb(a,b,c){return db(a).then(function(e){return WebAssembly.instantiate(e,b)}).then(function(e){return e}).then(c,function(e){Ca("failed to asynchronously prepare wasm: "+e);Fa(e)})}
function fb(a,b){var c=ab;return Ea||"function"!=typeof WebAssembly.instantiateStreaming||$a(c)||c.startsWith("file://")||sa||"function"!=typeof fetch?eb(c,a,b):fetch(c,{credentials:"same-origin"}).then(function(e){return WebAssembly.instantiateStreaming(e,a).then(b,function(f){Ca("wasm streaming compile failed: "+f);Ca("falling back to ArrayBuffer instantiation");return eb(c,a,b)})})}function Ba(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}
function hb(a){for(;0<a.length;)a.shift()(r)}function ib(a){this.Ld=a-24;this.Qe=function(b){J[this.Ld+4>>2]=b};this.Ne=function(b){J[this.Ld+8>>2]=b};this.Oe=function(){G[this.Ld>>2]=0};this.Me=function(){Ma[this.Ld+12>>0]=0};this.Pe=function(){Ma[this.Ld+13>>0]=0};this.oe=function(b,c){this.Le();this.Qe(b);this.Ne(c);this.Oe();this.Me();this.Pe()};this.Le=function(){J[this.Ld+16>>2]=0}}var jb=0,kb={};function lb(a){for(;a.length;){var b=a.pop();a.pop()(b)}}
function mb(a){return this.fromWireType(G[a>>2])}var nb={},ob={},pb={};function qb(a){if(void 0===a)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?"_"+a:a}function rb(a,b){a=qb(a);return{[a]:function(){return b.apply(this,arguments)}}[a]}
function sb(a){var b=Error,c=rb(a,function(e){this.name=a;this.message=e;e=Error(e).stack;void 0!==e&&(this.stack=this.toString()+"\n"+e.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c}var tb=void 0;function ub(a){throw new tb(a);}
function vb(a,b,c){function e(l){l=c(l);l.length!==a.length&&ub("Mismatched type converter count");for(var q=0;q<a.length;++q)wb(a[q],l[q])}a.forEach(function(l){pb[l]=b});var f=Array(b.length),k=[],m=0;b.forEach((l,q)=>{ob.hasOwnProperty(l)?f[q]=ob[l]:(k.push(l),nb.hasOwnProperty(l)||(nb[l]=[]),nb[l].push(()=>{f[q]=ob[l];++m;m===k.length&&e(f)}))});0===k.length&&e(f)}
function xb(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+a);}}var yb=void 0;function O(a){for(var b="";C[a];)b+=yb[C[a++]];return b}var zb=void 0;function P(a){throw new zb(a);}
function wb(a,b,c={}){if(!("argPackAdvance"in b))throw new TypeError("registerType registeredInstance requires argPackAdvance");var e=b.name;a||P('type "'+e+'" must have a positive integer typeid pointer');if(ob.hasOwnProperty(a)){if(c.hf)return;P("Cannot register type '"+e+"' twice")}ob[a]=b;delete pb[a];nb.hasOwnProperty(a)&&(b=nb[a],delete nb[a],b.forEach(f=>f()))}function Ab(a){P(a.kd.Od.Md.name+" instance already deleted")}var Bb=!1;function Ib(){}
function Jb(a){--a.count.value;0===a.count.value&&(a.Qd?a.Td.Xd(a.Qd):a.Od.Md.Xd(a.Ld))}function Kb(a,b,c){if(b===c)return a;if(void 0===c.Vd)return null;a=Kb(a,b,c.Vd);return null===a?null:c.Ze(a)}var Lb={},Mb=[];function Nb(){for(;Mb.length;){var a=Mb.pop();a.kd.de=!1;a["delete"]()}}var Ob=void 0,Pb={};function Qb(a,b){for(void 0===b&&P("ptr should not be undefined");a.Vd;)b=a.je(b),a=a.Vd;return Pb[b]}
function Rb(a,b){b.Od&&b.Ld||ub("makeClassHandle requires ptr and ptrType");!!b.Td!==!!b.Qd&&ub("Both smartPtrType and smartPtr must be specified");b.count={value:1};return Sb(Object.create(a,{kd:{value:b}}))}function Sb(a){if("undefined"===typeof FinalizationRegistry)return Sb=b=>b,a;Bb=new FinalizationRegistry(b=>{Jb(b.kd)});Sb=b=>{var c=b.kd;c.Qd&&Bb.register(b,{kd:c},b);return b};Ib=b=>{Bb.unregister(b)};return Sb(a)}function Tb(){}
function Ub(a,b,c){if(void 0===a[b].Pd){var e=a[b];a[b]=function(){a[b].Pd.hasOwnProperty(arguments.length)||P("Function '"+c+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+a[b].Pd+")!");return a[b].Pd[arguments.length].apply(this,arguments)};a[b].Pd=[];a[b].Pd[e.be]=e}}
function Vb(a,b,c){r.hasOwnProperty(a)?((void 0===c||void 0!==r[a].Pd&&void 0!==r[a].Pd[c])&&P("Cannot register public name '"+a+"' twice"),Ub(r,a,a),r.hasOwnProperty(c)&&P("Cannot register multiple overloads of a function with the same number of arguments ("+c+")!"),r[a].Pd[c]=b):(r[a]=b,void 0!==c&&(r[a].zf=c))}function Wb(a,b,c,e,f,k,m,l){this.name=a;this.constructor=b;this.ee=c;this.Xd=e;this.Vd=f;this.bf=k;this.je=m;this.Ze=l;this.mf=[]}
function Xb(a,b,c){for(;b!==c;)b.je||P("Expected null or instance of "+c.name+", got an instance of "+b.name),a=b.je(a),b=b.Vd;return a}function Yb(a,b){if(null===b)return this.xe&&P("null is not a valid "+this.name),0;b.kd||P('Cannot pass "'+Zb(b)+'" as a '+this.name);b.kd.Ld||P("Cannot pass deleted object as a pointer of type "+this.name);return Xb(b.kd.Ld,b.kd.Od.Md,this.Md)}
function $b(a,b){if(null===b){this.xe&&P("null is not a valid "+this.name);if(this.ne){var c=this.ye();null!==a&&a.push(this.Xd,c);return c}return 0}b.kd||P('Cannot pass "'+Zb(b)+'" as a '+this.name);b.kd.Ld||P("Cannot pass deleted object as a pointer of type "+this.name);!this.me&&b.kd.Od.me&&P("Cannot convert argument of type "+(b.kd.Td?b.kd.Td.name:b.kd.Od.name)+" to parameter type "+this.name);c=Xb(b.kd.Ld,b.kd.Od.Md,this.Md);if(this.ne)switch(void 0===b.kd.Qd&&P("Passing raw pointer to smart pointer is illegal"),
this.sf){case 0:b.kd.Td===this?c=b.kd.Qd:P("Cannot convert argument of type "+(b.kd.Td?b.kd.Td.name:b.kd.Od.name)+" to parameter type "+this.name);break;case 1:c=b.kd.Qd;break;case 2:if(b.kd.Td===this)c=b.kd.Qd;else{var e=b.clone();c=this.nf(c,ac(function(){e["delete"]()}));null!==a&&a.push(this.Xd,c)}break;default:P("Unsupporting sharing policy")}return c}
function bc(a,b){if(null===b)return this.xe&&P("null is not a valid "+this.name),0;b.kd||P('Cannot pass "'+Zb(b)+'" as a '+this.name);b.kd.Ld||P("Cannot pass deleted object as a pointer of type "+this.name);b.kd.Od.me&&P("Cannot convert argument of type "+b.kd.Od.name+" to parameter type "+this.name);return Xb(b.kd.Ld,b.kd.Od.Md,this.Md)}
function cc(a,b,c,e,f,k,m,l,q,x,y){this.name=a;this.Md=b;this.xe=c;this.me=e;this.ne=f;this.lf=k;this.sf=m;this.He=l;this.ye=q;this.nf=x;this.Xd=y;f||void 0!==b.Vd?this.toWireType=$b:(this.toWireType=e?Yb:bc,this.Sd=null)}function dc(a,b,c){r.hasOwnProperty(a)||ub("Replacing nonexistant public symbol");void 0!==r[a].Pd&&void 0!==c?r[a].Pd[c]=b:(r[a]=b,r[a].be=c)}function Q(a){return Sa.get(a)}
function ec(a,b){var c=[];return function(){c.length=0;Object.assign(c,arguments);if(a.includes("j")){var e=r["dynCall_"+a];e=c&&c.length?e.apply(null,[b].concat(c)):e.call(null,b)}else e=Q(b).apply(null,c);return e}}function R(a,b){a=O(a);var c=a.includes("j")?ec(a,b):Q(b);"function"!=typeof c&&P("unknown function pointer with signature "+a+": "+b);return c}var fc=void 0;function nc(a){a=oc(a);var b=O(a);pc(a);return b}
function qc(a,b){function c(k){f[k]||ob[k]||(pb[k]?pb[k].forEach(c):(e.push(k),f[k]=!0))}var e=[],f={};b.forEach(c);throw new fc(a+": "+e.map(nc).join([", "]));}
function rc(a,b,c,e,f){var k=b.length;2>k&&P("argTypes array size mismatch! Must at least get return value and 'this' types!");var m=null!==b[1]&&null!==c,l=!1;for(c=1;c<b.length;++c)if(null!==b[c]&&void 0===b[c].Sd){l=!0;break}var q="void"!==b[0].name,x=k-2,y=Array(x),B=[],D=[];return function(){arguments.length!==x&&P("function "+a+" called with "+arguments.length+" arguments, expected "+x+" args!");D.length=0;B.length=m?2:1;B[0]=f;if(m){var v=b[1].toWireType(D,this);B[1]=v}for(var E=0;E<x;++E)y[E]=
b[E+2].toWireType(D,arguments[E]),B.push(y[E]);E=e.apply(null,B);if(l)lb(D);else for(var H=m?1:2;H<b.length;H++){var S=1===H?v:y[H-2];null!==b[H].Sd&&b[H].Sd(S)}v=q?b[0].fromWireType(E):void 0;return v}}function sc(a,b){for(var c=[],e=0;e<a;e++)c.push(J[b+4*e>>2]);return c}var tc=[],uc=[{},{value:void 0},{value:null},{value:!0},{value:!1}];function vc(a){4<a&&0===--uc[a].ze&&(uc[a]=void 0,tc.push(a))}
var wc=a=>{a||P("Cannot use deleted val. handle = "+a);return uc[a].value},ac=a=>{switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var b=tc.length?tc.pop():uc.length;uc[b]={ze:1,value:a};return b}};
function xc(a,b,c){switch(b){case 0:return function(e){return this.fromWireType((c?Ma:C)[e])};case 1:return function(e){return this.fromWireType((c?Na:Oa)[e>>1])};case 2:return function(e){return this.fromWireType((c?G:J)[e>>2])};default:throw new TypeError("Unknown integer type: "+a);}}function yc(a,b){var c=ob[a];void 0===c&&P(b+" has unknown type "+nc(a));return c}function Zb(a){if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}
function zc(a,b){switch(b){case 2:return function(c){return this.fromWireType(N[c>>2])};case 3:return function(c){return this.fromWireType(Pa[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}
function Ac(a,b,c){switch(b){case 0:return c?function(e){return Ma[e]}:function(e){return C[e]};case 1:return c?function(e){return Na[e>>1]}:function(e){return Oa[e>>1]};case 2:return c?function(e){return G[e>>2]}:function(e){return J[e>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var Bc="undefined"!=typeof TextDecoder?new TextDecoder("utf-16le"):void 0;
function Cc(a,b){var c=a>>1;for(var e=c+b/2;!(c>=e)&&Oa[c];)++c;c<<=1;if(32<c-a&&Bc)return Bc.decode(C.subarray(a,c));c="";for(e=0;!(e>=b/2);++e){var f=Na[a+2*e>>1];if(0==f)break;c+=String.fromCharCode(f)}return c}function Dc(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var e=b;c=c<2*a.length?c/2:a.length;for(var f=0;f<c;++f)Na[b>>1]=a.charCodeAt(f),b+=2;Na[b>>1]=0;return b-e}function Ec(a){return 2*a.length}
function Fc(a,b){for(var c=0,e="";!(c>=b/4);){var f=G[a+4*c>>2];if(0==f)break;++c;65536<=f?(f-=65536,e+=String.fromCharCode(55296|f>>10,56320|f&1023)):e+=String.fromCharCode(f)}return e}function Gc(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var e=b;c=e+c-4;for(var f=0;f<a.length;++f){var k=a.charCodeAt(f);if(55296<=k&&57343>=k){var m=a.charCodeAt(++f);k=65536+((k&1023)<<10)|m&1023}G[b>>2]=k;b+=4;if(b+4>c)break}G[b>>2]=0;return b-e}
function Hc(a){for(var b=0,c=0;c<a.length;++c){var e=a.charCodeAt(c);55296<=e&&57343>=e&&++c;b+=4}return b}var Ic={};function Jc(a){var b=Ic[a];return void 0===b?O(a):b}var Kc=[];
function Lc(){function a(b){b.$$$embind_global$$$=b;var c="object"==typeof $$$embind_global$$$&&b.$$$embind_global$$$==b;c||delete b.$$$embind_global$$$;return c}if("object"==typeof globalThis)return globalThis;if("object"==typeof $$$embind_global$$$)return $$$embind_global$$$;"object"==typeof global&&a(global)?$$$embind_global$$$=global:"object"==typeof self&&a(self)&&($$$embind_global$$$=self);if("object"==typeof $$$embind_global$$$)return $$$embind_global$$$;throw Error("unable to get global object.");
}function Mc(a){var b=Kc.length;Kc.push(a);return b}function Nc(a,b){for(var c=Array(a),e=0;e<a;++e)c[e]=yc(J[b+4*e>>2],"parameter "+e);return c}var Oc=[];function Pc(a){var b=Array(a+1);return function(c,e,f){b[0]=c;for(var k=0;k<a;++k){var m=yc(J[e+4*k>>2],"parameter "+k);b[k+1]=m.readValueFromPointer(f);f+=m.argPackAdvance}c=new (c.bind.apply(c,b));return ac(c)}}var Qc={},Rc;Rc=sa?()=>{var a=process.hrtime();return 1E3*a[0]+a[1]/1E6}:()=>performance.now();
function Sc(a){var b=a.getExtension("ANGLE_instanced_arrays");b&&(a.vertexAttribDivisor=function(c,e){b.vertexAttribDivisorANGLE(c,e)},a.drawArraysInstanced=function(c,e,f,k){b.drawArraysInstancedANGLE(c,e,f,k)},a.drawElementsInstanced=function(c,e,f,k,m){b.drawElementsInstancedANGLE(c,e,f,k,m)})}
function Tc(a){var b=a.getExtension("OES_vertex_array_object");b&&(a.createVertexArray=function(){return b.createVertexArrayOES()},a.deleteVertexArray=function(c){b.deleteVertexArrayOES(c)},a.bindVertexArray=function(c){b.bindVertexArrayOES(c)},a.isVertexArray=function(c){return b.isVertexArrayOES(c)})}function Uc(a){var b=a.getExtension("WEBGL_draw_buffers");b&&(a.drawBuffers=function(c,e){b.drawBuffersWEBGL(c,e)})}
var Vc=1,Wc=[],Xc=[],Yc=[],Zc=[],ea=[],$c=[],ad=[],ia=[],bd=[],cd=[],ed={},fd={},gd=4;function U(a){hd||(hd=a)}function ca(a){for(var b=Vc++,c=a.length;c<b;c++)a[c]=null;return b}function fa(a,b){a.oe||(a.oe=a.getContext,a.getContext=function(e,f){f=a.oe(e,f);return"webgl"==e==f instanceof WebGLRenderingContext?f:null});var c=1<b.majorVersion?a.getContext("webgl2",b):a.getContext("webgl",b);return c?jd(c,b):0}
function jd(a,b){var c=ca(ia),e={gf:c,attributes:b,version:b.majorVersion,Ud:a};a.canvas&&(a.canvas.Ke=e);ia[c]=e;("undefined"==typeof b.$e||b.$e)&&kd(e);return c}function ha(a){u=ia[a];r.xf=X=u&&u.Ud;return!(a&&!X)}
function kd(a){a||(a=u);if(!a.jf){a.jf=!0;var b=a.Ud;Sc(b);Tc(b);Uc(b);b.De=b.getExtension("WEBGL_draw_instanced_base_vertex_base_instance");b.Ge=b.getExtension("WEBGL_multi_draw_instanced_base_vertex_base_instance");2<=a.version&&(b.Ee=b.getExtension("EXT_disjoint_timer_query_webgl2"));if(2>a.version||!b.Ee)b.Ee=b.getExtension("EXT_disjoint_timer_query");b.yf=b.getExtension("WEBGL_multi_draw");(b.getSupportedExtensions()||[]).forEach(function(c){c.includes("lose_context")||c.includes("debug")||b.getExtension(c)})}}
var u,hd,ld=[];function md(a,b,c,e){for(var f=0;f<a;f++){var k=X[c](),m=k&&ca(e);k?(k.name=m,e[m]=k):U(1282);G[b+4*f>>2]=m}}
function nd(a,b,c){if(b){var e=void 0;switch(a){case 36346:e=1;break;case 36344:0!=c&&1!=c&&U(1280);return;case 34814:case 36345:e=0;break;case 34466:var f=X.getParameter(34467);e=f?f.length:0;break;case 33309:if(2>u.version){U(1282);return}e=2*(X.getSupportedExtensions()||[]).length;break;case 33307:case 33308:if(2>u.version){U(1280);return}e=33307==a?3:0}if(void 0===e)switch(f=X.getParameter(a),typeof f){case "number":e=f;break;case "boolean":e=f?1:0;break;case "string":U(1280);return;case "object":if(null===
f)switch(a){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 36662:case 36663:case 35053:case 35055:case 36010:case 35097:case 35869:case 32874:case 36389:case 35983:case 35368:case 34068:e=0;break;default:U(1280);return}else{if(f instanceof Float32Array||f instanceof Uint32Array||f instanceof Int32Array||f instanceof Array){for(a=0;a<f.length;++a)switch(c){case 0:G[b+4*a>>2]=f[a];break;case 2:N[b+4*a>>2]=f[a];break;case 4:Ma[b+a>>0]=f[a]?1:0}return}try{e=f.name|0}catch(k){U(1280);
Ca("GL_INVALID_ENUM in glGet"+c+"v: Unknown object returned from WebGL getParameter("+a+")! (error: "+k+")");return}}break;default:U(1280);Ca("GL_INVALID_ENUM in glGet"+c+"v: Native code calling glGet"+c+"v("+a+") and it returns "+f+" of type "+typeof f+"!");return}switch(c){case 1:c=e;J[b>>2]=c;J[b+4>>2]=(c-J[b>>2])/4294967296;break;case 0:G[b>>2]=e;break;case 2:N[b>>2]=e;break;case 4:Ma[b>>0]=e?1:0}}else U(1281)}function od(a){var b=ja(a)+1,c=pd(b);ka(a,C,c,b);return c}
function qd(a){return"]"==a.slice(-1)&&a.lastIndexOf("[")}function rd(a){a-=5120;return 0==a?Ma:1==a?C:2==a?Na:4==a?G:6==a?N:5==a||28922==a||28520==a||30779==a||30782==a?J:Oa}function sd(a,b,c,e,f){a=rd(a);var k=31-Math.clz32(a.BYTES_PER_ELEMENT),m=gd;return a.subarray(f>>k,f+e*(c*({5:3,6:4,8:2,29502:3,29504:4,26917:2,26918:2,29846:3,29847:4}[b-6402]||1)*(1<<k)+m-1&-m)>>k)}
function Z(a){var b=X.Xe;if(b){var c=b.ie[a];"number"==typeof c&&(b.ie[a]=c=X.getUniformLocation(b,b.Ie[a]+(0<c?"["+c+"]":"")));return c}U(1282)}var td=[],ud=[],vd={};
function wd(){if(!xd){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:na||"./this.program"},b;for(b in vd)void 0===vd[b]?delete a[b]:a[b]=vd[b];var c=[];for(b in a)c.push(b+"="+a[b]);xd=c}return xd}var xd,yd=[null,[],[]];function zd(a){return 0===a%4&&(0!==a%100||0===a%400)}
var Ad=[31,29,31,30,31,30,31,31,30,31,30,31],Bd=[31,28,31,30,31,30,31,31,30,31,30,31];function Cd(a){var b=Array(ja(a)+1);ka(a,b,0,b.length);return b}
function Dd(a,b,c,e){function f(v,E,H){for(v="number"==typeof v?v.toString():v||"";v.length<E;)v=H[0]+v;return v}function k(v,E){return f(v,E,"0")}function m(v,E){function H(Y){return 0>Y?-1:0<Y?1:0}var S;0===(S=H(v.getFullYear()-E.getFullYear()))&&0===(S=H(v.getMonth()-E.getMonth()))&&(S=H(v.getDate()-E.getDate()));return S}function l(v){switch(v.getDay()){case 0:return new Date(v.getFullYear()-1,11,29);case 1:return v;case 2:return new Date(v.getFullYear(),0,3);case 3:return new Date(v.getFullYear(),
0,2);case 4:return new Date(v.getFullYear(),0,1);case 5:return new Date(v.getFullYear()-1,11,31);case 6:return new Date(v.getFullYear()-1,11,30)}}function q(v){var E=v.Zd;for(v=new Date((new Date(v.$d+1900,0,1)).getTime());0<E;){var H=v.getMonth(),S=(zd(v.getFullYear())?Ad:Bd)[H];if(E>S-v.getDate())E-=S-v.getDate()+1,v.setDate(1),11>H?v.setMonth(H+1):(v.setMonth(0),v.setFullYear(v.getFullYear()+1));else{v.setDate(v.getDate()+E);break}}H=new Date(v.getFullYear()+1,0,4);E=l(new Date(v.getFullYear(),
0,4));H=l(H);return 0>=m(E,v)?0>=m(H,v)?v.getFullYear()+1:v.getFullYear():v.getFullYear()-1}var x=G[e+40>>2];e={vf:G[e>>2],uf:G[e+4>>2],se:G[e+8>>2],Ae:G[e+12>>2],te:G[e+16>>2],$d:G[e+20>>2],Wd:G[e+24>>2],Zd:G[e+28>>2],Bf:G[e+32>>2],tf:G[e+36>>2],wf:x?Ka(x):""};c=Ka(c);x={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y",
"%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var y in x)c=c.replace(new RegExp(y,"g"),x[y]);var B="Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),D="January February March April May June July August September October November December".split(" ");x={"%a":function(v){return B[v.Wd].substring(0,3)},"%A":function(v){return B[v.Wd]},"%b":function(v){return D[v.te].substring(0,3)},
"%B":function(v){return D[v.te]},"%C":function(v){return k((v.$d+1900)/100|0,2)},"%d":function(v){return k(v.Ae,2)},"%e":function(v){return f(v.Ae,2," ")},"%g":function(v){return q(v).toString().substring(2)},"%G":function(v){return q(v)},"%H":function(v){return k(v.se,2)},"%I":function(v){v=v.se;0==v?v=12:12<v&&(v-=12);return k(v,2)},"%j":function(v){for(var E=0,H=0;H<=v.te-1;E+=(zd(v.$d+1900)?Ad:Bd)[H++]);return k(v.Ae+E,3)},"%m":function(v){return k(v.te+1,2)},"%M":function(v){return k(v.uf,2)},
"%n":function(){return"\n"},"%p":function(v){return 0<=v.se&&12>v.se?"AM":"PM"},"%S":function(v){return k(v.vf,2)},"%t":function(){return"\t"},"%u":function(v){return v.Wd||7},"%U":function(v){return k(Math.floor((v.Zd+7-v.Wd)/7),2)},"%V":function(v){var E=Math.floor((v.Zd+7-(v.Wd+6)%7)/7);2>=(v.Wd+371-v.Zd-2)%7&&E++;if(E)53==E&&(H=(v.Wd+371-v.Zd)%7,4==H||3==H&&zd(v.$d)||(E=1));else{E=52;var H=(v.Wd+7-v.Zd-1)%7;(4==H||5==H&&zd(v.$d%400-1))&&E++}return k(E,2)},"%w":function(v){return v.Wd},"%W":function(v){return k(Math.floor((v.Zd+
7-(v.Wd+6)%7)/7),2)},"%y":function(v){return(v.$d+1900).toString().substring(2)},"%Y":function(v){return v.$d+1900},"%z":function(v){v=v.tf;var E=0<=v;v=Math.abs(v)/60;return(E?"+":"-")+String("0000"+(v/60*100+v%60)).slice(-4)},"%Z":function(v){return v.wf},"%%":function(){return"%"}};c=c.replace(/%%/g,"\x00\x00");for(y in x)c.includes(y)&&(c=c.replace(new RegExp(y,"g"),x[y](e)));c=c.replace(/\0\0/g,"%");y=Cd(c);if(y.length>b)return 0;Ma.set(y,a);return y.length-1}tb=r.InternalError=sb("InternalError");
for(var Ed=Array(256),Fd=0;256>Fd;++Fd)Ed[Fd]=String.fromCharCode(Fd);yb=Ed;zb=r.BindingError=sb("BindingError");Tb.prototype.isAliasOf=function(a){if(!(this instanceof Tb&&a instanceof Tb))return!1;var b=this.kd.Od.Md,c=this.kd.Ld,e=a.kd.Od.Md;for(a=a.kd.Ld;b.Vd;)c=b.je(c),b=b.Vd;for(;e.Vd;)a=e.je(a),e=e.Vd;return b===e&&c===a};
Tb.prototype.clone=function(){this.kd.Ld||Ab(this);if(this.kd.he)return this.kd.count.value+=1,this;var a=Sb,b=Object,c=b.create,e=Object.getPrototypeOf(this),f=this.kd;a=a(c.call(b,e,{kd:{value:{count:f.count,de:f.de,he:f.he,Ld:f.Ld,Od:f.Od,Qd:f.Qd,Td:f.Td}}}));a.kd.count.value+=1;a.kd.de=!1;return a};Tb.prototype["delete"]=function(){this.kd.Ld||Ab(this);this.kd.de&&!this.kd.he&&P("Object already scheduled for deletion");Ib(this);Jb(this.kd);this.kd.he||(this.kd.Qd=void 0,this.kd.Ld=void 0)};
Tb.prototype.isDeleted=function(){return!this.kd.Ld};Tb.prototype.deleteLater=function(){this.kd.Ld||Ab(this);this.kd.de&&!this.kd.he&&P("Object already scheduled for deletion");Mb.push(this);1===Mb.length&&Ob&&Ob(Nb);this.kd.de=!0;return this};r.getInheritedInstanceCount=function(){return Object.keys(Pb).length};r.getLiveInheritedInstances=function(){var a=[],b;for(b in Pb)Pb.hasOwnProperty(b)&&a.push(Pb[b]);return a};r.flushPendingDeletes=Nb;r.setDelayFunction=function(a){Ob=a;Mb.length&&Ob&&Ob(Nb)};
cc.prototype.cf=function(a){this.He&&(a=this.He(a));return a};cc.prototype.Ce=function(a){this.Xd&&this.Xd(a)};cc.prototype.argPackAdvance=8;cc.prototype.readValueFromPointer=mb;cc.prototype.deleteObject=function(a){if(null!==a)a["delete"]()};
cc.prototype.fromWireType=function(a){function b(){return this.ne?Rb(this.Md.ee,{Od:this.lf,Ld:c,Td:this,Qd:a}):Rb(this.Md.ee,{Od:this,Ld:a})}var c=this.cf(a);if(!c)return this.Ce(a),null;var e=Qb(this.Md,c);if(void 0!==e){if(0===e.kd.count.value)return e.kd.Ld=c,e.kd.Qd=a,e.clone();e=e.clone();this.Ce(a);return e}e=this.Md.bf(c);e=Lb[e];if(!e)return b.call(this);e=this.me?e.We:e.pointerType;var f=Kb(c,this.Md,e.Md);return null===f?b.call(this):this.ne?Rb(e.Md.ee,{Od:e,Ld:f,Td:this,Qd:a}):Rb(e.Md.ee,
{Od:e,Ld:f})};fc=r.UnboundTypeError=sb("UnboundTypeError");r.count_emval_handles=function(){for(var a=0,b=5;b<uc.length;++b)void 0!==uc[b]&&++a;return a};r.get_first_emval=function(){for(var a=5;a<uc.length;++a)if(void 0!==uc[a])return uc[a];return null};for(var X,Gd=0;32>Gd;++Gd)ld.push(Array(Gd));var Hd=new Float32Array(288);for(Gd=0;288>Gd;++Gd)td[Gd]=Hd.subarray(0,Gd+1);var Id=new Int32Array(288);for(Gd=0;288>Gd;++Gd)ud[Gd]=Id.subarray(0,Gd+1);
var Wd={G:function(a,b,c){(new ib(a)).oe(b,c);jb++;throw a;},U:function(){return 0},tb:function(){},vb:function(){return 0},qb:function(){},rb:function(){},V:function(){},sb:function(){},C:function(a){var b=kb[a];delete kb[a];var c=b.ye,e=b.Xd,f=b.Fe,k=f.map(m=>m.ff).concat(f.map(m=>m.qf));vb([a],k,m=>{var l={};f.forEach((q,x)=>{var y=m[x],B=q.df,D=q.ef,v=m[x+f.length],E=q.pf,H=q.rf;l[q.af]={read:S=>y.fromWireType(B(D,S)),write:(S,Y)=>{var da=[];E(H,S,v.toWireType(da,Y));lb(da)}}});return[{name:b.name,
fromWireType:function(q){var x={},y;for(y in l)x[y]=l[y].read(q);e(q);return x},toWireType:function(q,x){for(var y in l)if(!(y in x))throw new TypeError('Missing field: "'+y+'"');var B=c();for(y in l)l[y].write(B,x[y]);null!==q&&q.push(e,B);return B},argPackAdvance:8,readValueFromPointer:mb,Sd:e}]})},ib:function(){},zb:function(a,b,c,e,f){var k=xb(c);b=O(b);wb(a,{name:b,fromWireType:function(m){return!!m},toWireType:function(m,l){return l?e:f},argPackAdvance:8,readValueFromPointer:function(m){if(1===
c)var l=Ma;else if(2===c)l=Na;else if(4===c)l=G;else throw new TypeError("Unknown boolean type size: "+b);return this.fromWireType(l[m>>k])},Sd:null})},l:function(a,b,c,e,f,k,m,l,q,x,y,B,D){y=O(y);k=R(f,k);l&&(l=R(m,l));x&&(x=R(q,x));D=R(B,D);var v=qb(y);Vb(v,function(){qc("Cannot construct "+y+" due to unbound types",[e])});vb([a,b,c],e?[e]:[],function(E){E=E[0];if(e){var H=E.Md;var S=H.ee}else S=Tb.prototype;E=rb(v,function(){if(Object.getPrototypeOf(this)!==Y)throw new zb("Use 'new' to construct "+
y);if(void 0===da.Yd)throw new zb(y+" has no accessible constructor");var La=da.Yd[arguments.length];if(void 0===La)throw new zb("Tried to invoke ctor of "+y+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys(da.Yd).toString()+") parameters instead!");return La.apply(this,arguments)});var Y=Object.create(S,{constructor:{value:E}});E.prototype=Y;var da=new Wb(y,E,Y,D,H,k,l,x);H=new cc(y,da,!0,!1,!1);S=new cc(y+"*",da,!1,!1,!1);var ua=new cc(y+" const*",da,!1,!0,!1);
Lb[a]={pointerType:S,We:ua};dc(v,E);return[H,S,ua]})},e:function(a,b,c,e,f,k,m){var l=sc(c,e);b=O(b);k=R(f,k);vb([],[a],function(q){function x(){qc("Cannot call "+y+" due to unbound types",l)}q=q[0];var y=q.name+"."+b;b.startsWith("@@")&&(b=Symbol[b.substring(2)]);var B=q.Md.constructor;void 0===B[b]?(x.be=c-1,B[b]=x):(Ub(B,b,y),B[b].Pd[c-1]=x);vb([],l,function(D){D=[D[0],null].concat(D.slice(1));D=rc(y,D,null,k,m);void 0===B[b].Pd?(D.be=c-1,B[b]=D):B[b].Pd[c-1]=D;return[]});return[]})},A:function(a,
b,c,e,f,k){0<b||Fa();var m=sc(b,c);f=R(e,f);vb([],[a],function(l){l=l[0];var q="constructor "+l.name;void 0===l.Md.Yd&&(l.Md.Yd=[]);if(void 0!==l.Md.Yd[b-1])throw new zb("Cannot register multiple constructors with identical number of parameters ("+(b-1)+") for class '"+l.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!");l.Md.Yd[b-1]=()=>{qc("Cannot construct "+l.name+" due to unbound types",m)};vb([],m,function(x){x.splice(1,0,null);l.Md.Yd[b-
1]=rc(q,x,null,f,k);return[]});return[]})},a:function(a,b,c,e,f,k,m,l){var q=sc(c,e);b=O(b);k=R(f,k);vb([],[a],function(x){function y(){qc("Cannot call "+B+" due to unbound types",q)}x=x[0];var B=x.name+"."+b;b.startsWith("@@")&&(b=Symbol[b.substring(2)]);l&&x.Md.mf.push(b);var D=x.Md.ee,v=D[b];void 0===v||void 0===v.Pd&&v.className!==x.name&&v.be===c-2?(y.be=c-2,y.className=x.name,D[b]=y):(Ub(D,b,B),D[b].Pd[c-2]=y);vb([],q,function(E){E=rc(B,E,x,k,m);void 0===D[b].Pd?(E.be=c-2,D[b]=E):D[b].Pd[c-
2]=E;return[]});return[]})},r:function(a,b,c){a=O(a);vb([],[b],function(e){e=e[0];r[a]=e.fromWireType(c);return[]})},yb:function(a,b){b=O(b);wb(a,{name:b,fromWireType:function(c){var e=wc(c);vc(c);return e},toWireType:function(c,e){return ac(e)},argPackAdvance:8,readValueFromPointer:mb,Sd:null})},j:function(a,b,c,e){function f(){}c=xb(c);b=O(b);f.values={};wb(a,{name:b,constructor:f,fromWireType:function(k){return this.constructor.values[k]},toWireType:function(k,m){return m.value},argPackAdvance:8,
readValueFromPointer:xc(b,c,e),Sd:null});Vb(b,f)},b:function(a,b,c){var e=yc(a,"enum");b=O(b);a=e.constructor;e=Object.create(e.constructor.prototype,{value:{value:c},constructor:{value:rb(e.name+"_"+b,function(){})}});a.values[c]=e;a[b]=e},X:function(a,b,c){c=xb(c);b=O(b);wb(a,{name:b,fromWireType:function(e){return e},toWireType:function(e,f){return f},argPackAdvance:8,readValueFromPointer:zc(b,c),Sd:null})},t:function(a,b,c,e,f,k){var m=sc(b,c);a=O(a);f=R(e,f);Vb(a,function(){qc("Cannot call "+
a+" due to unbound types",m)},b-1);vb([],m,function(l){l=[l[0],null].concat(l.slice(1));dc(a,rc(a,l,null,f,k),b-1);return[]})},E:function(a,b,c,e,f){b=O(b);-1===f&&(f=4294967295);f=xb(c);var k=l=>l;if(0===e){var m=32-8*c;k=l=>l<<m>>>m}c=b.includes("unsigned")?function(l,q){return q>>>0}:function(l,q){return q};wb(a,{name:b,fromWireType:k,toWireType:c,argPackAdvance:8,readValueFromPointer:Ac(b,f,0!==e),Sd:null})},s:function(a,b,c){function e(k){k>>=2;var m=J;return new f(m.buffer,m[k+1],m[k])}var f=
[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=O(c);wb(a,{name:c,fromWireType:e,argPackAdvance:8,readValueFromPointer:e},{hf:!0})},q:function(a,b,c,e,f,k,m,l,q,x,y,B){c=O(c);k=R(f,k);l=R(m,l);x=R(q,x);B=R(y,B);vb([a],[b],function(D){D=D[0];return[new cc(c,D.Md,!1,!1,!0,D,e,k,l,x,B)]})},W:function(a,b){b=O(b);var c="std::string"===b;wb(a,{name:b,fromWireType:function(e){var f=J[e>>2],k=e+4;if(c)for(var m=k,l=0;l<=f;++l){var q=k+l;if(l==f||0==C[q]){m=
Ka(m,q-m);if(void 0===x)var x=m;else x+=String.fromCharCode(0),x+=m;m=q+1}}else{x=Array(f);for(l=0;l<f;++l)x[l]=String.fromCharCode(C[k+l]);x=x.join("")}pc(e);return x},toWireType:function(e,f){f instanceof ArrayBuffer&&(f=new Uint8Array(f));var k,m="string"==typeof f;m||f instanceof Uint8Array||f instanceof Uint8ClampedArray||f instanceof Int8Array||P("Cannot pass non-string to std::string");c&&m?k=ja(f):k=f.length;var l=pd(4+k+1),q=l+4;J[l>>2]=k;if(c&&m)ka(f,C,q,k+1);else if(m)for(m=0;m<k;++m){var x=
f.charCodeAt(m);255<x&&(pc(q),P("String has UTF-16 code units that do not fit in 8 bits"));C[q+m]=x}else for(m=0;m<k;++m)C[q+m]=f[m];null!==e&&e.push(pc,l);return l},argPackAdvance:8,readValueFromPointer:mb,Sd:function(e){pc(e)}})},N:function(a,b,c){c=O(c);if(2===b){var e=Cc;var f=Dc;var k=Ec;var m=()=>Oa;var l=1}else 4===b&&(e=Fc,f=Gc,k=Hc,m=()=>J,l=2);wb(a,{name:c,fromWireType:function(q){for(var x=J[q>>2],y=m(),B,D=q+4,v=0;v<=x;++v){var E=q+4+v*b;if(v==x||0==y[E>>l])D=e(D,E-D),void 0===B?B=D:(B+=
String.fromCharCode(0),B+=D),D=E+b}pc(q);return B},toWireType:function(q,x){"string"!=typeof x&&P("Cannot pass non-string to C++ string type "+c);var y=k(x),B=pd(4+y+b);J[B>>2]=y>>l;f(x,B+4,y+b);null!==q&&q.push(pc,B);return B},argPackAdvance:8,readValueFromPointer:mb,Sd:function(q){pc(q)}})},D:function(a,b,c,e,f,k){kb[a]={name:O(b),ye:R(c,e),Xd:R(f,k),Fe:[]}},d:function(a,b,c,e,f,k,m,l,q,x){kb[a].Fe.push({af:O(b),ff:c,df:R(e,f),ef:k,qf:m,pf:R(l,q),rf:x})},Ab:function(a,b){b=O(b);wb(a,{kf:!0,name:b,
argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},xb:function(){return!0},kb:function(){throw Infinity;},F:function(a,b,c){a=wc(a);b=yc(b,"emval::as");var e=[],f=ac(e);J[c>>2]=f;return b.toWireType(e,a)},P:function(a,b,c,e,f){a=Kc[a];b=wc(b);c=Jc(c);var k=[];J[e>>2]=ac(k);return a(b,c,k,f)},x:function(a,b,c,e){a=Kc[a];b=wc(b);c=Jc(c);a(b,c,null,e)},c:vc,K:function(a){if(0===a)return ac(Lc());a=Jc(a);return ac(Lc()[a])},u:function(a,b){var c=Nc(a,b),e=c[0];b=e.name+"_$"+c.slice(1).map(function(m){return m.name}).join("_")+
"$";var f=Oc[b];if(void 0!==f)return f;var k=Array(a-1);f=Mc((m,l,q,x)=>{for(var y=0,B=0;B<a-1;++B)k[B]=c[B+1].readValueFromPointer(x+y),y+=c[B+1].argPackAdvance;m=m[l].apply(m,k);for(B=0;B<a-1;++B)c[B+1].Ye&&c[B+1].Ye(k[B]);if(!e.kf)return e.toWireType(q,m)});return Oc[b]=f},z:function(a,b){a=wc(a);b=wc(b);return ac(a[b])},o:function(a){4<a&&(uc[a].ze+=1)},J:function(a,b,c,e){a=wc(a);var f=Qc[b];f||(f=Pc(b),Qc[b]=f);return f(a,c,e)},I:function(){return ac([])},f:function(a){return ac(Jc(a))},H:function(){return ac({})},
eb:function(a){a=wc(a);return!a},B:function(a){var b=wc(a);lb(b);vc(a)},i:function(a,b,c){a=wc(a);b=wc(b);c=wc(c);a[b]=c},g:function(a,b){a=yc(a,"_emval_take_value");a=a.readValueFromPointer(b);return ac(a)},mb:function(){return-52},nb:function(){},h:function(){Fa("")},wb:Rc,Uc:function(a){X.activeTexture(a)},Vc:function(a,b){X.attachShader(Xc[a],$c[b])},Wc:function(a,b,c){X.bindAttribLocation(Xc[a],b,Ka(c))},Xc:function(a,b){35051==a?X.ve=b:35052==a&&(X.ce=b);X.bindBuffer(a,Wc[b])},$:function(a,
b){X.bindFramebuffer(a,Yc[b])},Yb:function(a,b){X.bindRenderbuffer(a,Zc[b])},Ib:function(a,b){X.bindSampler(a,bd[b])},Yc:function(a,b){X.bindTexture(a,ea[b])},qc:function(a){X.bindVertexArray(ad[a])},tc:function(a){X.bindVertexArray(ad[a])},Zc:function(a,b,c,e){X.blendColor(a,b,c,e)},_c:function(a){X.blendEquation(a)},$c:function(a,b){X.blendFunc(a,b)},Sb:function(a,b,c,e,f,k,m,l,q,x){X.blitFramebuffer(a,b,c,e,f,k,m,l,q,x)},aa:function(a,b,c,e){2<=u.version?c&&b?X.bufferData(a,C,e,c,b):X.bufferData(a,
b,e):X.bufferData(a,c?C.subarray(c,c+b):b,e)},ba:function(a,b,c,e){2<=u.version?c&&X.bufferSubData(a,b,C,e,c):X.bufferSubData(a,b,C.subarray(e,e+c))},Zb:function(a){return X.checkFramebufferStatus(a)},R:function(a){X.clear(a)},_:function(a,b,c,e){X.clearColor(a,b,c,e)},T:function(a){X.clearStencil(a)},cb:function(a,b,c,e){return X.clientWaitSync(cd[a],b,(c>>>0)+4294967296*e)},ca:function(a,b,c,e){X.colorMask(!!a,!!b,!!c,!!e)},da:function(a){X.compileShader($c[a])},ea:function(a,b,c,e,f,k,m,l){2<=
u.version?X.ce||!m?X.compressedTexImage2D(a,b,c,e,f,k,m,l):X.compressedTexImage2D(a,b,c,e,f,k,C,l,m):X.compressedTexImage2D(a,b,c,e,f,k,l?C.subarray(l,l+m):null)},fa:function(a,b,c,e,f,k,m,l,q){2<=u.version?X.ce||!l?X.compressedTexSubImage2D(a,b,c,e,f,k,m,l,q):X.compressedTexSubImage2D(a,b,c,e,f,k,m,C,q,l):X.compressedTexSubImage2D(a,b,c,e,f,k,m,q?C.subarray(q,q+l):null)},Qb:function(a,b,c,e,f){X.copyBufferSubData(a,b,c,e,f)},ga:function(a,b,c,e,f,k,m,l){X.copyTexSubImage2D(a,b,c,e,f,k,m,l)},ha:function(){var a=
ca(Xc),b=X.createProgram();b.name=a;b.re=b.pe=b.qe=0;b.Be=1;Xc[a]=b;return a},ia:function(a){var b=ca($c);$c[b]=X.createShader(a);return b},ja:function(a){X.cullFace(a)},ka:function(a,b){for(var c=0;c<a;c++){var e=G[b+4*c>>2],f=Wc[e];f&&(X.deleteBuffer(f),f.name=0,Wc[e]=null,e==X.ve&&(X.ve=0),e==X.ce&&(X.ce=0))}},_b:function(a,b){for(var c=0;c<a;++c){var e=G[b+4*c>>2],f=Yc[e];f&&(X.deleteFramebuffer(f),f.name=0,Yc[e]=null)}},la:function(a){if(a){var b=Xc[a];b?(X.deleteProgram(b),b.name=0,Xc[a]=null):
U(1281)}},$b:function(a,b){for(var c=0;c<a;c++){var e=G[b+4*c>>2],f=Zc[e];f&&(X.deleteRenderbuffer(f),f.name=0,Zc[e]=null)}},Jb:function(a,b){for(var c=0;c<a;c++){var e=G[b+4*c>>2],f=bd[e];f&&(X.deleteSampler(f),f.name=0,bd[e]=null)}},ma:function(a){if(a){var b=$c[a];b?(X.deleteShader(b),$c[a]=null):U(1281)}},Rb:function(a){if(a){var b=cd[a];b?(X.deleteSync(b),b.name=0,cd[a]=null):U(1281)}},na:function(a,b){for(var c=0;c<a;c++){var e=G[b+4*c>>2],f=ea[e];f&&(X.deleteTexture(f),f.name=0,ea[e]=null)}},
rc:function(a,b){for(var c=0;c<a;c++){var e=G[b+4*c>>2];X.deleteVertexArray(ad[e]);ad[e]=null}},uc:function(a,b){for(var c=0;c<a;c++){var e=G[b+4*c>>2];X.deleteVertexArray(ad[e]);ad[e]=null}},oa:function(a){X.depthMask(!!a)},pa:function(a){X.disable(a)},qa:function(a){X.disableVertexAttribArray(a)},ra:function(a,b,c){X.drawArrays(a,b,c)},oc:function(a,b,c,e){X.drawArraysInstanced(a,b,c,e)},mc:function(a,b,c,e,f){X.De.drawArraysInstancedBaseInstanceWEBGL(a,b,c,e,f)},kc:function(a,b){for(var c=ld[a],
e=0;e<a;e++)c[e]=G[b+4*e>>2];X.drawBuffers(c)},sa:function(a,b,c,e){X.drawElements(a,b,c,e)},pc:function(a,b,c,e,f){X.drawElementsInstanced(a,b,c,e,f)},nc:function(a,b,c,e,f,k,m){X.De.drawElementsInstancedBaseVertexBaseInstanceWEBGL(a,b,c,e,f,k,m)},ec:function(a,b,c,e,f,k){X.drawElements(a,e,f,k)},ta:function(a){X.enable(a)},ua:function(a){X.enableVertexAttribArray(a)},Ob:function(a,b){return(a=X.fenceSync(a,b))?(b=ca(cd),a.name=b,cd[b]=a,b):0},va:function(){X.finish()},wa:function(){X.flush()},ac:function(a,
b,c,e){X.framebufferRenderbuffer(a,b,c,Zc[e])},bc:function(a,b,c,e,f){X.framebufferTexture2D(a,b,c,ea[e],f)},xa:function(a){X.frontFace(a)},ya:function(a,b){md(a,b,"createBuffer",Wc)},cc:function(a,b){md(a,b,"createFramebuffer",Yc)},dc:function(a,b){md(a,b,"createRenderbuffer",Zc)},Kb:function(a,b){md(a,b,"createSampler",bd)},za:function(a,b){md(a,b,"createTexture",ea)},sc:function(a,b){md(a,b,"createVertexArray",ad)},vc:function(a,b){md(a,b,"createVertexArray",ad)},Ub:function(a){X.generateMipmap(a)},
Aa:function(a,b,c){c?G[c>>2]=X.getBufferParameter(a,b):U(1281)},Ba:function(){var a=X.getError()||hd;hd=0;return a},Ca:function(a,b){nd(a,b,2)},Vb:function(a,b,c,e){a=X.getFramebufferAttachmentParameter(a,b,c);if(a instanceof WebGLRenderbuffer||a instanceof WebGLTexture)a=a.name|0;G[e>>2]=a},L:function(a,b){nd(a,b,0)},Da:function(a,b,c,e){a=X.getProgramInfoLog(Xc[a]);null===a&&(a="(unknown error)");b=0<b&&e?ka(a,C,e,b):0;c&&(G[c>>2]=b)},Ea:function(a,b,c){if(c)if(a>=Vc)U(1281);else if(a=Xc[a],35716==
b)a=X.getProgramInfoLog(a),null===a&&(a="(unknown error)"),G[c>>2]=a.length+1;else if(35719==b){if(!a.re)for(b=0;b<X.getProgramParameter(a,35718);++b)a.re=Math.max(a.re,X.getActiveUniform(a,b).name.length+1);G[c>>2]=a.re}else if(35722==b){if(!a.pe)for(b=0;b<X.getProgramParameter(a,35721);++b)a.pe=Math.max(a.pe,X.getActiveAttrib(a,b).name.length+1);G[c>>2]=a.pe}else if(35381==b){if(!a.qe)for(b=0;b<X.getProgramParameter(a,35382);++b)a.qe=Math.max(a.qe,X.getActiveUniformBlockName(a,b).length+1);G[c>>
2]=a.qe}else G[c>>2]=X.getProgramParameter(a,b);else U(1281)},Wb:function(a,b,c){c?G[c>>2]=X.getRenderbufferParameter(a,b):U(1281)},Fa:function(a,b,c,e){a=X.getShaderInfoLog($c[a]);null===a&&(a="(unknown error)");b=0<b&&e?ka(a,C,e,b):0;c&&(G[c>>2]=b)},Fb:function(a,b,c,e){a=X.getShaderPrecisionFormat(a,b);G[c>>2]=a.rangeMin;G[c+4>>2]=a.rangeMax;G[e>>2]=a.precision},Ga:function(a,b,c){c?35716==b?(a=X.getShaderInfoLog($c[a]),null===a&&(a="(unknown error)"),G[c>>2]=a?a.length+1:0):35720==b?(a=X.getShaderSource($c[a]),
G[c>>2]=a?a.length+1:0):G[c>>2]=X.getShaderParameter($c[a],b):U(1281)},Q:function(a){var b=ed[a];if(!b){switch(a){case 7939:b=X.getSupportedExtensions()||[];b=b.concat(b.map(function(e){return"GL_"+e}));b=od(b.join(" "));break;case 7936:case 7937:case 37445:case 37446:(b=X.getParameter(a))||U(1280);b=b&&od(b);break;case 7938:b=X.getParameter(7938);b=2<=u.version?"OpenGL ES 3.0 ("+b+")":"OpenGL ES 2.0 ("+b+")";b=od(b);break;case 35724:b=X.getParameter(35724);var c=b.match(/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/);
null!==c&&(3==c[1].length&&(c[1]+="0"),b="OpenGL ES GLSL ES "+c[1]+" ("+b+")");b=od(b);break;default:U(1280)}ed[a]=b}return b},bb:function(a,b){if(2>u.version)return U(1282),0;var c=fd[a];if(c)return 0>b||b>=c.length?(U(1281),0):c[b];switch(a){case 7939:return c=X.getSupportedExtensions()||[],c=c.concat(c.map(function(e){return"GL_"+e})),c=c.map(function(e){return od(e)}),c=fd[a]=c,0>b||b>=c.length?(U(1281),0):c[b];default:return U(1280),0}},Ha:function(a,b){b=Ka(b);if(a=Xc[a]){var c=a,e=c.ie,f=c.Je,
k;if(!e)for(c.ie=e={},c.Ie={},k=0;k<X.getProgramParameter(c,35718);++k){var m=X.getActiveUniform(c,k);var l=m.name;m=m.size;var q=qd(l);q=0<q?l.slice(0,q):l;var x=c.Be;c.Be+=m;f[q]=[m,x];for(l=0;l<m;++l)e[x]=l,c.Ie[x++]=q}c=a.ie;e=0;f=b;k=qd(b);0<k&&(e=parseInt(b.slice(k+1))>>>0,f=b.slice(0,k));if((f=a.Je[f])&&e<f[0]&&(e+=f[1],c[e]=c[e]||X.getUniformLocation(a,b)))return e}else U(1281);return-1},Gb:function(a,b,c){for(var e=ld[b],f=0;f<b;f++)e[f]=G[c+4*f>>2];X.invalidateFramebuffer(a,e)},Hb:function(a,
b,c,e,f,k,m){for(var l=ld[b],q=0;q<b;q++)l[q]=G[c+4*q>>2];X.invalidateSubFramebuffer(a,l,e,f,k,m)},Pb:function(a){return X.isSync(cd[a])},Ia:function(a){return(a=ea[a])?X.isTexture(a):0},Ja:function(a){X.lineWidth(a)},Ka:function(a){a=Xc[a];X.linkProgram(a);a.ie=0;a.Je={}},ic:function(a,b,c,e,f,k){X.Ge.multiDrawArraysInstancedBaseInstanceWEBGL(a,G,b>>2,G,c>>2,G,e>>2,J,f>>2,k)},jc:function(a,b,c,e,f,k,m,l){X.Ge.multiDrawElementsInstancedBaseVertexBaseInstanceWEBGL(a,G,b>>2,c,G,e>>2,G,f>>2,G,k>>2,J,
m>>2,l)},La:function(a,b){3317==a&&(gd=b);X.pixelStorei(a,b)},lc:function(a){X.readBuffer(a)},Ma:function(a,b,c,e,f,k,m){if(2<=u.version)if(X.ve)X.readPixels(a,b,c,e,f,k,m);else{var l=rd(k);X.readPixels(a,b,c,e,f,k,l,m>>31-Math.clz32(l.BYTES_PER_ELEMENT))}else(m=sd(k,f,c,e,m))?X.readPixels(a,b,c,e,f,k,m):U(1280)},Xb:function(a,b,c,e){X.renderbufferStorage(a,b,c,e)},Tb:function(a,b,c,e,f){X.renderbufferStorageMultisample(a,b,c,e,f)},Lb:function(a,b,c){X.samplerParameterf(bd[a],b,c)},Mb:function(a,
b,c){X.samplerParameteri(bd[a],b,c)},Nb:function(a,b,c){X.samplerParameteri(bd[a],b,G[c>>2])},Na:function(a,b,c,e){X.scissor(a,b,c,e)},Oa:function(a,b,c,e){for(var f="",k=0;k<b;++k){var m=e?G[e+4*k>>2]:-1;f+=Ka(G[c+4*k>>2],0>m?void 0:m)}X.shaderSource($c[a],f)},Pa:function(a,b,c){X.stencilFunc(a,b,c)},Qa:function(a,b,c,e){X.stencilFuncSeparate(a,b,c,e)},Ra:function(a){X.stencilMask(a)},Sa:function(a,b){X.stencilMaskSeparate(a,b)},Ta:function(a,b,c){X.stencilOp(a,b,c)},Ua:function(a,b,c,e){X.stencilOpSeparate(a,
b,c,e)},Va:function(a,b,c,e,f,k,m,l,q){if(2<=u.version)if(X.ce)X.texImage2D(a,b,c,e,f,k,m,l,q);else if(q){var x=rd(l);X.texImage2D(a,b,c,e,f,k,m,l,x,q>>31-Math.clz32(x.BYTES_PER_ELEMENT))}else X.texImage2D(a,b,c,e,f,k,m,l,null);else X.texImage2D(a,b,c,e,f,k,m,l,q?sd(l,m,e,f,q):null)},Wa:function(a,b,c){X.texParameterf(a,b,c)},Xa:function(a,b,c){X.texParameterf(a,b,N[c>>2])},Ya:function(a,b,c){X.texParameteri(a,b,c)},Za:function(a,b,c){X.texParameteri(a,b,G[c>>2])},fc:function(a,b,c,e,f){X.texStorage2D(a,
b,c,e,f)},_a:function(a,b,c,e,f,k,m,l,q){if(2<=u.version)if(X.ce)X.texSubImage2D(a,b,c,e,f,k,m,l,q);else if(q){var x=rd(l);X.texSubImage2D(a,b,c,e,f,k,m,l,x,q>>31-Math.clz32(x.BYTES_PER_ELEMENT))}else X.texSubImage2D(a,b,c,e,f,k,m,l,null);else x=null,q&&(x=sd(l,m,f,k,q)),X.texSubImage2D(a,b,c,e,f,k,m,l,x)},$a:function(a,b){X.uniform1f(Z(a),b)},ab:function(a,b,c){if(2<=u.version)b&&X.uniform1fv(Z(a),N,c>>2,b);else{if(288>=b)for(var e=td[b-1],f=0;f<b;++f)e[f]=N[c+4*f>>2];else e=N.subarray(c>>2,c+4*
b>>2);X.uniform1fv(Z(a),e)}},Qc:function(a,b){X.uniform1i(Z(a),b)},Rc:function(a,b,c){if(2<=u.version)b&&X.uniform1iv(Z(a),G,c>>2,b);else{if(288>=b)for(var e=ud[b-1],f=0;f<b;++f)e[f]=G[c+4*f>>2];else e=G.subarray(c>>2,c+4*b>>2);X.uniform1iv(Z(a),e)}},Sc:function(a,b,c){X.uniform2f(Z(a),b,c)},Tc:function(a,b,c){if(2<=u.version)b&&X.uniform2fv(Z(a),N,c>>2,2*b);else{if(144>=b)for(var e=td[2*b-1],f=0;f<2*b;f+=2)e[f]=N[c+4*f>>2],e[f+1]=N[c+(4*f+4)>>2];else e=N.subarray(c>>2,c+8*b>>2);X.uniform2fv(Z(a),
e)}},Pc:function(a,b,c){X.uniform2i(Z(a),b,c)},Oc:function(a,b,c){if(2<=u.version)b&&X.uniform2iv(Z(a),G,c>>2,2*b);else{if(144>=b)for(var e=ud[2*b-1],f=0;f<2*b;f+=2)e[f]=G[c+4*f>>2],e[f+1]=G[c+(4*f+4)>>2];else e=G.subarray(c>>2,c+8*b>>2);X.uniform2iv(Z(a),e)}},Nc:function(a,b,c,e){X.uniform3f(Z(a),b,c,e)},Mc:function(a,b,c){if(2<=u.version)b&&X.uniform3fv(Z(a),N,c>>2,3*b);else{if(96>=b)for(var e=td[3*b-1],f=0;f<3*b;f+=3)e[f]=N[c+4*f>>2],e[f+1]=N[c+(4*f+4)>>2],e[f+2]=N[c+(4*f+8)>>2];else e=N.subarray(c>>
2,c+12*b>>2);X.uniform3fv(Z(a),e)}},Lc:function(a,b,c,e){X.uniform3i(Z(a),b,c,e)},Kc:function(a,b,c){if(2<=u.version)b&&X.uniform3iv(Z(a),G,c>>2,3*b);else{if(96>=b)for(var e=ud[3*b-1],f=0;f<3*b;f+=3)e[f]=G[c+4*f>>2],e[f+1]=G[c+(4*f+4)>>2],e[f+2]=G[c+(4*f+8)>>2];else e=G.subarray(c>>2,c+12*b>>2);X.uniform3iv(Z(a),e)}},Jc:function(a,b,c,e,f){X.uniform4f(Z(a),b,c,e,f)},Ic:function(a,b,c){if(2<=u.version)b&&X.uniform4fv(Z(a),N,c>>2,4*b);else{if(72>=b){var e=td[4*b-1],f=N;c>>=2;for(var k=0;k<4*b;k+=4){var m=
c+k;e[k]=f[m];e[k+1]=f[m+1];e[k+2]=f[m+2];e[k+3]=f[m+3]}}else e=N.subarray(c>>2,c+16*b>>2);X.uniform4fv(Z(a),e)}},wc:function(a,b,c,e,f){X.uniform4i(Z(a),b,c,e,f)},xc:function(a,b,c){if(2<=u.version)b&&X.uniform4iv(Z(a),G,c>>2,4*b);else{if(72>=b)for(var e=ud[4*b-1],f=0;f<4*b;f+=4)e[f]=G[c+4*f>>2],e[f+1]=G[c+(4*f+4)>>2],e[f+2]=G[c+(4*f+8)>>2],e[f+3]=G[c+(4*f+12)>>2];else e=G.subarray(c>>2,c+16*b>>2);X.uniform4iv(Z(a),e)}},yc:function(a,b,c,e){if(2<=u.version)b&&X.uniformMatrix2fv(Z(a),!!c,N,e>>2,4*
b);else{if(72>=b)for(var f=td[4*b-1],k=0;k<4*b;k+=4)f[k]=N[e+4*k>>2],f[k+1]=N[e+(4*k+4)>>2],f[k+2]=N[e+(4*k+8)>>2],f[k+3]=N[e+(4*k+12)>>2];else f=N.subarray(e>>2,e+16*b>>2);X.uniformMatrix2fv(Z(a),!!c,f)}},zc:function(a,b,c,e){if(2<=u.version)b&&X.uniformMatrix3fv(Z(a),!!c,N,e>>2,9*b);else{if(32>=b)for(var f=td[9*b-1],k=0;k<9*b;k+=9)f[k]=N[e+4*k>>2],f[k+1]=N[e+(4*k+4)>>2],f[k+2]=N[e+(4*k+8)>>2],f[k+3]=N[e+(4*k+12)>>2],f[k+4]=N[e+(4*k+16)>>2],f[k+5]=N[e+(4*k+20)>>2],f[k+6]=N[e+(4*k+24)>>2],f[k+7]=
N[e+(4*k+28)>>2],f[k+8]=N[e+(4*k+32)>>2];else f=N.subarray(e>>2,e+36*b>>2);X.uniformMatrix3fv(Z(a),!!c,f)}},Ac:function(a,b,c,e){if(2<=u.version)b&&X.uniformMatrix4fv(Z(a),!!c,N,e>>2,16*b);else{if(18>=b){var f=td[16*b-1],k=N;e>>=2;for(var m=0;m<16*b;m+=16){var l=e+m;f[m]=k[l];f[m+1]=k[l+1];f[m+2]=k[l+2];f[m+3]=k[l+3];f[m+4]=k[l+4];f[m+5]=k[l+5];f[m+6]=k[l+6];f[m+7]=k[l+7];f[m+8]=k[l+8];f[m+9]=k[l+9];f[m+10]=k[l+10];f[m+11]=k[l+11];f[m+12]=k[l+12];f[m+13]=k[l+13];f[m+14]=k[l+14];f[m+15]=k[l+15]}}else f=
N.subarray(e>>2,e+64*b>>2);X.uniformMatrix4fv(Z(a),!!c,f)}},Bc:function(a){a=Xc[a];X.useProgram(a);X.Xe=a},Cc:function(a,b){X.vertexAttrib1f(a,b)},Dc:function(a,b){X.vertexAttrib2f(a,N[b>>2],N[b+4>>2])},Ec:function(a,b){X.vertexAttrib3f(a,N[b>>2],N[b+4>>2],N[b+8>>2])},Fc:function(a,b){X.vertexAttrib4f(a,N[b>>2],N[b+4>>2],N[b+8>>2],N[b+12>>2])},gc:function(a,b){X.vertexAttribDivisor(a,b)},hc:function(a,b,c,e,f){X.vertexAttribIPointer(a,b,c,e,f)},Gc:function(a,b,c,e,f,k){X.vertexAttribPointer(a,b,c,
!!e,f,k)},Hc:function(a,b,c,e){X.viewport(a,b,c,e)},db:function(a,b,c,e){X.waitSync(cd[a],b,(c>>>0)+4294967296*e)},lb:function(a){var b=C.length;a>>>=0;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var e=b*(1+.2/c);e=Math.min(e,a+100663296);var f=Math,k=f.min;e=Math.max(a,e);e+=(65536-e%65536)%65536;a:{var m=Ga.buffer;try{Ga.grow(k.call(f,2147483648,e)-m.byteLength+65535>>>16);Qa();var l=1;break a}catch(q){}l=void 0}if(l)return!0}return!1},fb:function(){return u?u.gf:0},ob:function(a,b){var c=0;
wd().forEach(function(e,f){var k=b+c;f=J[a+4*f>>2]=k;for(k=0;k<e.length;++k)Ma[f++>>0]=e.charCodeAt(k);Ma[f>>0]=0;c+=e.length+1});return 0},pb:function(a,b){var c=wd();J[a>>2]=c.length;var e=0;c.forEach(function(f){e+=f.length+1});J[b>>2]=e;return 0},Bb:function(a){if(!noExitRuntime){if(r.onExit)r.onExit(a);Ha=!0}oa(a,new Ba(a))},M:function(){return 52},gb:function(){return 52},ub:function(){return 52},hb:function(){return 70},S:function(a,b,c,e){for(var f=0,k=0;k<c;k++){var m=J[b>>2],l=J[b+4>>2];
b+=8;for(var q=0;q<l;q++){var x=C[m+q],y=yd[a];0===x||10===x?((1===a?Da:Ca)(Ja(y,0)),y.length=0):y.push(x)}f+=l}J[e>>2]=f;return 0},n:Jd,m:Kd,k:Ld,O:Md,Z:Nd,Y:Od,w:Pd,y:Qd,p:Rd,v:Sd,Cb:Td,Db:Ud,Eb:Vd,jb:function(a,b,c,e){return Dd(a,b,c,e)}};
(function(){function a(c){c=c.exports;r.asm=c;Ga=r.asm.ad;Qa();Sa=r.asm.cd;Ua.unshift(r.asm.bd);Xa--;r.monitorRunDependencies&&r.monitorRunDependencies(Xa);if(0==Xa&&(null!==Ya&&(clearInterval(Ya),Ya=null),Za)){var e=Za;Za=null;e()}return c}var b={a:Wd};Xa++;r.monitorRunDependencies&&r.monitorRunDependencies(Xa);if(r.instantiateWasm)try{return r.instantiateWasm(b,a)}catch(c){Ca("Module.instantiateWasm callback failed with error: "+c),ba(c)}fb(b,function(c){a(c.instance)}).catch(ba);return{}})();
var pc=r._free=function(){return(pc=r._free=r.asm.dd).apply(null,arguments)},pd=r._malloc=function(){return(pd=r._malloc=r.asm.ed).apply(null,arguments)},oc=r.___getTypeName=function(){return(oc=r.___getTypeName=r.asm.fd).apply(null,arguments)};r.__embind_initialize_bindings=function(){return(r.__embind_initialize_bindings=r.asm.gd).apply(null,arguments)};function Xd(){return(Xd=r.asm.hd).apply(null,arguments)}function Yd(){return(Yd=r.asm.id).apply(null,arguments)}
function Zd(){return(Zd=r.asm.jd).apply(null,arguments)}r.dynCall_viji=function(){return(r.dynCall_viji=r.asm.ld).apply(null,arguments)};r.dynCall_vijiii=function(){return(r.dynCall_vijiii=r.asm.md).apply(null,arguments)};r.dynCall_viiiiij=function(){return(r.dynCall_viiiiij=r.asm.nd).apply(null,arguments)};r.dynCall_iiiji=function(){return(r.dynCall_iiiji=r.asm.od).apply(null,arguments)};r.dynCall_jii=function(){return(r.dynCall_jii=r.asm.pd).apply(null,arguments)};
r.dynCall_vij=function(){return(r.dynCall_vij=r.asm.qd).apply(null,arguments)};r.dynCall_iiij=function(){return(r.dynCall_iiij=r.asm.rd).apply(null,arguments)};r.dynCall_iiiij=function(){return(r.dynCall_iiiij=r.asm.sd).apply(null,arguments)};r.dynCall_viij=function(){return(r.dynCall_viij=r.asm.td).apply(null,arguments)};r.dynCall_viiij=function(){return(r.dynCall_viiij=r.asm.ud).apply(null,arguments)};r.dynCall_ji=function(){return(r.dynCall_ji=r.asm.vd).apply(null,arguments)};
r.dynCall_iij=function(){return(r.dynCall_iij=r.asm.wd).apply(null,arguments)};r.dynCall_jiiii=function(){return(r.dynCall_jiiii=r.asm.xd).apply(null,arguments)};r.dynCall_jiiiiii=function(){return(r.dynCall_jiiiiii=r.asm.yd).apply(null,arguments)};r.dynCall_jiiiiji=function(){return(r.dynCall_jiiiiji=r.asm.zd).apply(null,arguments)};r.dynCall_iijj=function(){return(r.dynCall_iijj=r.asm.Ad).apply(null,arguments)};r.dynCall_iiji=function(){return(r.dynCall_iiji=r.asm.Bd).apply(null,arguments)};
r.dynCall_iijjiii=function(){return(r.dynCall_iijjiii=r.asm.Cd).apply(null,arguments)};r.dynCall_vijjjii=function(){return(r.dynCall_vijjjii=r.asm.Dd).apply(null,arguments)};r.dynCall_jiji=function(){return(r.dynCall_jiji=r.asm.Ed).apply(null,arguments)};r.dynCall_viijii=function(){return(r.dynCall_viijii=r.asm.Fd).apply(null,arguments)};r.dynCall_iiiiij=function(){return(r.dynCall_iiiiij=r.asm.Gd).apply(null,arguments)};r.dynCall_iiiiijj=function(){return(r.dynCall_iiiiijj=r.asm.Hd).apply(null,arguments)};
r.dynCall_iiiiiijj=function(){return(r.dynCall_iiiiiijj=r.asm.Id).apply(null,arguments)};function Sd(a,b,c,e,f){var k=Yd();try{Q(a)(b,c,e,f)}catch(m){Zd(k);if(m!==m+0)throw m;Xd(1,0)}}function Kd(a,b,c){var e=Yd();try{return Q(a)(b,c)}catch(f){Zd(e);if(f!==f+0)throw f;Xd(1,0)}}function Qd(a,b,c){var e=Yd();try{Q(a)(b,c)}catch(f){Zd(e);if(f!==f+0)throw f;Xd(1,0)}}function Jd(a,b){var c=Yd();try{return Q(a)(b)}catch(e){Zd(c);if(e!==e+0)throw e;Xd(1,0)}}
function Pd(a,b){var c=Yd();try{Q(a)(b)}catch(e){Zd(c);if(e!==e+0)throw e;Xd(1,0)}}function Ld(a,b,c,e){var f=Yd();try{return Q(a)(b,c,e)}catch(k){Zd(f);if(k!==k+0)throw k;Xd(1,0)}}function Vd(a,b,c,e,f,k,m,l,q,x){var y=Yd();try{Q(a)(b,c,e,f,k,m,l,q,x)}catch(B){Zd(y);if(B!==B+0)throw B;Xd(1,0)}}function Rd(a,b,c,e){var f=Yd();try{Q(a)(b,c,e)}catch(k){Zd(f);if(k!==k+0)throw k;Xd(1,0)}}function Ud(a,b,c,e,f,k,m){var l=Yd();try{Q(a)(b,c,e,f,k,m)}catch(q){Zd(l);if(q!==q+0)throw q;Xd(1,0)}}
function Md(a,b,c,e,f){var k=Yd();try{return Q(a)(b,c,e,f)}catch(m){Zd(k);if(m!==m+0)throw m;Xd(1,0)}}function Nd(a,b,c,e,f,k,m){var l=Yd();try{return Q(a)(b,c,e,f,k,m)}catch(q){Zd(l);if(q!==q+0)throw q;Xd(1,0)}}function Td(a,b,c,e,f,k){var m=Yd();try{Q(a)(b,c,e,f,k)}catch(l){Zd(m);if(l!==l+0)throw l;Xd(1,0)}}function Od(a,b,c,e,f,k,m,l,q,x){var y=Yd();try{return Q(a)(b,c,e,f,k,m,l,q,x)}catch(B){Zd(y);if(B!==B+0)throw B;Xd(1,0)}}var $d;Za=function ae(){$d||be();$d||(Za=ae)};
function be(){function a(){if(!$d&&($d=!0,r.calledRun=!0,!Ha)){hb(Ua);aa(r);if(r.onRuntimeInitialized)r.onRuntimeInitialized();if(r.postRun)for("function"==typeof r.postRun&&(r.postRun=[r.postRun]);r.postRun.length;){var b=r.postRun.shift();Va.unshift(b)}hb(Va)}}if(!(0<Xa)){if(r.preRun)for("function"==typeof r.preRun&&(r.preRun=[r.preRun]);r.preRun.length;)Wa();hb(Ta);0<Xa||(r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1);a()},1)):a())}}
if(r.preInit)for("function"==typeof r.preInit&&(r.preInit=[r.preInit]);0<r.preInit.length;)r.preInit.pop()();be();
return CanvasKitInit.ready
}
);
})();
if (typeof exports === 'object' && typeof module === 'object')
module.exports = CanvasKitInit;
else if (typeof define === 'function' && define['amd'])
define([], function() { return CanvasKitInit; });
else if (typeof exports === 'object')
exports["CanvasKitInit"] = CanvasKitInit;

Binary file not shown.

View File

@@ -1,222 +0,0 @@
var CanvasKitInit = (() => {
var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;
if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename;
return (
function(CanvasKitInit = {}) {
var r;r||(r=typeof CanvasKitInit !== 'undefined' ? CanvasKitInit : {});var aa,ba;r.ready=new Promise(function(a,b){aa=a;ba=b});
(function(a){a.Id=a.Id||[];a.Id.push(function(){a.MakeSWCanvasSurface=function(b){var c=b,e="undefined"!==typeof OffscreenCanvas&&c instanceof OffscreenCanvas;if(!("undefined"!==typeof HTMLCanvasElement&&c instanceof HTMLCanvasElement||e||(c=document.getElementById(b),c)))throw"Canvas with id "+b+" was not found";if(b=a.MakeSurface(c.width,c.height))b.fe=c;return b};a.MakeCanvasSurface||(a.MakeCanvasSurface=a.MakeSWCanvasSurface);a.MakeSurface=function(b,c){var e={width:b,height:c,colorType:a.ColorType.RGBA_8888,
alphaType:a.AlphaType.Unpremul,colorSpace:a.ColorSpace.SRGB},f=b*c*4,k=a._malloc(f);if(e=a.Surface._makeRasterDirect(e,k,4*b))e.fe=null,e.Qe=b,e.Ne=c,e.Oe=f,e.pe=k,e.getCanvas().clear(a.TRANSPARENT);return e};a.MakeRasterDirectSurface=function(b,c,e){return a.Surface._makeRasterDirect(b,c.byteOffset,e)};a.Surface.prototype.flush=function(b){a.Fd(this.Ed);this._flush();if(this.fe){var c=new Uint8ClampedArray(a.HEAPU8.buffer,this.pe,this.Oe);c=new ImageData(c,this.Qe,this.Ne);b?this.fe.getContext("2d").putImageData(c,
0,0,b[0],b[1],b[2]-b[0],b[3]-b[1]):this.fe.getContext("2d").putImageData(c,0,0)}};a.Surface.prototype.dispose=function(){this.pe&&a._free(this.pe);this.delete()};a.Fd=a.Fd||function(){};a.ge=a.ge||function(){return null}})})(r);
(function(a){a.Id=a.Id||[];a.Id.push(function(){function b(l,q,x){return l&&l.hasOwnProperty(q)?l[q]:x}function c(l){var q=ca(ea);ea[q]=l;return q}function e(l){return l.naturalHeight||l.videoHeight||l.displayHeight||l.height}function f(l){return l.naturalWidth||l.videoWidth||l.displayWidth||l.width}function k(l,q,x,y){l.bindTexture(l.TEXTURE_2D,q);y||x.alphaType!==a.AlphaType.Premul||l.pixelStorei(l.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0);return q}function m(l,q,x){x||q.alphaType!==a.AlphaType.Premul||
l.pixelStorei(l.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1);l.bindTexture(l.TEXTURE_2D,null)}a.GetWebGLContext=function(l,q){if(!l)throw"null canvas passed into makeWebGLContext";var x={alpha:b(q,"alpha",1),depth:b(q,"depth",1),stencil:b(q,"stencil",8),antialias:b(q,"antialias",0),premultipliedAlpha:b(q,"premultipliedAlpha",1),preserveDrawingBuffer:b(q,"preserveDrawingBuffer",0),preferLowPowerToHighPerformance:b(q,"preferLowPowerToHighPerformance",0),failIfMajorPerformanceCaveat:b(q,"failIfMajorPerformanceCaveat",
0),enableExtensionsByDefault:b(q,"enableExtensionsByDefault",1),explicitSwapControl:b(q,"explicitSwapControl",0),renderViaOffscreenBackBuffer:b(q,"renderViaOffscreenBackBuffer",0)};x.majorVersion=q&&q.majorVersion?q.majorVersion:"undefined"!==typeof WebGL2RenderingContext?2:1;if(x.explicitSwapControl)throw"explicitSwapControl is not supported";l=fa(l,x);if(!l)return 0;ha(l);u.Pd.getExtension("WEBGL_debug_renderer_info");return l};a.deleteContext=function(l){u===ia[l]&&(u=null);"object"==typeof JSEvents&&
JSEvents.vf(ia[l].Pd.canvas);ia[l]&&ia[l].Pd.canvas&&(ia[l].Pd.canvas.He=void 0);ia[l]=null};a._setTextureCleanup({deleteTexture:function(l,q){var x=ea[q];x&&ia[l].Pd.deleteTexture(x);ea[q]=null}});a.MakeWebGLContext=function(l){if(!this.Fd(l))return null;var q=this._MakeGrContext();if(!q)return null;q.Ed=l;var x=q.delete.bind(q);q["delete"]=function(){a.Fd(this.Ed);x()}.bind(q);return u.re=q};a.MakeGrContext=a.MakeWebGLContext;a.GrDirectContext.prototype.getResourceCacheLimitBytes=function(){a.Fd(this.Ed);
this._getResourceCacheLimitBytes()};a.GrDirectContext.prototype.getResourceCacheUsageBytes=function(){a.Fd(this.Ed);this._getResourceCacheUsageBytes()};a.GrDirectContext.prototype.releaseResourcesAndAbandonContext=function(){a.Fd(this.Ed);this._releaseResourcesAndAbandonContext()};a.GrDirectContext.prototype.setResourceCacheLimitBytes=function(l){a.Fd(this.Ed);this._setResourceCacheLimitBytes(l)};a.MakeOnScreenGLSurface=function(l,q,x,y,B,D){if(!this.Fd(l.Ed))return null;q=void 0===B||void 0===D?
this._MakeOnScreenGLSurface(l,q,x,y):this._MakeOnScreenGLSurface(l,q,x,y,B,D);if(!q)return null;q.Ed=l.Ed;return q};a.MakeRenderTarget=function(){var l=arguments[0];if(!this.Fd(l.Ed))return null;if(3===arguments.length){var q=this._MakeRenderTargetWH(l,arguments[1],arguments[2]);if(!q)return null}else if(2===arguments.length){if(q=this._MakeRenderTargetII(l,arguments[1]),!q)return null}else return null;q.Ed=l.Ed;return q};a.MakeWebGLCanvasSurface=function(l,q,x){q=q||null;var y=l,B="undefined"!==
typeof OffscreenCanvas&&y instanceof OffscreenCanvas;if(!("undefined"!==typeof HTMLCanvasElement&&y instanceof HTMLCanvasElement||B||(y=document.getElementById(l),y)))throw"Canvas with id "+l+" was not found";l=this.GetWebGLContext(y,x);if(!l||0>l)throw"failed to create webgl context: err "+l;l=this.MakeWebGLContext(l);q=this.MakeOnScreenGLSurface(l,y.width,y.height,q);return q?q:(q=y.cloneNode(!0),y.parentNode.replaceChild(q,y),q.classList.add("ck-replaced"),a.MakeSWCanvasSurface(q))};a.MakeCanvasSurface=
a.MakeWebGLCanvasSurface;a.Surface.prototype.makeImageFromTexture=function(l,q){a.Fd(this.Ed);l=c(l);if(q=this._makeImageFromTexture(this.Ed,l,q))q.be=l;return q};a.Surface.prototype.makeImageFromTextureSource=function(l,q,x){q||(q={height:e(l),width:f(l),colorType:a.ColorType.RGBA_8888,alphaType:x?a.AlphaType.Premul:a.AlphaType.Unpremul});q.colorSpace||(q.colorSpace=a.ColorSpace.SRGB);a.Fd(this.Ed);var y=u.Pd;x=k(y,y.createTexture(),q,x);2===u.version?y.texImage2D(y.TEXTURE_2D,0,y.RGBA,q.width,q.height,
0,y.RGBA,y.UNSIGNED_BYTE,l):y.texImage2D(y.TEXTURE_2D,0,y.RGBA,y.RGBA,y.UNSIGNED_BYTE,l);m(y,q);this._resetContext();return this.makeImageFromTexture(x,q)};a.Surface.prototype.updateTextureFromSource=function(l,q,x){if(l.be){a.Fd(this.Ed);var y=l.getImageInfo(),B=u.Pd,D=k(B,ea[l.be],y,x);2===u.version?B.texImage2D(B.TEXTURE_2D,0,B.RGBA,f(q),e(q),0,B.RGBA,B.UNSIGNED_BYTE,q):B.texImage2D(B.TEXTURE_2D,0,B.RGBA,B.RGBA,B.UNSIGNED_BYTE,q);m(B,y,x);this._resetContext();ea[l.be]=null;l.be=c(D);y.colorSpace=
l.getColorSpace();q=this._makeImageFromTexture(this.Ed,l.be,y);x=l.jd.Gd;B=l.jd.Ld;l.jd.Gd=q.jd.Gd;l.jd.Ld=q.jd.Ld;q.jd.Gd=x;q.jd.Ld=B;q.delete();y.colorSpace.delete()}};a.MakeLazyImageFromTextureSource=function(l,q,x){q||(q={height:e(l),width:f(l),colorType:a.ColorType.RGBA_8888,alphaType:x?a.AlphaType.Premul:a.AlphaType.Unpremul});q.colorSpace||(q.colorSpace=a.ColorSpace.SRGB);var y={makeTexture:function(){var B=u,D=B.Pd,v=k(D,D.createTexture(),q,x);2===B.version?D.texImage2D(D.TEXTURE_2D,0,D.RGBA,
q.width,q.height,0,D.RGBA,D.UNSIGNED_BYTE,l):D.texImage2D(D.TEXTURE_2D,0,D.RGBA,D.RGBA,D.UNSIGNED_BYTE,l);m(D,q,x);return c(v)},freeSrc:function(){}};"VideoFrame"===l.constructor.name&&(y.freeSrc=function(){l.close()});return a.Image._makeFromGenerator(q,y)};a.Fd=function(l){return l?ha(l):!1};a.ge=function(){return u&&u.re&&!u.re.isDeleted()?u.re:null}})})(r);
(function(a){function b(g){return(f(255*g[3])<<24|f(255*g[0])<<16|f(255*g[1])<<8|f(255*g[2])<<0)>>>0}function c(g){if(g&&g._ck)return g;if(g instanceof Float32Array){for(var d=Math.floor(g.length/4),h=new Uint32Array(d),n=0;n<d;n++)h[n]=b(g.slice(4*n,4*(n+1)));return h}if(g instanceof Uint32Array)return g;if(g instanceof Array&&g[0]instanceof Float32Array)return g.map(b)}function e(g){if(void 0===g)return 1;var d=parseFloat(g);return g&&-1!==g.indexOf("%")?d/100:d}function f(g){return Math.round(Math.max(0,
Math.min(g||0,255)))}function k(g,d){d&&d._ck||a._free(g)}function m(g,d,h){if(!g||!g.length)return M;if(g&&g._ck)return g.byteOffset;var n=a[d].BYTES_PER_ELEMENT;h||(h=a._malloc(g.length*n));a[d].set(g,h/n);return h}function l(g){var d={Md:M,count:g.length,colorType:a.ColorType.RGBA_F32};if(g instanceof Float32Array)d.Md=m(g,"HEAPF32"),d.count=g.length/4;else if(g instanceof Uint32Array)d.Md=m(g,"HEAPU32"),d.colorType=a.ColorType.RGBA_8888;else if(g instanceof Array){if(g&&g.length){for(var h=a._malloc(16*
g.length),n=0,t=h/4,w=0;w<g.length;w++)for(var z=0;4>z;z++)a.HEAPF32[t+n]=g[w][z],n++;g=h}else g=M;d.Md=g}else throw"Invalid argument to copyFlexibleColorArray, Not a color array "+typeof g;return d}function q(g){if(!g)return M;var d=S.toTypedArray();if(g.length){if(6===g.length||9===g.length)return m(g,"HEAPF32",H),6===g.length&&a.HEAPF32.set(dd,6+H/4),H;if(16===g.length)return d[0]=g[0],d[1]=g[1],d[2]=g[3],d[3]=g[4],d[4]=g[5],d[5]=g[7],d[6]=g[12],d[7]=g[13],d[8]=g[15],H;throw"invalid matrix size";
}if(void 0===g.m11)throw"invalid matrix argument";d[0]=g.m11;d[1]=g.m21;d[2]=g.m41;d[3]=g.m12;d[4]=g.m22;d[5]=g.m42;d[6]=g.m14;d[7]=g.m24;d[8]=g.m44;return H}function x(g){if(!g)return M;var d=da.toTypedArray();if(g.length){if(16!==g.length&&6!==g.length&&9!==g.length)throw"invalid matrix size";if(16===g.length)return m(g,"HEAPF32",Y);d.fill(0);d[0]=g[0];d[1]=g[1];d[3]=g[2];d[4]=g[3];d[5]=g[4];d[7]=g[5];d[10]=1;d[12]=g[6];d[13]=g[7];d[15]=g[8];6===g.length&&(d[12]=0,d[13]=0,d[15]=1);return Y}if(void 0===
g.m11)throw"invalid matrix argument";d[0]=g.m11;d[1]=g.m21;d[2]=g.m31;d[3]=g.m41;d[4]=g.m12;d[5]=g.m22;d[6]=g.m32;d[7]=g.m42;d[8]=g.m13;d[9]=g.m23;d[10]=g.m33;d[11]=g.m43;d[12]=g.m14;d[13]=g.m24;d[14]=g.m34;d[15]=g.m44;return Y}function y(g,d){return m(g,"HEAPF32",d||ua)}function B(g,d,h,n){var t=La.toTypedArray();t[0]=g;t[1]=d;t[2]=h;t[3]=n;return ua}function D(g){for(var d=new Float32Array(4),h=0;4>h;h++)d[h]=a.HEAPF32[g/4+h];return d}function v(g,d){return m(g,"HEAPF32",d||V)}function E(g,d){return m(g,
"HEAPF32",d||Cb)}a.Color=function(g,d,h,n){void 0===n&&(n=1);return a.Color4f(f(g)/255,f(d)/255,f(h)/255,n)};a.ColorAsInt=function(g,d,h,n){void 0===n&&(n=255);return(f(n)<<24|f(g)<<16|f(d)<<8|f(h)<<0&268435455)>>>0};a.Color4f=function(g,d,h,n){void 0===n&&(n=1);return Float32Array.of(g,d,h,n)};Object.defineProperty(a,"TRANSPARENT",{get:function(){return a.Color4f(0,0,0,0)}});Object.defineProperty(a,"BLACK",{get:function(){return a.Color4f(0,0,0,1)}});Object.defineProperty(a,"WHITE",{get:function(){return a.Color4f(1,
1,1,1)}});Object.defineProperty(a,"RED",{get:function(){return a.Color4f(1,0,0,1)}});Object.defineProperty(a,"GREEN",{get:function(){return a.Color4f(0,1,0,1)}});Object.defineProperty(a,"BLUE",{get:function(){return a.Color4f(0,0,1,1)}});Object.defineProperty(a,"YELLOW",{get:function(){return a.Color4f(1,1,0,1)}});Object.defineProperty(a,"CYAN",{get:function(){return a.Color4f(0,1,1,1)}});Object.defineProperty(a,"MAGENTA",{get:function(){return a.Color4f(1,0,1,1)}});a.getColorComponents=function(g){return[Math.floor(255*
g[0]),Math.floor(255*g[1]),Math.floor(255*g[2]),g[3]]};a.parseColorString=function(g,d){g=g.toLowerCase();if(g.startsWith("#")){d=255;switch(g.length){case 9:d=parseInt(g.slice(7,9),16);case 7:var h=parseInt(g.slice(1,3),16);var n=parseInt(g.slice(3,5),16);var t=parseInt(g.slice(5,7),16);break;case 5:d=17*parseInt(g.slice(4,5),16);case 4:h=17*parseInt(g.slice(1,2),16),n=17*parseInt(g.slice(2,3),16),t=17*parseInt(g.slice(3,4),16)}return a.Color(h,n,t,d/255)}return g.startsWith("rgba")?(g=g.slice(5,
-1),g=g.split(","),a.Color(+g[0],+g[1],+g[2],e(g[3]))):g.startsWith("rgb")?(g=g.slice(4,-1),g=g.split(","),a.Color(+g[0],+g[1],+g[2],e(g[3]))):g.startsWith("gray(")||g.startsWith("hsl")||!d||(g=d[g],void 0===g)?a.BLACK:g};a.multiplyByAlpha=function(g,d){g=g.slice();g[3]=Math.max(0,Math.min(g[3]*d,1));return g};a.Malloc=function(g,d){var h=a._malloc(d*g.BYTES_PER_ELEMENT);return{_ck:!0,length:d,byteOffset:h,Wd:null,subarray:function(n,t){n=this.toTypedArray().subarray(n,t);n._ck=!0;return n},toTypedArray:function(){if(this.Wd&&
this.Wd.length)return this.Wd;this.Wd=new g(a.HEAPU8.buffer,h,d);this.Wd._ck=!0;return this.Wd}}};a.Free=function(g){a._free(g.byteOffset);g.byteOffset=M;g.toTypedArray=null;g.Wd=null};var H=M,S,Y=M,da,ua=M,La,ma,V=M,gc,Aa=M,hc,Db=M,ic,Eb=M,Fb,gb=M,jc,Cb=M,kc,lc=M,dd=Float32Array.of(0,0,1),M=0;a.onRuntimeInitialized=function(){function g(d,h,n,t,w,z,F){z||(z=4*t.width,t.colorType===a.ColorType.RGBA_F16?z*=2:t.colorType===a.ColorType.RGBA_F32&&(z*=4));var K=z*t.height;var I=w?w.byteOffset:a._malloc(K);
if(F?!d._readPixels(t,I,z,h,n,F):!d._readPixels(t,I,z,h,n))return w||a._free(I),null;if(w)return w.toTypedArray();switch(t.colorType){case a.ColorType.RGBA_8888:case a.ColorType.RGBA_F16:d=(new Uint8Array(a.HEAPU8.buffer,I,K)).slice();break;case a.ColorType.RGBA_F32:d=(new Float32Array(a.HEAPU8.buffer,I,K)).slice();break;default:return null}a._free(I);return d}La=a.Malloc(Float32Array,4);ua=La.byteOffset;da=a.Malloc(Float32Array,16);Y=da.byteOffset;S=a.Malloc(Float32Array,9);H=S.byteOffset;jc=a.Malloc(Float32Array,
12);Cb=jc.byteOffset;kc=a.Malloc(Float32Array,12);lc=kc.byteOffset;ma=a.Malloc(Float32Array,4);V=ma.byteOffset;gc=a.Malloc(Float32Array,4);Aa=gc.byteOffset;hc=a.Malloc(Float32Array,3);Db=hc.byteOffset;ic=a.Malloc(Float32Array,3);Eb=ic.byteOffset;Fb=a.Malloc(Int32Array,4);gb=Fb.byteOffset;a.ColorSpace.SRGB=a.ColorSpace._MakeSRGB();a.ColorSpace.DISPLAY_P3=a.ColorSpace._MakeDisplayP3();a.ColorSpace.ADOBE_RGB=a.ColorSpace._MakeAdobeRGB();a.GlyphRunFlags={IsWhiteSpace:a._GlyphRunFlags_isWhiteSpace};a.Path.MakeFromCmds=
function(d){var h=m(d,"HEAPF32"),n=a.Path._MakeFromCmds(h,d.length);k(h,d);return n};a.Path.MakeFromVerbsPointsWeights=function(d,h,n){var t=m(d,"HEAPU8"),w=m(h,"HEAPF32"),z=m(n,"HEAPF32"),F=a.Path._MakeFromVerbsPointsWeights(t,d.length,w,h.length,z,n&&n.length||0);k(t,d);k(w,h);k(z,n);return F};a.Path.prototype.addArc=function(d,h,n){d=v(d);this._addArc(d,h,n);return this};a.Path.prototype.addCircle=function(d,h,n,t){this._addCircle(d,h,n,!!t);return this};a.Path.prototype.addOval=function(d,h,n){void 0===
n&&(n=1);d=v(d);this._addOval(d,!!h,n);return this};a.Path.prototype.addPath=function(){var d=Array.prototype.slice.call(arguments),h=d[0],n=!1;"boolean"===typeof d[d.length-1]&&(n=d.pop());if(1===d.length)this._addPath(h,1,0,0,0,1,0,0,0,1,n);else if(2===d.length)d=d[1],this._addPath(h,d[0],d[1],d[2],d[3],d[4],d[5],d[6]||0,d[7]||0,d[8]||1,n);else if(7===d.length||10===d.length)this._addPath(h,d[1],d[2],d[3],d[4],d[5],d[6],d[7]||0,d[8]||0,d[9]||1,n);else return null;return this};a.Path.prototype.addPoly=
function(d,h){var n=m(d,"HEAPF32");this._addPoly(n,d.length/2,h);k(n,d);return this};a.Path.prototype.addRect=function(d,h){d=v(d);this._addRect(d,!!h);return this};a.Path.prototype.addRRect=function(d,h){d=E(d);this._addRRect(d,!!h);return this};a.Path.prototype.addVerbsPointsWeights=function(d,h,n){var t=m(d,"HEAPU8"),w=m(h,"HEAPF32"),z=m(n,"HEAPF32");this._addVerbsPointsWeights(t,d.length,w,h.length,z,n&&n.length||0);k(t,d);k(w,h);k(z,n)};a.Path.prototype.arc=function(d,h,n,t,w,z){d=a.LTRBRect(d-
n,h-n,d+n,h+n);w=(w-t)/Math.PI*180-360*!!z;z=new a.Path;z.addArc(d,t/Math.PI*180,w);this.addPath(z,!0);z.delete();return this};a.Path.prototype.arcToOval=function(d,h,n,t){d=v(d);this._arcToOval(d,h,n,t);return this};a.Path.prototype.arcToRotated=function(d,h,n,t,w,z,F){this._arcToRotated(d,h,n,!!t,!!w,z,F);return this};a.Path.prototype.arcToTangent=function(d,h,n,t,w){this._arcToTangent(d,h,n,t,w);return this};a.Path.prototype.close=function(){this._close();return this};a.Path.prototype.conicTo=
function(d,h,n,t,w){this._conicTo(d,h,n,t,w);return this};a.Path.prototype.computeTightBounds=function(d){this._computeTightBounds(V);var h=ma.toTypedArray();return d?(d.set(h),d):h.slice()};a.Path.prototype.cubicTo=function(d,h,n,t,w,z){this._cubicTo(d,h,n,t,w,z);return this};a.Path.prototype.dash=function(d,h,n){return this._dash(d,h,n)?this:null};a.Path.prototype.getBounds=function(d){this._getBounds(V);var h=ma.toTypedArray();return d?(d.set(h),d):h.slice()};a.Path.prototype.lineTo=function(d,
h){this._lineTo(d,h);return this};a.Path.prototype.moveTo=function(d,h){this._moveTo(d,h);return this};a.Path.prototype.offset=function(d,h){this._transform(1,0,d,0,1,h,0,0,1);return this};a.Path.prototype.quadTo=function(d,h,n,t){this._quadTo(d,h,n,t);return this};a.Path.prototype.rArcTo=function(d,h,n,t,w,z,F){this._rArcTo(d,h,n,t,w,z,F);return this};a.Path.prototype.rConicTo=function(d,h,n,t,w){this._rConicTo(d,h,n,t,w);return this};a.Path.prototype.rCubicTo=function(d,h,n,t,w,z){this._rCubicTo(d,
h,n,t,w,z);return this};a.Path.prototype.rLineTo=function(d,h){this._rLineTo(d,h);return this};a.Path.prototype.rMoveTo=function(d,h){this._rMoveTo(d,h);return this};a.Path.prototype.rQuadTo=function(d,h,n,t){this._rQuadTo(d,h,n,t);return this};a.Path.prototype.stroke=function(d){d=d||{};d.width=d.width||1;d.miter_limit=d.miter_limit||4;d.cap=d.cap||a.StrokeCap.Butt;d.join=d.join||a.StrokeJoin.Miter;d.precision=d.precision||1;return this._stroke(d)?this:null};a.Path.prototype.transform=function(){if(1===
arguments.length){var d=arguments[0];this._transform(d[0],d[1],d[2],d[3],d[4],d[5],d[6]||0,d[7]||0,d[8]||1)}else if(6===arguments.length||9===arguments.length)d=arguments,this._transform(d[0],d[1],d[2],d[3],d[4],d[5],d[6]||0,d[7]||0,d[8]||1);else throw"transform expected to take 1 or 9 arguments. Got "+arguments.length;return this};a.Path.prototype.trim=function(d,h,n){return this._trim(d,h,!!n)?this:null};a.Image.prototype.encodeToBytes=function(d,h){var n=a.ge();d=d||a.ImageFormat.PNG;h=h||100;
return n?this._encodeToBytes(d,h,n):this._encodeToBytes(d,h)};a.Image.prototype.makeShaderCubic=function(d,h,n,t,w){w=q(w);return this._makeShaderCubic(d,h,n,t,w)};a.Image.prototype.makeShaderOptions=function(d,h,n,t,w){w=q(w);return this._makeShaderOptions(d,h,n,t,w)};a.Image.prototype.readPixels=function(d,h,n,t,w){var z=a.ge();return g(this,d,h,n,t,w,z)};a.Canvas.prototype.clear=function(d){a.Fd(this.Ed);d=y(d);this._clear(d)};a.Canvas.prototype.clipRRect=function(d,h,n){a.Fd(this.Ed);d=E(d);this._clipRRect(d,
h,n)};a.Canvas.prototype.clipRect=function(d,h,n){a.Fd(this.Ed);d=v(d);this._clipRect(d,h,n)};a.Canvas.prototype.concat=function(d){a.Fd(this.Ed);d=x(d);this._concat(d)};a.Canvas.prototype.drawArc=function(d,h,n,t,w){a.Fd(this.Ed);d=v(d);this._drawArc(d,h,n,t,w)};a.Canvas.prototype.drawAtlas=function(d,h,n,t,w,z,F){if(d&&t&&h&&n&&h.length===n.length){a.Fd(this.Ed);w||(w=a.BlendMode.SrcOver);var K=m(h,"HEAPF32"),I=m(n,"HEAPF32"),T=n.length/4,p=m(c(z),"HEAPU32");if(F&&"B"in F&&"C"in F)this._drawAtlasCubic(d,
I,K,p,T,w,F.B,F.C,t);else{let A=a.FilterMode.Linear,L=a.MipmapMode.None;F&&(A=F.filter,"mipmap"in F&&(L=F.mipmap));this._drawAtlasOptions(d,I,K,p,T,w,A,L,t)}k(K,h);k(I,n);k(p,z)}};a.Canvas.prototype.drawCircle=function(d,h,n,t){a.Fd(this.Ed);this._drawCircle(d,h,n,t)};a.Canvas.prototype.drawColor=function(d,h){a.Fd(this.Ed);d=y(d);void 0!==h?this._drawColor(d,h):this._drawColor(d)};a.Canvas.prototype.drawColorInt=function(d,h){a.Fd(this.Ed);this._drawColorInt(d,h||a.BlendMode.SrcOver)};a.Canvas.prototype.drawColorComponents=
function(d,h,n,t,w){a.Fd(this.Ed);d=B(d,h,n,t);void 0!==w?this._drawColor(d,w):this._drawColor(d)};a.Canvas.prototype.drawDRRect=function(d,h,n){a.Fd(this.Ed);d=E(d,Cb);h=E(h,lc);this._drawDRRect(d,h,n)};a.Canvas.prototype.drawImage=function(d,h,n,t){a.Fd(this.Ed);this._drawImage(d,h,n,t||null)};a.Canvas.prototype.drawImageCubic=function(d,h,n,t,w,z){a.Fd(this.Ed);this._drawImageCubic(d,h,n,t,w,z||null)};a.Canvas.prototype.drawImageOptions=function(d,h,n,t,w,z){a.Fd(this.Ed);this._drawImageOptions(d,
h,n,t,w,z||null)};a.Canvas.prototype.drawImageNine=function(d,h,n,t,w){a.Fd(this.Ed);h=m(h,"HEAP32",gb);n=v(n);this._drawImageNine(d,h,n,t,w||null)};a.Canvas.prototype.drawImageRect=function(d,h,n,t,w){a.Fd(this.Ed);v(h,V);v(n,Aa);this._drawImageRect(d,V,Aa,t,!!w)};a.Canvas.prototype.drawImageRectCubic=function(d,h,n,t,w,z){a.Fd(this.Ed);v(h,V);v(n,Aa);this._drawImageRectCubic(d,V,Aa,t,w,z||null)};a.Canvas.prototype.drawImageRectOptions=function(d,h,n,t,w,z){a.Fd(this.Ed);v(h,V);v(n,Aa);this._drawImageRectOptions(d,
V,Aa,t,w,z||null)};a.Canvas.prototype.drawLine=function(d,h,n,t,w){a.Fd(this.Ed);this._drawLine(d,h,n,t,w)};a.Canvas.prototype.drawOval=function(d,h){a.Fd(this.Ed);d=v(d);this._drawOval(d,h)};a.Canvas.prototype.drawPaint=function(d){a.Fd(this.Ed);this._drawPaint(d)};a.Canvas.prototype.drawParagraph=function(d,h,n){a.Fd(this.Ed);this._drawParagraph(d,h,n)};a.Canvas.prototype.drawPatch=function(d,h,n,t,w){if(24>d.length)throw"Need 12 cubic points";if(h&&4>h.length)throw"Need 4 colors";if(n&&8>n.length)throw"Need 4 shader coordinates";
a.Fd(this.Ed);const z=m(d,"HEAPF32"),F=h?m(c(h),"HEAPU32"):M,K=n?m(n,"HEAPF32"):M;t||(t=a.BlendMode.Modulate);this._drawPatch(z,F,K,t,w);k(K,n);k(F,h);k(z,d)};a.Canvas.prototype.drawPath=function(d,h){a.Fd(this.Ed);this._drawPath(d,h)};a.Canvas.prototype.drawPicture=function(d){a.Fd(this.Ed);this._drawPicture(d)};a.Canvas.prototype.drawPoints=function(d,h,n){a.Fd(this.Ed);var t=m(h,"HEAPF32");this._drawPoints(d,t,h.length/2,n);k(t,h)};a.Canvas.prototype.drawRRect=function(d,h){a.Fd(this.Ed);d=E(d);
this._drawRRect(d,h)};a.Canvas.prototype.drawRect=function(d,h){a.Fd(this.Ed);d=v(d);this._drawRect(d,h)};a.Canvas.prototype.drawRect4f=function(d,h,n,t,w){a.Fd(this.Ed);this._drawRect4f(d,h,n,t,w)};a.Canvas.prototype.drawShadow=function(d,h,n,t,w,z,F){a.Fd(this.Ed);var K=m(w,"HEAPF32"),I=m(z,"HEAPF32");h=m(h,"HEAPF32",Db);n=m(n,"HEAPF32",Eb);this._drawShadow(d,h,n,t,K,I,F);k(K,w);k(I,z)};a.getShadowLocalBounds=function(d,h,n,t,w,z,F){d=q(d);n=m(n,"HEAPF32",Db);t=m(t,"HEAPF32",Eb);if(!this._getShadowLocalBounds(d,
h,n,t,w,z,V))return null;h=ma.toTypedArray();return F?(F.set(h),F):h.slice()};a.Canvas.prototype.drawTextBlob=function(d,h,n,t){a.Fd(this.Ed);this._drawTextBlob(d,h,n,t)};a.Canvas.prototype.drawVertices=function(d,h,n){a.Fd(this.Ed);this._drawVertices(d,h,n)};a.Canvas.prototype.getDeviceClipBounds=function(d){this._getDeviceClipBounds(gb);var h=Fb.toTypedArray();d?d.set(h):d=h.slice();return d};a.Canvas.prototype.getLocalToDevice=function(){this._getLocalToDevice(Y);for(var d=Y,h=Array(16),n=0;16>
n;n++)h[n]=a.HEAPF32[d/4+n];return h};a.Canvas.prototype.getTotalMatrix=function(){this._getTotalMatrix(H);for(var d=Array(9),h=0;9>h;h++)d[h]=a.HEAPF32[H/4+h];return d};a.Canvas.prototype.makeSurface=function(d){d=this._makeSurface(d);d.Ed=this.Ed;return d};a.Canvas.prototype.readPixels=function(d,h,n,t,w){a.Fd(this.Ed);return g(this,d,h,n,t,w)};a.Canvas.prototype.saveLayer=function(d,h,n,t){h=v(h);return this._saveLayer(d||null,h,n||null,t||0)};a.Canvas.prototype.writePixels=function(d,h,n,t,w,
z,F,K){if(d.byteLength%(h*n))throw"pixels length must be a multiple of the srcWidth * srcHeight";a.Fd(this.Ed);var I=d.byteLength/(h*n);z=z||a.AlphaType.Unpremul;F=F||a.ColorType.RGBA_8888;K=K||a.ColorSpace.SRGB;var T=I*h;I=m(d,"HEAPU8");h=this._writePixels({width:h,height:n,colorType:F,alphaType:z,colorSpace:K},I,T,t,w);k(I,d);return h};a.ColorFilter.MakeBlend=function(d,h,n){d=y(d);n=n||a.ColorSpace.SRGB;return a.ColorFilter._MakeBlend(d,h,n)};a.ColorFilter.MakeMatrix=function(d){if(!d||20!==d.length)throw"invalid color matrix";
var h=m(d,"HEAPF32"),n=a.ColorFilter._makeMatrix(h);k(h,d);return n};a.ContourMeasure.prototype.getPosTan=function(d,h){this._getPosTan(d,V);d=ma.toTypedArray();return h?(h.set(d),h):d.slice()};a.ImageFilter.MakeDropShadow=function(d,h,n,t,w,z){w=y(w,ua);return a.ImageFilter._MakeDropShadow(d,h,n,t,w,z)};a.ImageFilter.MakeDropShadowOnly=function(d,h,n,t,w,z){w=y(w,ua);return a.ImageFilter._MakeDropShadowOnly(d,h,n,t,w,z)};a.ImageFilter.MakeImage=function(d,h,n,t){n=v(n,V);t=v(t,Aa);if("B"in h&&"C"in
h)return a.ImageFilter._MakeImageCubic(d,h.B,h.C,n,t);const w=h.filter;let z=a.MipmapMode.None;"mipmap"in h&&(z=h.mipmap);return a.ImageFilter._MakeImageOptions(d,w,z,n,t)};a.ImageFilter.MakeMatrixTransform=function(d,h,n){d=q(d);if("B"in h&&"C"in h)return a.ImageFilter._MakeMatrixTransformCubic(d,h.B,h.C,n);const t=h.filter;let w=a.MipmapMode.None;"mipmap"in h&&(w=h.mipmap);return a.ImageFilter._MakeMatrixTransformOptions(d,t,w,n)};a.Paint.prototype.getColor=function(){this._getColor(ua);return D(ua)};
a.Paint.prototype.setColor=function(d,h){h=h||null;d=y(d);this._setColor(d,h)};a.Paint.prototype.setColorComponents=function(d,h,n,t,w){w=w||null;d=B(d,h,n,t);this._setColor(d,w)};a.Path.prototype.getPoint=function(d,h){this._getPoint(d,V);d=ma.toTypedArray();return h?(h[0]=d[0],h[1]=d[1],h):d.slice(0,2)};a.Picture.prototype.makeShader=function(d,h,n,t,w){t=q(t);w=v(w);return this._makeShader(d,h,n,t,w)};a.Picture.prototype.cullRect=function(d){this._cullRect(V);var h=ma.toTypedArray();return d?(d.set(h),
d):h.slice()};a.PictureRecorder.prototype.beginRecording=function(d,h){d=v(d);return this._beginRecording(d,!!h)};a.Surface.prototype.getCanvas=function(){var d=this._getCanvas();d.Ed=this.Ed;return d};a.Surface.prototype.makeImageSnapshot=function(d){a.Fd(this.Ed);d=m(d,"HEAP32",gb);return this._makeImageSnapshot(d)};a.Surface.prototype.makeSurface=function(d){a.Fd(this.Ed);d=this._makeSurface(d);d.Ed=this.Ed;return d};a.Surface.prototype.Pe=function(d,h){this.ae||(this.ae=this.getCanvas());return requestAnimationFrame(function(){a.Fd(this.Ed);
d(this.ae);this.flush(h)}.bind(this))};a.Surface.prototype.requestAnimationFrame||(a.Surface.prototype.requestAnimationFrame=a.Surface.prototype.Pe);a.Surface.prototype.Me=function(d,h){this.ae||(this.ae=this.getCanvas());requestAnimationFrame(function(){a.Fd(this.Ed);d(this.ae);this.flush(h);this.dispose()}.bind(this))};a.Surface.prototype.drawOnce||(a.Surface.prototype.drawOnce=a.Surface.prototype.Me);a.PathEffect.MakeDash=function(d,h){h||(h=0);if(!d.length||1===d.length%2)throw"Intervals array must have even length";
var n=m(d,"HEAPF32");h=a.PathEffect._MakeDash(n,d.length,h);k(n,d);return h};a.PathEffect.MakeLine2D=function(d,h){h=q(h);return a.PathEffect._MakeLine2D(d,h)};a.PathEffect.MakePath2D=function(d,h){d=q(d);return a.PathEffect._MakePath2D(d,h)};a.Shader.MakeColor=function(d,h){h=h||null;d=y(d);return a.Shader._MakeColor(d,h)};a.Shader.Blend=a.Shader.MakeBlend;a.Shader.Color=a.Shader.MakeColor;a.Shader.MakeLinearGradient=function(d,h,n,t,w,z,F,K){K=K||null;var I=l(n),T=m(t,"HEAPF32");F=F||0;z=q(z);var p=
ma.toTypedArray();p.set(d);p.set(h,2);d=a.Shader._MakeLinearGradient(V,I.Md,I.colorType,T,I.count,w,F,z,K);k(I.Md,n);t&&k(T,t);return d};a.Shader.MakeRadialGradient=function(d,h,n,t,w,z,F,K){K=K||null;var I=l(n),T=m(t,"HEAPF32");F=F||0;z=q(z);d=a.Shader._MakeRadialGradient(d[0],d[1],h,I.Md,I.colorType,T,I.count,w,F,z,K);k(I.Md,n);t&&k(T,t);return d};a.Shader.MakeSweepGradient=function(d,h,n,t,w,z,F,K,I,T){T=T||null;var p=l(n),A=m(t,"HEAPF32");F=F||0;K=K||0;I=I||360;z=q(z);d=a.Shader._MakeSweepGradient(d,
h,p.Md,p.colorType,A,p.count,w,K,I,F,z,T);k(p.Md,n);t&&k(A,t);return d};a.Shader.MakeTwoPointConicalGradient=function(d,h,n,t,w,z,F,K,I,T){T=T||null;var p=l(w),A=m(z,"HEAPF32");I=I||0;K=q(K);var L=ma.toTypedArray();L.set(d);L.set(n,2);d=a.Shader._MakeTwoPointConicalGradient(V,h,t,p.Md,p.colorType,A,p.count,F,I,K,T);k(p.Md,w);z&&k(A,z);return d};a.Vertices.prototype.bounds=function(d){this._bounds(V);var h=ma.toTypedArray();return d?(d.set(h),d):h.slice()};a.Id&&a.Id.forEach(function(d){d()})};a.computeTonalColors=
function(g){var d=m(g.ambient,"HEAPF32"),h=m(g.spot,"HEAPF32");this._computeTonalColors(d,h);var n={ambient:D(d),spot:D(h)};k(d,g.ambient);k(h,g.spot);return n};a.LTRBRect=function(g,d,h,n){return Float32Array.of(g,d,h,n)};a.XYWHRect=function(g,d,h,n){return Float32Array.of(g,d,g+h,d+n)};a.LTRBiRect=function(g,d,h,n){return Int32Array.of(g,d,h,n)};a.XYWHiRect=function(g,d,h,n){return Int32Array.of(g,d,g+h,d+n)};a.RRectXY=function(g,d,h){return Float32Array.of(g[0],g[1],g[2],g[3],d,h,d,h,d,h,d,h)};
a.MakeAnimatedImageFromEncoded=function(g){g=new Uint8Array(g);var d=a._malloc(g.byteLength);a.HEAPU8.set(g,d);return(g=a._decodeAnimatedImage(d,g.byteLength))?g:null};a.MakeImageFromEncoded=function(g){g=new Uint8Array(g);var d=a._malloc(g.byteLength);a.HEAPU8.set(g,d);return(g=a._decodeImage(d,g.byteLength))?g:null};var Ra=null;a.MakeImageFromCanvasImageSource=function(g){var d=g.width,h=g.height;Ra||(Ra=document.createElement("canvas"));Ra.width=d;Ra.height=h;var n=Ra.getContext("2d",{xf:!0});
n.drawImage(g,0,0);g=n.getImageData(0,0,d,h);return a.MakeImage({width:d,height:h,alphaType:a.AlphaType.Unpremul,colorType:a.ColorType.RGBA_8888,colorSpace:a.ColorSpace.SRGB},g.data,4*d)};a.MakeImage=function(g,d,h){var n=a._malloc(d.length);a.HEAPU8.set(d,n);return a._MakeImage(g,n,d.length,h)};a.MakeVertices=function(g,d,h,n,t,w){var z=t&&t.length||0,F=0;h&&h.length&&(F|=1);n&&n.length&&(F|=2);void 0===w||w||(F|=4);g=new a._VerticesBuilder(g,d.length/2,z,F);m(d,"HEAPF32",g.positions());g.texCoords()&&
m(h,"HEAPF32",g.texCoords());g.colors()&&m(c(n),"HEAPU32",g.colors());g.indices()&&m(t,"HEAPU16",g.indices());return g.detach()};(function(g){g.Id=g.Id||[];g.Id.push(function(){function d(p){if(!p||!p.length)return[];for(var A=[],L=0;L<p.length;L+=5){var W=g.LTRBRect(p[L],p[L+1],p[L+2],p[L+3]),xa=g.TextDirection.LTR;0===p[L+4]&&(xa=g.TextDirection.RTL);A.push({rect:W,dir:xa})}g._free(p.byteOffset);return A}function h(p){p=p||{};void 0===p.weight&&(p.weight=g.FontWeight.Normal);p.width=p.width||g.FontWidth.Normal;
p.slant=p.slant||g.FontSlant.Upright;return p}function n(p){if(!p||!p.length)return M;for(var A=[],L=0;L<p.length;L++){var W=t(p[L]);A.push(W)}return m(A,"HEAPU32")}function t(p){if(F[p])return F[p];var A=ja(p)+1,L=g._malloc(A);ka(p,C,L,A);return F[p]=L}function w(p){p._colorPtr=y(p.color);p._foregroundColorPtr=M;p._backgroundColorPtr=M;p._decorationColorPtr=M;p.foregroundColor&&(p._foregroundColorPtr=y(p.foregroundColor,K));p.backgroundColor&&(p._backgroundColorPtr=y(p.backgroundColor,I));p.decorationColor&&
(p._decorationColorPtr=y(p.decorationColor,T));Array.isArray(p.fontFamilies)&&p.fontFamilies.length?(p._fontFamiliesPtr=n(p.fontFamilies),p._fontFamiliesLen=p.fontFamilies.length):(p._fontFamiliesPtr=M,p._fontFamiliesLen=0);if(p.locale){var A=p.locale;p._localePtr=t(A);p._localeLen=ja(A)+1}else p._localePtr=M,p._localeLen=0;if(Array.isArray(p.shadows)&&p.shadows.length){A=p.shadows;var L=A.map(function(pa){return pa.color||g.BLACK}),W=A.map(function(pa){return pa.blurRadius||0});p._shadowLen=A.length;
for(var xa=g._malloc(8*A.length),Gb=xa/4,Hb=0;Hb<A.length;Hb++){var mc=A[Hb].offset||[0,0];g.HEAPF32[Gb]=mc[0];g.HEAPF32[Gb+1]=mc[1];Gb+=2}p._shadowColorsPtr=l(L).Md;p._shadowOffsetsPtr=xa;p._shadowBlurRadiiPtr=m(W,"HEAPF32")}else p._shadowLen=0,p._shadowColorsPtr=M,p._shadowOffsetsPtr=M,p._shadowBlurRadiiPtr=M;Array.isArray(p.fontFeatures)&&p.fontFeatures.length?(A=p.fontFeatures,L=A.map(function(pa){return pa.name}),W=A.map(function(pa){return pa.value}),p._fontFeatureLen=A.length,p._fontFeatureNamesPtr=
n(L),p._fontFeatureValuesPtr=m(W,"HEAPU32")):(p._fontFeatureLen=0,p._fontFeatureNamesPtr=M,p._fontFeatureValuesPtr=M);Array.isArray(p.fontVariations)&&p.fontVariations.length?(A=p.fontVariations,L=A.map(function(pa){return pa.axis}),W=A.map(function(pa){return pa.value}),p._fontVariationLen=A.length,p._fontVariationAxesPtr=n(L),p._fontVariationValuesPtr=m(W,"HEAPF32")):(p._fontVariationLen=0,p._fontVariationAxesPtr=M,p._fontVariationValuesPtr=M)}function z(p){g._free(p._fontFamiliesPtr);g._free(p._shadowColorsPtr);
g._free(p._shadowOffsetsPtr);g._free(p._shadowBlurRadiiPtr);g._free(p._fontFeatureNamesPtr);g._free(p._fontFeatureValuesPtr);g._free(p._fontVariationAxesPtr);g._free(p._fontVariationValuesPtr)}g.Paragraph.prototype.getRectsForRange=function(p,A,L,W){p=this._getRectsForRange(p,A,L,W);return d(p)};g.Paragraph.prototype.getRectsForPlaceholders=function(){var p=this._getRectsForPlaceholders();return d(p)};g.TypefaceFontProvider.prototype.registerFont=function(p,A){p=g.Typeface.MakeFreeTypeFaceFromData(p);
if(!p)return null;A=t(A);this._registerFont(p,A)};g.ParagraphStyle=function(p){p.disableHinting=p.disableHinting||!1;if(p.ellipsis){var A=p.ellipsis;p._ellipsisPtr=t(A);p._ellipsisLen=ja(A)+1}else p._ellipsisPtr=M,p._ellipsisLen=0;null==p.heightMultiplier&&(p.heightMultiplier=-1);p.maxLines=p.maxLines||0;p.replaceTabCharacters=p.replaceTabCharacters||!1;A=(A=p.strutStyle)||{};A.strutEnabled=A.strutEnabled||!1;A.strutEnabled&&Array.isArray(A.fontFamilies)&&A.fontFamilies.length?(A._fontFamiliesPtr=
n(A.fontFamilies),A._fontFamiliesLen=A.fontFamilies.length):(A._fontFamiliesPtr=M,A._fontFamiliesLen=0);A.fontStyle=h(A.fontStyle);null==A.fontSize&&(A.fontSize=-1);null==A.heightMultiplier&&(A.heightMultiplier=-1);A.halfLeading=A.halfLeading||!1;A.leading=A.leading||0;A.forceStrutHeight=A.forceStrutHeight||!1;p.strutStyle=A;p.textAlign=p.textAlign||g.TextAlign.Start;p.textDirection=p.textDirection||g.TextDirection.LTR;p.textHeightBehavior=p.textHeightBehavior||g.TextHeightBehavior.All;p.textStyle=
g.TextStyle(p.textStyle);p.applyRoundingHack=!1!==p.applyRoundingHack;return p};g.TextStyle=function(p){p.color||(p.color=g.BLACK);p.decoration=p.decoration||0;p.decorationThickness=p.decorationThickness||0;p.decorationStyle=p.decorationStyle||g.DecorationStyle.Solid;p.textBaseline=p.textBaseline||g.TextBaseline.Alphabetic;null==p.fontSize&&(p.fontSize=-1);p.letterSpacing=p.letterSpacing||0;p.wordSpacing=p.wordSpacing||0;null==p.heightMultiplier&&(p.heightMultiplier=-1);p.halfLeading=p.halfLeading||
!1;p.fontStyle=h(p.fontStyle);return p};var F={},K=g._malloc(16),I=g._malloc(16),T=g._malloc(16);g.ParagraphBuilder.Make=function(p,A){w(p.textStyle);A=g.ParagraphBuilder._Make(p,A);z(p.textStyle);return A};g.ParagraphBuilder.MakeFromFontProvider=function(p,A){w(p.textStyle);A=g.ParagraphBuilder._MakeFromFontProvider(p,A);z(p.textStyle);return A};g.ParagraphBuilder.MakeFromFontCollection=function(p,A){w(p.textStyle);A=g.ParagraphBuilder._MakeFromFontCollection(p,A);z(p.textStyle);return A};g.ParagraphBuilder.ShapeText=
function(p,A,L){let W=0;for(const xa of A)W+=xa.length;if(W!==p.length)throw"Accumulated block lengths must equal text.length";return g.ParagraphBuilder._ShapeText(p,A,L)};g.ParagraphBuilder.prototype.pushStyle=function(p){w(p);this._pushStyle(p);z(p)};g.ParagraphBuilder.prototype.pushPaintStyle=function(p,A,L){w(p);this._pushPaintStyle(p,A,L);z(p)};g.ParagraphBuilder.prototype.addPlaceholder=function(p,A,L,W,xa){L=L||g.PlaceholderAlignment.Baseline;W=W||g.TextBaseline.Alphabetic;this._addPlaceholder(p||
0,A||0,L,W,xa||0)};g.ParagraphBuilder.prototype.setWordsUtf8=function(p){var A=m(p,"HEAPU32");this._setWordsUtf8(A,p&&p.length||0);k(A,p)};g.ParagraphBuilder.prototype.setWordsUtf16=function(p){var A=m(p,"HEAPU32");this._setWordsUtf16(A,p&&p.length||0);k(A,p)};g.ParagraphBuilder.prototype.setGraphemeBreaksUtf8=function(p){var A=m(p,"HEAPU32");this._setGraphemeBreaksUtf8(A,p&&p.length||0);k(A,p)};g.ParagraphBuilder.prototype.setGraphemeBreaksUtf16=function(p){var A=m(p,"HEAPU32");this._setGraphemeBreaksUtf16(A,
p&&p.length||0);k(A,p)};g.ParagraphBuilder.prototype.setLineBreaksUtf8=function(p){var A=m(p,"HEAPU32");this._setLineBreaksUtf8(A,p&&p.length||0);k(A,p)};g.ParagraphBuilder.prototype.setLineBreaksUtf16=function(p){var A=m(p,"HEAPU32");this._setLineBreaksUtf16(A,p&&p.length||0);k(A,p)}})})(r);a.Id=a.Id||[];a.Id.push(function(){a.Path.prototype.op=function(g,d){return this._op(g,d)?this:null};a.Path.prototype.simplify=function(){return this._simplify()?this:null}});a.Id=a.Id||[];a.Id.push(function(){a.Canvas.prototype.drawText=
function(g,d,h,n,t){var w=ja(g),z=a._malloc(w+1);ka(g,C,z,w+1);this._drawSimpleText(z,w,d,h,t,n);a._free(z)};a.Canvas.prototype.drawGlyphs=function(g,d,h,n,t,w){if(!(2*g.length<=d.length))throw"Not enough positions for the array of gyphs";a.Fd(this.Ed);const z=m(g,"HEAPU16"),F=m(d,"HEAPF32");this._drawGlyphs(g.length,z,F,h,n,t,w);k(F,d);k(z,g)};a.Font.prototype.getGlyphBounds=function(g,d,h){var n=m(g,"HEAPU16"),t=a._malloc(16*g.length);this._getGlyphWidthBounds(n,g.length,M,t,d||null);d=new Float32Array(a.HEAPU8.buffer,
t,4*g.length);k(n,g);if(h)return h.set(d),a._free(t),h;g=Float32Array.from(d);a._free(t);return g};a.Font.prototype.getGlyphIDs=function(g,d,h){d||(d=g.length);var n=ja(g)+1,t=a._malloc(n);ka(g,C,t,n);g=a._malloc(2*d);d=this._getGlyphIDs(t,n-1,d,g);a._free(t);if(0>d)return a._free(g),null;t=new Uint16Array(a.HEAPU8.buffer,g,d);if(h)return h.set(t),a._free(g),h;h=Uint16Array.from(t);a._free(g);return h};a.Font.prototype.getGlyphIntercepts=function(g,d,h,n){var t=m(g,"HEAPU16"),w=m(d,"HEAPF32");return this._getGlyphIntercepts(t,
g.length,!(g&&g._ck),w,d.length,!(d&&d._ck),h,n)};a.Font.prototype.getGlyphWidths=function(g,d,h){var n=m(g,"HEAPU16"),t=a._malloc(4*g.length);this._getGlyphWidthBounds(n,g.length,t,M,d||null);d=new Float32Array(a.HEAPU8.buffer,t,g.length);k(n,g);if(h)return h.set(d),a._free(t),h;g=Float32Array.from(d);a._free(t);return g};a.FontMgr.FromData=function(){if(!arguments.length)return null;var g=arguments;1===g.length&&Array.isArray(g[0])&&(g=arguments[0]);if(!g.length)return null;for(var d=[],h=[],n=
0;n<g.length;n++){var t=new Uint8Array(g[n]),w=m(t,"HEAPU8");d.push(w);h.push(t.byteLength)}d=m(d,"HEAPU32");h=m(h,"HEAPU32");g=a.FontMgr._fromData(d,h,g.length);a._free(d);a._free(h);return g};a.Typeface.MakeFreeTypeFaceFromData=function(g){g=new Uint8Array(g);var d=m(g,"HEAPU8");return(g=a.Typeface._MakeFreeTypeFaceFromData(d,g.byteLength))?g:null};a.Typeface.prototype.getGlyphIDs=function(g,d,h){d||(d=g.length);var n=ja(g)+1,t=a._malloc(n);ka(g,C,t,n);g=a._malloc(2*d);d=this._getGlyphIDs(t,n-1,
d,g);a._free(t);if(0>d)return a._free(g),null;t=new Uint16Array(a.HEAPU8.buffer,g,d);if(h)return h.set(t),a._free(g),h;h=Uint16Array.from(t);a._free(g);return h};a.TextBlob.MakeOnPath=function(g,d,h,n){if(g&&g.length&&d&&d.countPoints()){if(1===d.countPoints())return this.MakeFromText(g,h);n||(n=0);var t=h.getGlyphIDs(g);t=h.getGlyphWidths(t);var w=[];d=new a.ContourMeasureIter(d,!1,1);for(var z=d.next(),F=new Float32Array(4),K=0;K<g.length&&z;K++){var I=t[K];n+=I/2;if(n>z.length()){z.delete();z=
d.next();if(!z){g=g.substring(0,K);break}n=I/2}z.getPosTan(n,F);var T=F[2],p=F[3];w.push(T,p,F[0]-I/2*T,F[1]-I/2*p);n+=I/2}g=this.MakeFromRSXform(g,w,h);z&&z.delete();d.delete();return g}};a.TextBlob.MakeFromRSXform=function(g,d,h){var n=ja(g)+1,t=a._malloc(n);ka(g,C,t,n);g=m(d,"HEAPF32");h=a.TextBlob._MakeFromRSXform(t,n-1,g,h);a._free(t);return h?h:null};a.TextBlob.MakeFromRSXformGlyphs=function(g,d,h){var n=m(g,"HEAPU16");d=m(d,"HEAPF32");h=a.TextBlob._MakeFromRSXformGlyphs(n,2*g.length,d,h);k(n,
g);return h?h:null};a.TextBlob.MakeFromGlyphs=function(g,d){var h=m(g,"HEAPU16");d=a.TextBlob._MakeFromGlyphs(h,2*g.length,d);k(h,g);return d?d:null};a.TextBlob.MakeFromText=function(g,d){var h=ja(g)+1,n=a._malloc(h);ka(g,C,n,h);g=a.TextBlob._MakeFromText(n,h-1,d);a._free(n);return g?g:null};a.MallocGlyphIDs=function(g){return a.Malloc(Uint16Array,g)}});a.Id=a.Id||[];a.Id.push(function(){a.MakePicture=function(g){g=new Uint8Array(g);var d=a._malloc(g.byteLength);a.HEAPU8.set(g,d);return(g=a._MakePicture(d,
g.byteLength))?g:null}});a.Id=a.Id||[];a.Id.push(function(){a.RuntimeEffect.Make=function(g,d){return a.RuntimeEffect._Make(g,{onError:d||function(h){console.log("RuntimeEffect error",h)}})};a.RuntimeEffect.prototype.makeShader=function(g,d){var h=!g._ck,n=m(g,"HEAPF32");d=q(d);return this._makeShader(n,4*g.length,h,d)};a.RuntimeEffect.prototype.makeShaderWithChildren=function(g,d,h){var n=!g._ck,t=m(g,"HEAPF32");h=q(h);for(var w=[],z=0;z<d.length;z++)w.push(d[z].jd.Gd);d=m(w,"HEAPU32");return this._makeShaderWithChildren(t,
4*g.length,n,d,w.length,h)}})})(r);var la=Object.assign({},r),na="./this.program",oa=(a,b)=>{throw b;},qa="object"==typeof window,ra="function"==typeof importScripts,sa="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,ta="",va,wa,ya;
if(sa){var fs=require("fs"),za=require("path");ta=ra?za.dirname(ta)+"/":__dirname+"/";va=(a,b)=>{a=a.startsWith("file://")?new URL(a):za.normalize(a);return fs.readFileSync(a,b?void 0:"utf8")};ya=a=>{a=va(a,!0);a.buffer||(a=new Uint8Array(a));return a};wa=(a,b,c)=>{a=a.startsWith("file://")?new URL(a):za.normalize(a);fs.readFile(a,function(e,f){e?c(e):b(f.buffer)})};1<process.argv.length&&(na=process.argv[1].replace(/\\/g,"/"));process.argv.slice(2);if(15>process.versions.node.split(".")[0])process.on("unhandledRejection",
function(a){throw a;});oa=(a,b)=>{if(noExitRuntime)throw process.exitCode=a,b;if(!(b instanceof Ba)){var c=b;b&&"object"==typeof b&&b.stack&&(c=[b,b.stack]);Ca("exiting due to exception: "+c)}process.exit(a)};r.inspect=function(){return"[Emscripten Module object]"}}else if(qa||ra)ra?ta=self.location.href:"undefined"!=typeof document&&document.currentScript&&(ta=document.currentScript.src),_scriptDir&&(ta=_scriptDir),0!==ta.indexOf("blob:")?ta=ta.substr(0,ta.replace(/[?#].*/,"").lastIndexOf("/")+1):
ta="",va=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.send(null);return b.responseText},ra&&(ya=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)}),wa=(a,b,c)=>{var e=new XMLHttpRequest;e.open("GET",a,!0);e.responseType="arraybuffer";e.onload=()=>{200==e.status||0==e.status&&e.response?b(e.response):c()};e.onerror=c;e.send(null)};var Da=r.print||console.log.bind(console),Ca=r.printErr||console.warn.bind(console);
Object.assign(r,la);la=null;r.thisProgram&&(na=r.thisProgram);r.quit&&(oa=r.quit);var Ea;r.wasmBinary&&(Ea=r.wasmBinary);var noExitRuntime=r.noExitRuntime||!0;"object"!=typeof WebAssembly&&Fa("no native wasm support detected");var Ga,Ha=!1,Ia="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;
function Ja(a,b,c){var e=b+c;for(c=b;a[c]&&!(c>=e);)++c;if(16<c-b&&a.buffer&&Ia)return Ia.decode(a.subarray(b,c));for(e="";b<c;){var f=a[b++];if(f&128){var k=a[b++]&63;if(192==(f&224))e+=String.fromCharCode((f&31)<<6|k);else{var m=a[b++]&63;f=224==(f&240)?(f&15)<<12|k<<6|m:(f&7)<<18|k<<12|m<<6|a[b++]&63;65536>f?e+=String.fromCharCode(f):(f-=65536,e+=String.fromCharCode(55296|f>>10,56320|f&1023))}}else e+=String.fromCharCode(f)}return e}function Ka(a,b){return a?Ja(C,a,b):""}
function ka(a,b,c,e){if(!(0<e))return 0;var f=c;e=c+e-1;for(var k=0;k<a.length;++k){var m=a.charCodeAt(k);if(55296<=m&&57343>=m){var l=a.charCodeAt(++k);m=65536+((m&1023)<<10)|l&1023}if(127>=m){if(c>=e)break;b[c++]=m}else{if(2047>=m){if(c+1>=e)break;b[c++]=192|m>>6}else{if(65535>=m){if(c+2>=e)break;b[c++]=224|m>>12}else{if(c+3>=e)break;b[c++]=240|m>>18;b[c++]=128|m>>12&63}b[c++]=128|m>>6&63}b[c++]=128|m&63}}b[c]=0;return c-f}
function ja(a){for(var b=0,c=0;c<a.length;++c){var e=a.charCodeAt(c);127>=e?b++:2047>=e?b+=2:55296<=e&&57343>=e?(b+=4,++c):b+=3}return b}var Ma,C,Na,Oa,G,J,N,Pa;function Qa(){var a=Ga.buffer;r.HEAP8=Ma=new Int8Array(a);r.HEAP16=Na=new Int16Array(a);r.HEAP32=G=new Int32Array(a);r.HEAPU8=C=new Uint8Array(a);r.HEAPU16=Oa=new Uint16Array(a);r.HEAPU32=J=new Uint32Array(a);r.HEAPF32=N=new Float32Array(a);r.HEAPF64=Pa=new Float64Array(a)}var Sa,Ta=[],Ua=[],Va=[];
function Wa(){var a=r.preRun.shift();Ta.unshift(a)}var Xa=0,Ya=null,Za=null;function Fa(a){if(r.onAbort)r.onAbort(a);a="Aborted("+a+")";Ca(a);Ha=!0;a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");ba(a);throw a;}function $a(a){return a.startsWith("data:application/octet-stream;base64,")}var ab;ab="canvaskit.wasm";if(!$a(ab)){var bb=ab;ab=r.locateFile?r.locateFile(bb,ta):ta+bb}
function cb(a){try{if(a==ab&&Ea)return new Uint8Array(Ea);if(ya)return ya(a);throw"both async and sync fetching of the wasm failed";}catch(b){Fa(b)}}
function db(a){if(!Ea&&(qa||ra)){if("function"==typeof fetch&&!a.startsWith("file://"))return fetch(a,{credentials:"same-origin"}).then(function(b){if(!b.ok)throw"failed to load wasm binary file at '"+a+"'";return b.arrayBuffer()}).catch(function(){return cb(a)});if(wa)return new Promise(function(b,c){wa(a,function(e){b(new Uint8Array(e))},c)})}return Promise.resolve().then(function(){return cb(a)})}
function eb(a,b,c){return db(a).then(function(e){return WebAssembly.instantiate(e,b)}).then(function(e){return e}).then(c,function(e){Ca("failed to asynchronously prepare wasm: "+e);Fa(e)})}
function fb(a,b){var c=ab;return Ea||"function"!=typeof WebAssembly.instantiateStreaming||$a(c)||c.startsWith("file://")||sa||"function"!=typeof fetch?eb(c,a,b):fetch(c,{credentials:"same-origin"}).then(function(e){return WebAssembly.instantiateStreaming(e,a).then(b,function(f){Ca("wasm streaming compile failed: "+f);Ca("falling back to ArrayBuffer instantiation");return eb(c,a,b)})})}function Ba(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}
function hb(a){for(;0<a.length;)a.shift()(r)}function ib(a){this.Gd=a-24;this.Le=function(b){J[this.Gd+4>>2]=b};this.Ie=function(b){J[this.Gd+8>>2]=b};this.Je=function(){G[this.Gd>>2]=0};this.Ge=function(){Ma[this.Gd+12>>0]=0};this.Ke=function(){Ma[this.Gd+13>>0]=0};this.je=function(b,c){this.Fe();this.Le(b);this.Ie(c);this.Je();this.Ge();this.Ke()};this.Fe=function(){J[this.Gd+16>>2]=0}}var jb=0,kb={};function lb(a){for(;a.length;){var b=a.pop();a.pop()(b)}}
function mb(a){return this.fromWireType(G[a>>2])}var nb={},ob={},pb={};function qb(a){if(void 0===a)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?"_"+a:a}function rb(a,b){a=qb(a);return{[a]:function(){return b.apply(this,arguments)}}[a]}
function sb(a){var b=Error,c=rb(a,function(e){this.name=a;this.message=e;e=Error(e).stack;void 0!==e&&(this.stack=this.toString()+"\n"+e.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c}var tb=void 0;function ub(a){throw new tb(a);}
function vb(a,b,c){function e(l){l=c(l);l.length!==a.length&&ub("Mismatched type converter count");for(var q=0;q<a.length;++q)wb(a[q],l[q])}a.forEach(function(l){pb[l]=b});var f=Array(b.length),k=[],m=0;b.forEach((l,q)=>{ob.hasOwnProperty(l)?f[q]=ob[l]:(k.push(l),nb.hasOwnProperty(l)||(nb[l]=[]),nb[l].push(()=>{f[q]=ob[l];++m;m===k.length&&e(f)}))});0===k.length&&e(f)}
function xb(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+a);}}var yb=void 0;function O(a){for(var b="";C[a];)b+=yb[C[a++]];return b}var zb=void 0;function P(a){throw new zb(a);}
function wb(a,b,c={}){if(!("argPackAdvance"in b))throw new TypeError("registerType registeredInstance requires argPackAdvance");var e=b.name;a||P('type "'+e+'" must have a positive integer typeid pointer');if(ob.hasOwnProperty(a)){if(c.cf)return;P("Cannot register type '"+e+"' twice")}ob[a]=b;delete pb[a];nb.hasOwnProperty(a)&&(b=nb[a],delete nb[a],b.forEach(f=>f()))}function Ab(a){P(a.jd.Jd.Hd.name+" instance already deleted")}var Bb=!1;function Ib(){}
function Jb(a){--a.count.value;0===a.count.value&&(a.Ld?a.Od.Sd(a.Ld):a.Jd.Hd.Sd(a.Gd))}function Kb(a,b,c){if(b===c)return a;if(void 0===c.Qd)return null;a=Kb(a,b,c.Qd);return null===a?null:c.Ue(a)}var Lb={},Mb=[];function Nb(){for(;Mb.length;){var a=Mb.pop();a.jd.Zd=!1;a["delete"]()}}var Ob=void 0,Pb={};function Qb(a,b){for(void 0===b&&P("ptr should not be undefined");a.Qd;)b=a.ee(b),a=a.Qd;return Pb[b]}
function Rb(a,b){b.Jd&&b.Gd||ub("makeClassHandle requires ptr and ptrType");!!b.Od!==!!b.Ld&&ub("Both smartPtrType and smartPtr must be specified");b.count={value:1};return Sb(Object.create(a,{jd:{value:b}}))}function Sb(a){if("undefined"===typeof FinalizationRegistry)return Sb=b=>b,a;Bb=new FinalizationRegistry(b=>{Jb(b.jd)});Sb=b=>{var c=b.jd;c.Ld&&Bb.register(b,{jd:c},b);return b};Ib=b=>{Bb.unregister(b)};return Sb(a)}function Tb(){}
function Ub(a,b,c){if(void 0===a[b].Kd){var e=a[b];a[b]=function(){a[b].Kd.hasOwnProperty(arguments.length)||P("Function '"+c+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+a[b].Kd+")!");return a[b].Kd[arguments.length].apply(this,arguments)};a[b].Kd=[];a[b].Kd[e.Xd]=e}}
function Vb(a,b,c){r.hasOwnProperty(a)?((void 0===c||void 0!==r[a].Kd&&void 0!==r[a].Kd[c])&&P("Cannot register public name '"+a+"' twice"),Ub(r,a,a),r.hasOwnProperty(c)&&P("Cannot register multiple overloads of a function with the same number of arguments ("+c+")!"),r[a].Kd[c]=b):(r[a]=b,void 0!==c&&(r[a].uf=c))}function Wb(a,b,c,e,f,k,m,l){this.name=a;this.constructor=b;this.$d=c;this.Sd=e;this.Qd=f;this.Xe=k;this.ee=m;this.Ue=l;this.gf=[]}
function Xb(a,b,c){for(;b!==c;)b.ee||P("Expected null or instance of "+c.name+", got an instance of "+b.name),a=b.ee(a),b=b.Qd;return a}function Yb(a,b){if(null===b)return this.se&&P("null is not a valid "+this.name),0;b.jd||P('Cannot pass "'+Zb(b)+'" as a '+this.name);b.jd.Gd||P("Cannot pass deleted object as a pointer of type "+this.name);return Xb(b.jd.Gd,b.jd.Jd.Hd,this.Hd)}
function $b(a,b){if(null===b){this.se&&P("null is not a valid "+this.name);if(this.ie){var c=this.te();null!==a&&a.push(this.Sd,c);return c}return 0}b.jd||P('Cannot pass "'+Zb(b)+'" as a '+this.name);b.jd.Gd||P("Cannot pass deleted object as a pointer of type "+this.name);!this.he&&b.jd.Jd.he&&P("Cannot convert argument of type "+(b.jd.Od?b.jd.Od.name:b.jd.Jd.name)+" to parameter type "+this.name);c=Xb(b.jd.Gd,b.jd.Jd.Hd,this.Hd);if(this.ie)switch(void 0===b.jd.Ld&&P("Passing raw pointer to smart pointer is illegal"),
this.mf){case 0:b.jd.Od===this?c=b.jd.Ld:P("Cannot convert argument of type "+(b.jd.Od?b.jd.Od.name:b.jd.Jd.name)+" to parameter type "+this.name);break;case 1:c=b.jd.Ld;break;case 2:if(b.jd.Od===this)c=b.jd.Ld;else{var e=b.clone();c=this.hf(c,ac(function(){e["delete"]()}));null!==a&&a.push(this.Sd,c)}break;default:P("Unsupporting sharing policy")}return c}
function bc(a,b){if(null===b)return this.se&&P("null is not a valid "+this.name),0;b.jd||P('Cannot pass "'+Zb(b)+'" as a '+this.name);b.jd.Gd||P("Cannot pass deleted object as a pointer of type "+this.name);b.jd.Jd.he&&P("Cannot convert argument of type "+b.jd.Jd.name+" to parameter type "+this.name);return Xb(b.jd.Gd,b.jd.Jd.Hd,this.Hd)}
function cc(a,b,c,e,f,k,m,l,q,x,y){this.name=a;this.Hd=b;this.se=c;this.he=e;this.ie=f;this.ff=k;this.mf=m;this.Ce=l;this.te=q;this.hf=x;this.Sd=y;f||void 0!==b.Qd?this.toWireType=$b:(this.toWireType=e?Yb:bc,this.Nd=null)}function dc(a,b,c){r.hasOwnProperty(a)||ub("Replacing nonexistant public symbol");void 0!==r[a].Kd&&void 0!==c?r[a].Kd[c]=b:(r[a]=b,r[a].Xd=c)}function Q(a){return Sa.get(a)}
function ec(a,b){var c=[];return function(){c.length=0;Object.assign(c,arguments);if(a.includes("j")){var e=r["dynCall_"+a];e=c&&c.length?e.apply(null,[b].concat(c)):e.call(null,b)}else e=Q(b).apply(null,c);return e}}function R(a,b){a=O(a);var c=a.includes("j")?ec(a,b):Q(b);"function"!=typeof c&&P("unknown function pointer with signature "+a+": "+b);return c}var fc=void 0;function nc(a){a=oc(a);var b=O(a);pc(a);return b}
function qc(a,b){function c(k){f[k]||ob[k]||(pb[k]?pb[k].forEach(c):(e.push(k),f[k]=!0))}var e=[],f={};b.forEach(c);throw new fc(a+": "+e.map(nc).join([", "]));}
function rc(a,b,c,e,f){var k=b.length;2>k&&P("argTypes array size mismatch! Must at least get return value and 'this' types!");var m=null!==b[1]&&null!==c,l=!1;for(c=1;c<b.length;++c)if(null!==b[c]&&void 0===b[c].Nd){l=!0;break}var q="void"!==b[0].name,x=k-2,y=Array(x),B=[],D=[];return function(){arguments.length!==x&&P("function "+a+" called with "+arguments.length+" arguments, expected "+x+" args!");D.length=0;B.length=m?2:1;B[0]=f;if(m){var v=b[1].toWireType(D,this);B[1]=v}for(var E=0;E<x;++E)y[E]=
b[E+2].toWireType(D,arguments[E]),B.push(y[E]);E=e.apply(null,B);if(l)lb(D);else for(var H=m?1:2;H<b.length;H++){var S=1===H?v:y[H-2];null!==b[H].Nd&&b[H].Nd(S)}v=q?b[0].fromWireType(E):void 0;return v}}function sc(a,b){for(var c=[],e=0;e<a;e++)c.push(J[b+4*e>>2]);return c}var tc=[],uc=[{},{value:void 0},{value:null},{value:!0},{value:!1}];function vc(a){4<a&&0===--uc[a].ue&&(uc[a]=void 0,tc.push(a))}
var wc=a=>{a||P("Cannot use deleted val. handle = "+a);return uc[a].value},ac=a=>{switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var b=tc.length?tc.pop():uc.length;uc[b]={ue:1,value:a};return b}};
function xc(a,b,c){switch(b){case 0:return function(e){return this.fromWireType((c?Ma:C)[e])};case 1:return function(e){return this.fromWireType((c?Na:Oa)[e>>1])};case 2:return function(e){return this.fromWireType((c?G:J)[e>>2])};default:throw new TypeError("Unknown integer type: "+a);}}function yc(a,b){var c=ob[a];void 0===c&&P(b+" has unknown type "+nc(a));return c}function Zb(a){if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}
function zc(a,b){switch(b){case 2:return function(c){return this.fromWireType(N[c>>2])};case 3:return function(c){return this.fromWireType(Pa[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}
function Ac(a,b,c){switch(b){case 0:return c?function(e){return Ma[e]}:function(e){return C[e]};case 1:return c?function(e){return Na[e>>1]}:function(e){return Oa[e>>1]};case 2:return c?function(e){return G[e>>2]}:function(e){return J[e>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var Bc="undefined"!=typeof TextDecoder?new TextDecoder("utf-16le"):void 0;
function Cc(a,b){var c=a>>1;for(var e=c+b/2;!(c>=e)&&Oa[c];)++c;c<<=1;if(32<c-a&&Bc)return Bc.decode(C.subarray(a,c));c="";for(e=0;!(e>=b/2);++e){var f=Na[a+2*e>>1];if(0==f)break;c+=String.fromCharCode(f)}return c}function Dc(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var e=b;c=c<2*a.length?c/2:a.length;for(var f=0;f<c;++f)Na[b>>1]=a.charCodeAt(f),b+=2;Na[b>>1]=0;return b-e}function Ec(a){return 2*a.length}
function Fc(a,b){for(var c=0,e="";!(c>=b/4);){var f=G[a+4*c>>2];if(0==f)break;++c;65536<=f?(f-=65536,e+=String.fromCharCode(55296|f>>10,56320|f&1023)):e+=String.fromCharCode(f)}return e}function Gc(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var e=b;c=e+c-4;for(var f=0;f<a.length;++f){var k=a.charCodeAt(f);if(55296<=k&&57343>=k){var m=a.charCodeAt(++f);k=65536+((k&1023)<<10)|m&1023}G[b>>2]=k;b+=4;if(b+4>c)break}G[b>>2]=0;return b-e}
function Hc(a){for(var b=0,c=0;c<a.length;++c){var e=a.charCodeAt(c);55296<=e&&57343>=e&&++c;b+=4}return b}var Ic={};function Jc(a){var b=Ic[a];return void 0===b?O(a):b}var Kc=[];
function Lc(){function a(b){b.$$$embind_global$$$=b;var c="object"==typeof $$$embind_global$$$&&b.$$$embind_global$$$==b;c||delete b.$$$embind_global$$$;return c}if("object"==typeof globalThis)return globalThis;if("object"==typeof $$$embind_global$$$)return $$$embind_global$$$;"object"==typeof global&&a(global)?$$$embind_global$$$=global:"object"==typeof self&&a(self)&&($$$embind_global$$$=self);if("object"==typeof $$$embind_global$$$)return $$$embind_global$$$;throw Error("unable to get global object.");
}function Mc(a){var b=Kc.length;Kc.push(a);return b}function Nc(a,b){for(var c=Array(a),e=0;e<a;++e)c[e]=yc(J[b+4*e>>2],"parameter "+e);return c}var Oc=[];function Pc(a){var b=Array(a+1);return function(c,e,f){b[0]=c;for(var k=0;k<a;++k){var m=yc(J[e+4*k>>2],"parameter "+k);b[k+1]=m.readValueFromPointer(f);f+=m.argPackAdvance}c=new (c.bind.apply(c,b));return ac(c)}}var Qc={},Rc;Rc=sa?()=>{var a=process.hrtime();return 1E3*a[0]+a[1]/1E6}:()=>performance.now();
function Sc(a){var b=a.getExtension("ANGLE_instanced_arrays");b&&(a.vertexAttribDivisor=function(c,e){b.vertexAttribDivisorANGLE(c,e)},a.drawArraysInstanced=function(c,e,f,k){b.drawArraysInstancedANGLE(c,e,f,k)},a.drawElementsInstanced=function(c,e,f,k,m){b.drawElementsInstancedANGLE(c,e,f,k,m)})}
function Tc(a){var b=a.getExtension("OES_vertex_array_object");b&&(a.createVertexArray=function(){return b.createVertexArrayOES()},a.deleteVertexArray=function(c){b.deleteVertexArrayOES(c)},a.bindVertexArray=function(c){b.bindVertexArrayOES(c)},a.isVertexArray=function(c){return b.isVertexArrayOES(c)})}function Uc(a){var b=a.getExtension("WEBGL_draw_buffers");b&&(a.drawBuffers=function(c,e){b.drawBuffersWEBGL(c,e)})}
var Vc=1,Wc=[],Xc=[],Yc=[],Zc=[],ea=[],$c=[],ad=[],ia=[],bd=[],cd=[],ed={},fd={},gd=4;function U(a){hd||(hd=a)}function ca(a){for(var b=Vc++,c=a.length;c<b;c++)a[c]=null;return b}function fa(a,b){a.je||(a.je=a.getContext,a.getContext=function(e,f){f=a.je(e,f);return"webgl"==e==f instanceof WebGLRenderingContext?f:null});var c=1<b.majorVersion?a.getContext("webgl2",b):a.getContext("webgl",b);return c?jd(c,b):0}
function jd(a,b){var c=ca(ia),e={bf:c,attributes:b,version:b.majorVersion,Pd:a};a.canvas&&(a.canvas.He=e);ia[c]=e;("undefined"==typeof b.Ve||b.Ve)&&kd(e);return c}function ha(a){u=ia[a];r.sf=X=u&&u.Pd;return!(a&&!X)}
function kd(a){a||(a=u);if(!a.df){a.df=!0;var b=a.Pd;Sc(b);Tc(b);Uc(b);b.ye=b.getExtension("WEBGL_draw_instanced_base_vertex_base_instance");b.Be=b.getExtension("WEBGL_multi_draw_instanced_base_vertex_base_instance");2<=a.version&&(b.ze=b.getExtension("EXT_disjoint_timer_query_webgl2"));if(2>a.version||!b.ze)b.ze=b.getExtension("EXT_disjoint_timer_query");b.tf=b.getExtension("WEBGL_multi_draw");(b.getSupportedExtensions()||[]).forEach(function(c){c.includes("lose_context")||c.includes("debug")||b.getExtension(c)})}}
var u,hd,ld=[];function md(a,b,c,e){for(var f=0;f<a;f++){var k=X[c](),m=k&&ca(e);k?(k.name=m,e[m]=k):U(1282);G[b+4*f>>2]=m}}
function nd(a,b,c){if(b){var e=void 0;switch(a){case 36346:e=1;break;case 36344:0!=c&&1!=c&&U(1280);return;case 34814:case 36345:e=0;break;case 34466:var f=X.getParameter(34467);e=f?f.length:0;break;case 33309:if(2>u.version){U(1282);return}e=2*(X.getSupportedExtensions()||[]).length;break;case 33307:case 33308:if(2>u.version){U(1280);return}e=33307==a?3:0}if(void 0===e)switch(f=X.getParameter(a),typeof f){case "number":e=f;break;case "boolean":e=f?1:0;break;case "string":U(1280);return;case "object":if(null===
f)switch(a){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 36662:case 36663:case 35053:case 35055:case 36010:case 35097:case 35869:case 32874:case 36389:case 35983:case 35368:case 34068:e=0;break;default:U(1280);return}else{if(f instanceof Float32Array||f instanceof Uint32Array||f instanceof Int32Array||f instanceof Array){for(a=0;a<f.length;++a)switch(c){case 0:G[b+4*a>>2]=f[a];break;case 2:N[b+4*a>>2]=f[a];break;case 4:Ma[b+a>>0]=f[a]?1:0}return}try{e=f.name|0}catch(k){U(1280);
Ca("GL_INVALID_ENUM in glGet"+c+"v: Unknown object returned from WebGL getParameter("+a+")! (error: "+k+")");return}}break;default:U(1280);Ca("GL_INVALID_ENUM in glGet"+c+"v: Native code calling glGet"+c+"v("+a+") and it returns "+f+" of type "+typeof f+"!");return}switch(c){case 1:c=e;J[b>>2]=c;J[b+4>>2]=(c-J[b>>2])/4294967296;break;case 0:G[b>>2]=e;break;case 2:N[b>>2]=e;break;case 4:Ma[b>>0]=e?1:0}}else U(1281)}function od(a){var b=ja(a)+1,c=pd(b);ka(a,C,c,b);return c}
function qd(a){return"]"==a.slice(-1)&&a.lastIndexOf("[")}function rd(a){a-=5120;return 0==a?Ma:1==a?C:2==a?Na:4==a?G:6==a?N:5==a||28922==a||28520==a||30779==a||30782==a?J:Oa}function sd(a,b,c,e,f){a=rd(a);var k=31-Math.clz32(a.BYTES_PER_ELEMENT),m=gd;return a.subarray(f>>k,f+e*(c*({5:3,6:4,8:2,29502:3,29504:4,26917:2,26918:2,29846:3,29847:4}[b-6402]||1)*(1<<k)+m-1&-m)>>k)}
function Z(a){var b=X.Se;if(b){var c=b.de[a];"number"==typeof c&&(b.de[a]=c=X.getUniformLocation(b,b.De[a]+(0<c?"["+c+"]":"")));return c}U(1282)}var td=[],ud=[],vd={};
function wd(){if(!xd){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:na||"./this.program"},b;for(b in vd)void 0===vd[b]?delete a[b]:a[b]=vd[b];var c=[];for(b in a)c.push(b+"="+a[b]);xd=c}return xd}var xd,yd=[null,[],[]];function zd(a){return 0===a%4&&(0!==a%100||0===a%400)}
var Ad=[31,29,31,30,31,30,31,31,30,31,30,31],Bd=[31,28,31,30,31,30,31,31,30,31,30,31];function Cd(a){var b=Array(ja(a)+1);ka(a,b,0,b.length);return b}
function Dd(a,b,c,e){function f(v,E,H){for(v="number"==typeof v?v.toString():v||"";v.length<E;)v=H[0]+v;return v}function k(v,E){return f(v,E,"0")}function m(v,E){function H(Y){return 0>Y?-1:0<Y?1:0}var S;0===(S=H(v.getFullYear()-E.getFullYear()))&&0===(S=H(v.getMonth()-E.getMonth()))&&(S=H(v.getDate()-E.getDate()));return S}function l(v){switch(v.getDay()){case 0:return new Date(v.getFullYear()-1,11,29);case 1:return v;case 2:return new Date(v.getFullYear(),0,3);case 3:return new Date(v.getFullYear(),
0,2);case 4:return new Date(v.getFullYear(),0,1);case 5:return new Date(v.getFullYear()-1,11,31);case 6:return new Date(v.getFullYear()-1,11,30)}}function q(v){var E=v.Ud;for(v=new Date((new Date(v.Vd+1900,0,1)).getTime());0<E;){var H=v.getMonth(),S=(zd(v.getFullYear())?Ad:Bd)[H];if(E>S-v.getDate())E-=S-v.getDate()+1,v.setDate(1),11>H?v.setMonth(H+1):(v.setMonth(0),v.setFullYear(v.getFullYear()+1));else{v.setDate(v.getDate()+E);break}}H=new Date(v.getFullYear()+1,0,4);E=l(new Date(v.getFullYear(),
0,4));H=l(H);return 0>=m(E,v)?0>=m(H,v)?v.getFullYear()+1:v.getFullYear():v.getFullYear()-1}var x=G[e+40>>2];e={qf:G[e>>2],pf:G[e+4>>2],ne:G[e+8>>2],ve:G[e+12>>2],oe:G[e+16>>2],Vd:G[e+20>>2],Rd:G[e+24>>2],Ud:G[e+28>>2],wf:G[e+32>>2],nf:G[e+36>>2],rf:x?Ka(x):""};c=Ka(c);x={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y",
"%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var y in x)c=c.replace(new RegExp(y,"g"),x[y]);var B="Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),D="January February March April May June July August September October November December".split(" ");x={"%a":function(v){return B[v.Rd].substring(0,3)},"%A":function(v){return B[v.Rd]},"%b":function(v){return D[v.oe].substring(0,3)},
"%B":function(v){return D[v.oe]},"%C":function(v){return k((v.Vd+1900)/100|0,2)},"%d":function(v){return k(v.ve,2)},"%e":function(v){return f(v.ve,2," ")},"%g":function(v){return q(v).toString().substring(2)},"%G":function(v){return q(v)},"%H":function(v){return k(v.ne,2)},"%I":function(v){v=v.ne;0==v?v=12:12<v&&(v-=12);return k(v,2)},"%j":function(v){for(var E=0,H=0;H<=v.oe-1;E+=(zd(v.Vd+1900)?Ad:Bd)[H++]);return k(v.ve+E,3)},"%m":function(v){return k(v.oe+1,2)},"%M":function(v){return k(v.pf,2)},
"%n":function(){return"\n"},"%p":function(v){return 0<=v.ne&&12>v.ne?"AM":"PM"},"%S":function(v){return k(v.qf,2)},"%t":function(){return"\t"},"%u":function(v){return v.Rd||7},"%U":function(v){return k(Math.floor((v.Ud+7-v.Rd)/7),2)},"%V":function(v){var E=Math.floor((v.Ud+7-(v.Rd+6)%7)/7);2>=(v.Rd+371-v.Ud-2)%7&&E++;if(E)53==E&&(H=(v.Rd+371-v.Ud)%7,4==H||3==H&&zd(v.Vd)||(E=1));else{E=52;var H=(v.Rd+7-v.Ud-1)%7;(4==H||5==H&&zd(v.Vd%400-1))&&E++}return k(E,2)},"%w":function(v){return v.Rd},"%W":function(v){return k(Math.floor((v.Ud+
7-(v.Rd+6)%7)/7),2)},"%y":function(v){return(v.Vd+1900).toString().substring(2)},"%Y":function(v){return v.Vd+1900},"%z":function(v){v=v.nf;var E=0<=v;v=Math.abs(v)/60;return(E?"+":"-")+String("0000"+(v/60*100+v%60)).slice(-4)},"%Z":function(v){return v.rf},"%%":function(){return"%"}};c=c.replace(/%%/g,"\x00\x00");for(y in x)c.includes(y)&&(c=c.replace(new RegExp(y,"g"),x[y](e)));c=c.replace(/\0\0/g,"%");y=Cd(c);if(y.length>b)return 0;Ma.set(y,a);return y.length-1}tb=r.InternalError=sb("InternalError");
for(var Ed=Array(256),Fd=0;256>Fd;++Fd)Ed[Fd]=String.fromCharCode(Fd);yb=Ed;zb=r.BindingError=sb("BindingError");Tb.prototype.isAliasOf=function(a){if(!(this instanceof Tb&&a instanceof Tb))return!1;var b=this.jd.Jd.Hd,c=this.jd.Gd,e=a.jd.Jd.Hd;for(a=a.jd.Gd;b.Qd;)c=b.ee(c),b=b.Qd;for(;e.Qd;)a=e.ee(a),e=e.Qd;return b===e&&c===a};
Tb.prototype.clone=function(){this.jd.Gd||Ab(this);if(this.jd.ce)return this.jd.count.value+=1,this;var a=Sb,b=Object,c=b.create,e=Object.getPrototypeOf(this),f=this.jd;a=a(c.call(b,e,{jd:{value:{count:f.count,Zd:f.Zd,ce:f.ce,Gd:f.Gd,Jd:f.Jd,Ld:f.Ld,Od:f.Od}}}));a.jd.count.value+=1;a.jd.Zd=!1;return a};Tb.prototype["delete"]=function(){this.jd.Gd||Ab(this);this.jd.Zd&&!this.jd.ce&&P("Object already scheduled for deletion");Ib(this);Jb(this.jd);this.jd.ce||(this.jd.Ld=void 0,this.jd.Gd=void 0)};
Tb.prototype.isDeleted=function(){return!this.jd.Gd};Tb.prototype.deleteLater=function(){this.jd.Gd||Ab(this);this.jd.Zd&&!this.jd.ce&&P("Object already scheduled for deletion");Mb.push(this);1===Mb.length&&Ob&&Ob(Nb);this.jd.Zd=!0;return this};r.getInheritedInstanceCount=function(){return Object.keys(Pb).length};r.getLiveInheritedInstances=function(){var a=[],b;for(b in Pb)Pb.hasOwnProperty(b)&&a.push(Pb[b]);return a};r.flushPendingDeletes=Nb;r.setDelayFunction=function(a){Ob=a;Mb.length&&Ob&&Ob(Nb)};
cc.prototype.Ye=function(a){this.Ce&&(a=this.Ce(a));return a};cc.prototype.xe=function(a){this.Sd&&this.Sd(a)};cc.prototype.argPackAdvance=8;cc.prototype.readValueFromPointer=mb;cc.prototype.deleteObject=function(a){if(null!==a)a["delete"]()};
cc.prototype.fromWireType=function(a){function b(){return this.ie?Rb(this.Hd.$d,{Jd:this.ff,Gd:c,Od:this,Ld:a}):Rb(this.Hd.$d,{Jd:this,Gd:a})}var c=this.Ye(a);if(!c)return this.xe(a),null;var e=Qb(this.Hd,c);if(void 0!==e){if(0===e.jd.count.value)return e.jd.Gd=c,e.jd.Ld=a,e.clone();e=e.clone();this.xe(a);return e}e=this.Hd.Xe(c);e=Lb[e];if(!e)return b.call(this);e=this.he?e.Re:e.pointerType;var f=Kb(c,this.Hd,e.Hd);return null===f?b.call(this):this.ie?Rb(e.Hd.$d,{Jd:e,Gd:f,Od:this,Ld:a}):Rb(e.Hd.$d,
{Jd:e,Gd:f})};fc=r.UnboundTypeError=sb("UnboundTypeError");r.count_emval_handles=function(){for(var a=0,b=5;b<uc.length;++b)void 0!==uc[b]&&++a;return a};r.get_first_emval=function(){for(var a=5;a<uc.length;++a)if(void 0!==uc[a])return uc[a];return null};for(var X,Gd=0;32>Gd;++Gd)ld.push(Array(Gd));var Hd=new Float32Array(288);for(Gd=0;288>Gd;++Gd)td[Gd]=Hd.subarray(0,Gd+1);var Id=new Int32Array(288);for(Gd=0;288>Gd;++Gd)ud[Gd]=Id.subarray(0,Gd+1);
var Wd={G:function(a,b,c){(new ib(a)).je(b,c);jb++;throw a;},T:function(){return 0},rb:function(){},tb:function(){return 0},pb:function(){},ub:function(){},qb:function(){},C:function(a){var b=kb[a];delete kb[a];var c=b.te,e=b.Sd,f=b.Ae,k=f.map(m=>m.af).concat(f.map(m=>m.kf));vb([a],k,m=>{var l={};f.forEach((q,x)=>{var y=m[x],B=q.Ze,D=q.$e,v=m[x+f.length],E=q.jf,H=q.lf;l[q.We]={read:S=>y.fromWireType(B(D,S)),write:(S,Y)=>{var da=[];E(H,S,v.toWireType(da,Y));lb(da)}}});return[{name:b.name,fromWireType:function(q){var x=
{},y;for(y in l)x[y]=l[y].read(q);e(q);return x},toWireType:function(q,x){for(var y in l)if(!(y in x))throw new TypeError('Missing field: "'+y+'"');var B=c();for(y in l)l[y].write(B,x[y]);null!==q&&q.push(e,B);return B},argPackAdvance:8,readValueFromPointer:mb,Nd:e}]})},hb:function(){},yb:function(a,b,c,e,f){var k=xb(c);b=O(b);wb(a,{name:b,fromWireType:function(m){return!!m},toWireType:function(m,l){return l?e:f},argPackAdvance:8,readValueFromPointer:function(m){if(1===c)var l=Ma;else if(2===c)l=
Na;else if(4===c)l=G;else throw new TypeError("Unknown boolean type size: "+b);return this.fromWireType(l[m>>k])},Nd:null})},l:function(a,b,c,e,f,k,m,l,q,x,y,B,D){y=O(y);k=R(f,k);l&&(l=R(m,l));x&&(x=R(q,x));D=R(B,D);var v=qb(y);Vb(v,function(){qc("Cannot construct "+y+" due to unbound types",[e])});vb([a,b,c],e?[e]:[],function(E){E=E[0];if(e){var H=E.Hd;var S=H.$d}else S=Tb.prototype;E=rb(v,function(){if(Object.getPrototypeOf(this)!==Y)throw new zb("Use 'new' to construct "+y);if(void 0===da.Td)throw new zb(y+
" has no accessible constructor");var La=da.Td[arguments.length];if(void 0===La)throw new zb("Tried to invoke ctor of "+y+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys(da.Td).toString()+") parameters instead!");return La.apply(this,arguments)});var Y=Object.create(S,{constructor:{value:E}});E.prototype=Y;var da=new Wb(y,E,Y,D,H,k,l,x);H=new cc(y,da,!0,!1,!1);S=new cc(y+"*",da,!1,!1,!1);var ua=new cc(y+" const*",da,!1,!0,!1);Lb[a]={pointerType:S,Re:ua};dc(v,E);
return[H,S,ua]})},e:function(a,b,c,e,f,k,m){var l=sc(c,e);b=O(b);k=R(f,k);vb([],[a],function(q){function x(){qc("Cannot call "+y+" due to unbound types",l)}q=q[0];var y=q.name+"."+b;b.startsWith("@@")&&(b=Symbol[b.substring(2)]);var B=q.Hd.constructor;void 0===B[b]?(x.Xd=c-1,B[b]=x):(Ub(B,b,y),B[b].Kd[c-1]=x);vb([],l,function(D){D=[D[0],null].concat(D.slice(1));D=rc(y,D,null,k,m);void 0===B[b].Kd?(D.Xd=c-1,B[b]=D):B[b].Kd[c-1]=D;return[]});return[]})},A:function(a,b,c,e,f,k){0<b||Fa();var m=sc(b,
c);f=R(e,f);vb([],[a],function(l){l=l[0];var q="constructor "+l.name;void 0===l.Hd.Td&&(l.Hd.Td=[]);if(void 0!==l.Hd.Td[b-1])throw new zb("Cannot register multiple constructors with identical number of parameters ("+(b-1)+") for class '"+l.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!");l.Hd.Td[b-1]=()=>{qc("Cannot construct "+l.name+" due to unbound types",m)};vb([],m,function(x){x.splice(1,0,null);l.Hd.Td[b-1]=rc(q,x,null,f,k);return[]});
return[]})},a:function(a,b,c,e,f,k,m,l){var q=sc(c,e);b=O(b);k=R(f,k);vb([],[a],function(x){function y(){qc("Cannot call "+B+" due to unbound types",q)}x=x[0];var B=x.name+"."+b;b.startsWith("@@")&&(b=Symbol[b.substring(2)]);l&&x.Hd.gf.push(b);var D=x.Hd.$d,v=D[b];void 0===v||void 0===v.Kd&&v.className!==x.name&&v.Xd===c-2?(y.Xd=c-2,y.className=x.name,D[b]=y):(Ub(D,b,B),D[b].Kd[c-2]=y);vb([],q,function(E){E=rc(B,E,x,k,m);void 0===D[b].Kd?(E.Xd=c-2,D[b]=E):D[b].Kd[c-2]=E;return[]});return[]})},r:function(a,
b,c){a=O(a);vb([],[b],function(e){e=e[0];r[a]=e.fromWireType(c);return[]})},xb:function(a,b){b=O(b);wb(a,{name:b,fromWireType:function(c){var e=wc(c);vc(c);return e},toWireType:function(c,e){return ac(e)},argPackAdvance:8,readValueFromPointer:mb,Nd:null})},i:function(a,b,c,e){function f(){}c=xb(c);b=O(b);f.values={};wb(a,{name:b,constructor:f,fromWireType:function(k){return this.constructor.values[k]},toWireType:function(k,m){return m.value},argPackAdvance:8,readValueFromPointer:xc(b,c,e),Nd:null});
Vb(b,f)},b:function(a,b,c){var e=yc(a,"enum");b=O(b);a=e.constructor;e=Object.create(e.constructor.prototype,{value:{value:c},constructor:{value:rb(e.name+"_"+b,function(){})}});a.values[c]=e;a[b]=e},W:function(a,b,c){c=xb(c);b=O(b);wb(a,{name:b,fromWireType:function(e){return e},toWireType:function(e,f){return f},argPackAdvance:8,readValueFromPointer:zc(b,c),Nd:null})},t:function(a,b,c,e,f,k){var m=sc(b,c);a=O(a);f=R(e,f);Vb(a,function(){qc("Cannot call "+a+" due to unbound types",m)},b-1);vb([],
m,function(l){l=[l[0],null].concat(l.slice(1));dc(a,rc(a,l,null,f,k),b-1);return[]})},E:function(a,b,c,e,f){b=O(b);-1===f&&(f=4294967295);f=xb(c);var k=l=>l;if(0===e){var m=32-8*c;k=l=>l<<m>>>m}c=b.includes("unsigned")?function(l,q){return q>>>0}:function(l,q){return q};wb(a,{name:b,fromWireType:k,toWireType:c,argPackAdvance:8,readValueFromPointer:Ac(b,f,0!==e),Nd:null})},s:function(a,b,c){function e(k){k>>=2;var m=J;return new f(m.buffer,m[k+1],m[k])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,
Int32Array,Uint32Array,Float32Array,Float64Array][b];c=O(c);wb(a,{name:c,fromWireType:e,argPackAdvance:8,readValueFromPointer:e},{cf:!0})},q:function(a,b,c,e,f,k,m,l,q,x,y,B){c=O(c);k=R(f,k);l=R(m,l);x=R(q,x);B=R(y,B);vb([a],[b],function(D){D=D[0];return[new cc(c,D.Hd,!1,!1,!0,D,e,k,l,x,B)]})},V:function(a,b){b=O(b);var c="std::string"===b;wb(a,{name:b,fromWireType:function(e){var f=J[e>>2],k=e+4;if(c)for(var m=k,l=0;l<=f;++l){var q=k+l;if(l==f||0==C[q]){m=Ka(m,q-m);if(void 0===x)var x=m;else x+=
String.fromCharCode(0),x+=m;m=q+1}}else{x=Array(f);for(l=0;l<f;++l)x[l]=String.fromCharCode(C[k+l]);x=x.join("")}pc(e);return x},toWireType:function(e,f){f instanceof ArrayBuffer&&(f=new Uint8Array(f));var k,m="string"==typeof f;m||f instanceof Uint8Array||f instanceof Uint8ClampedArray||f instanceof Int8Array||P("Cannot pass non-string to std::string");c&&m?k=ja(f):k=f.length;var l=pd(4+k+1),q=l+4;J[l>>2]=k;if(c&&m)ka(f,C,q,k+1);else if(m)for(m=0;m<k;++m){var x=f.charCodeAt(m);255<x&&(pc(q),P("String has UTF-16 code units that do not fit in 8 bits"));
C[q+m]=x}else for(m=0;m<k;++m)C[q+m]=f[m];null!==e&&e.push(pc,l);return l},argPackAdvance:8,readValueFromPointer:mb,Nd:function(e){pc(e)}})},M:function(a,b,c){c=O(c);if(2===b){var e=Cc;var f=Dc;var k=Ec;var m=()=>Oa;var l=1}else 4===b&&(e=Fc,f=Gc,k=Hc,m=()=>J,l=2);wb(a,{name:c,fromWireType:function(q){for(var x=J[q>>2],y=m(),B,D=q+4,v=0;v<=x;++v){var E=q+4+v*b;if(v==x||0==y[E>>l])D=e(D,E-D),void 0===B?B=D:(B+=String.fromCharCode(0),B+=D),D=E+b}pc(q);return B},toWireType:function(q,x){"string"!=typeof x&&
P("Cannot pass non-string to C++ string type "+c);var y=k(x),B=pd(4+y+b);J[B>>2]=y>>l;f(x,B+4,y+b);null!==q&&q.push(pc,B);return B},argPackAdvance:8,readValueFromPointer:mb,Nd:function(q){pc(q)}})},D:function(a,b,c,e,f,k){kb[a]={name:O(b),te:R(c,e),Sd:R(f,k),Ae:[]}},d:function(a,b,c,e,f,k,m,l,q,x){kb[a].Ae.push({We:O(b),af:c,Ze:R(e,f),$e:k,kf:m,jf:R(l,q),lf:x})},zb:function(a,b){b=O(b);wb(a,{ef:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},wb:function(){return!0},
jb:function(){throw Infinity;},F:function(a,b,c){a=wc(a);b=yc(b,"emval::as");var e=[],f=ac(e);J[c>>2]=f;return b.toWireType(e,a)},O:function(a,b,c,e,f){a=Kc[a];b=wc(b);c=Jc(c);var k=[];J[e>>2]=ac(k);return a(b,c,k,f)},x:function(a,b,c,e){a=Kc[a];b=wc(b);c=Jc(c);a(b,c,null,e)},c:vc,K:function(a){if(0===a)return ac(Lc());a=Jc(a);return ac(Lc()[a])},u:function(a,b){var c=Nc(a,b),e=c[0];b=e.name+"_$"+c.slice(1).map(function(m){return m.name}).join("_")+"$";var f=Oc[b];if(void 0!==f)return f;var k=Array(a-
1);f=Mc((m,l,q,x)=>{for(var y=0,B=0;B<a-1;++B)k[B]=c[B+1].readValueFromPointer(x+y),y+=c[B+1].argPackAdvance;m=m[l].apply(m,k);for(B=0;B<a-1;++B)c[B+1].Te&&c[B+1].Te(k[B]);if(!e.ef)return e.toWireType(q,m)});return Oc[b]=f},z:function(a,b){a=wc(a);b=wc(b);return ac(a[b])},o:function(a){4<a&&(uc[a].ue+=1)},J:function(a,b,c,e){a=wc(a);var f=Qc[b];f||(f=Pc(b),Qc[b]=f);return f(a,c,e)},I:function(){return ac([])},f:function(a){return ac(Jc(a))},H:function(){return ac({})},db:function(a){a=wc(a);return!a},
B:function(a){var b=wc(a);lb(b);vc(a)},h:function(a,b,c){a=wc(a);b=wc(b);c=wc(c);a[b]=c},g:function(a,b){a=yc(a,"_emval_take_value");a=a.readValueFromPointer(b);return ac(a)},lb:function(){return-52},mb:function(){},j:function(){Fa("")},vb:Rc,Tc:function(a){X.activeTexture(a)},Uc:function(a,b){X.attachShader(Xc[a],$c[b])},Vc:function(a,b,c){X.bindAttribLocation(Xc[a],b,Ka(c))},Wc:function(a,b){35051==a?X.qe=b:35052==a&&(X.Yd=b);X.bindBuffer(a,Wc[b])},_:function(a,b){X.bindFramebuffer(a,Yc[b])},Xb:function(a,
b){X.bindRenderbuffer(a,Zc[b])},Hb:function(a,b){X.bindSampler(a,bd[b])},Xc:function(a,b){X.bindTexture(a,ea[b])},pc:function(a){X.bindVertexArray(ad[a])},sc:function(a){X.bindVertexArray(ad[a])},Yc:function(a,b,c,e){X.blendColor(a,b,c,e)},Zc:function(a){X.blendEquation(a)},_c:function(a,b){X.blendFunc(a,b)},Rb:function(a,b,c,e,f,k,m,l,q,x){X.blitFramebuffer(a,b,c,e,f,k,m,l,q,x)},$:function(a,b,c,e){2<=u.version?c&&b?X.bufferData(a,C,e,c,b):X.bufferData(a,b,e):X.bufferData(a,c?C.subarray(c,c+b):b,
e)},aa:function(a,b,c,e){2<=u.version?c&&X.bufferSubData(a,b,C,e,c):X.bufferSubData(a,b,C.subarray(e,e+c))},Yb:function(a){return X.checkFramebufferStatus(a)},Q:function(a){X.clear(a)},Z:function(a,b,c,e){X.clearColor(a,b,c,e)},S:function(a){X.clearStencil(a)},bb:function(a,b,c,e){return X.clientWaitSync(cd[a],b,(c>>>0)+4294967296*e)},ba:function(a,b,c,e){X.colorMask(!!a,!!b,!!c,!!e)},ca:function(a){X.compileShader($c[a])},da:function(a,b,c,e,f,k,m,l){2<=u.version?X.Yd||!m?X.compressedTexImage2D(a,
b,c,e,f,k,m,l):X.compressedTexImage2D(a,b,c,e,f,k,C,l,m):X.compressedTexImage2D(a,b,c,e,f,k,l?C.subarray(l,l+m):null)},ea:function(a,b,c,e,f,k,m,l,q){2<=u.version?X.Yd||!l?X.compressedTexSubImage2D(a,b,c,e,f,k,m,l,q):X.compressedTexSubImage2D(a,b,c,e,f,k,m,C,q,l):X.compressedTexSubImage2D(a,b,c,e,f,k,m,q?C.subarray(q,q+l):null)},Pb:function(a,b,c,e,f){X.copyBufferSubData(a,b,c,e,f)},fa:function(a,b,c,e,f,k,m,l){X.copyTexSubImage2D(a,b,c,e,f,k,m,l)},ga:function(){var a=ca(Xc),b=X.createProgram();b.name=
a;b.me=b.ke=b.le=0;b.we=1;Xc[a]=b;return a},ha:function(a){var b=ca($c);$c[b]=X.createShader(a);return b},ia:function(a){X.cullFace(a)},ja:function(a,b){for(var c=0;c<a;c++){var e=G[b+4*c>>2],f=Wc[e];f&&(X.deleteBuffer(f),f.name=0,Wc[e]=null,e==X.qe&&(X.qe=0),e==X.Yd&&(X.Yd=0))}},Zb:function(a,b){for(var c=0;c<a;++c){var e=G[b+4*c>>2],f=Yc[e];f&&(X.deleteFramebuffer(f),f.name=0,Yc[e]=null)}},ka:function(a){if(a){var b=Xc[a];b?(X.deleteProgram(b),b.name=0,Xc[a]=null):U(1281)}},_b:function(a,b){for(var c=
0;c<a;c++){var e=G[b+4*c>>2],f=Zc[e];f&&(X.deleteRenderbuffer(f),f.name=0,Zc[e]=null)}},Ib:function(a,b){for(var c=0;c<a;c++){var e=G[b+4*c>>2],f=bd[e];f&&(X.deleteSampler(f),f.name=0,bd[e]=null)}},la:function(a){if(a){var b=$c[a];b?(X.deleteShader(b),$c[a]=null):U(1281)}},Qb:function(a){if(a){var b=cd[a];b?(X.deleteSync(b),b.name=0,cd[a]=null):U(1281)}},ma:function(a,b){for(var c=0;c<a;c++){var e=G[b+4*c>>2],f=ea[e];f&&(X.deleteTexture(f),f.name=0,ea[e]=null)}},qc:function(a,b){for(var c=0;c<a;c++){var e=
G[b+4*c>>2];X.deleteVertexArray(ad[e]);ad[e]=null}},tc:function(a,b){for(var c=0;c<a;c++){var e=G[b+4*c>>2];X.deleteVertexArray(ad[e]);ad[e]=null}},na:function(a){X.depthMask(!!a)},oa:function(a){X.disable(a)},pa:function(a){X.disableVertexAttribArray(a)},qa:function(a,b,c){X.drawArrays(a,b,c)},nc:function(a,b,c,e){X.drawArraysInstanced(a,b,c,e)},lc:function(a,b,c,e,f){X.ye.drawArraysInstancedBaseInstanceWEBGL(a,b,c,e,f)},jc:function(a,b){for(var c=ld[a],e=0;e<a;e++)c[e]=G[b+4*e>>2];X.drawBuffers(c)},
ra:function(a,b,c,e){X.drawElements(a,b,c,e)},oc:function(a,b,c,e,f){X.drawElementsInstanced(a,b,c,e,f)},mc:function(a,b,c,e,f,k,m){X.ye.drawElementsInstancedBaseVertexBaseInstanceWEBGL(a,b,c,e,f,k,m)},dc:function(a,b,c,e,f,k){X.drawElements(a,e,f,k)},sa:function(a){X.enable(a)},ta:function(a){X.enableVertexAttribArray(a)},Nb:function(a,b){return(a=X.fenceSync(a,b))?(b=ca(cd),a.name=b,cd[b]=a,b):0},ua:function(){X.finish()},va:function(){X.flush()},$b:function(a,b,c,e){X.framebufferRenderbuffer(a,
b,c,Zc[e])},ac:function(a,b,c,e,f){X.framebufferTexture2D(a,b,c,ea[e],f)},wa:function(a){X.frontFace(a)},xa:function(a,b){md(a,b,"createBuffer",Wc)},bc:function(a,b){md(a,b,"createFramebuffer",Yc)},cc:function(a,b){md(a,b,"createRenderbuffer",Zc)},Jb:function(a,b){md(a,b,"createSampler",bd)},ya:function(a,b){md(a,b,"createTexture",ea)},rc:function(a,b){md(a,b,"createVertexArray",ad)},uc:function(a,b){md(a,b,"createVertexArray",ad)},Tb:function(a){X.generateMipmap(a)},za:function(a,b,c){c?G[c>>2]=
X.getBufferParameter(a,b):U(1281)},Aa:function(){var a=X.getError()||hd;hd=0;return a},Ba:function(a,b){nd(a,b,2)},Ub:function(a,b,c,e){a=X.getFramebufferAttachmentParameter(a,b,c);if(a instanceof WebGLRenderbuffer||a instanceof WebGLTexture)a=a.name|0;G[e>>2]=a},L:function(a,b){nd(a,b,0)},Ca:function(a,b,c,e){a=X.getProgramInfoLog(Xc[a]);null===a&&(a="(unknown error)");b=0<b&&e?ka(a,C,e,b):0;c&&(G[c>>2]=b)},Da:function(a,b,c){if(c)if(a>=Vc)U(1281);else if(a=Xc[a],35716==b)a=X.getProgramInfoLog(a),
null===a&&(a="(unknown error)"),G[c>>2]=a.length+1;else if(35719==b){if(!a.me)for(b=0;b<X.getProgramParameter(a,35718);++b)a.me=Math.max(a.me,X.getActiveUniform(a,b).name.length+1);G[c>>2]=a.me}else if(35722==b){if(!a.ke)for(b=0;b<X.getProgramParameter(a,35721);++b)a.ke=Math.max(a.ke,X.getActiveAttrib(a,b).name.length+1);G[c>>2]=a.ke}else if(35381==b){if(!a.le)for(b=0;b<X.getProgramParameter(a,35382);++b)a.le=Math.max(a.le,X.getActiveUniformBlockName(a,b).length+1);G[c>>2]=a.le}else G[c>>2]=X.getProgramParameter(a,
b);else U(1281)},Vb:function(a,b,c){c?G[c>>2]=X.getRenderbufferParameter(a,b):U(1281)},Ea:function(a,b,c,e){a=X.getShaderInfoLog($c[a]);null===a&&(a="(unknown error)");b=0<b&&e?ka(a,C,e,b):0;c&&(G[c>>2]=b)},Eb:function(a,b,c,e){a=X.getShaderPrecisionFormat(a,b);G[c>>2]=a.rangeMin;G[c+4>>2]=a.rangeMax;G[e>>2]=a.precision},Fa:function(a,b,c){c?35716==b?(a=X.getShaderInfoLog($c[a]),null===a&&(a="(unknown error)"),G[c>>2]=a?a.length+1:0):35720==b?(a=X.getShaderSource($c[a]),G[c>>2]=a?a.length+1:0):G[c>>
2]=X.getShaderParameter($c[a],b):U(1281)},P:function(a){var b=ed[a];if(!b){switch(a){case 7939:b=X.getSupportedExtensions()||[];b=b.concat(b.map(function(e){return"GL_"+e}));b=od(b.join(" "));break;case 7936:case 7937:case 37445:case 37446:(b=X.getParameter(a))||U(1280);b=b&&od(b);break;case 7938:b=X.getParameter(7938);b=2<=u.version?"OpenGL ES 3.0 ("+b+")":"OpenGL ES 2.0 ("+b+")";b=od(b);break;case 35724:b=X.getParameter(35724);var c=b.match(/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/);null!==
c&&(3==c[1].length&&(c[1]+="0"),b="OpenGL ES GLSL ES "+c[1]+" ("+b+")");b=od(b);break;default:U(1280)}ed[a]=b}return b},ab:function(a,b){if(2>u.version)return U(1282),0;var c=fd[a];if(c)return 0>b||b>=c.length?(U(1281),0):c[b];switch(a){case 7939:return c=X.getSupportedExtensions()||[],c=c.concat(c.map(function(e){return"GL_"+e})),c=c.map(function(e){return od(e)}),c=fd[a]=c,0>b||b>=c.length?(U(1281),0):c[b];default:return U(1280),0}},Ga:function(a,b){b=Ka(b);if(a=Xc[a]){var c=a,e=c.de,f=c.Ee,k;if(!e)for(c.de=
e={},c.De={},k=0;k<X.getProgramParameter(c,35718);++k){var m=X.getActiveUniform(c,k);var l=m.name;m=m.size;var q=qd(l);q=0<q?l.slice(0,q):l;var x=c.we;c.we+=m;f[q]=[m,x];for(l=0;l<m;++l)e[x]=l,c.De[x++]=q}c=a.de;e=0;f=b;k=qd(b);0<k&&(e=parseInt(b.slice(k+1))>>>0,f=b.slice(0,k));if((f=a.Ee[f])&&e<f[0]&&(e+=f[1],c[e]=c[e]||X.getUniformLocation(a,b)))return e}else U(1281);return-1},Fb:function(a,b,c){for(var e=ld[b],f=0;f<b;f++)e[f]=G[c+4*f>>2];X.invalidateFramebuffer(a,e)},Gb:function(a,b,c,e,f,k,m){for(var l=
ld[b],q=0;q<b;q++)l[q]=G[c+4*q>>2];X.invalidateSubFramebuffer(a,l,e,f,k,m)},Ob:function(a){return X.isSync(cd[a])},Ha:function(a){return(a=ea[a])?X.isTexture(a):0},Ia:function(a){X.lineWidth(a)},Ja:function(a){a=Xc[a];X.linkProgram(a);a.de=0;a.Ee={}},hc:function(a,b,c,e,f,k){X.Be.multiDrawArraysInstancedBaseInstanceWEBGL(a,G,b>>2,G,c>>2,G,e>>2,J,f>>2,k)},ic:function(a,b,c,e,f,k,m,l){X.Be.multiDrawElementsInstancedBaseVertexBaseInstanceWEBGL(a,G,b>>2,c,G,e>>2,G,f>>2,G,k>>2,J,m>>2,l)},Ka:function(a,
b){3317==a&&(gd=b);X.pixelStorei(a,b)},kc:function(a){X.readBuffer(a)},La:function(a,b,c,e,f,k,m){if(2<=u.version)if(X.qe)X.readPixels(a,b,c,e,f,k,m);else{var l=rd(k);X.readPixels(a,b,c,e,f,k,l,m>>31-Math.clz32(l.BYTES_PER_ELEMENT))}else(m=sd(k,f,c,e,m))?X.readPixels(a,b,c,e,f,k,m):U(1280)},Wb:function(a,b,c,e){X.renderbufferStorage(a,b,c,e)},Sb:function(a,b,c,e,f){X.renderbufferStorageMultisample(a,b,c,e,f)},Kb:function(a,b,c){X.samplerParameterf(bd[a],b,c)},Lb:function(a,b,c){X.samplerParameteri(bd[a],
b,c)},Mb:function(a,b,c){X.samplerParameteri(bd[a],b,G[c>>2])},Ma:function(a,b,c,e){X.scissor(a,b,c,e)},Na:function(a,b,c,e){for(var f="",k=0;k<b;++k){var m=e?G[e+4*k>>2]:-1;f+=Ka(G[c+4*k>>2],0>m?void 0:m)}X.shaderSource($c[a],f)},Oa:function(a,b,c){X.stencilFunc(a,b,c)},Pa:function(a,b,c,e){X.stencilFuncSeparate(a,b,c,e)},Qa:function(a){X.stencilMask(a)},Ra:function(a,b){X.stencilMaskSeparate(a,b)},Sa:function(a,b,c){X.stencilOp(a,b,c)},Ta:function(a,b,c,e){X.stencilOpSeparate(a,b,c,e)},Ua:function(a,
b,c,e,f,k,m,l,q){if(2<=u.version)if(X.Yd)X.texImage2D(a,b,c,e,f,k,m,l,q);else if(q){var x=rd(l);X.texImage2D(a,b,c,e,f,k,m,l,x,q>>31-Math.clz32(x.BYTES_PER_ELEMENT))}else X.texImage2D(a,b,c,e,f,k,m,l,null);else X.texImage2D(a,b,c,e,f,k,m,l,q?sd(l,m,e,f,q):null)},Va:function(a,b,c){X.texParameterf(a,b,c)},Wa:function(a,b,c){X.texParameterf(a,b,N[c>>2])},Xa:function(a,b,c){X.texParameteri(a,b,c)},Ya:function(a,b,c){X.texParameteri(a,b,G[c>>2])},ec:function(a,b,c,e,f){X.texStorage2D(a,b,c,e,f)},Za:function(a,
b,c,e,f,k,m,l,q){if(2<=u.version)if(X.Yd)X.texSubImage2D(a,b,c,e,f,k,m,l,q);else if(q){var x=rd(l);X.texSubImage2D(a,b,c,e,f,k,m,l,x,q>>31-Math.clz32(x.BYTES_PER_ELEMENT))}else X.texSubImage2D(a,b,c,e,f,k,m,l,null);else x=null,q&&(x=sd(l,m,f,k,q)),X.texSubImage2D(a,b,c,e,f,k,m,l,x)},_a:function(a,b){X.uniform1f(Z(a),b)},$a:function(a,b,c){if(2<=u.version)b&&X.uniform1fv(Z(a),N,c>>2,b);else{if(288>=b)for(var e=td[b-1],f=0;f<b;++f)e[f]=N[c+4*f>>2];else e=N.subarray(c>>2,c+4*b>>2);X.uniform1fv(Z(a),
e)}},Pc:function(a,b){X.uniform1i(Z(a),b)},Qc:function(a,b,c){if(2<=u.version)b&&X.uniform1iv(Z(a),G,c>>2,b);else{if(288>=b)for(var e=ud[b-1],f=0;f<b;++f)e[f]=G[c+4*f>>2];else e=G.subarray(c>>2,c+4*b>>2);X.uniform1iv(Z(a),e)}},Rc:function(a,b,c){X.uniform2f(Z(a),b,c)},Sc:function(a,b,c){if(2<=u.version)b&&X.uniform2fv(Z(a),N,c>>2,2*b);else{if(144>=b)for(var e=td[2*b-1],f=0;f<2*b;f+=2)e[f]=N[c+4*f>>2],e[f+1]=N[c+(4*f+4)>>2];else e=N.subarray(c>>2,c+8*b>>2);X.uniform2fv(Z(a),e)}},Oc:function(a,b,c){X.uniform2i(Z(a),
b,c)},Nc:function(a,b,c){if(2<=u.version)b&&X.uniform2iv(Z(a),G,c>>2,2*b);else{if(144>=b)for(var e=ud[2*b-1],f=0;f<2*b;f+=2)e[f]=G[c+4*f>>2],e[f+1]=G[c+(4*f+4)>>2];else e=G.subarray(c>>2,c+8*b>>2);X.uniform2iv(Z(a),e)}},Mc:function(a,b,c,e){X.uniform3f(Z(a),b,c,e)},Lc:function(a,b,c){if(2<=u.version)b&&X.uniform3fv(Z(a),N,c>>2,3*b);else{if(96>=b)for(var e=td[3*b-1],f=0;f<3*b;f+=3)e[f]=N[c+4*f>>2],e[f+1]=N[c+(4*f+4)>>2],e[f+2]=N[c+(4*f+8)>>2];else e=N.subarray(c>>2,c+12*b>>2);X.uniform3fv(Z(a),e)}},
Kc:function(a,b,c,e){X.uniform3i(Z(a),b,c,e)},Jc:function(a,b,c){if(2<=u.version)b&&X.uniform3iv(Z(a),G,c>>2,3*b);else{if(96>=b)for(var e=ud[3*b-1],f=0;f<3*b;f+=3)e[f]=G[c+4*f>>2],e[f+1]=G[c+(4*f+4)>>2],e[f+2]=G[c+(4*f+8)>>2];else e=G.subarray(c>>2,c+12*b>>2);X.uniform3iv(Z(a),e)}},Ic:function(a,b,c,e,f){X.uniform4f(Z(a),b,c,e,f)},Hc:function(a,b,c){if(2<=u.version)b&&X.uniform4fv(Z(a),N,c>>2,4*b);else{if(72>=b){var e=td[4*b-1],f=N;c>>=2;for(var k=0;k<4*b;k+=4){var m=c+k;e[k]=f[m];e[k+1]=f[m+1];e[k+
2]=f[m+2];e[k+3]=f[m+3]}}else e=N.subarray(c>>2,c+16*b>>2);X.uniform4fv(Z(a),e)}},vc:function(a,b,c,e,f){X.uniform4i(Z(a),b,c,e,f)},wc:function(a,b,c){if(2<=u.version)b&&X.uniform4iv(Z(a),G,c>>2,4*b);else{if(72>=b)for(var e=ud[4*b-1],f=0;f<4*b;f+=4)e[f]=G[c+4*f>>2],e[f+1]=G[c+(4*f+4)>>2],e[f+2]=G[c+(4*f+8)>>2],e[f+3]=G[c+(4*f+12)>>2];else e=G.subarray(c>>2,c+16*b>>2);X.uniform4iv(Z(a),e)}},xc:function(a,b,c,e){if(2<=u.version)b&&X.uniformMatrix2fv(Z(a),!!c,N,e>>2,4*b);else{if(72>=b)for(var f=td[4*
b-1],k=0;k<4*b;k+=4)f[k]=N[e+4*k>>2],f[k+1]=N[e+(4*k+4)>>2],f[k+2]=N[e+(4*k+8)>>2],f[k+3]=N[e+(4*k+12)>>2];else f=N.subarray(e>>2,e+16*b>>2);X.uniformMatrix2fv(Z(a),!!c,f)}},yc:function(a,b,c,e){if(2<=u.version)b&&X.uniformMatrix3fv(Z(a),!!c,N,e>>2,9*b);else{if(32>=b)for(var f=td[9*b-1],k=0;k<9*b;k+=9)f[k]=N[e+4*k>>2],f[k+1]=N[e+(4*k+4)>>2],f[k+2]=N[e+(4*k+8)>>2],f[k+3]=N[e+(4*k+12)>>2],f[k+4]=N[e+(4*k+16)>>2],f[k+5]=N[e+(4*k+20)>>2],f[k+6]=N[e+(4*k+24)>>2],f[k+7]=N[e+(4*k+28)>>2],f[k+8]=N[e+(4*k+
32)>>2];else f=N.subarray(e>>2,e+36*b>>2);X.uniformMatrix3fv(Z(a),!!c,f)}},zc:function(a,b,c,e){if(2<=u.version)b&&X.uniformMatrix4fv(Z(a),!!c,N,e>>2,16*b);else{if(18>=b){var f=td[16*b-1],k=N;e>>=2;for(var m=0;m<16*b;m+=16){var l=e+m;f[m]=k[l];f[m+1]=k[l+1];f[m+2]=k[l+2];f[m+3]=k[l+3];f[m+4]=k[l+4];f[m+5]=k[l+5];f[m+6]=k[l+6];f[m+7]=k[l+7];f[m+8]=k[l+8];f[m+9]=k[l+9];f[m+10]=k[l+10];f[m+11]=k[l+11];f[m+12]=k[l+12];f[m+13]=k[l+13];f[m+14]=k[l+14];f[m+15]=k[l+15]}}else f=N.subarray(e>>2,e+64*b>>2);
X.uniformMatrix4fv(Z(a),!!c,f)}},Ac:function(a){a=Xc[a];X.useProgram(a);X.Se=a},Bc:function(a,b){X.vertexAttrib1f(a,b)},Cc:function(a,b){X.vertexAttrib2f(a,N[b>>2],N[b+4>>2])},Dc:function(a,b){X.vertexAttrib3f(a,N[b>>2],N[b+4>>2],N[b+8>>2])},Ec:function(a,b){X.vertexAttrib4f(a,N[b>>2],N[b+4>>2],N[b+8>>2],N[b+12>>2])},fc:function(a,b){X.vertexAttribDivisor(a,b)},gc:function(a,b,c,e,f){X.vertexAttribIPointer(a,b,c,e,f)},Fc:function(a,b,c,e,f,k){X.vertexAttribPointer(a,b,c,!!e,f,k)},Gc:function(a,b,
c,e){X.viewport(a,b,c,e)},cb:function(a,b,c,e){X.waitSync(cd[a],b,(c>>>0)+4294967296*e)},kb:function(a){var b=C.length;a>>>=0;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var e=b*(1+.2/c);e=Math.min(e,a+100663296);var f=Math,k=f.min;e=Math.max(a,e);e+=(65536-e%65536)%65536;a:{var m=Ga.buffer;try{Ga.grow(k.call(f,2147483648,e)-m.byteLength+65535>>>16);Qa();var l=1;break a}catch(q){}l=void 0}if(l)return!0}return!1},eb:function(){return u?u.bf:0},nb:function(a,b){var c=0;wd().forEach(function(e,f){var k=
b+c;f=J[a+4*f>>2]=k;for(k=0;k<e.length;++k)Ma[f++>>0]=e.charCodeAt(k);Ma[f>>0]=0;c+=e.length+1});return 0},ob:function(a,b){var c=wd();J[a>>2]=c.length;var e=0;c.forEach(function(f){e+=f.length+1});J[b>>2]=e;return 0},Ab:function(a){if(!noExitRuntime){if(r.onExit)r.onExit(a);Ha=!0}oa(a,new Ba(a))},U:function(){return 52},fb:function(){return 52},sb:function(){return 52},gb:function(){return 70},R:function(a,b,c,e){for(var f=0,k=0;k<c;k++){var m=J[b>>2],l=J[b+4>>2];b+=8;for(var q=0;q<l;q++){var x=
C[m+q],y=yd[a];0===x||10===x?((1===a?Da:Ca)(Ja(y,0)),y.length=0):y.push(x)}f+=l}J[e>>2]=f;return 0},n:Jd,m:Kd,k:Ld,N:Md,Y:Nd,X:Od,w:Pd,y:Qd,p:Rd,v:Sd,Bb:Td,Cb:Ud,Db:Vd,ib:function(a,b,c,e){return Dd(a,b,c,e)}};
(function(){function a(c){c=c.exports;r.asm=c;Ga=r.asm.$c;Qa();Sa=r.asm.bd;Ua.unshift(r.asm.ad);Xa--;r.monitorRunDependencies&&r.monitorRunDependencies(Xa);if(0==Xa&&(null!==Ya&&(clearInterval(Ya),Ya=null),Za)){var e=Za;Za=null;e()}return c}var b={a:Wd};Xa++;r.monitorRunDependencies&&r.monitorRunDependencies(Xa);if(r.instantiateWasm)try{return r.instantiateWasm(b,a)}catch(c){Ca("Module.instantiateWasm callback failed with error: "+c),ba(c)}fb(b,function(c){a(c.instance)}).catch(ba);return{}})();
var pc=r._free=function(){return(pc=r._free=r.asm.cd).apply(null,arguments)},pd=r._malloc=function(){return(pd=r._malloc=r.asm.dd).apply(null,arguments)},oc=r.___getTypeName=function(){return(oc=r.___getTypeName=r.asm.ed).apply(null,arguments)};r.__embind_initialize_bindings=function(){return(r.__embind_initialize_bindings=r.asm.fd).apply(null,arguments)};function Xd(){return(Xd=r.asm.gd).apply(null,arguments)}function Yd(){return(Yd=r.asm.hd).apply(null,arguments)}
function Zd(){return(Zd=r.asm.id).apply(null,arguments)}r.dynCall_viji=function(){return(r.dynCall_viji=r.asm.kd).apply(null,arguments)};r.dynCall_vijiii=function(){return(r.dynCall_vijiii=r.asm.ld).apply(null,arguments)};r.dynCall_viiiiij=function(){return(r.dynCall_viiiiij=r.asm.md).apply(null,arguments)};r.dynCall_jii=function(){return(r.dynCall_jii=r.asm.nd).apply(null,arguments)};r.dynCall_vij=function(){return(r.dynCall_vij=r.asm.od).apply(null,arguments)};
r.dynCall_iiij=function(){return(r.dynCall_iiij=r.asm.pd).apply(null,arguments)};r.dynCall_iiiij=function(){return(r.dynCall_iiiij=r.asm.qd).apply(null,arguments)};r.dynCall_viij=function(){return(r.dynCall_viij=r.asm.rd).apply(null,arguments)};r.dynCall_viiij=function(){return(r.dynCall_viiij=r.asm.sd).apply(null,arguments)};r.dynCall_ji=function(){return(r.dynCall_ji=r.asm.td).apply(null,arguments)};r.dynCall_iij=function(){return(r.dynCall_iij=r.asm.ud).apply(null,arguments)};
r.dynCall_jiiii=function(){return(r.dynCall_jiiii=r.asm.vd).apply(null,arguments)};r.dynCall_jiiiiii=function(){return(r.dynCall_jiiiiii=r.asm.wd).apply(null,arguments)};r.dynCall_jiiiiji=function(){return(r.dynCall_jiiiiji=r.asm.xd).apply(null,arguments)};r.dynCall_iijj=function(){return(r.dynCall_iijj=r.asm.yd).apply(null,arguments)};r.dynCall_jiji=function(){return(r.dynCall_jiji=r.asm.zd).apply(null,arguments)};r.dynCall_viijii=function(){return(r.dynCall_viijii=r.asm.Ad).apply(null,arguments)};
r.dynCall_iiiiij=function(){return(r.dynCall_iiiiij=r.asm.Bd).apply(null,arguments)};r.dynCall_iiiiijj=function(){return(r.dynCall_iiiiijj=r.asm.Cd).apply(null,arguments)};r.dynCall_iiiiiijj=function(){return(r.dynCall_iiiiiijj=r.asm.Dd).apply(null,arguments)};function Sd(a,b,c,e,f){var k=Yd();try{Q(a)(b,c,e,f)}catch(m){Zd(k);if(m!==m+0)throw m;Xd(1,0)}}function Kd(a,b,c){var e=Yd();try{return Q(a)(b,c)}catch(f){Zd(e);if(f!==f+0)throw f;Xd(1,0)}}
function Qd(a,b,c){var e=Yd();try{Q(a)(b,c)}catch(f){Zd(e);if(f!==f+0)throw f;Xd(1,0)}}function Jd(a,b){var c=Yd();try{return Q(a)(b)}catch(e){Zd(c);if(e!==e+0)throw e;Xd(1,0)}}function Pd(a,b){var c=Yd();try{Q(a)(b)}catch(e){Zd(c);if(e!==e+0)throw e;Xd(1,0)}}function Ld(a,b,c,e){var f=Yd();try{return Q(a)(b,c,e)}catch(k){Zd(f);if(k!==k+0)throw k;Xd(1,0)}}function Vd(a,b,c,e,f,k,m,l,q,x){var y=Yd();try{Q(a)(b,c,e,f,k,m,l,q,x)}catch(B){Zd(y);if(B!==B+0)throw B;Xd(1,0)}}
function Rd(a,b,c,e){var f=Yd();try{Q(a)(b,c,e)}catch(k){Zd(f);if(k!==k+0)throw k;Xd(1,0)}}function Ud(a,b,c,e,f,k,m){var l=Yd();try{Q(a)(b,c,e,f,k,m)}catch(q){Zd(l);if(q!==q+0)throw q;Xd(1,0)}}function Md(a,b,c,e,f){var k=Yd();try{return Q(a)(b,c,e,f)}catch(m){Zd(k);if(m!==m+0)throw m;Xd(1,0)}}function Nd(a,b,c,e,f,k,m){var l=Yd();try{return Q(a)(b,c,e,f,k,m)}catch(q){Zd(l);if(q!==q+0)throw q;Xd(1,0)}}
function Td(a,b,c,e,f,k){var m=Yd();try{Q(a)(b,c,e,f,k)}catch(l){Zd(m);if(l!==l+0)throw l;Xd(1,0)}}function Od(a,b,c,e,f,k,m,l,q,x){var y=Yd();try{return Q(a)(b,c,e,f,k,m,l,q,x)}catch(B){Zd(y);if(B!==B+0)throw B;Xd(1,0)}}var $d;Za=function ae(){$d||be();$d||(Za=ae)};
function be(){function a(){if(!$d&&($d=!0,r.calledRun=!0,!Ha)){hb(Ua);aa(r);if(r.onRuntimeInitialized)r.onRuntimeInitialized();if(r.postRun)for("function"==typeof r.postRun&&(r.postRun=[r.postRun]);r.postRun.length;){var b=r.postRun.shift();Va.unshift(b)}hb(Va)}}if(!(0<Xa)){if(r.preRun)for("function"==typeof r.preRun&&(r.preRun=[r.preRun]);r.preRun.length;)Wa();hb(Ta);0<Xa||(r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1);a()},1)):a())}}
if(r.preInit)for("function"==typeof r.preInit&&(r.preInit=[r.preInit]);0<r.preInit.length;)r.preInit.pop()();be();
return CanvasKitInit.ready
}
);
})();
if (typeof exports === 'object' && typeof module === 'object')
module.exports = CanvasKitInit;
else if (typeof define === 'function' && define['amd'])
define([], function() { return CanvasKitInit; });
else if (typeof exports === 'object')
exports["CanvasKitInit"] = CanvasKitInit;

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@@ -1 +0,0 @@
"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(fs.readFileSync(f,"utf8")+"//# sourceURL="+f)},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}var initializedJS=false;var pendingNotifiedProxyingQueues=[];function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+"\n");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var module=Module["wasmModule"];Module["wasmModule"]=null;var instance=new WebAssembly.Instance(module,info);return receiveInstance(instance)};self.onunhandledrejection=e=>{throw e.reason??e};function handleMessage(e){try{if(e.data.cmd==="load"){let messageQueue=[];self.onmessage=e=>messageQueue.push(e);self.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"});for(let msg of messageQueue){handleMessage(msg)}self.onmessage=handleMessage};Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=function(){postMessage({cmd:"callHandler",handler:handler,args:[...arguments]})}}Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob=="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}skwasm(Module)}else if(e.data.cmd==="run"){Module["__emscripten_thread_init"](e.data.pthread_ptr,0,0,1);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){pendingNotifiedProxyingQueues.forEach(queue=>{Module["executeNotifiedProxyingQueue"](queue)});pendingNotifiedProxyingQueues=[];initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){throw ex}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processProxyingQueue"){if(initializedJS){Module["executeNotifiedProxyingQueue"](e.data.queue)}else{pendingNotifiedProxyingQueues.push(e.data.queue)}}else if(e.data.cmd){err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}}self.onmessage=handleMessage;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 917 B

View File

@@ -1,383 +0,0 @@
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
if (!_flutter) {
var _flutter = {};
}
_flutter.loader = null;
(function () {
"use strict";
const baseUri = ensureTrailingSlash(getBaseURI());
function getBaseURI() {
const base = document.querySelector("base");
return (base && base.getAttribute("href")) || "";
}
function ensureTrailingSlash(uri) {
if (uri == "") {
return uri;
}
return uri.endsWith("/") ? uri : `${uri}/`;
}
/**
* Wraps `promise` in a timeout of the given `duration` in ms.
*
* Resolves/rejects with whatever the original `promises` does, or rejects
* if `promise` takes longer to complete than `duration`. In that case,
* `debugName` is used to compose a legible error message.
*
* If `duration` is < 0, the original `promise` is returned unchanged.
* @param {Promise} promise
* @param {number} duration
* @param {string} debugName
* @returns {Promise} a wrapped promise.
*/
async function timeout(promise, duration, debugName) {
if (duration < 0) {
return promise;
}
let timeoutId;
const _clock = new Promise((_, reject) => {
timeoutId = setTimeout(() => {
reject(
new Error(
`${debugName} took more than ${duration}ms to resolve. Moving on.`,
{
cause: timeout,
}
)
);
}, duration);
});
return Promise.race([promise, _clock]).finally(() => {
clearTimeout(timeoutId);
});
}
/**
* Handles the creation of a TrustedTypes `policy` that validates URLs based
* on an (optional) incoming array of RegExes.
*/
class FlutterTrustedTypesPolicy {
/**
* Constructs the policy.
* @param {[RegExp]} validPatterns the patterns to test URLs
* @param {String} policyName the policy name (optional)
*/
constructor(validPatterns, policyName = "flutter-js") {
const patterns = validPatterns || [
/\.js$/,
];
if (window.trustedTypes) {
this.policy = trustedTypes.createPolicy(policyName, {
createScriptURL: function(url) {
const parsed = new URL(url, window.location);
const file = parsed.pathname.split("/").pop();
const matches = patterns.some((pattern) => pattern.test(file));
if (matches) {
return parsed.toString();
}
console.error(
"URL rejected by TrustedTypes policy",
policyName, ":", url, "(download prevented)");
}
});
}
}
}
/**
* Handles loading/reloading Flutter's service worker, if configured.
*
* @see: https://developers.google.com/web/fundamentals/primers/service-workers
*/
class FlutterServiceWorkerLoader {
/**
* Injects a TrustedTypesPolicy (or undefined if the feature is not supported).
* @param {TrustedTypesPolicy | undefined} policy
*/
setTrustedTypesPolicy(policy) {
this._ttPolicy = policy;
}
/**
* Returns a Promise that resolves when the latest Flutter service worker,
* configured by `settings` has been loaded and activated.
*
* Otherwise, the promise is rejected with an error message.
* @param {*} settings Service worker settings
* @returns {Promise} that resolves when the latest serviceWorker is ready.
*/
loadServiceWorker(settings) {
if (settings == null) {
// In the future, settings = null -> uninstall service worker?
console.debug("Null serviceWorker configuration. Skipping.");
return Promise.resolve();
}
if (!("serviceWorker" in navigator)) {
let errorMessage = "Service Worker API unavailable.";
if (!window.isSecureContext) {
errorMessage += "\nThe current context is NOT secure."
errorMessage += "\nRead more: https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts";
}
return Promise.reject(
new Error(errorMessage)
);
}
const {
serviceWorkerVersion,
serviceWorkerUrl = `${baseUri}flutter_service_worker.js?v=${serviceWorkerVersion}`,
timeoutMillis = 4000,
} = settings;
// Apply the TrustedTypes policy, if present.
let url = serviceWorkerUrl;
if (this._ttPolicy != null) {
url = this._ttPolicy.createScriptURL(url);
}
const serviceWorkerActivation = navigator.serviceWorker
.register(url)
.then(this._getNewServiceWorker)
.then(this._waitForServiceWorkerActivation);
// Timeout race promise
return timeout(
serviceWorkerActivation,
timeoutMillis,
"prepareServiceWorker"
);
}
/**
* Returns the latest service worker for the given `serviceWorkerRegistrationPromise`.
*
* This might return the current service worker, if there's no new service worker
* awaiting to be installed/updated.
*
* @param {Promise<ServiceWorkerRegistration>} serviceWorkerRegistrationPromise
* @returns {Promise<ServiceWorker>}
*/
async _getNewServiceWorker(serviceWorkerRegistrationPromise) {
const reg = await serviceWorkerRegistrationPromise;
if (!reg.active && (reg.installing || reg.waiting)) {
// No active web worker and we have installed or are installing
// one for the first time. Simply wait for it to activate.
console.debug("Installing/Activating first service worker.");
return reg.installing || reg.waiting;
} else if (!reg.active.scriptURL.endsWith(serviceWorkerVersion)) {
// When the app updates the serviceWorkerVersion changes, so we
// need to ask the service worker to update.
return reg.update().then((newReg) => {
console.debug("Updating service worker.");
return newReg.installing || newReg.waiting || newReg.active;
});
} else {
console.debug("Loading from existing service worker.");
return reg.active;
}
}
/**
* Returns a Promise that resolves when the `latestServiceWorker` changes its
* state to "activated".
*
* @param {Promise<ServiceWorker>} latestServiceWorkerPromise
* @returns {Promise<void>}
*/
async _waitForServiceWorkerActivation(latestServiceWorkerPromise) {
const serviceWorker = await latestServiceWorkerPromise;
if (!serviceWorker || serviceWorker.state == "activated") {
if (!serviceWorker) {
return Promise.reject(
new Error("Cannot activate a null service worker!")
);
} else {
console.debug("Service worker already active.");
return Promise.resolve();
}
}
return new Promise((resolve, _) => {
serviceWorker.addEventListener("statechange", () => {
if (serviceWorker.state == "activated") {
console.debug("Activated new service worker.");
resolve();
}
});
});
}
}
/**
* Handles injecting the main Flutter web entrypoint (main.dart.js), and notifying
* the user when Flutter is ready, through `didCreateEngineInitializer`.
*
* @see https://docs.flutter.dev/development/platform-integration/web/initialization
*/
class FlutterEntrypointLoader {
/**
* Creates a FlutterEntrypointLoader.
*/
constructor() {
// Watchdog to prevent injecting the main entrypoint multiple times.
this._scriptLoaded = false;
}
/**
* Injects a TrustedTypesPolicy (or undefined if the feature is not supported).
* @param {TrustedTypesPolicy | undefined} policy
*/
setTrustedTypesPolicy(policy) {
this._ttPolicy = policy;
}
/**
* Loads flutter main entrypoint, specified by `entrypointUrl`, and calls a
* user-specified `onEntrypointLoaded` callback with an EngineInitializer
* object when it's done.
*
* @param {*} options
* @returns {Promise | undefined} that will eventually resolve with an
* EngineInitializer, or will be rejected with the error caused by the loader.
* Returns undefined when an `onEntrypointLoaded` callback is supplied in `options`.
*/
async loadEntrypoint(options) {
const { entrypointUrl = `${baseUri}main.dart.js`, onEntrypointLoaded } =
options || {};
return this._loadEntrypoint(entrypointUrl, onEntrypointLoaded);
}
/**
* Resolves the promise created by loadEntrypoint, and calls the `onEntrypointLoaded`
* function supplied by the user (if needed).
*
* Called by Flutter through `_flutter.loader.didCreateEngineInitializer` method,
* which is bound to the correct instance of the FlutterEntrypointLoader by
* the FlutterLoader object.
*
* @param {Function} engineInitializer @see https://github.com/flutter/engine/blob/main/lib/web_ui/lib/src/engine/js_interop/js_loader.dart#L42
*/
didCreateEngineInitializer(engineInitializer) {
if (typeof this._didCreateEngineInitializerResolve === "function") {
this._didCreateEngineInitializerResolve(engineInitializer);
// Remove the resolver after the first time, so Flutter Web can hot restart.
this._didCreateEngineInitializerResolve = null;
// Make the engine revert to "auto" initialization on hot restart.
delete _flutter.loader.didCreateEngineInitializer;
}
if (typeof this._onEntrypointLoaded === "function") {
this._onEntrypointLoaded(engineInitializer);
}
}
/**
* Injects a script tag into the DOM, and configures this loader to be able to
* handle the "entrypoint loaded" notifications received from Flutter web.
*
* @param {string} entrypointUrl the URL of the script that will initialize
* Flutter.
* @param {Function} onEntrypointLoaded a callback that will be called when
* Flutter web notifies this object that the entrypoint is
* loaded.
* @returns {Promise | undefined} a Promise that resolves when the entrypoint
* is loaded, or undefined if `onEntrypointLoaded`
* is a function.
*/
_loadEntrypoint(entrypointUrl, onEntrypointLoaded) {
const useCallback = typeof onEntrypointLoaded === "function";
if (!this._scriptLoaded) {
this._scriptLoaded = true;
const scriptTag = this._createScriptTag(entrypointUrl);
if (useCallback) {
// Just inject the script tag, and return nothing; Flutter will call
// `didCreateEngineInitializer` when it's done.
console.debug("Injecting <script> tag. Using callback.");
this._onEntrypointLoaded = onEntrypointLoaded;
document.body.append(scriptTag);
} else {
// Inject the script tag and return a promise that will get resolved
// with the EngineInitializer object from Flutter when it calls
// `didCreateEngineInitializer` later.
return new Promise((resolve, reject) => {
console.debug(
"Injecting <script> tag. Using Promises. Use the callback approach instead!"
);
this._didCreateEngineInitializerResolve = resolve;
scriptTag.addEventListener("error", reject);
document.body.append(scriptTag);
});
}
}
}
/**
* Creates a script tag for the given URL.
* @param {string} url
* @returns {HTMLScriptElement}
*/
_createScriptTag(url) {
const scriptTag = document.createElement("script");
scriptTag.type = "application/javascript";
// Apply TrustedTypes validation, if available.
let trustedUrl = url;
if (this._ttPolicy != null) {
trustedUrl = this._ttPolicy.createScriptURL(url);
}
scriptTag.src = trustedUrl;
return scriptTag;
}
}
/**
* The public interface of _flutter.loader. Exposes two methods:
* * loadEntrypoint (which coordinates the default Flutter web loading procedure)
* * didCreateEngineInitializer (which is called by Flutter to notify that its
* Engine is ready to be initialized)
*/
class FlutterLoader {
/**
* Initializes the Flutter web app.
* @param {*} options
* @returns {Promise?} a (Deprecated) Promise that will eventually resolve
* with an EngineInitializer, or will be rejected with
* any error caused by the loader. Or Null, if the user
* supplies an `onEntrypointLoaded` Function as an option.
*/
async loadEntrypoint(options) {
const { serviceWorker, ...entrypoint } = options || {};
// A Trusted Types policy that is going to be used by the loader.
const flutterTT = new FlutterTrustedTypesPolicy();
// The FlutterServiceWorkerLoader instance could be injected as a dependency
// (and dynamically imported from a module if not present).
const serviceWorkerLoader = new FlutterServiceWorkerLoader();
serviceWorkerLoader.setTrustedTypesPolicy(flutterTT.policy);
await serviceWorkerLoader.loadServiceWorker(serviceWorker).catch(e => {
// Regardless of what happens with the injection of the SW, the show must go on
console.warn("Exception while loading service worker:", e);
});
// The FlutterEntrypointLoader instance could be injected as a dependency
// (and dynamically imported from a module if not present).
const entrypointLoader = new FlutterEntrypointLoader();
entrypointLoader.setTrustedTypesPolicy(flutterTT.policy);
// Install the `didCreateEngineInitializer` listener where Flutter web expects it to be.
this.didCreateEngineInitializer =
entrypointLoader.didCreateEngineInitializer.bind(entrypointLoader);
return entrypointLoader.loadEntrypoint(entrypoint);
}
}
_flutter.loader = new FlutterLoader();
})();

View File

@@ -1,213 +0,0 @@
'use strict';
const MANIFEST = 'flutter-app-manifest';
const TEMP = 'flutter-temp-cache';
const CACHE_NAME = 'flutter-app-cache';
const RESOURCES = {"canvaskit/skwasm.worker.js": "51253d3321b11ddb8d73fa8aa87d3b15",
"canvaskit/skwasm.js": "95f16c6690f955a45b2317496983dbe9",
"canvaskit/canvaskit.wasm": "d9f69e0f428f695dc3d66b3a83a4aa8e",
"canvaskit/skwasm.wasm": "d1fde2560be92c0b07ad9cf9acb10d05",
"canvaskit/canvaskit.js": "5caccb235fad20e9b72ea6da5a0094e6",
"canvaskit/chromium/canvaskit.wasm": "393ec8fb05d94036734f8104fa550a67",
"canvaskit/chromium/canvaskit.js": "ffb2bb6484d5689d91f393b60664d530",
"icons/Icon-maskable-192.png": "c457ef57daa1d16f64b27b786ec2ea3c",
"icons/Icon-maskable-512.png": "301a7604d45b3e739efc881eb04896ea",
"icons/Icon-512.png": "96e752610906ba2a93c65f8abe1645f1",
"icons/Icon-192.png": "ac9a721a12bbc803b44f645561ecb1e1",
"manifest.json": "0fa552613b8ec0fda5cda565914e3b16",
"favicon.png": "5dcef449791fa27946b3d35ad8803796",
"version.json": "46a52461e018faa623d9196334aa3f50",
"index.html": "e6981504a32bf86f892909c1875df208",
"/": "e6981504a32bf86f892909c1875df208",
"main.dart.js": "6fcbf8bbcb0a76fae9029f72ac7fbdc3",
"assets/AssetManifest.json": "1b1e4a4276722b65eb1ef765e2991840",
"assets/packages/cupertino_icons/assets/CupertinoIcons.ttf": "055d9e87e4a40dbf72b2af1a20865d57",
"assets/packages/fluttertoast/assets/toastify.js": "56e2c9cedd97f10e7e5f1cebd85d53e3",
"assets/packages/fluttertoast/assets/toastify.css": "a85675050054f179444bc5ad70ffc635",
"assets/shaders/ink_sparkle.frag": "f8b80e740d33eb157090be4e995febdf",
"assets/fonts/MaterialIcons-Regular.otf": "245e0462249d95ad589a087f1c9f58e1",
"assets/assets/images/twitter_logo.png": "af6c11b96a5e732b8dfda86a2351ecab",
"assets/assets/images/discord_logo.png": "0e4a4162c5de8665a7d63ae9665405ae",
"assets/assets/images/google_logo.svg.png": "0e29f8e1acfb8996437dbb2b0f591f19",
"assets/assets/images/autogpt_logo.png": "6a5362a7d1f2f840e43ee259e733476c",
"assets/assets/images/github_logo.svg.png": "ba087b073efdc4996b035d3a12bad0e4",
"assets/assets/scrape_synthesize_tree_structure.json": "a9665c1b465bb0cb939c7210f2bf0b13",
"assets/assets/coding_tree_structure.json": "017a857cf3e274346a0a7eab4ce02eed",
"assets/assets/general_tree_structure.json": "41dfbcdc2349dcdda2b082e597c6d5ee",
"assets/assets/google_logo.svg.png": "0e29f8e1acfb8996437dbb2b0f591f19",
"assets/assets/tree_structure.json": "cda9b1a239f956c547411efad9f7c794",
"assets/assets/data_tree_structure.json": "5f9627548304155821968182f3883ca7",
"assets/assets/github_logo.svg.png": "ba087b073efdc4996b035d3a12bad0e4",
"assets/NOTICES": "28ba0c63fc6e4d1ef829af7441e27f78",
"assets/AssetManifest.bin": "791447d17744ac2ade3999c1672fdbe8",
"assets/FontManifest.json": "dc3d03800ccca4601324923c0b1d6d57",
"flutter.js": "6fef97aeca90b426343ba6c5c9dc5d4a"};
// The application shell files that are downloaded before a service worker can
// start.
const CORE = ["main.dart.js",
"index.html",
"assets/AssetManifest.json",
"assets/FontManifest.json"];
// During install, the TEMP cache is populated with the application shell files.
self.addEventListener("install", (event) => {
self.skipWaiting();
return event.waitUntil(
caches.open(TEMP).then((cache) => {
return cache.addAll(
CORE.map((value) => new Request(value, {'cache': 'reload'})));
})
);
});
// During activate, the cache is populated with the temp files downloaded in
// install. If this service worker is upgrading from one with a saved
// MANIFEST, then use this to retain unchanged resource files.
self.addEventListener("activate", function(event) {
return event.waitUntil(async function() {
try {
var contentCache = await caches.open(CACHE_NAME);
var tempCache = await caches.open(TEMP);
var manifestCache = await caches.open(MANIFEST);
var manifest = await manifestCache.match('manifest');
// When there is no prior manifest, clear the entire cache.
if (!manifest) {
await caches.delete(CACHE_NAME);
contentCache = await caches.open(CACHE_NAME);
for (var request of await tempCache.keys()) {
var response = await tempCache.match(request);
await contentCache.put(request, response);
}
await caches.delete(TEMP);
// Save the manifest to make future upgrades efficient.
await manifestCache.put('manifest', new Response(JSON.stringify(RESOURCES)));
// Claim client to enable caching on first launch
self.clients.claim();
return;
}
var oldManifest = await manifest.json();
var origin = self.location.origin;
for (var request of await contentCache.keys()) {
var key = request.url.substring(origin.length + 1);
if (key == "") {
key = "/";
}
// If a resource from the old manifest is not in the new cache, or if
// the MD5 sum has changed, delete it. Otherwise the resource is left
// in the cache and can be reused by the new service worker.
if (!RESOURCES[key] || RESOURCES[key] != oldManifest[key]) {
await contentCache.delete(request);
}
}
// Populate the cache with the app shell TEMP files, potentially overwriting
// cache files preserved above.
for (var request of await tempCache.keys()) {
var response = await tempCache.match(request);
await contentCache.put(request, response);
}
await caches.delete(TEMP);
// Save the manifest to make future upgrades efficient.
await manifestCache.put('manifest', new Response(JSON.stringify(RESOURCES)));
// Claim client to enable caching on first launch
self.clients.claim();
return;
} catch (err) {
// On an unhandled exception the state of the cache cannot be guaranteed.
console.error('Failed to upgrade service worker: ' + err);
await caches.delete(CACHE_NAME);
await caches.delete(TEMP);
await caches.delete(MANIFEST);
}
}());
});
// The fetch handler redirects requests for RESOURCE files to the service
// worker cache.
self.addEventListener("fetch", (event) => {
if (event.request.method !== 'GET') {
return;
}
var origin = self.location.origin;
var key = event.request.url.substring(origin.length + 1);
// Redirect URLs to the index.html
if (key.indexOf('?v=') != -1) {
key = key.split('?v=')[0];
}
if (event.request.url == origin || event.request.url.startsWith(origin + '/#') || key == '') {
key = '/';
}
// If the URL is not the RESOURCE list then return to signal that the
// browser should take over.
if (!RESOURCES[key]) {
return;
}
// If the URL is the index.html, perform an online-first request.
if (key == '/') {
return onlineFirst(event);
}
event.respondWith(caches.open(CACHE_NAME)
.then((cache) => {
return cache.match(event.request).then((response) => {
// Either respond with the cached resource, or perform a fetch and
// lazily populate the cache only if the resource was successfully fetched.
return response || fetch(event.request).then((response) => {
if (response && Boolean(response.ok)) {
cache.put(event.request, response.clone());
}
return response;
});
})
})
);
});
self.addEventListener('message', (event) => {
// SkipWaiting can be used to immediately activate a waiting service worker.
// This will also require a page refresh triggered by the main worker.
if (event.data === 'skipWaiting') {
self.skipWaiting();
return;
}
if (event.data === 'downloadOffline') {
downloadOffline();
return;
}
});
// Download offline will check the RESOURCES for all files not in the cache
// and populate them.
async function downloadOffline() {
var resources = [];
var contentCache = await caches.open(CACHE_NAME);
var currentContent = {};
for (var request of await contentCache.keys()) {
var key = request.url.substring(origin.length + 1);
if (key == "") {
key = "/";
}
currentContent[key] = true;
}
for (var resourceKey of Object.keys(RESOURCES)) {
if (!currentContent[resourceKey]) {
resources.push(resourceKey);
}
}
return contentCache.addAll(resources);
}
// Attempt to download the resource online before falling back to
// the offline cache.
function onlineFirst(event) {
return event.respondWith(
fetch(event.request).then((response) => {
return caches.open(CACHE_NAME).then((cache) => {
cache.put(event.request, response.clone());
return response;
});
}).catch((error) => {
return caches.open(CACHE_NAME).then((cache) => {
return cache.match(event.request).then((response) => {
if (response != null) {
return response;
}
throw error;
});
});
})
);
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -1,84 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<!--
If you are serving your web app in a path other than the root, change the
href value below to reflect the base path you are serving from.
The path provided below has to start and end with a slash "/" in order for
it to work correctly.
For more details:
* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base
This is a placeholder for base href that will be replaced by the value of
the `--base-href` argument provided to `flutter build`.
-->
<base href="/app/">
<meta charset="UTF-8">
<meta content="IE=Edge" http-equiv="X-UA-Compatible">
<meta name="description" content="A new Flutter project.">
<meta name="google-signin-client_id" content="387936576242-iejdacrjljds7hf99q0p6eqna8rju3sb.apps.googleusercontent.com">
<!-- iOS meta tags & icons -->
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-title" content="auto_gpt_flutter_client">
<link rel="apple-touch-icon" href="icons/Icon-192.png">
<!-- Favicon -->
<link rel="icon" type="image/png" href="favicon.png"/>
<title>auto_gpt_flutter_client</title>
<link rel="manifest" href="manifest.json">
<script>
// The value below is injected by flutter build, do not touch.
const serviceWorkerVersion = "726743092";
</script>
<!-- This script adds the flutter initialization JS code -->
<script src="flutter.js" defer></script>
<script type="module">
// Import the functions you need from the SDKs you need
import { initializeApp } from "https://www.gstatic.com/firebasejs/10.4.0/firebase-app.js";
import { getAnalytics } from "https://www.gstatic.com/firebasejs/10.4.0/firebase-analytics.js";
// TODO: Add SDKs for Firebase products that you want to use
// https://firebase.google.com/docs/web/setup#available-libraries
// Your web app's Firebase configuration
// For Firebase JS SDK v7.20.0 and later, measurementId is optional
const firebaseConfig = {
apiKey: "AIzaSyBvYLAK_A0uhFuVPQbTxUdVWbb_Lsur9cg",
authDomain: "prod-auto-gpt.firebaseapp.com",
projectId: "prod-auto-gpt",
storageBucket: "prod-auto-gpt.appspot.com",
messagingSenderId: "387936576242",
appId: "1:387936576242:web:7536e0c50dd81b4dd7a66b",
measurementId: "G-8PRS69JJRL"
};
// Initialize Firebase
const app = initializeApp(firebaseConfig);
const analytics = getAnalytics(app);
</script>
</head>
<body>
<script>
window.addEventListener('load', function(ev) {
// Download main.dart.js
_flutter.loader.loadEntrypoint({
serviceWorker: {
serviceWorkerVersion: serviceWorkerVersion,
},
onEntrypointLoaded: function(engineInitializer) {
engineInitializer.initializeEngine().then(function(appRunner) {
appRunner.runApp();
});
}
});
});
</script>
</body>
</html>

File diff suppressed because one or more lines are too long

View File

@@ -1,35 +0,0 @@
{
"name": "auto_gpt_flutter_client",
"short_name": "auto_gpt_flutter_client",
"start_url": ".",
"display": "standalone",
"background_color": "#0175C2",
"theme_color": "#0175C2",
"description": "A new Flutter project.",
"orientation": "portrait-primary",
"prefer_related_applications": false,
"icons": [
{
"src": "icons/Icon-192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "icons/Icon-512.png",
"sizes": "512x512",
"type": "image/png"
},
{
"src": "icons/Icon-maskable-192.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "maskable"
},
{
"src": "icons/Icon-maskable-512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
}
]
}

View File

@@ -1 +0,0 @@
{"app_name":"auto_gpt_flutter_client","version":"1.0.0","build_number":"1","package_name":"auto_gpt_flutter_client"}

View File

@@ -1,34 +0,0 @@
**/dgph
*.mode1v3
*.mode2v3
*.moved-aside
*.pbxuser
*.perspectivev3
**/*sync/
.sconsign.dblite
.tags*
**/.vagrant/
**/DerivedData/
Icon?
**/Pods/
**/.symlinks/
profile
xcuserdata
**/.generated/
Flutter/App.framework
Flutter/Flutter.framework
Flutter/Flutter.podspec
Flutter/Generated.xcconfig
Flutter/ephemeral/
Flutter/app.flx
Flutter/app.zip
Flutter/flutter_assets/
Flutter/flutter_export_environment.sh
ServiceDefinitions.json
Runner/GeneratedPluginRegistrant.*
# Exceptions to above rules.
!default.mode1v3
!default.mode2v3
!default.pbxuser
!default.perspectivev3

View File

@@ -1,26 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>App</string>
<key>CFBundleIdentifier</key>
<string>io.flutter.flutter.app</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>App</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>MinimumOSVersion</key>
<string>11.0</string>
</dict>
</plist>

View File

@@ -1,2 +0,0 @@
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Generated.xcconfig"

View File

@@ -1,2 +0,0 @@
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig"

View File

@@ -1,44 +0,0 @@
# Uncomment this line to define a global platform for your project
# platform :ios, '11.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
project 'Runner', {
'Debug' => :debug,
'Profile' => :release,
'Release' => :release,
}
def flutter_root
generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
unless File.exist?(generated_xcode_build_settings_path)
raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
end
File.foreach(generated_xcode_build_settings_path) do |line|
matches = line.match(/FLUTTER_ROOT\=(.*)/)
return matches[1].strip if matches
end
raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
end
require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
flutter_ios_podfile_setup
target 'Runner' do
use_frameworks!
use_modular_headers!
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
target 'RunnerTests' do
inherit! :search_paths
end
end
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
end
end

View File

@@ -1,613 +0,0 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 97C146E61CF9000F007C117D /* Project object */;
proxyType = 1;
remoteGlobalIDString = 97C146ED1CF9000F007C117D;
remoteInfo = Runner;
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
9705A1C41CF9048500538489 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; };
331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
97C146EB1CF9000F007C117D /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
9740EEB11CF90186004384FC /* Flutter */ = {
isa = PBXGroup;
children = (
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
9740EEB21CF90195004384FC /* Debug.xcconfig */,
7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
9740EEB31CF90195004384FC /* Generated.xcconfig */,
);
name = Flutter;
sourceTree = "<group>";
};
331C8082294A63A400263BE5 /* RunnerTests */ = {
isa = PBXGroup;
children = (
331C807B294A618700263BE5 /* RunnerTests.swift */,
);
path = RunnerTests;
sourceTree = "<group>";
};
97C146E51CF9000F007C117D = {
isa = PBXGroup;
children = (
9740EEB11CF90186004384FC /* Flutter */,
97C146F01CF9000F007C117D /* Runner */,
97C146EF1CF9000F007C117D /* Products */,
331C8082294A63A400263BE5 /* RunnerTests */,
);
sourceTree = "<group>";
};
97C146EF1CF9000F007C117D /* Products */ = {
isa = PBXGroup;
children = (
97C146EE1CF9000F007C117D /* Runner.app */,
331C8081294A63A400263BE5 /* RunnerTests.xctest */,
);
name = Products;
sourceTree = "<group>";
};
97C146F01CF9000F007C117D /* Runner */ = {
isa = PBXGroup;
children = (
97C146FA1CF9000F007C117D /* Main.storyboard */,
97C146FD1CF9000F007C117D /* Assets.xcassets */,
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
97C147021CF9000F007C117D /* Info.plist */,
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
);
path = Runner;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
331C8080294A63A400263BE5 /* RunnerTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
buildPhases = (
331C807D294A63A400263BE5 /* Sources */,
331C807E294A63A400263BE5 /* Frameworks */,
331C807F294A63A400263BE5 /* Resources */,
);
buildRules = (
);
dependencies = (
331C8086294A63A400263BE5 /* PBXTargetDependency */,
);
name = RunnerTests;
productName = RunnerTests;
productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
97C146ED1CF9000F007C117D /* Runner */ = {
isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
);
buildRules = (
);
dependencies = (
);
name = Runner;
productName = Runner;
productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 1300;
ORGANIZATIONNAME = "";
TargetAttributes = {
331C8080294A63A400263BE5 = {
CreatedOnToolsVersion = 14.0;
TestTargetID = 97C146ED1CF9000F007C117D;
};
97C146ED1CF9000F007C117D = {
CreatedOnToolsVersion = 7.3.1;
LastSwiftMigration = 1100;
};
};
};
buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 97C146E51CF9000F007C117D;
productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
97C146ED1CF9000F007C117D /* Runner */,
331C8080294A63A400263BE5 /* RunnerTests */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
331C807F294A63A400263BE5 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
97C146EC1CF9000F007C117D /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
);
name = "Thin Binary";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Run Script";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
331C807D294A63A400263BE5 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
97C146EA1CF9000F007C117D /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
331C8086294A63A400263BE5 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 97C146ED1CF9000F007C117D /* Runner */;
targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
97C146FA1CF9000F007C117D /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
97C146FB1CF9000F007C117D /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
97C147001CF9000F007C117D /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
249021D3217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Profile;
};
249021D4217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.autoGptFlutterClient;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Profile;
};
331C8088294A63A400263BE5 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = AE0B7B92F70575B8D7E0D07E /* Pods-RunnerTests.debug.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.example.autoGptFlutterClient.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
};
name = Debug;
};
331C8089294A63A400263BE5 /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 89B67EB44CE7B6631473024E /* Pods-RunnerTests.release.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.example.autoGptFlutterClient.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
};
name = Release;
};
331C808A294A63A400263BE5 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 640959BDD8F10B91D80A66BE /* Pods-RunnerTests.profile.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.example.autoGptFlutterClient.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
};
name = Profile;
};
97C147031CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
97C147041CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
97C147061CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.autoGptFlutterClient;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Debug;
};
97C147071CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.autoGptFlutterClient;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
331C8088294A63A400263BE5 /* Debug */,
331C8089294A63A400263BE5 /* Release */,
331C808A294A63A400263BE5 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
97C147031CF9000F007C117D /* Debug */,
97C147041CF9000F007C117D /* Release */,
249021D3217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
97C147061CF9000F007C117D /* Debug */,
97C147071CF9000F007C117D /* Release */,
249021D4217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 97C146E61CF9000F007C117D /* Project object */;
}

View File

@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:">
</FileRef>
</Workspace>

View File

@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>

View File

@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PreviewsEnabled</key>
<false/>
</dict>
</plist>

View File

@@ -1,98 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1300"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</MacroExpansion>
<Testables>
<TestableReference
skipped = "NO"
parallelizable = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "331C8080294A63A400263BE5"
BuildableName = "RunnerTests.xctest"
BlueprintName = "RunnerTests"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Profile"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

Some files were not shown because too many files have changed in this diff Show More